diff --git a/App.tsx b/App.tsx index 6282412..bf220ee 100644 --- a/App.tsx +++ b/App.tsx @@ -1,6 +1,21 @@ import React from 'react' import PdfReader from './src/' +const base64 = + 'data:application/pdf;base64,JVBERi0xLjcKCjEgMCBvYmogICUgZW50cnkgcG9pbnQKPDwKICAvVHlwZSAvQ2F0YWxvZwog' + + 'IC9QYWdlcyAyIDAgUgo+PgplbmRvYmoKCjIgMCBvYmoKPDwKICAvVHlwZSAvUGFnZXMKICAv' + + 'TWVkaWFCb3ggWyAwIDAgMjAwIDIwMCBdCiAgL0NvdW50IDEKICAvS2lkcyBbIDMgMCBSIF0K' + + 'Pj4KZW5kb2JqCgozIDAgb2JqCjw8CiAgL1R5cGUgL1BhZ2UKICAvUGFyZW50IDIgMCBSCiAg' + + 'L1Jlc291cmNlcyA8PAogICAgL0ZvbnQgPDwKICAgICAgL0YxIDQgMCBSIAogICAgPj4KICA+' + + 'PgogIC9Db250ZW50cyA1IDAgUgo+PgplbmRvYmoKCjQgMCBvYmoKPDwKICAvVHlwZSAvRm9u' + + 'dAogIC9TdWJ0eXBlIC9UeXBlMQogIC9CYXNlRm9udCAvVGltZXMtUm9tYW4KPj4KZW5kb2Jq' + + 'Cgo1IDAgb2JqICAlIHBhZ2UgY29udGVudAo8PAogIC9MZW5ndGggNDQKPj4Kc3RyZWFtCkJU' + + 'CjcwIDUwIFRECi9GMSAxMiBUZgooSGVsbG8sIHdvcmxkISkgVGoKRVQKZW5kc3RyZWFtCmVu' + + 'ZG9iagoKeHJlZgowIDYKMDAwMDAwMDAwMCA2NTUzNSBmIAowMDAwMDAwMDEwIDAwMDAwIG4g' + + 'CjAwMDAwMDAwNzkgMDAwMDAgbiAKMDAwMDAwMDE3MyAwMDAwMCBuIAowMDAwMDAwMzAxIDAw' + + 'MDAwIG4gCjAwMDAwMDAzODAgMDAwMDAgbiAKdHJhaWxlcgo8PAogIC9TaXplIDYKICAvUm9v' + + 'dCAxIDAgUgo+PgpzdGFydHhyZWYKNDkyCiUlRU9G' + export default class App extends React.Component { render() { return ( @@ -8,6 +23,16 @@ export default class App extends React.Component { source={{ uri: 'http://gahp.net/wp-content/uploads/2017/09/sample.pdf', }} + style={{ paddingTop: 20 }} + customStyle={{ + readerContainerZoomContainer: { + borderRadius: 30, + backgroundColor: '#a0a', + }, + readerContainerZoomContainerButton: { + borderRadius: 30, + }, + }} /> ) } diff --git a/README.md b/README.md index f1d6c3d..18ee20f 100644 --- a/README.md +++ b/README.md @@ -66,17 +66,22 @@ interface Props { style?: View['props']['style'] // style props to override default container style webviewStyle?: WebView['props']['style'] // style props to override default WebView style noLoader?: boolean + customStyle?: { + readerContainer?: CSS.Properties + readerContainerDocument?: CSS.Properties + readerContainerNumbers?: CSS.Properties + readerContainerNumbersContent?: CSS.Properties + readerContainerZoomContainer?: CSS.Properties + readerContainerZoomContainerButton?: CSS.Properties + readerContainerNavigate?: CSS.Properties + readerContainerNavigateArrow?: CSS.Properties + } onLoad?(): void // callback that runs after WebView is loaded onLoadEnd?(): void // callback that runs after WebView is loaded onError?(): void // callback that runs when WebView is on error } ``` -## Features - -- **For Android, use react-pdf / pdfjs in the webview** -- For iOS devices, display file directly to the WebView (react-native-webview) - ## What rn-pdf-reader-js use? - react-pdf (pdf.js) diff --git a/package.json b/package.json index cb3df68..792ecc4 100644 --- a/package.json +++ b/package.json @@ -1,6 +1,6 @@ { "name": "rn-pdf-reader-js", - "version": "0.4.2", + "version": "0.5.0", "description": "PDF reader for Expo", "main": "node_modules/expo/AppEntry.js", "types": "lib/index.d.ts", @@ -43,6 +43,7 @@ }, "dependencies": { "buffer": "5.1.0", + "csstype": "2.6.8", "js-base64": "2.4.5" }, "devDependencies": { @@ -53,10 +54,10 @@ "babel-preset-expo": "^8.0.0", "crypto": "1.0.1", "expo": "^36.0.2", - "json": "^9.0.6", - "react": "16.9.0", "expo-constants": "~8.0.0", "expo-file-system": "~8.0.0", + "json": "^9.0.6", + "react": "16.9.0", "react-native": "https://github.com/expo/react-native/archive/sdk-36.0.1.tar.gz", "react-native-webview": "7.4.3", "tslint": "^5.20.1", diff --git a/react-pdf/Reader.tsx b/react-pdf/Reader.tsx index 0bbb617..086daa4 100755 --- a/react-pdf/Reader.tsx +++ b/react-pdf/Reader.tsx @@ -18,84 +18,80 @@ const options = { cMapPacked: true, } +interface Props { + file: any + customStyle?: { + readerContainer?: any + readerContainerDocument?: any + readerContainerNumbers?: any + readerContainerNumbersContent?: any + readerContainerZoomContainer?: any + readerContainerZoomContainerButton?: any + readerContainerNavigate?: any + readerContainerNavigateArrow?: any + } +} + interface State { numPages?: number currentPage: number ready: boolean - pageLoaded: boolean - pageRendered: boolean - getText: boolean scale: number - cached?: boolean -} - -interface Props { - file: any + error?: any } class Reader extends React.Component { + static getDerivedStateFromError(error: any) { + return { error } + } + state = { numPages: null, currentPage: 1, ready: true, pageLoaded: false, - pageRendered: false, - getText: false, scale: 0.75, + error: undefined, } MAX_SCALE = 2 __zoomEvent = false - pageRefs = new Map() - pageImages = new Map() - _doc: any - onDocumentLoadSuccess = ({ numPages }) => { this.setState({ numPages }) } - onError = error => - window.alert('Error while loading document! \n' + error.message) - - cache = (pageKey: number) => { - if (!this.pageImages.has(pageKey)) { - this.pageImages.set( - pageKey, - this.pageRefs.get(pageKey).children[0].toDataURL('image/png'), - ) - } - } + onError = (error: Error) => this.setState({ error }) - zoomOut = event => { + zoomOut = (event: any) => { event.preventDefault() if (!this.__zoomEvent) { raf(this.zOut) } } - zoomIn = event => { - event.preventDefault() // this too + zoomIn = (event: any) => { + event.preventDefault() if (!this.__zoomEvent) { raf(this.zIn) } } - zOut = () => { - if (this.state.scale >= 0.75) { - // min scale out is 0.5 and defaults @ 0.75 + zIn = () => { + if (this.state.scale <= this.MAX_SCALE - 0.25) { this.__zoomEvent = true this.setState(previousState => ({ - scale: previousState.scale - 0.25, + scale: previousState.scale + 0.25, })) } } - zIn = () => { - if (this.state.scale <= this.MAX_SCALE - 0.25) { + zOut = () => { + if (this.state.scale >= 0.75) { + // min scale out is 0.5 and defaults @ 0.75 this.__zoomEvent = true this.setState(previousState => ({ - scale: previousState.scale + 0.25, + scale: previousState.scale - 0.25, })) } } @@ -105,13 +101,6 @@ class Reader extends React.Component { if (currentPage > 1) { const target = currentPage - 1 this.setState({ currentPage: target }) - if (!this.pageImages.has(target)) { - this.setState({ - pageLoaded: false, - pageRendered: false, - getText: false, - }) - } } // @ts-ignore cancel(this.up) @@ -122,120 +111,120 @@ class Reader extends React.Component { if (currentPage < numPages) { const target = currentPage + 1 this.setState({ currentPage: target }) - if (!this.pageImages.has(target)) { - this.setState({ - pageLoaded: false, - pageRendered: false, - getText: false, - }) - } } // @ts-ignore cancel(this.down) } - goUp = event => { + goUp = (event: any) => { event.preventDefault() raf(this.up) } - goDown = event => { + goDown = (event: any) => { event.preventDefault() raf(this.down) } - renderImage = pageNumber => ( - - ) - - onPageReadyToCache = pageStatus => { - this.__zoomEvent = false - const { pageLoaded, pageRendered, getText, currentPage } = this.state - const newValue = { pageLoaded, pageRendered, getText, ...pageStatus } - if (newValue.pageLoaded && newValue.pageRendered && newValue.getText) { - this.cache(currentPage) - this.setState({ cached: true }) - } else { - this.setState({ cached: false, ...pageStatus }) - } - } - - renderPage = pageNumber => { + renderPage = (pageNumber: number) => { return ( ref && this.pageRefs.set(pageNumber, ref)} key={`page_${pageNumber}`} pageNumber={pageNumber} onLoadError={this.onError} onRenderError={this.onError} onGetTextError={this.onError} - onRenderSuccess={() => this.onPageReadyToCache({ pageRendered: true })} - onGetTextSuccess={() => this.onPageReadyToCache({ getText: true })} + onRenderSuccess={() => { + this.__zoomEvent = false + }} scale={this.state.scale} /> ) } render() { - const { numPages, currentPage } = this.state + const { numPages, currentPage, error } = this.state + const { customStyle } = this.props + if (error) { + return

{error.message ? error.message : 'Sorry an error occurred!'}

+ } return (
-
-
+
+
(this._doc = ref)} - file={file} onLoadSuccess={this.onDocumentLoadSuccess} onLoadError={this.onError} onSourceError={this.onError} - {...{ options }} + {...{ options, file }} > {this.renderPage(currentPage)}
{numPages && ( -
-
+
+
{currentPage} / {numPages}
)} -
+
-
+
@@ -249,4 +238,7 @@ class Reader extends React.Component { const tagData = document.querySelector('#file') const file = tagData.getAttribute('data-file') -render(, ReactContainer) +// @ts-ignore +const customStyle = window.CUSTOM_STYLE + +render(, ReactContainer) diff --git a/react-pdf/index.html b/react-pdf/index.html index c23e29d..6c350cb 100755 --- a/react-pdf/index.html +++ b/react-pdf/index.html @@ -3,6 +3,11 @@ +
fs.readFileSync(path, encoding); -const toBase64 = str => Buffer.from(str).toString("base64"); +const read = path => fs.readFileSync(path, encoding) +const toBase64 = str => Buffer.from(str).toString('base64') -const bundleString = read(originPath); +const bundleString = read(originPath) const md5 = crypto - .createHash("md5") + .createHash('md5') .update(bundleString) - .digest("hex"); + .digest('hex') // TODO: calculate md5 (ie. update new version) const bundleContainerFileContent = ` @@ -29,8 +26,8 @@ export function getBundle() { export function getBundleMd5() { return '${md5}' } -`; +` if (fs.existsSync(destinationPath)) { - fs.unlinkSync(destinationPath); + fs.unlinkSync(destinationPath) } -fs.writeFileSync(destinationPath, bundleContainerFileContent, encoding); +fs.writeFileSync(destinationPath, bundleContainerFileContent, encoding) diff --git a/src/bundleContainer.ios.ts b/src/bundleContainer.ios.ts deleted file mode 100644 index 8abf3bc..0000000 --- a/src/bundleContainer.ios.ts +++ /dev/null @@ -1,3 +0,0 @@ -export function getBundle() { - throw new Error('No bundle file for ios') -} diff --git a/src/bundleContainer.android.ts b/src/bundleContainer.ts similarity index 98% rename from src/bundleContainer.android.ts rename to src/bundleContainer.ts index 5d3ebb3..6bf80a4 100644 --- a/src/bundleContainer.android.ts +++ b/src/bundleContainer.ts @@ -1,9 +1,9 @@ import { Base64 } from 'js-base64'; -const bundle = 'IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciByLGEsaT10WzBdLG89dFsxXSxzPTAsYz1bXTtzPGkubGVuZ3RoO3MrKylhPWlbc10sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJm5bYV0mJmMucHVzaChuW2FdWzBdKSxuW2FdPTA7Zm9yKHIgaW4gbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxyKSYmKGVbcl09b1tyXSk7Zm9yKGwmJmwodCk7Yy5sZW5ndGg7KWMuc2hpZnQoKSgpfXZhciByPXt9LG49ezA6MH07ZnVuY3Rpb24gYSh0KXtpZihyW3RdKXJldHVybiByW3RdLmV4cG9ydHM7dmFyIG49clt0XT17aTp0LGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbdF0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsYSksbi5sPSEwLG4uZXhwb3J0c31hLmU9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGEubT1lLGEuYz1yLGEuZD1mdW5jdGlvbihlLHQscil7YS5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sYS5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGEudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9YShlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIG4gaW4gZSlhLmQocixuLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbikpO3JldHVybiByfSxhLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIGEuZCh0LCJhIix0KSx0fSxhLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LGEucD0iIixhLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX07dmFyIGk9d2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSxvPWkucHVzaC5iaW5kKGkpO2kucHVzaD10LGk9aS5zbGljZSgpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXQoaVtzXSk7dmFyIGw9bzthKGEucz0zNil9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1yKDM3KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZS5leHBvcnRzPXI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scih0KX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDU4KSgpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMjEpLGE9cig4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1uKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9hKGUpOnR9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm4oZSx0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sb2FkRnJvbUZpbGU9dC5pc0NhbmNlbEV4Y2VwdGlvbj10Lm1ha2VQYWdlQ2FsbGJhY2s9dC5jYW5jZWxSdW5uaW5nVGFzaz10Lm1ha2VDYW5jZWxsYWJsZT10LmRpc3BsYXlDT1JTV2FybmluZz10LmVycm9yT25EZXY9dC53YXJuT25EZXY9dC5nZXRQaXhlbFJhdGlvPXQuY2FsbElmRGVmaW5lZD10LmRhdGFVUkl0b1VpbnQ4QXJyYXk9dC5pc0RhdGFVUkk9dC5pc0ZpbGU9dC5pc0Jsb2I9dC5pc0FycmF5QnVmZmVyPXQuaXNTdHJpbmc9dC5pc1Byb3ZpZGVkPXQuaXNEZWZpbmVkPXQuaXNQcm9kdWN0aW9uPXQuaXNMb2NhbEZpbGVTeXN0ZW09dC5pc0Jyb3dzZXI9dm9pZCAwO3ZhciBhPW4ocigyKSksaT1uKHIoNykpLG89bihyKDMpKSxzPW4ocig5KSksbD1uKHIoNjMpKSxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93O3QuaXNCcm93c2VyPWM7dmFyIHU9YyYmImZpbGU6Ij09PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDt0LmlzTG9jYWxGaWxlU3lzdGVtPXU7dC5pc1Byb2R1Y3Rpb249ITA7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9O3QuaXNEZWZpbmVkPWY7dC5pc1Byb3ZpZGVkPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpJiZudWxsIT09ZX07dmFyIGg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfTt0LmlzU3RyaW5nPWg7dC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9O3QuaXNCbG9iPWZ1bmN0aW9uKGUpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNoZWNrIGlmIGEgdmFyaWFibGUgaXMgYSBCbG9iIG9uIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIik7cmV0dXJuIGUgaW5zdGFuY2VvZiBCbG9ifTt0LmlzRmlsZT1mdW5jdGlvbihlKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjaGVjayBpZiBhIHZhcmlhYmxlIGlzIGEgRmlsZSBvbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiIpO3JldHVybiBlIGluc3RhbmNlb2YgRmlsZX07dmFyIGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkmJi9eZGF0YTovLnRlc3QoZSl9O3QuaXNEYXRhVVJJPWQ7dC5kYXRhVVJJdG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2lmKCFkKGUpKXRocm93IG5ldyBFcnJvcigiZGF0YVVSSXRvVWludDhBcnJheSB3YXMgcHJvdmlkZWQgd2l0aCBhbiBhcmd1bWVudCB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRhIFVSSS4iKTt2YXIgdDt0PWUuc3BsaXQoIiwiKVswXS5pbmRleE9mKCJiYXNlNjQiKT49MD9hdG9iKGUuc3BsaXQoIiwiKVsxXSk6dW5lc2NhcGUoZS5zcGxpdCgiLCIpWzFdKTtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rPTEpcltuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9O3QuY2FsbElmRGVmaW5lZD1mdW5jdGlvbihlKXtpZihlJiYiZnVuY3Rpb24iPT10eXBlb2YgZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxuPTE7bjx0O24rKylyW24tMV09YXJndW1lbnRzW25dO2UuYXBwbHkodm9pZCAwLHIpfX07dC5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGMmJndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxfTt2YXIgcD1mdW5jdGlvbihlKXt9LG09ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gcC5hcHBseSh2b2lkIDAsWyJ3YXJuIl0uY29uY2F0KHQpKX07dC53YXJuT25EZXY9bTt0LmVycm9yT25EZXY9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gcC5hcHBseSh2b2lkIDAsWyJlcnJvciJdLmNvbmNhdCh0KSl9O3QuZGlzcGxheUNPUlNXYXJuaW5nPWZ1bmN0aW9uKCl7dSYmbSgiTG9hZGluZyBQREYgYXMgYmFzZTY0IHN0cmluZ3MvVVJMcyBtaWdodCBub3Qgd29yayBvbiBwcm90b2NvbHMgb3RoZXIgdGhhbiBIVFRQL0hUVFBTLiBPbiBHb29nbGUgQ2hyb21lLCB5b3UgY2FuIHVzZSAtLWFsbG93LWZpbGUtYWNjZXNzLWZyb20tZmlsZXMgZmxhZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIpfTt2YXIgZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscil7dmFyIG47cmV0dXJuKDAsYS5kZWZhdWx0KSh0aGlzLHQpLChuPSgwLGkuZGVmYXVsdCkodGhpcywoMCxvLmRlZmF1bHQpKHQpLmNhbGwodGhpcyxlLHIpKSkubmFtZT0iUHJvbWlzZUNhbmNlbGxlZEV4Y2VwdGlvbiIsbi5tZXNzYWdlPWUsbi50eXBlPXIsbn1yZXR1cm4oMCxzLmRlZmF1bHQpKHQsZSksdH0oKDAsbC5kZWZhdWx0KShFcnJvcikpO3QubWFrZUNhbmNlbGxhYmxlPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybntwcm9taXNlOm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdD9uKG5ldyBnKCJQcm9taXNlIGNhbmNlbGxlZCIpKTpyLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKHQ/bmV3IGcoIlByb21pc2UgY2FuY2VsbGVkIik6ZSl9KSl9KSksY2FuY2VsOmZ1bmN0aW9uKCl7dD0hMH19fTt0LmNhbmNlbFJ1bm5pbmdUYXNrPWZ1bmN0aW9uKGUpe2UmJmUuY2FuY2VsJiZlLmNhbmNlbCgpfTt0Lm1ha2VQYWdlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1syXSp0fSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1szXSp0fSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwib3JpZ2luYWxXaWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdbMl19LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJvcmlnaW5hbEhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdbM119LGNvbmZpZ3VyYWJsZTohMH0pLGV9O3QuaXNDYW5jZWxFeGNlcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiI9PT1lLm5hbWV8fCJQcm9taXNlQ2FuY2VsbGVkRXhjZXB0aW9uIj09PWUubmFtZX07dC5sb2FkRnJvbUZpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBGaWxlUmVhZGVyO3JldHVybiBuLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiB0KG5ldyBVaW50OEFycmF5KG4ucmVzdWx0KSl9LG4ub25lcnJvcj1mdW5jdGlvbihlKXtzd2l0Y2goZS50YXJnZXQuZXJyb3IuY29kZSl7Y2FzZSBlLnRhcmdldC5lcnJvci5OT1RfRk9VTkRfRVJSOnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGU6IEZpbGUgbm90IGZvdW5kLiIpKTtjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9SRUFEQUJMRV9FUlI6cmV0dXJuIHIobmV3IEVycm9yKCJFcnJvciB3aGlsZSByZWFkaW5nIGEgZmlsZTogRmlsZSBub3QgcmVhZGFibGUuIikpO2Nhc2UgZS50YXJnZXQuZXJyb3IuU0VDVVJJVFlfRVJSOnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGU6IFNlY3VyaXR5IGVycm9yLiIpKTtjYXNlIGUudGFyZ2V0LmVycm9yLkFCT1JUX0VSUjpyZXR1cm4gcihuZXcgRXJyb3IoIkVycm9yIHdoaWxlIHJlYWRpbmcgYSBmaWxlOiBBYm9ydGVkLiIpKTtkZWZhdWx0OnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGUuIikpfX0sbi5yZWFkQXNBcnJheUJ1ZmZlcihlKSxudWxsfSkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMjEpO2Z1bmN0aW9uIGEoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgV2Vha01hcClyZXR1cm4gbnVsbDt2YXIgZT1uZXcgV2Vha01hcDtyZXR1cm4gYT1mdW5jdGlvbigpe3JldHVybiBlfSxlfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7aWYobnVsbD09PWV8fCJvYmplY3QiIT09bihlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJue2RlZmF1bHQ6ZX07dmFyIHQ9YSgpO2lmKHQmJnQuaGFzKGUpKXJldHVybiB0LmdldChlKTt2YXIgcj17fSxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmb3IodmFyIG8gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSl7dmFyIHM9aT9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbyk6bnVsbDtzJiYocy5nZXR8fHMuc2V0KT9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHMpOnJbb109ZVtvXX1yZXR1cm4gci5kZWZhdWx0PWUsdCYmdC5zZXQoZSxyKSxyfX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7cmV0dXJuIGUuZXhwb3J0cz1yPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNSb3RhdGU9dC5pc1JlbmRlck1vZGU9dC5pc1BkZj10LmlzUGFnZU51bWJlcj10LmlzUGFnZUluZGV4PXQuaXNQYWdlPXQuaXNMaW5rVGFyZ2V0PXQuaXNMaW5rU2VydmljZT10LmlzRmlsZT10LmlzQ2xhc3NOYW1lPXQuZXZlbnRzUHJvcHM9dm9pZCAwO3ZhciBhPW4ocigyMSkpLGk9bihyKDY2KSksbz1uKHIoNCkpLHM9bihyKDcwKSksbD1yKDIyKSxjPXIoMTApLHU9bihyKDMyKSksZj0oMCxzLmRlZmF1bHQpKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybltdLmNvbmNhdCgoMCxpLmRlZmF1bHQpKGwubW91c2VFdmVudHMpLCgwLGkuZGVmYXVsdCkobC50b3VjaEV2ZW50cyksKDAsaS5kZWZhdWx0KShsLmtleWJvYXJkRXZlbnRzKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1vLmRlZmF1bHQuZnVuY30pKSxlfSkpO3QuZXZlbnRzUHJvcHM9Zjt2YXIgaD1bby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQuaW5zdGFuY2VPZihBcnJheUJ1ZmZlciksby5kZWZhdWx0LnNoYXBlKHtkYXRhOm8uZGVmYXVsdC5vYmplY3QsaHR0cEhlYWRlcnM6by5kZWZhdWx0Lm9iamVjdCxyYW5nZTpvLmRlZmF1bHQub2JqZWN0LHVybDpvLmRlZmF1bHQuc3RyaW5nLHdpdGhDcmVkZW50aWFsczpvLmRlZmF1bHQuYm9vbH0pXTsidW5kZWZpbmVkIiE9dHlwZW9mIEZpbGUmJmgucHVzaChvLmRlZmF1bHQuaW5zdGFuY2VPZihGaWxlKSksInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZoLnB1c2goby5kZWZhdWx0Lmluc3RhbmNlT2YoQmxvYikpO3ZhciBkPW8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5zdHJpbmcsby5kZWZhdWx0LmFycmF5T2Yoby5kZWZhdWx0LnN0cmluZyldKTt0LmlzQ2xhc3NOYW1lPWQ7dmFyIHA9by5kZWZhdWx0Lm9uZU9mVHlwZShoKTt0LmlzRmlsZT1wO3ZhciBtPW8uZGVmYXVsdC5pbnN0YW5jZU9mKHUuZGVmYXVsdCk7dC5pc0xpbmtTZXJ2aWNlPW07dmFyIGc9by5kZWZhdWx0Lm9uZU9mKFsiX3NlbGYiLCJfYmxhbmsiLCJfcGFyZW50IiwiX3RvcCJdKTt0LmlzTGlua1RhcmdldD1nO3ZhciB2PW8uZGVmYXVsdC5zaGFwZSh7X3RyYW5zcG9ydDpvLmRlZmF1bHQuc2hhcGUoe2ZvbnRMb2FkZXI6by5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZCxjb21tb25PYmpzOm8uZGVmYXVsdC5zaGFwZSh7X29ianM6by5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZCxnZXRBbm5vdGF0aW9uczpvLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFRleHRDb250ZW50Om8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Vmlld3BvcnQ6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxyZW5kZXI6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0pO3QuaXNQYWdlPXY7dC5pc1BhZ2VJbmRleD1mdW5jdGlvbihlLHQscil7dmFyIG49ZVt0XSxpPWUucGFnZU51bWJlcixvPWUucGRmO2lmKCEoMCxjLmlzRGVmaW5lZCkobykpcmV0dXJuIG51bGw7aWYoKDAsYy5pc0RlZmluZWQpKG4pKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgb2YgdHlwZSBgIikuY29uY2F0KCgwLGEuZGVmYXVsdCkobiksImAgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLCBleHBlY3RlZCBgbnVtYmVyYC4iKSk7aWYobjwwKXJldHVybiBuZXcgRXJyb3IoIkV4cGVjdGVkIGAiLmNvbmNhdCh0LCJgIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC4iKSk7dmFyIHM9by5udW1QYWdlcztpZihuKzE+cylyZXR1cm4gbmV3IEVycm9yKCJFeHBlY3RlZCBgIi5jb25jYXQodCwiYCB0byBiZSBsZXNzIG9yIGVxdWFsIHRvICIpLmNvbmNhdChzLTEsIi4iKSl9ZWxzZSBpZighKDAsYy5pc0RlZmluZWQpKGkpKXJldHVybiBuZXcgRXJyb3IoImAiLmNvbmNhdCh0LCJgIG5vdCBzdXBwbGllZC4gRWl0aGVyIHBhZ2VJbmRleCBvciBwYWdlTnVtYmVyIG11c3QgYmUgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLiIpKTtyZXR1cm4gbnVsbH07dC5pc1BhZ2VOdW1iZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWVbdF0saT1lLnBhZ2VJbmRleCxvPWUucGRmO2lmKCEoMCxjLmlzRGVmaW5lZCkobykpcmV0dXJuIG51bGw7aWYoKDAsYy5pc0RlZmluZWQpKG4pKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgb2YgdHlwZSBgIikuY29uY2F0KCgwLGEuZGVmYXVsdCkobiksImAgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLCBleHBlY3RlZCBgbnVtYmVyYC4iKSk7aWYobjwxKXJldHVybiBuZXcgRXJyb3IoIkV4cGVjdGVkIGAiLmNvbmNhdCh0LCJgIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMS4iKSk7dmFyIHM9by5udW1QYWdlcztpZihuPnMpcmV0dXJuIG5ldyBFcnJvcigiRXhwZWN0ZWQgYCIuY29uY2F0KHQsImAgdG8gYmUgbGVzcyBvciBlcXVhbCB0byAiKS5jb25jYXQocywiLiIpKX1lbHNlIGlmKCEoMCxjLmlzRGVmaW5lZCkoaSkpcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgbm90IHN1cHBsaWVkLiBFaXRoZXIgcGFnZUluZGV4IG9yIHBhZ2VOdW1iZXIgbXVzdCBiZSBzdXBwbGllZCB0byBgIikuY29uY2F0KHIsImAuIikpO3JldHVybiBudWxsfTt2YXIgeT1vLmRlZmF1bHQub25lT2ZUeXBlKFtvLmRlZmF1bHQuc2hhcGUoe2dldERlc3RpbmF0aW9uOm8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0T3V0bGluZTpvLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFBhZ2U6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxudW1QYWdlczpvLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWR9KSxvLmRlZmF1bHQuYm9vbF0pO3QuaXNQZGY9eTt2YXIgYj1vLmRlZmF1bHQub25lT2YoWyJjYW52YXMiLCJub25lIiwic3ZnIl0pO3QuaXNSZW5kZXJNb2RlPWI7dmFyIHc9by5kZWZhdWx0Lm9uZU9mKFswLDkwLDE4MCwyNzBdKTt0LmlzUm90YXRlPXd9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig1Nyl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxsPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGEpfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxpKXt2YXIgbz1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gcyhlKXtyKG8sYSxpLHMsbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtyKG8sYSxpLHMsbCwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19fSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1yKDgzKSxhPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3Q6d2luZG93LGk9WyJtb3oiLCJ3ZWJraXQiXSxvPSJBbmltYXRpb25GcmFtZSIscz1hWyJyZXF1ZXN0IitvXSxsPWFbImNhbmNlbCIrb118fGFbImNhbmNlbFJlcXVlc3QiK29dLGM9MDshcyYmYzxpLmxlbmd0aDtjKyspcz1hW2lbY10rIlJlcXVlc3QiK29dLGw9YVtpW2NdKyJDYW5jZWwiK29dfHxhW2lbY10rIkNhbmNlbFJlcXVlc3QiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxmPTAsaD1bXTtzPWZ1bmN0aW9uKGUpe2lmKDA9PT1oLmxlbmd0aCl7dmFyIHQ9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKHQtdSkpO3U9cit0LHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9aC5zbGljZSgwKTtoLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCFlW3RdLmNhbmNlbGxlZCl0cnl7ZVt0XS5jYWxsYmFjayh1KX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gaC5wdXNoKHtoYW5kbGU6KytmLGNhbGxiYWNrOmUsY2FuY2VsbGVkOiExfSksZn0sbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoO3QrKyloW3RdLmhhbmRsZT09PWUmJihoW3RdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGEsZSl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGEsYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKGUpe2V8fChlPWEpLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsZS5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcyxyKDE4KSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIG49KDAscigwKS5jcmVhdGVDb250ZXh0KShudWxsKTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0KXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e3I9cnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihyPXdpbmRvdyl9ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIG49KDAscigwKS5jcmVhdGVDb250ZXh0KShudWxsKTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0LG4sYSl7dmFyIGk7aT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciBhIGluIGUpci5kKG4sYSxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLGEpKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9IiIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksYT1yKDE0NiksaT1yKDE2Miksbz1yKDE2Mykscz1yKDE1MSksbD1yKDE2NCksYz1yKDE1NiksdT1yKDE1Myk7aWYocig0KSgpKXt2YXIgZj1yKDE2NSkuUERGTm9kZVN0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGYoZSl9KSl9ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIFJlc3BvbnNlJiYiYm9keSJpbiBSZXNwb25zZS5wcm90b3R5cGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pe3ZhciBoPXIoMTY4KS5QREZGZXRjaFN0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGgoZSl9KSl9ZWxzZXt2YXIgZD1yKDE2OSkuUERGTmV0d29ya1N0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGQoZSl9KSl9dC5idWlsZD1hLmJ1aWxkLHQudmVyc2lvbj1hLnZlcnNpb24sdC5nZXREb2N1bWVudD1hLmdldERvY3VtZW50LHQuTG9vcGJhY2tQb3J0PWEuTG9vcGJhY2tQb3J0LHQuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWEuUERGRGF0YVJhbmdlVHJhbnNwb3J0LHQuUERGV29ya2VyPWEuUERGV29ya2VyLHQucmVuZGVyVGV4dExheWVyPWkucmVuZGVyVGV4dExheWVyLHQuQW5ub3RhdGlvbkxheWVyPW8uQW5ub3RhdGlvbkxheWVyLHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9bi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSx0LlBhc3N3b3JkUmVzcG9uc2VzPW4uUGFzc3dvcmRSZXNwb25zZXMsdC5JbnZhbGlkUERGRXhjZXB0aW9uPW4uSW52YWxpZFBERkV4Y2VwdGlvbix0Lk1pc3NpbmdQREZFeGNlcHRpb249bi5NaXNzaW5nUERGRXhjZXB0aW9uLHQuU1ZHR3JhcGhpY3M9bC5TVkdHcmFwaGljcyx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9bi5OYXRpdmVJbWFnZURlY29kaW5nLHQuQ01hcENvbXByZXNzaW9uVHlwZT1uLkNNYXBDb21wcmVzc2lvblR5cGUsdC5QZXJtaXNzaW9uRmxhZz1uLlBlcm1pc3Npb25GbGFnLHQuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPW4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uLHQuT1BTPW4uT1BTLHQuVmVyYm9zaXR5TGV2ZWw9bi5WZXJib3NpdHlMZXZlbCx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPW4uVU5TVVBQT1JURURfRkVBVFVSRVMsdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPW4uY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCx0LmNyZWF0ZU9iamVjdFVSTD1uLmNyZWF0ZU9iamVjdFVSTCx0LnJlbW92ZU51bGxDaGFyYWN0ZXJzPW4ucmVtb3ZlTnVsbENoYXJhY3RlcnMsdC5zaGFkb3c9bi5zaGFkb3csdC5VdGlsPW4uVXRpbCx0LlJlYWRhYmxlU3RyZWFtPW4uUmVhZGFibGVTdHJlYW0sdC5VUkw9bi5VUkwsdC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24sdC5nZXRGaWxlbmFtZUZyb21Vcmw9cy5nZXRGaWxlbmFtZUZyb21VcmwsdC5MaW5rVGFyZ2V0PXMuTGlua1RhcmdldCx0LmFkZExpbmtBdHRyaWJ1dGVzPXMuYWRkTGlua0F0dHJpYnV0ZXMsdC5sb2FkU2NyaXB0PXMubG9hZFNjcmlwdCx0Lkdsb2JhbFdvcmtlck9wdGlvbnM9Yy5HbG9iYWxXb3JrZXJPcHRpb25zLHQuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcz11LmFwaUNvbXBhdGliaWxpdHlQYXJhbXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudG9Sb21hbk51bWVyYWxzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtmb3IodmFyIHIsbj1bXTtlPj0xZTM7KWUtPTFlMyxuLnB1c2goIk0iKTtyPWUvMTAwfDAsZSU9MTAwLG4ucHVzaChDW3JdKSxyPWUvMTB8MCxlJT0xMCxuLnB1c2goQ1sxMCtyXSksbi5wdXNoKENbMjArZV0pO3ZhciBhPW4uam9pbigiIik7cmV0dXJuIHQ/YS50b0xvd2VyQ2FzZSgpOmF9LHQuYXJyYXlCeXRlTGVuZ3RoPV8sdC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKGUpe2lmKDE9PT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTt2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKXI9ZVt0XSxuPV8ociksYSs9bjt2YXIgbz0wLHM9bmV3IFVpbnQ4QXJyYXkoYSk7Zm9yKHQ9MDt0PGk7dCsrKShyPWVbdF0paW5zdGFuY2VvZiBVaW50OEFycmF5fHwocj0ic3RyaW5nIj09dHlwZW9mIHI/UyhyKTpuZXcgVWludDhBcnJheShyKSksbj1yLmJ5dGVMZW5ndGgscy5zZXQocixvKSxvKz1uO3JldHVybiBzfSx0LmFzc2VydD11LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXt1KG51bGwhPT1lJiYib2JqZWN0Ij09PWkoZSkmJnZvaWQgMCE9PWUubGVuZ3RoLCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIHQ9ZS5sZW5ndGg7aWYodDw4MTkyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Zm9yKHZhciByPVtdLG49MDtuPHQ7bis9ODE5Mil7dmFyIGE9TWF0aC5taW4obis4MTkyLHQpLG89ZS5zdWJhcnJheShuLGEpO3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbykpfXJldHVybiByLmpvaW4oIiIpfSx0LmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PSExO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0dGxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLGUucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtlLnJlc29sdmU9ZnVuY3Rpb24oZSl7dD0hMCxyKGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXt0PSEwLG4oZSl9fSkpLGV9LHQuZGVwcmVjYXRlZD1mdW5jdGlvbihlKXtjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIrZSl9LHQuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmRpY3Qsbj1lLmtleSxhPWUuZ2V0QXJyYXksaT12b2lkIDAhPT1hJiZhLG89ZS5zdG9wV2hlbkZvdW5kLHM9dm9pZCAwPT09b3x8byxjPTA7cjspe3ZhciB1PWk/ci5nZXRBcnJheShuKTpyLmdldChuKTtpZih2b2lkIDAhPT11KXtpZihzKXJldHVybiB1O3R8fCh0PVtdKSx0LnB1c2godSl9aWYoKytjPjEwMCl7bCgnZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTogbWF4aW11bSBsb29wIGNvdW50IGV4Y2VlZGVkIGZvciAiJy5jb25jYXQobiwnIicpKTticmVha31yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH0sdC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUmJih0PU9iamVjdC5jcmVhdGUobnVsbCksZSh0KSxlPW51bGwpLHR9fSx0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuaW5mbz1mdW5jdGlvbihlKXtzPj1vLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIitlKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09aShlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sdC5pc0VtcHR5T2JqPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSx0LmlzTnVtPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sdC5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LHQuaXNTcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTM9PT1lfHwxMD09PWV9LHQuaXNTYW1lT3JpZ2luPWZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciByPW5ldyBhLlVSTChlKTtpZighci5vcmlnaW58fCJudWxsIj09PXIub3JpZ2luKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfXZhciBuPW5ldyBhLlVSTCh0LHIpO3JldHVybiByLm9yaWdpbj09PW4ub3JpZ2lufSx0LmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHI9dD9uZXcgYS5VUkwoZSx0KTpuZXcgYS5VUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0ocikpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmlzTGl0dGxlRW5kaWFuPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCk7cmV0dXJuIGVbMF09MSwxPT09bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsMSlbMF19LHQuaXNFdmFsU3VwcG9ydGVkPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sdC5sb2cyPWZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6TWF0aC5jZWlsKE1hdGgubG9nMihlKSl9LHQucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fSx0LnJlYWRVaW50MTY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8OHxlW3QrMV19LHQucmVhZFVpbnQzMj1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH0sdC5yZW1vdmVOdWxsQ2hhcmFjdGVycz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/KGwoIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4iKSxlKTplLnJlcGxhY2UoaywiIil9LHQuc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHM9ZSl9LHQuc2hhZG93PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9LHQuc3RyaW5nMzI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9LHQuc3RyaW5nVG9CeXRlcz1TLHQuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aCxuPVtdO2lmKCLDviI9PT1lWzBdJiYiw78iPT09ZVsxXSlmb3IodD0yO3Q8cjt0Kz0yKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCh0KTw8OHxlLmNoYXJDb2RlQXQodCsxKSkpO2Vsc2UgZm9yKHQ9MDt0PHI7Kyt0KXt2YXIgYT1QW2UuY2hhckNvZGVBdCh0KV07bi5wdXNoKGE/U3RyaW5nLmZyb21DaGFyQ29kZShhKTplLmNoYXJBdCh0KSl9cmV0dXJuIG4uam9pbigiIil9LHQuc3RyaW5nVG9VVEY4U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX0sdC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9LHQud2Fybj1sLHQudW5yZWFjaGFibGU9YyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVhZGFibGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlJlYWRhYmxlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVUkwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlVSTH19KSx0LmNyZWF0ZU9iamVjdFVSTD10LkZvcm1hdEVycm9yPXQuWFJlZlBhcnNlRXhjZXB0aW9uPXQuWFJlZkVudHJ5RXhjZXB0aW9uPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlRleHRSZW5kZXJpbmdNb2RlPXQuU3RyZWFtVHlwZT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTWlzc2luZ0RhdGFFeGNlcHRpb249dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuQWJvcnRFeGNlcHRpb249dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuSW1hZ2VLaW5kPXQuRm9udFR5cGU9dC5Bbm5vdGF0aW9uVHlwZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz10LlZlcmJvc2l0eUxldmVsPXQuT1BTPXQuSURFTlRJVFlfTUFUUklYPXQuRk9OVF9JREVOVElUWV9NQVRSSVg9dm9pZCAwLHIoMik7dmFyIG49cigxNDIpLGE9cigxNDQpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX10LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLHQuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9e05PTkU6Im5vbmUiLERFQ09ERToiZGVjb2RlIixESVNQTEFZOiJkaXNwbGF5In0sdC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSx0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9LHQuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M30sdC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9LHQuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LHQuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sdC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSx0LlN0cmVhbVR5cGU9e1VOS05PV046MCxGTEFURToxLExaVzoyLERDVDozLEpQWDo0LEpCSUc6NSxBODU6NixBSFg6NyxDQ0Y6OCxSTDo5fSx0LkZvbnRUeXBlPXtVTktOT1dOOjAsVFlQRTE6MSxUWVBFMUM6MixDSURGT05UVFlQRTA6MyxDSURGT05UVFlQRTBDOjQsVFJVRVRZUEU6NSxDSURGT05UVFlQRTI6NixUWVBFMzo3LE9QRU5UWVBFOjgsVFlQRTA6OSxNTVRZUEUxOjEwfTt2YXIgbz17RVJST1JTOjAsV0FSTklOR1M6MSxJTkZPUzo1fTt0LlZlcmJvc2l0eUxldmVsPW8sdC5DTWFwQ29tcHJlc3Npb25UeXBlPXtOT05FOjAsQklOQVJZOjEsU1RSRUFNOjJ9LHQuT1BTPXtkZXBlbmRlbmN5OjEsc2V0TGluZVdpZHRoOjIsc2V0TGluZUNhcDozLHNldExpbmVKb2luOjQsc2V0TWl0ZXJMaW1pdDo1LHNldERhc2g6NixzZXRSZW5kZXJpbmdJbnRlbnQ6NyxzZXRGbGF0bmVzczo4LHNldEdTdGF0ZTo5LHNhdmU6MTAscmVzdG9yZToxMSx0cmFuc2Zvcm06MTIsbW92ZVRvOjEzLGxpbmVUbzoxNCxjdXJ2ZVRvOjE1LGN1cnZlVG8yOjE2LGN1cnZlVG8zOjE3LGNsb3NlUGF0aDoxOCxyZWN0YW5nbGU6MTksc3Ryb2tlOjIwLGNsb3NlU3Ryb2tlOjIxLGZpbGw6MjIsZW9GaWxsOjIzLGZpbGxTdHJva2U6MjQsZW9GaWxsU3Ryb2tlOjI1LGNsb3NlRmlsbFN0cm9rZToyNixjbG9zZUVPRmlsbFN0cm9rZToyNyxlbmRQYXRoOjI4LGNsaXA6MjksZW9DbGlwOjMwLGJlZ2luVGV4dDozMSxlbmRUZXh0OjMyLHNldENoYXJTcGFjaW5nOjMzLHNldFdvcmRTcGFjaW5nOjM0LHNldEhTY2FsZTozNSxzZXRMZWFkaW5nOjM2LHNldEZvbnQ6Mzcsc2V0VGV4dFJlbmRlcmluZ01vZGU6Mzgsc2V0VGV4dFJpc2U6MzksbW92ZVRleHQ6NDAsc2V0TGVhZGluZ01vdmVUZXh0OjQxLHNldFRleHRNYXRyaXg6NDIsbmV4dExpbmU6NDMsc2hvd1RleHQ6NDQsc2hvd1NwYWNlZFRleHQ6NDUsbmV4dExpbmVTaG93VGV4dDo0NixuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDo0NyxzZXRDaGFyV2lkdGg6NDgsc2V0Q2hhcldpZHRoQW5kQm91bmRzOjQ5LHNldFN0cm9rZUNvbG9yU3BhY2U6NTAsc2V0RmlsbENvbG9yU3BhY2U6NTEsc2V0U3Ryb2tlQ29sb3I6NTIsc2V0U3Ryb2tlQ29sb3JOOjUzLHNldEZpbGxDb2xvcjo1NCxzZXRGaWxsQ29sb3JOOjU1LHNldFN0cm9rZUdyYXk6NTYsc2V0RmlsbEdyYXk6NTcsc2V0U3Ryb2tlUkdCQ29sb3I6NTgsc2V0RmlsbFJHQkNvbG9yOjU5LHNldFN0cm9rZUNNWUtDb2xvcjo2MCxzZXRGaWxsQ01ZS0NvbG9yOjYxLHNoYWRpbmdGaWxsOjYyLGJlZ2luSW5saW5lSW1hZ2U6NjMsYmVnaW5JbWFnZURhdGE6NjQsZW5kSW5saW5lSW1hZ2U6NjUscGFpbnRYT2JqZWN0OjY2LG1hcmtQb2ludDo2NyxtYXJrUG9pbnRQcm9wczo2OCxiZWdpbk1hcmtlZENvbnRlbnQ6NjksYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6NzAsZW5kTWFya2VkQ29udGVudDo3MSxiZWdpbkNvbXBhdDo3MixlbmRDb21wYXQ6NzMscGFpbnRGb3JtWE9iamVjdEJlZ2luOjc0LHBhaW50Rm9ybVhPYmplY3RFbmQ6NzUsYmVnaW5Hcm91cDo3NixlbmRHcm91cDo3NyxiZWdpbkFubm90YXRpb25zOjc4LGVuZEFubm90YXRpb25zOjc5LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SnBlZ1hPYmplY3Q6ODIscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXt1bmtub3duOiJ1bmtub3duIixmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixmb250OiJmb250In0sdC5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgcz1vLldBUk5JTkdTO2Z1bmN0aW9uIGwoZSl7cz49by5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIrZSl9ZnVuY3Rpb24gYyhlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gdShlLHQpe2V8fGModCl9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJQYXNzd29yZEV4Y2VwdGlvbiIsdGhpcy5tZXNzYWdlPWUsdGhpcy5jb2RlPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlBhc3N3b3JkRXhjZXB0aW9uPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmtub3duRXJyb3JFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuZGV0YWlscz10fXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5uYW1lPSJJbnZhbGlkUERGRXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuSW52YWxpZFBERkV4Y2VwdGlvbj1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9Ik1pc3NpbmdQREZFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5NaXNzaW5nUERGRXhjZXB0aW9uPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhdHVzPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuYmVnaW49ZSx0aGlzLmVuZD10LHRoaXMubWVzc2FnZT0iTWlzc2luZyBkYXRhIFsiK2UrIiwgIit0KyIpIn1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9Ik1pc3NpbmdEYXRhRXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPWc7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT0iWFJlZkVudHJ5RXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlhSZWZQYXJzZUV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5YUmVmUGFyc2VFeGNlcHRpb249eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPWV9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJGb3JtYXRFcnJvciIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Gb3JtYXRFcnJvcj1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9IkFib3J0RXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuQWJvcnRFeGNlcHRpb249dzt2YXIgaz0vXHgwMC9nO2Z1bmN0aW9uIFMoZSl7dSgic3RyaW5nIj09dHlwZW9mIGUsIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgVWludDhBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdm9pZCAwIT09ZS5sZW5ndGg/ZS5sZW5ndGg6KHUodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKSxlLmJ5dGVMZW5ndGgpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe312YXIgdD1bInJnYigiLDAsIiwiLDAsIiwiLDAsIikiXTtyZXR1cm4gZS5tYWtlQ3NzUmdiPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFsxXT1lLHRbM109cix0WzVdPW4sdC5qb2luKCIiKX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX0sZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX0sZS5hcHBseUludmVyc2VUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX0sZS5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX0sZS5pbnZlcnNlVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX0sZS5hcHBseTNkVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdLGVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdLGVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdXX0sZS5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydCgocitpKSoocitpKS00KihyKmktYSpuKSkvMixsPW8rc3x8MSxjPW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydChjKV19LGUubm9ybWFsaXplUmVjdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKDApO3JldHVybiBlWzBdPmVbMl0mJih0WzBdPWVbMl0sdFsyXT1lWzBdKSxlWzFdPmVbM10mJih0WzFdPWVbM10sdFszXT1lWzFdKSx0fSxlLmludGVyc2VjdD1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS10fXZhciBhPVt0WzBdLHRbMl0sclswXSxyWzJdXS5zb3J0KG4pLGk9W3RbMV0sdFszXSxyWzFdLHJbM11dLnNvcnQobiksbz1bXTtyZXR1cm4gdD1lLm5vcm1hbGl6ZVJlY3QodCkscj1lLm5vcm1hbGl6ZVJlY3QociksKGFbMF09PT10WzBdJiZhWzFdPT09clswXXx8YVswXT09PXJbMF0mJmFbMV09PT10WzBdKSYmKG9bMF09YVsxXSxvWzJdPWFbMl0sKGlbMF09PT10WzFdJiZpWzFdPT09clsxXXx8aVswXT09PXJbMV0mJmlbMV09PT10WzFdKSYmKG9bMV09aVsxXSxvWzNdPWlbMl0sbykpfSxlfSgpO3QuVXRpbD14O3ZhciBBLEM9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXSxQPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XSxFPShBPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCFyJiZhLlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBuPW5ldyBCbG9iKFtlXSx7dHlwZTp0fSk7cmV0dXJuIGEuVVJMLmNyZWF0ZU9iamVjdFVSTChuKX1mb3IodmFyIGk9ImRhdGE6Iit0KyI7YmFzZTY0LCIsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTMpe3ZhciBsPTI1NSZlW29dLGM9MjU1JmVbbysxXSx1PTI1NSZlW28rMl0sZj1sPj4yLGg9KDMmbCk8PDR8Yz4+NCxkPW8rMTxzPygxNSZjKTw8Mnx1Pj42OjY0LHA9bysyPHM/NjMmdTo2NDtpKz1BW2ZdK0FbaF0rQVtkXStBW3BdfXJldHVybiBpfSk7dC5jcmVhdGVPYmplY3RVUkw9RX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGUpe3JldHVybihhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGk9bigzKTtpZighaS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZCl7aS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMDt2YXIgbz1uKDQpLHM9Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6YSh3aW5kb3cpKSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudD8idW5kZWZpbmVkIjphKGRvY3VtZW50KSk7IWkuYnRvYSYmbygpJiYoaS5idG9hPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWkuYXRvYiYmbygpJiYoaS5hdG9iPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSkscyYmdm9pZCAwPT09RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlJiYoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxmdW5jdGlvbigpe2lmKHMmJiFvKCkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGUuY2xhc3NMaXN0LmFkZCgidGVzdE9uZSIsInRlc3RUd28iKSwhMCE9PWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZXN0T25lIil8fCEwIT09ZS5jbGFzc0xpc3QuY29udGFpbnMoInRlc3RUd28iKSl7dmFyIHQ9RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQscj1ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO3QuY2FsbCh0aGlzLGkpfX0sRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtyLmNhbGwodGhpcyxpKX19fX19KCkscyYmIW8oKSYmITEhPT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5jbGFzc0xpc3QudG9nZ2xlKCJ0ZXN0IiwwKSYmKERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT8hIWFyZ3VtZW50c1sxXTohdGhpcy5jb250YWlucyhlKTtyZXR1cm4gdGhpc1t0PyJhZGQiOiJyZW1vdmUiXShlKSx0fSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHxuKDUpLFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGh8fG4oMzUpLFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXN8fG4oMzcpLEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc3x8bigzOSksQXJyYXkuZnJvbXx8big0NiksT2JqZWN0LmFzc2lnbnx8big2OSksTWF0aC5sb2cyfHwoTWF0aC5sb2cyPW4oNzQpKSxOdW1iZXIuaXNOYU58fChOdW1iZXIuaXNOYU49big3NikpLE51bWJlci5pc0ludGVnZXJ8fChOdW1iZXIuaXNJbnRlZ2VyPW4oNzgpKSxpLlByb21pc2UmJmkuUHJvbWlzZS5wcm90b3R5cGUmJmkuUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseXx8KGkuUHJvbWlzZT1uKDgxKSksaS5XZWFrTWFwfHwoaS5XZWFrTWFwPW4oMTAxKSksaS5XZWFrU2V0fHwoaS5XZWFrU2V0PW4oMTE4KSksU3RyaW5nLmNvZGVQb2ludEF0fHwoU3RyaW5nLmNvZGVQb2ludEF0PW4oMTIyKSksU3RyaW5nLmZyb21Db2RlUG9pbnR8fChTdHJpbmcuZnJvbUNvZGVQb2ludD1uKDEyNCkpLGkuU3ltYm9sfHxuKDEyNiksU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydHx8bigxMzMpLFN0cmluZy5wcm90b3R5cGUucGFkRW5kfHxuKDEzNyksT2JqZWN0LnZhbHVlc3x8KE9iamVjdC52YWx1ZXM9bigxMzkpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09PU1hdGg/d2luZG93OnZvaWQgMCE9PW4mJm4uTWF0aD09PU1hdGg/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09PU1hdGg/c2VsZjp7fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09YT8idW5kZWZpbmVkIjpuKGEpKSYmYSsiIj09IltvYmplY3QgcHJvY2Vzc10iJiYhYS52ZXJzaW9ucy5ud319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig2KSxlLmV4cG9ydHM9cig5KS5TdHJpbmcuc3RhcnRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigyNSksaT1yKDI3KSxvPSIiLnN0YXJ0c1dpdGg7bihuLlArbi5GKnIoMzQpKCJzdGFydHNXaXRoIiksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLGUsInN0YXJ0c1dpdGgiKSxyPWEoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxuPVN0cmluZyhlKTtyZXR1cm4gbz9vLmNhbGwodCxuLHIpOnQuc2xpY2UocixyK24ubGVuZ3RoKT09PW59fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOSksaT1yKDEwKSxvPXIoMjApLHM9cigyMyksbD1mdW5jdGlvbiBlKHQscixsKXt2YXIgYyx1LGYsaCxkPXQmZS5GLHA9dCZlLkcsbT10JmUuUCxnPXQmZS5CLHY9cD9uOnQmZS5TP25bcl18fChuW3JdPXt9KToobltyXXx8e30pLnByb3RvdHlwZSx5PXA/YTphW3JdfHwoYVtyXT17fSksYj15LnByb3RvdHlwZXx8KHkucHJvdG90eXBlPXt9KTtmb3IoYyBpbiBwJiYobD1yKSxsKWY9KCh1PSFkJiZ2JiZ2b2lkIDAhPT12W2NdKT92OmwpW2NdLGg9ZyYmdT9zKGYsbik6bSYmImZ1bmN0aW9uIj09dHlwZW9mIGY/cyhGdW5jdGlvbi5jYWxsLGYpOmYsdiYmbyh2LGMsZix0JmUuVSkseVtjXSE9ZiYmaSh5LGMsaCksbSYmYltjXSE9ZiYmKGJbY109Zil9O24uY29yZT1hLGwuRj0xLGwuRz0yLGwuUz00LGwuUD04LGwuQj0xNixsLlc9MzIsbC5VPTY0LGwuUj0xMjgsZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi42LjIifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMTkpO2UuZXhwb3J0cz1yKDE1KT9mdW5jdGlvbihlLHQscil7cmV0dXJuIG4uZihlLHQsYSgxLHIpKX06ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXIsZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDE0KSxpPXIoMTgpLG89T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1yKDE1KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2lmKG4oZSksdD1pKHQsITApLG4ociksYSl0cnl7cmV0dXJuIG8oZSx0LHIpfWNhdGNoKGUpe31pZigiZ2V0ImluIHJ8fCJzZXQiaW4gcil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiByJiYoZVt0XT1yLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09bihlKT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSFyKDE1KSYmIXIoMTYpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxNykoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IXIoMTYpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoOCkuZG9jdW1lbnQsaT1uKGEpJiZuKGEuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP2EuY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIHIsYTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yocj1lLnRvU3RyaW5nKSYmIW4oYT1yLmNhbGwoZSkpKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihyPWUudmFsdWVPZikmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTtpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKHI9ZS50b1N0cmluZykmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOCksYT1yKDEwKSxpPXIoMjEpLG89cigyMikoInNyYyIpLHM9RnVuY3Rpb24udG9TdHJpbmcsbD0oIiIrcykuc3BsaXQoInRvU3RyaW5nIik7cig5KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHI7YyYmKGkociwibmFtZSIpfHxhKHIsIm5hbWUiLHQpKSxlW3RdIT09ciYmKGMmJihpKHIsbyl8fGEocixvLGVbdF0/IiIrZVt0XTpsLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1uP2VbdF09cjpzP2VbdF0/ZVt0XT1yOmEoZSx0LHIpOihkZWxldGUgZVt0XSxhKGUsdCxyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHMuY2FsbCh0aGlzKX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPTAsYT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rYSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0LHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUuY2FsbCh0LHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGEpe3JldHVybiBlLmNhbGwodCxyLG4sYSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP2EobihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1NYXRoLmNlaWwsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP2E6bikoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjgpLGE9cigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrcisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLGE9cigyOSksaT1yKDMwKSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJih2b2lkIDAhPT0odD1lW2ldKT8hIXQ6IlJlZ0V4cCI9PWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMSkoIndrcyIpLGE9cigyMiksaT1yKDgpLlN5bWJvbCxvPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPW8mJmlbZV18fChvP2k6YSkoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPW59LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig5KSxhPXIoOCksaT1hWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KGFbIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnIoMzIpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSExfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5eyIvLi8iW2VdKHQpfWNhdGNoKHIpe3RyeXtyZXR1cm4gdFtuXT0hMSwhIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigzNiksZS5leHBvcnRzPXIoOSkuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI1KSxpPXIoMjcpLG89IiIuZW5kc1dpdGg7bihuLlArbi5GKnIoMzQpKCJlbmRzV2l0aCIpLCJTdHJpbmciLHtlbmRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1pKHRoaXMsZSwiZW5kc1dpdGgiKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLG49YSh0Lmxlbmd0aCkscz12b2lkIDA9PT1yP246TWF0aC5taW4oYShyKSxuKSxsPVN0cmluZyhlKTtyZXR1cm4gbz9vLmNhbGwodCxsLHMpOnQuc2xpY2Uocy1sLmxlbmd0aCxzKT09PWx9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigzOCksZS5leHBvcnRzPXIoOSkuU3RyaW5nLmluY2x1ZGVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI3KTtuKG4uUCtuLkYqcigzNCkoImluY2x1ZGVzIiksIlN0cmluZyIse2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfmEodGhpcyxlLCJpbmNsdWRlcyIpLmluZGV4T2YoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig0MCksZS5leHBvcnRzPXIoOSkuQXJyYXkuaW5jbHVkZXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KSxhPXIoNDEpKCEwKTtuKG4uUCwiQXJyYXkiLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNDUpKCJpbmNsdWRlcyIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDIpLGE9cigyNSksaT1yKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixvKXt2YXIgcyxsPW4odCksYz1hKGwubGVuZ3RoKSx1PWkobyxjKTtpZihlJiZyIT1yKXtmb3IoO2M+dTspaWYoKHM9bFt1KytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PXIpcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0MyksYT1yKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjkpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9bihlKSk8MD9hKGUrdCwwKTppKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApKCJ1bnNjb3BhYmxlcyIpLGE9QXJyYXkucHJvdG90eXBlO251bGw9PWFbbl0mJnIoMTApKGEsbix7fSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Fbbl1bZV09ITB9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNDcpLHIoNjIpLGUuZXhwb3J0cz1yKDkpLkFycmF5LmZyb219LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCkoITApO3IoNDkpKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSksKGZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl90LHI9dGhpcy5faTtyZXR1cm4gcj49dC5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1uKHQsciksdGhpcy5faSs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjYpLGE9cigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBpLG8scz1TdHJpbmcoYSh0KSksbD1uKHIpLGM9cy5sZW5ndGg7cmV0dXJuIGw8MHx8bD49Yz9lPyIiOnZvaWQgMDooaT1zLmNoYXJDb2RlQXQobCkpPDU1Mjk2fHxpPjU2MzE5fHxsKzE9PT1jfHwobz1zLmNoYXJDb2RlQXQobCsxKSk8NTYzMjB8fG8+NTczNDM/ZT9zLmNoYXJBdChsKTppOmU/cy5zbGljZShsLGwrMik6by01NjMyMCsoaS01NTI5Njw8MTApKzY1NTM2fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMiksYT1yKDcpLGk9cigyMCksbz1yKDEwKSxzPXIoNTApLGw9cig1MSksYz1yKDU5KSx1PXIoNjApLGY9cigzMCkoIml0ZXJhdG9yIiksaD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixwLG0sZyx2KXtsKHIsdCxwKTt2YXIgeSxiLHcsaz1mdW5jdGlvbihlKXtpZighaCYmZSBpbiBBKXJldHVybiBBW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fSxTPXQrIiBJdGVyYXRvciIsXz0idmFsdWVzIj09bSx4PSExLEE9ZS5wcm90b3R5cGUsQz1BW2ZdfHxBWyJAQGl0ZXJhdG9yIl18fG0mJkFbbV0sUD1DfHxrKG0pLEU9bT9fP2soImVudHJpZXMiKTpQOnZvaWQgMCxUPSJBcnJheSI9PXQmJkEuZW50cmllc3x8QztpZihUJiYodz11KFQuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJncubmV4dCYmKGModyxTLCEwKSxufHwiZnVuY3Rpb24iPT10eXBlb2Ygd1tmXXx8byh3LGYsZCkpLF8mJkMmJiJ2YWx1ZXMiIT09Qy5uYW1lJiYoeD0hMCxQPWZ1bmN0aW9uKCl7cmV0dXJuIEMuY2FsbCh0aGlzKX0pLG4mJiF2fHwhaCYmIXgmJkFbZl18fG8oQSxmLFApLHNbdF09UCxzW1NdPWQsbSlpZih5PXt2YWx1ZXM6Xz9QOmsoInZhbHVlcyIpLGtleXM6Zz9QOmsoImtleXMiKSxlbnRyaWVzOkV9LHYpZm9yKGIgaW4geSliIGluIEF8fGkoQSxiLHlbYl0pO2Vsc2UgYShhLlArYS5GKihofHx4KSx0LHkpO3JldHVybiB5fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1MiksYT1yKDE5KSxpPXIoNTkpLG89e307cigxMCkobyxyKDMwKSgiaXRlcmF0b3IiKSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2UucHJvdG90eXBlPW4obyx7bmV4dDphKDEscil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig1MyksaT1yKDU3KSxvPXIoNTYpKCJJRV9QUk9UTyIpLHM9ZnVuY3Rpb24oKXt9LGw9ZnVuY3Rpb24oKXt2YXIgZSx0PXIoMTcpKCJpZnJhbWUiKSxuPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHIoNTgpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksbD1lLkY7bi0tOylkZWxldGUgbC5wcm90b3R5cGVbaVtuXV07cmV0dXJuIGwoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhzLnByb3RvdHlwZT1uKGUpLHI9bmV3IHMscy5wcm90b3R5cGU9bnVsbCxyW29dPWUpOnI9bCgpLHZvaWQgMD09PXQ/cjphKHIsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxMiksaT1yKDU0KTtlLmV4cG9ydHM9cigxNSk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXthKGUpO2Zvcih2YXIgcixvPWkodCkscz1vLmxlbmd0aCxsPTA7cz5sOyluLmYoZSxyPW9bbCsrXSx0W3JdKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDU3KTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjEpLGE9cig0MiksaT1yKDQxKSghMSksbz1yKDU2KSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzPWEoZSksbD0wLGM9W107Zm9yKHIgaW4gcylyIT1vJiZuKHMscikmJmMucHVzaChyKTtmb3IoO3QubGVuZ3RoPmw7KW4ocyxyPXRbbCsrXSkmJih+aShjLHIpfHxjLnB1c2gocikpO3JldHVybiBjfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSgia2V5cyIpLGE9cigyMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHwobltlXT1hKGUpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KS5kb2N1bWVudDtlLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSkuZixhPXIoMjEpLGk9cigzMCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhYShlPXI/ZTplLnByb3RvdHlwZSxpKSYmbihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjEpLGE9cig2MSksaT1yKDU2KSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YShlKSxuKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNyksaT1yKDYxKSxvPXIoNjMpLHM9cig2NCksbD1yKDI1KSxjPXIoNjUpLHU9cig2Nik7YShhLlMrYS5GKiFyKDY4KSgoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pKSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxmLGg9aShlKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkscD1hcmd1bWVudHMubGVuZ3RoLG09cD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZz12b2lkIDAhPT1tLHY9MCx5PXUoaCk7aWYoZyYmKG09bihtLHA+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT15fHxkPT1BcnJheSYmcyh5KSlmb3Iocj1uZXcgZCh0PWwoaC5sZW5ndGgpKTt0PnY7disrKWMocix2LGc/bShoW3ZdLHYpOmhbdl0pO2Vsc2UgZm9yKGY9eS5jYWxsKGgpLHI9bmV3IGQ7IShhPWYubmV4dCgpKS5kb25lO3YrKyljKHIsdixnP28oZixtLFthLnZhbHVlLHZdLCEwKTphLnZhbHVlKTtyZXR1cm4gci5sZW5ndGg9dixyfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXt0cnl7cmV0dXJuIGE/dChuKHIpWzBdLHJbMV0pOnQocil9Y2F0Y2godCl7dmFyIGk9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmbihpLmNhbGwoZSkpLHR9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDUwKSxhPXIoMzApKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKG4uQXJyYXk9PT1lfHxpW2FdPT09ZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt0IGluIGU/bi5mKGUsdCxhKDAscikpOmVbdF09cn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2NyksYT1yKDMwKSgiaXRlcmF0b3IiKSxpPXIoNTApO2UuZXhwb3J0cz1yKDkpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGVbYV18fGVbIkBAaXRlcmF0b3IiXXx8aVtuKGUpXX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyOSksYT1yKDMwKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1uKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbztyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLGEpKT9yOmk/bih0KToiT2JqZWN0Ij09KG89bih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjpvfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMwKSgiaXRlcmF0b3IiKSxhPSExO3RyeXt2YXIgaT1bN11bbl0oKTtpLnJldHVybj1mdW5jdGlvbigpe2E9ITB9LEFycmF5LmZyb20oaSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIWEpcmV0dXJuITE7dmFyIHI9ITE7dHJ5e3ZhciBpPVs3XSxvPWlbbl0oKTtvLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX0saVtuXT1mdW5jdGlvbigpe3JldHVybiBvfSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3MCksZS5leHBvcnRzPXIoOSkuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpO24obi5TK24uRiwiT2JqZWN0Iix7YXNzaWduOnIoNzEpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NCksYT1yKDcyKSxpPXIoNzMpLG89cig2MSkscz1yKDQzKSxsPU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSFsfHxyKDE2KSgoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LHI9U3ltYm9sKCksbj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW3JdPTcsbi5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1lfSkpLDchPWwoe30sZSlbcl18fE9iamVjdC5rZXlzKGwoe30sdCkpLmpvaW4oIiIpIT1ufSkpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW8oZSksbD1hcmd1bWVudHMubGVuZ3RoLGM9MSx1PWEuZixmPWkuZjtsPmM7KWZvcih2YXIgaCxkPXMoYXJndW1lbnRzW2MrK10pLHA9dT9uKGQpLmNvbmNhdCh1KGQpKTpuKGQpLG09cC5sZW5ndGgsZz0wO20+ZzspZi5jYWxsKGQsaD1wW2crK10pJiYocltoXT1kW2hdKTtyZXR1cm4gcn06bH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3NSksZS5leHBvcnRzPXIoOSkuTWF0aC5sb2cyfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc3KSxlLmV4cG9ydHM9cig5KS5OdW1iZXIuaXNOYU59LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KTtuKG4uUywiTnVtYmVyIix7aXNOYU46ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3OSksZS5leHBvcnRzPXIoOSkuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpO24obi5TLCJOdW1iZXIiLHtpc0ludGVnZXI6cig4MCl9KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiFuKGUpJiZpc0Zpbml0ZShlKSYmYShlKT09PWV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODIpLHIoNDcpLHIoODMpLHIoODYpLHIoOTkpLHIoMTAwKSxlLmV4cG9ydHM9cig5KS5Qcm9taXNlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNjcpLGE9e307YVtyKDMwKSgidG9TdHJpbmdUYWciKV09InoiLGErIiIhPSJbb2JqZWN0IHpdIiYmcigyMCkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9KSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXIoODQpLGE9cig1NCksaT1yKDIwKSxvPXIoOCkscz1yKDEwKSxsPXIoNTApLGM9cigzMCksdT1jKCJpdGVyYXRvciIpLGY9YygidG9TdHJpbmdUYWciKSxoPWwuQXJyYXksZD17Q1NTUnVsZUxpc3Q6ITAsQ1NTU3R5bGVEZWNsYXJhdGlvbjohMSxDU1NWYWx1ZUxpc3Q6ITEsQ2xpZW50UmVjdExpc3Q6ITEsRE9NUmVjdExpc3Q6ITEsRE9NU3RyaW5nTGlzdDohMSxET01Ub2tlbkxpc3Q6ITAsRGF0YVRyYW5zZmVySXRlbUxpc3Q6ITEsRmlsZUxpc3Q6ITEsSFRNTEFsbENvbGxlY3Rpb246ITEsSFRNTENvbGxlY3Rpb246ITEsSFRNTEZvcm1FbGVtZW50OiExLEhUTUxTZWxlY3RFbGVtZW50OiExLE1lZGlhTGlzdDohMCxNaW1lVHlwZUFycmF5OiExLE5hbWVkTm9kZU1hcDohMSxOb2RlTGlzdDohMCxQYWludFJlcXVlc3RMaXN0OiExLFBsdWdpbjohMSxQbHVnaW5BcnJheTohMSxTVkdMZW5ndGhMaXN0OiExLFNWR051bWJlckxpc3Q6ITEsU1ZHUGF0aFNlZ0xpc3Q6ITEsU1ZHUG9pbnRMaXN0OiExLFNWR1N0cmluZ0xpc3Q6ITEsU1ZHVHJhbnNmb3JtTGlzdDohMSxTb3VyY2VCdWZmZXJMaXN0OiExLFN0eWxlU2hlZXRMaXN0OiEwLFRleHRUcmFja0N1ZUxpc3Q6ITEsVGV4dFRyYWNrTGlzdDohMSxUb3VjaExpc3Q6ITF9LHA9YShkKSxtPTA7bTxwLmxlbmd0aDttKyspe3ZhciBnLHY9cFttXSx5PWRbdl0sYj1vW3ZdLHc9YiYmYi5wcm90b3R5cGU7aWYodyYmKHdbdV18fHModyx1LGgpLHdbZl18fHModyxmLHYpLGxbdl09aCx5KSlmb3IoZyBpbiBuKXdbZ118fGkodyxnLG5bZ10sITApfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQ1KSxhPXIoODUpLGk9cig1MCksbz1yKDQyKTtlLmV4cG9ydHM9cig0OSkoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24oZSx0KXt0aGlzLl90PW8oZSksdGhpcy5faT0wLHRoaXMuX2s9dH0pLChmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3QsdD10aGlzLl9rLHI9dGhpcy5faSsrO3JldHVybiFlfHxyPj1lLmxlbmd0aD8odGhpcy5fdD12b2lkIDAsYSgxKSk6YSgwLCJrZXlzIj09dD9yOiJ2YWx1ZXMiPT10P2Vbcl06W3IsZVtyXV0pfSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvLHM9cigzMiksbD1yKDgpLGM9cigyMyksdT1yKDY3KSxmPXIoNyksaD1yKDEzKSxkPXIoMjQpLHA9cig4NyksbT1yKDg4KSxnPXIoODkpLHY9cig5MCkuc2V0LHk9cig5MikoKSxiPXIoOTMpLHc9cig5NCksaz1yKDk1KSxTPXIoOTYpLF89bC5UeXBlRXJyb3IseD1sLnByb2Nlc3MsQT14JiZ4LnZlcnNpb25zLEM9QSYmQS52OHx8IiIsUD1sLlByb21pc2UsRT0icHJvY2VzcyI9PXUoeCksVD1mdW5jdGlvbigpe30sUj1hPWIuZixPPSEhZnVuY3Rpb24oKXt0cnl7dmFyIGU9UC5yZXNvbHZlKDEpLHQ9KGUuY29uc3RydWN0b3I9e30pW3IoMzApKCJzcGVjaWVzIildPWZ1bmN0aW9uKGUpe2UoVCxUKX07cmV0dXJuKEV8fCJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZlLnRoZW4oVClpbnN0YW5jZW9mIHQmJjAhPT1DLmluZGV4T2YoIjYuNiIpJiYtMT09PWsuaW5kZXhPZigiQ2hyb21lLzY2Iil9Y2F0Y2goZSl7fX0oKSxJPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWgoZSl8fCJmdW5jdGlvbiIhPXR5cGVvZih0PWUudGhlbikpJiZ0fSxGPWZ1bmN0aW9uKGUsdCl7aWYoIWUuX24pe2UuX249ITA7dmFyIHI9ZS5fYzt5KChmdW5jdGlvbigpe2Zvcih2YXIgbj1lLl92LGE9MT09ZS5fcyxpPTAsbz1mdW5jdGlvbih0KXt2YXIgcixpLG8scz1hP3Qub2s6dC5mYWlsLGw9dC5yZXNvbHZlLGM9dC5yZWplY3QsdT10LmRvbWFpbjt0cnl7cz8oYXx8KDI9PWUuX2gmJk0oZSksZS5faD0xKSwhMD09PXM/cj1uOih1JiZ1LmVudGVyKCkscj1zKG4pLHUmJih1LmV4aXQoKSxvPSEwKSkscj09PXQucHJvbWlzZT9jKF8oIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KGk9SShyKSk/aS5jYWxsKHIsbCxjKTpsKHIpKTpjKG4pfWNhdGNoKGUpe3UmJiFvJiZ1LmV4aXQoKSxjKGUpfX07ci5sZW5ndGg+aTspbyhyW2krK10pO2UuX2M9W10sZS5fbj0hMSx0JiYhZS5faCYmTChlKX0pKX19LEw9ZnVuY3Rpb24oZSl7di5jYWxsKGwsKGZ1bmN0aW9uKCl7dmFyIHQscixuLGE9ZS5fdixpPUQoZSk7aWYoaSYmKHQ9dygoZnVuY3Rpb24oKXtFP3guZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixhLGUpOihyPWwub251bmhhbmRsZWRyZWplY3Rpb24pP3Ioe3Byb21pc2U6ZSxyZWFzb246YX0pOihuPWwuY29uc29sZSkmJm4uZXJyb3ImJm4uZXJyb3IoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsYSl9KSksZS5faD1FfHxEKGUpPzI6MSksZS5fYT12b2lkIDAsaSYmdC5lKXRocm93IHQudn0pKX0sRD1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUuX2gmJjA9PT0oZS5fYXx8ZS5fYykubGVuZ3RofSxNPWZ1bmN0aW9uKGUpe3YuY2FsbChsLChmdW5jdGlvbigpe3ZhciB0O0U/eC5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIixlKToodD1sLm9ucmVqZWN0aW9uaGFuZGxlZCkmJnQoe3Byb21pc2U6ZSxyZWFzb246ZS5fdn0pfSkpfSxOPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5fZHx8KHQuX2Q9ITAsKHQ9dC5fd3x8dCkuX3Y9ZSx0Ll9zPTIsdC5fYXx8KHQuX2E9dC5fYy5zbGljZSgpKSxGKHQsITApKX0saj1mdW5jdGlvbiBlKHQpe3ZhciByLG49dGhpcztpZighbi5fZCl7bi5fZD0hMCxuPW4uX3d8fG47dHJ5e2lmKG49PT10KXRocm93IF8oIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7KHI9SSh0KSk/eSgoZnVuY3Rpb24oKXt2YXIgYT17X3c6bixfZDohMX07dHJ5e3IuY2FsbCh0LGMoZSxhLDEpLGMoTixhLDEpKX1jYXRjaChlKXtOLmNhbGwoYSxlKX19KSk6KG4uX3Y9dCxuLl9zPTEsRihuLCExKSl9Y2F0Y2goZSl7Ti5jYWxsKHtfdzpuLF9kOiExfSxlKX19fTtPfHwoUD1mdW5jdGlvbihlKXtwKHRoaXMsUCwiUHJvbWlzZSIsIl9oIiksZChlKSxuLmNhbGwodGhpcyk7dHJ5e2UoYyhqLHRoaXMsMSksYyhOLHRoaXMsMSkpfWNhdGNoKGUpe04uY2FsbCh0aGlzLGUpfX0sKG49ZnVuY3Rpb24oZSl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0pLnByb3RvdHlwZT1yKDk3KShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciByPVIoZyh0aGlzLFApKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsci5kb21haW49RT94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZGKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksaT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1jKGosZSwxKSx0aGlzLnJlamVjdD1jKE4sZSwxKX0sYi5mPVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1QfHxlPT09bz9uZXcgaShlKTphKGUpfSksZihmLkcrZi5XK2YuRiohTyx7UHJvbWlzZTpQfSkscig1OSkoUCwiUHJvbWlzZSIpLHIoOTgpKCJQcm9taXNlIiksbz1yKDkpLlByb21pc2UsZihmLlMrZi5GKiFPLCJQcm9taXNlIix7cmVqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PVIodGhpcyk7cmV0dXJuKDAsdC5yZWplY3QpKGUpLHQucHJvbWlzZX19KSxmKGYuUytmLkYqKHN8fCFPKSwiUHJvbWlzZSIse3Jlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFMocyYmdGhpcz09PW8/UDp0aGlzLGUpfX0pLGYoZi5TK2YuRiohKE8mJnIoNjgpKChmdW5jdGlvbihlKXtQLmFsbChlKS5jYXRjaChUKX0pKSksIlByb21pc2UiLHthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPVIodCksbj1yLnJlc29sdmUsYT1yLnJlamVjdCxpPXcoKGZ1bmN0aW9uKCl7dmFyIHI9W10saT0wLG89MTttKGUsITEsKGZ1bmN0aW9uKGUpe3ZhciBzPWkrKyxsPSExO3IucHVzaCh2b2lkIDApLG8rKyx0LnJlc29sdmUoZSkudGhlbigoZnVuY3Rpb24oZSl7bHx8KGw9ITAscltzXT1lLC0tb3x8bihyKSl9KSxhKX0pKSwtLW98fG4ocil9KSk7cmV0dXJuIGkuZSYmYShpLnYpLHIucHJvbWlzZX0scmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9Uih0KSxuPXIucmVqZWN0LGE9dygoZnVuY3Rpb24oKXttKGUsITEsKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKS50aGVuKHIucmVzb2x2ZSxuKX0pKX0pKTtyZXR1cm4gYS5lJiZuKGEudiksci5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09biYmbiBpbiBlKXRocm93IFR5cGVFcnJvcihyKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNjMpLGk9cig2NCksbz1yKDEyKSxzPXIoMjUpLGw9cig2NiksYz17fSx1PXt9LGY9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGYsaCl7dmFyIGQscCxtLGcsdj1oP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OmwoZSkseT1uKHIsZix0PzI6MSksYj0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2KXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKGkodikpe2ZvcihkPXMoZS5sZW5ndGgpO2Q+YjtiKyspaWYoKGc9dD95KG8ocD1lW2JdKVswXSxwWzFdKTp5KGVbYl0pKT09PWN8fGc9PT11KXJldHVybiBnfWVsc2UgZm9yKG09di5jYWxsKGUpOyEocD1tLm5leHQoKSkuZG9uZTspaWYoKGc9YShtLHkscC52YWx1ZSx0KSk9PT1jfHxnPT09dSlyZXR1cm4gZ307Zi5CUkVBSz1jLGYuUkVUVVJOPXV9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMzApKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbz1uKGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1vfHxudWxsPT0ocj1uKG8pW2ldKT90OmEocil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvPXIoMjMpLHM9cig5MSksbD1yKDU4KSxjPXIoMTcpLHU9cig4KSxmPXUucHJvY2VzcyxoPXUuc2V0SW1tZWRpYXRlLGQ9dS5jbGVhckltbWVkaWF0ZSxwPXUuTWVzc2FnZUNoYW5uZWwsbT11LkRpc3BhdGNoLGc9MCx2PXt9LHk9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7eS5jYWxsKGUuZGF0YSl9O2gmJmR8fChoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXtzKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LG4oZyksZ30sZD1mdW5jdGlvbihlKXtkZWxldGUgdltlXX0sInByb2Nlc3MiPT1yKDI5KShmKT9uPWZ1bmN0aW9uKGUpe2YubmV4dFRpY2sobyh5LGUsMSkpfTptJiZtLm5vdz9uPWZ1bmN0aW9uKGUpe20ubm93KG8oeSxlLDEpKX06cD8oaT0oYT1uZXcgcCkucG9ydDIsYS5wb3J0MS5vbm1lc3NhZ2U9YixuPW8oaS5wb3N0TWVzc2FnZSxpLDEpKTp1LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXUuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXt1LnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sdS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGMoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQoYygic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcykseS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChvKHksZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmgsY2xlYXI6ZH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP2UoKTplLmNhbGwocik7Y2FzZSAxOnJldHVybiBuP2UodFswXSk6ZS5jYWxsKHIsdFswXSk7Y2FzZSAyOnJldHVybiBuP2UodFswXSx0WzFdKTplLmNhbGwocix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwocix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKHIsdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGUuYXBwbHkocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOTApLnNldCxpPW4uTXV0YXRpb25PYnNlcnZlcnx8bi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG89bi5wcm9jZXNzLHM9bi5Qcm9taXNlLGw9InByb2Nlc3MiPT1yKDI5KShvKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsYz1mdW5jdGlvbigpe3ZhciBuLGE7Zm9yKGwmJihuPW8uZG9tYWluKSYmbi5leGl0KCk7ZTspe2E9ZS5mbixlPWUubmV4dDt0cnl7YSgpfWNhdGNoKG4pe3Rocm93IGU/cigpOnQ9dm9pZCAwLG59fXQ9dm9pZCAwLG4mJm4uZW50ZXIoKX07aWYobClyPWZ1bmN0aW9uKCl7by5uZXh0VGljayhjKX07ZWxzZSBpZighaXx8bi5uYXZpZ2F0b3ImJm4ubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYocyYmcy5yZXNvbHZlKXt2YXIgdT1zLnJlc29sdmUodm9pZCAwKTtyPWZ1bmN0aW9uKCl7dS50aGVuKGMpfX1lbHNlIHI9ZnVuY3Rpb24oKXthLmNhbGwobixjKX07ZWxzZXt2YXIgZj0hMCxoPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgaShjKS5vYnNlcnZlKGgse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7aC5kYXRhPWY9IWZ9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgYT17Zm46bixuZXh0OnZvaWQgMH07dCYmKHQubmV4dD1hKSxlfHwoZT1hLHIoKSksdD1hfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCk7ZnVuY3Rpb24gYShlKXt2YXIgdCxyO3RoaXMucHJvbWlzZT1uZXcgZSgoZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1yKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWUscj1ufSkpLHRoaXMucmVzb2x2ZT1uKHQpLHRoaXMucmVqZWN0PW4ocil9ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhKGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlOiExLHY6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZTohMCx2OmV9fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KS5uYXZpZ2F0b3I7ZS5leHBvcnRzPW4mJm4udXNlckFnZW50fHwiIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMTMpLGk9cig5Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobihlKSxhKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgcj1pLmYoZSk7cmV0dXJuKDAsci5yZXNvbHZlKSh0KSxyLnByb21pc2V9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoMTEpLGk9cigxNSksbz1yKDMwKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uW2VdO2kmJnQmJiF0W29dJiZhLmYodCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDkpLGk9cig4KSxvPXIoODkpLHM9cig5Nik7bihuLlArbi5SLCJQcm9taXNlIix7ZmluYWxseTpmdW5jdGlvbihlKXt2YXIgdD1vKHRoaXMsYS5Qcm9taXNlfHxpLlByb21pc2UpLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU7cmV0dXJuIHRoaXMudGhlbihyP2Z1bmN0aW9uKHIpe3JldHVybiBzKHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiByfSkpfTplLHI/ZnVuY3Rpb24ocil7cmV0dXJuIHModCxlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06ZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KSxhPXIoOTMpLGk9cig5NCk7bihuLlMsIlByb21pc2UiLHt0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9YS5mKHRoaXMpLHI9aShlKTtyZXR1cm4oci5lP3QucmVqZWN0OnQucmVzb2x2ZSkoci52KSx0LnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig4Mikscig4MykscigxMDIpLHIoMTE0KSxyKDExNiksZS5leHBvcnRzPXIoOSkuV2Vha01hcH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXIoMTAzKSgwKSxpPXIoMjApLG89cigxMDcpLHM9cig3MSksbD1yKDEwOCksYz1yKDEzKSx1PXIoMTYpLGY9cigxMDkpLGg9by5nZXRXZWFrLGQ9T2JqZWN0LmlzRXh0ZW5zaWJsZSxwPWwudWZzdG9yZSxtPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXtnZXQ6ZnVuY3Rpb24oZSl7aWYoYyhlKSl7dmFyIHQ9aChlKTtyZXR1cm4hMD09PXQ/cChmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LHk9ZS5leHBvcnRzPXIoMTEwKSgiV2Vha01hcCIsZyx2LGwsITAsITApO3UoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgeSkuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKG0pLDcpLmdldChtKX0pKSYmKHMoKG49bC5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx2KSxvLk5FRUQ9ITAsYShbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLChmdW5jdGlvbihlKXt2YXIgdD15LnByb3RvdHlwZSxyPXRbZV07aSh0LGUsKGZ1bmN0aW9uKHQsYSl7aWYoYyh0KSYmIWQodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBuKTt2YXIgaT10aGlzLl9mW2VdKHQsYSk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiByLmNhbGwodGhpcyx0LGEpfSkpfSkpKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNDMpLGk9cig2MSksbz1yKDI1KSxzPXIoMTA0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xPT1lLGw9Mj09ZSxjPTM9PWUsdT00PT1lLGY9Nj09ZSxoPTU9PWV8fGYsZD10fHxzO3JldHVybiBmdW5jdGlvbih0LHMscCl7Zm9yKHZhciBtLGcsdj1pKHQpLHk9YSh2KSxiPW4ocyxwLDMpLHc9byh5Lmxlbmd0aCksaz0wLFM9cj9kKHQsdyk6bD9kKHQsMCk6dm9pZCAwO3c+aztrKyspaWYoKGh8fGsgaW4geSkmJihnPWIobT15W2tdLGssdiksZSkpaWYocilTW2tdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBtO2Nhc2UgNjpyZXR1cm4gaztjYXNlIDI6Uy5wdXNoKG0pfWVsc2UgaWYodSlyZXR1cm4hMTtyZXR1cm4gZj8tMTpjfHx1P3U6U319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTA1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KG4oZSkpKHQpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTA2KSxpPXIoMzApKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIWEodC5wcm90b3R5cGUpfHwodD12b2lkIDApLG4odCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI5KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09bihlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMjIpKCJtZXRhIiksaT1yKDEzKSxvPXIoMjEpLHM9cigxMSkuZixsPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFyKDE2KSgoZnVuY3Rpb24oKXtyZXR1cm4gYyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSxmPWZ1bmN0aW9uKGUpe3MoZSxhLHt2YWx1ZTp7aToiTyIrICsrbCx3Ont9fX0pfSxoPWUuZXhwb3J0cz17S0VZOmEsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpcmV0dXJuInN5bWJvbCI9PW4oZSk/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIW8oZSxhKSl7aWYoIWMoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtmKGUpfXJldHVybiBlW2FdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighbyhlLGEpKXtpZighYyhlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtmKGUpfXJldHVybiBlW2FdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiB1JiZoLk5FRUQmJmMoZSkmJiFvKGUsYSkmJmYoZSksZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOTcpLGE9cigxMDcpLmdldFdlYWssaT1yKDEyKSxvPXIoMTMpLHM9cig4NyksbD1yKDg4KSxjPXIoMTAzKSx1PXIoMjEpLGY9cigxMDkpLGg9Yyg1KSxkPWMoNikscD0wLG09ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2x8fChlLl9sPW5ldyBnKX0sZz1mdW5jdGlvbigpe3RoaXMuYT1bXX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiBoKGUuYSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXYodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF2KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciByPXYodGhpcyxlKTtyP3JbMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1kKHRoaXMuYSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LGUuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIGM9ZSgoZnVuY3Rpb24oZSxuKXtzKGUsYyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXArKyxlLl9sPXZvaWQgMCxudWxsIT1uJiZsKG4scixlW2ldLGUpfSkpO3JldHVybiBuKGMucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oZSl7aWYoIW8oZSkpcmV0dXJuITE7dmFyIHI9YShlKTtyZXR1cm4hMD09PXI/bShmKHRoaXMsdCkpLmRlbGV0ZShlKTpyJiZ1KHIsdGhpcy5faSkmJmRlbGV0ZSByW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oZSl7aWYoIW8oZSkpcmV0dXJuITE7dmFyIHI9YShlKTtyZXR1cm4hMD09PXI/bShmKHRoaXMsdCkpLmhhcyhlKTpyJiZ1KHIsdGhpcy5faSl9fSksY30sZGVmOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hKGkodCksITApO3JldHVybiEwPT09bj9tKGUpLnNldCh0LHIpOm5bZS5faV09cixlfSx1ZnN0b3JlOm19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFuKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOCksYT1yKDcpLGk9cigyMCksbz1yKDk3KSxzPXIoMTA3KSxsPXIoODgpLGM9cig4NyksdT1yKDEzKSxmPXIoMTYpLGg9cig2OCksZD1yKDU5KSxwPXIoMTExKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbSxnLHYpe3ZhciB5PW5bZV0sYj15LHc9Zz8ic2V0IjoiYWRkIixrPWImJmIucHJvdG90eXBlLFM9e30sXz1mdW5jdGlvbihlKXt2YXIgdD1rW2VdO2koayxlLCJkZWxldGUiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEodiYmIXUoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHYmJiF1KGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImdldCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHYmJiF1KGUpP3ZvaWQgMDp0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplKSx0aGlzfTpmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmKHZ8fGsuZm9yRWFjaCYmIWYoKGZ1bmN0aW9uKCl7KG5ldyBiKS5lbnRyaWVzKCkubmV4dCgpfSkpKSl7dmFyIHg9bmV3IGIsQT14W3ddKHY/e306LTAsMSkhPXgsQz1mKChmdW5jdGlvbigpe3guaGFzKDEpfSkpLFA9aCgoZnVuY3Rpb24oZSl7bmV3IGIoZSl9KSksRT0hdiYmZigoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IGIsdD01O3QtLTspZVt3XSh0LHQpO3JldHVybiFlLmhhcygtMCl9KSk7UHx8KChiPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGIsZSk7dmFyIG49cChuZXcgeSx0LGIpO3JldHVybiBudWxsIT1yJiZsKHIsZyxuW3ddLG4pLG59KSkpLnByb3RvdHlwZT1rLGsuY29uc3RydWN0b3I9YiksKEN8fEUpJiYoXygiZGVsZXRlIiksXygiaGFzIiksZyYmXygiZ2V0IikpLChFfHxBKSYmXyh3KSx2JiZrLmNsZWFyJiZkZWxldGUgay5jbGVhcn1lbHNlIGI9bS5nZXRDb25zdHJ1Y3Rvcih0LGUsZyx3KSxvKGIucHJvdG90eXBlLHIpLHMuTkVFRD0hMDtyZXR1cm4gZChiLGUpLFNbZV09YixhKGEuRythLlcrYS5GKihiIT15KSxTKSx2fHxtLnNldFN0cm9uZyhiLGUsZyksYn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDExMikuc2V0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGksbz10LmNvbnN0cnVjdG9yO3JldHVybiBvIT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIG8mJihpPW8ucHJvdG90eXBlKSE9PXIucHJvdG90eXBlJiZuKGkpJiZhJiZhKGUsaSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDEyKSxpPWZ1bmN0aW9uKGUsdCl7aWYoYShlKSwhbih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxuKXt0cnl7KG49cigyMykoRnVuY3Rpb24uY2FsbCxyKDExMykuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGkoZSxyKSx0P2UuX19wcm90b19fPXI6bihlLHIpLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazppfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDczKSxhPXIoMTkpLGk9cig0Miksbz1yKDE4KSxzPXIoMjEpLGw9cigxNCksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1yKDE1KT9jOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9byh0LCEwKSxsKXRyeXtyZXR1cm4gYyhlLHQpfWNhdGNoKGUpe31pZihzKGUsdCkpcmV0dXJuIGEoIW4uZi5jYWxsKGUsdCksZVt0XSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTE1KSgiV2Vha01hcCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSk7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbmV3IHRoaXModCl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTE3KSgiV2Vha01hcCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI0KSxpPXIoMjMpLG89cig4OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQscixuLHMsbD1hcmd1bWVudHNbMV07cmV0dXJuIGEodGhpcyksKHQ9dm9pZCAwIT09bCkmJmEobCksbnVsbD09ZT9uZXcgdGhpczoocj1bXSx0PyhuPTAscz1pKGwsYXJndW1lbnRzWzJdLDIpLG8oZSwhMSwoZnVuY3Rpb24oZSl7ci5wdXNoKHMoZSxuKyspKX0pKSk6byhlLCExLHIucHVzaCxyKSxuZXcgdGhpcyhyKSl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODIpLHIoODMpLHIoMTE5KSxyKDEyMCkscigxMjEpLGUuZXhwb3J0cz1yKDkpLldlYWtTZXR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMDgpLGE9cigxMDkpO3IoMTEwKSgiV2Vha1NldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZGVmKGEodGhpcywiV2Vha1NldCIpLGUsITApfX0sbiwhMSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMTUpKCJXZWFrU2V0Iil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMTcpKCJXZWFrU2V0Iil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMjMpLGUuZXhwb3J0cz1yKDkpLlN0cmluZy5jb2RlUG9pbnRBdH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cig0OCkoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI1KSxlLmV4cG9ydHM9cig5KS5TdHJpbmcuZnJvbUNvZGVQb2ludH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cig0NCksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLG89U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIW8mJjEhPW8ubGVuZ3RoKSwiU3RyaW5nIix7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbihlKXtmb3IodmFyIHQscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGgsbz0wO24+bzspe2lmKHQ9K2FyZ3VtZW50c1tvKytdLGEodCwxMTE0MTExKSE9PXQpdGhyb3cgUmFuZ2VFcnJvcih0KyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO3IucHVzaCh0PDY1NTM2P2kodCk6aSg1NTI5NisoKHQtPTY1NTM2KT4+MTApLHQlMTAyNCs1NjMyMCkpfXJldHVybiByLmpvaW4oIiIpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI3KSxyKDgyKSxlLmV4cG9ydHM9cig5KS5TeW1ib2x9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoOCksaT1yKDIxKSxvPXIoMTUpLHM9cig3KSxsPXIoMjApLGM9cigxMDcpLktFWSx1PXIoMTYpLGY9cigzMSksaD1yKDU5KSxkPXIoMjIpLHA9cigzMCksbT1yKDEyOCksZz1yKDEyOSksdj1yKDEzMCkseT1yKDEwNiksYj1yKDEyKSx3PXIoMTMpLGs9cig0MiksUz1yKDE4KSxfPXIoMTkpLHg9cig1MiksQT1yKDEzMSksQz1yKDExMyksUD1yKDExKSxFPXIoNTQpLFQ9Qy5mLFI9UC5mLE89QS5mLEk9YS5TeW1ib2wsRj1hLkpTT04sTD1GJiZGLnN0cmluZ2lmeSxEPXAoIl9oaWRkZW4iKSxNPXAoInRvUHJpbWl0aXZlIiksTj17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqPWYoInN5bWJvbC1yZWdpc3RyeSIpLEI9Zigic3ltYm9scyIpLFU9Zigib3Atc3ltYm9scyIpLHE9T2JqZWN0LnByb3RvdHlwZSx6PSJmdW5jdGlvbiI9PXR5cGVvZiBJLFc9YS5RT2JqZWN0LEg9IVd8fCFXLnByb3RvdHlwZXx8IVcucHJvdG90eXBlLmZpbmRDaGlsZCxHPW8mJnUoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPXgoUih7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbihlLHQscil7dmFyIG49VChxLHQpO24mJmRlbGV0ZSBxW3RdLFIoZSx0LHIpLG4mJmUhPT1xJiZSKHEsdCxuKX06UixWPWZ1bmN0aW9uKGUpe3ZhciB0PUJbZV09eChJLnByb3RvdHlwZSk7cmV0dXJuIHQuX2s9ZSx0fSxYPXomJiJzeW1ib2wiPT1uKEkuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT1uKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEl9LFk9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPT09cSYmWShVLHQsciksYihlKSx0PVModCwhMCksYihyKSxpKEIsdCk/KHIuZW51bWVyYWJsZT8oaShlLEQpJiZlW0RdW3RdJiYoZVtEXVt0XT0hMSkscj14KHIse2VudW1lcmFibGU6XygwLCExKX0pKTooaShlLEQpfHxSKGUsRCxfKDEse30pKSxlW0RdW3RdPSEwKSxHKGUsdCxyKSk6UihlLHQscil9LEs9ZnVuY3Rpb24oZSx0KXtiKGUpO2Zvcih2YXIgcixuPXYodD1rKHQpKSxhPTAsaT1uLmxlbmd0aDtpPmE7KVkoZSxyPW5bYSsrXSx0W3JdKTtyZXR1cm4gZX0sSj1mdW5jdGlvbihlKXt2YXIgdD1OLmNhbGwodGhpcyxlPVMoZSwhMCkpO3JldHVybiEodGhpcz09PXEmJmkoQixlKSYmIWkoVSxlKSkmJighKHR8fCFpKHRoaXMsZSl8fCFpKEIsZSl8fGkodGhpcyxEKSYmdGhpc1tEXVtlXSl8fHQpfSxRPWZ1bmN0aW9uKGUsdCl7aWYoZT1rKGUpLHQ9Uyh0LCEwKSxlIT09cXx8IWkoQix0KXx8aShVLHQpKXt2YXIgcj1UKGUsdCk7cmV0dXJuIXJ8fCFpKEIsdCl8fGkoZSxEKSYmZVtEXVt0XXx8KHIuZW51bWVyYWJsZT0hMCkscn19LFo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9TyhrKGUpKSxuPVtdLGE9MDtyLmxlbmd0aD5hOylpKEIsdD1yW2ErK10pfHx0PT1EfHx0PT1jfHxuLnB1c2godCk7cmV0dXJuIG59LCQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9ZT09PXEsbj1PKHI/VTprKGUpKSxhPVtdLG89MDtuLmxlbmd0aD5vOykhaShCLHQ9bltvKytdKXx8ciYmIWkocSx0KXx8YS5wdXNoKEJbdF0pO3JldHVybiBhfTt6fHwobCgoST1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBJKXRocm93IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yISIpO3ZhciBlPWQoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLHQ9ZnVuY3Rpb24gdChyKXt0aGlzPT09cSYmdC5jYWxsKFUsciksaSh0aGlzLEQpJiZpKHRoaXNbRF0sZSkmJih0aGlzW0RdW2VdPSExKSxHKHRoaXMsZSxfKDEscikpfTtyZXR1cm4gbyYmSCYmRyhxLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6dH0pLFYoZSl9KS5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pKSxDLmY9USxQLmY9WSxyKDEzMikuZj1BLmY9WixyKDczKS5mPUoscig3MikuZj0kLG8mJiFyKDMyKSYmbChxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsSiwhMCksbS5mPWZ1bmN0aW9uKGUpe3JldHVybiBWKHAoZSkpfSkscyhzLkcrcy5XK3MuRioheix7U3ltYm9sOkl9KTtmb3IodmFyIGVlPSJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcyIuc3BsaXQoIiwiKSx0ZT0wO2VlLmxlbmd0aD50ZTspcChlZVt0ZSsrXSk7Zm9yKHZhciByZT1FKHAuc3RvcmUpLG5lPTA7cmUubGVuZ3RoPm5lOylnKHJlW25lKytdKTtzKHMuUytzLkYqIXosIlN5bWJvbCIse2ZvcjpmdW5jdGlvbihlKXtyZXR1cm4gaShqLGUrPSIiKT9qW2VdOmpbZV09SShlKX0sa2V5Rm9yOmZ1bmN0aW9uKGUpe2lmKCFYKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgdCBpbiBqKWlmKGpbdF09PT1lKXJldHVybiB0fSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtIPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtIPSExfX0pLHMocy5TK3MuRioheiwiT2JqZWN0Iix7Y3JlYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/eChlKTpLKHgoZSksdCl9LGRlZmluZVByb3BlcnR5OlksZGVmaW5lUHJvcGVydGllczpLLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpRLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6JH0pLEYmJnMocy5TK3MuRiooIXp8fHUoKGZ1bmN0aW9uKCl7dmFyIGU9SSgpO3JldHVybiJbbnVsbF0iIT1MKFtlXSl8fCJ7fSIhPUwoe2E6ZX0pfHwie30iIT1MKE9iamVjdChlKSl9KSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49W2VdLGE9MTthcmd1bWVudHMubGVuZ3RoPmE7KW4ucHVzaChhcmd1bWVudHNbYSsrXSk7aWYocj10PW5bMV0sKHcodCl8fHZvaWQgMCE9PWUpJiYhWChlKSlyZXR1cm4geSh0KXx8KHQ9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgciYmKHQ9ci5jYWxsKHRoaXMsZSx0KSksIVgodCkpcmV0dXJuIHR9KSxuWzFdPXQsTC5hcHBseShGLG4pfX0pLEkucHJvdG90eXBlW01dfHxyKDEwKShJLnByb3RvdHlwZSxNLEkucHJvdG90eXBlLnZhbHVlT2YpLGgoSSwiU3ltYm9sIiksaChNYXRoLCJNYXRoIiwhMCksaChhLkpTT04sIkpTT04iLCEwKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9cigzMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOSksaT1yKDMyKSxvPXIoMTI4KSxzPXIoMTEpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEuU3ltYm9sfHwoYS5TeW1ib2w9aT97fTpuLlN5bWJvbHx8e30pOyJfIj09ZS5jaGFyQXQoMCl8fGUgaW4gdHx8cyh0LGUse3ZhbHVlOm8uZihlKX0pfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDU0KSxhPXIoNzIpLGk9cig3Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSkscj1hLmY7aWYocilmb3IodmFyIG8scz1yKGUpLGw9aS5mLGM9MDtzLmxlbmd0aD5jOylsLmNhbGwoZSxvPXNbYysrXSkmJnQucHVzaChvKTtyZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoNDIpLGk9cigxMzIpLmYsbz17fS50b1N0cmluZyxzPSJvYmplY3QiPT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6bih3aW5kb3cpKSYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBzJiYiW29iamVjdCBXaW5kb3ddIj09by5jYWxsKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gaShlKX1jYXRjaChlKXtyZXR1cm4gcy5zbGljZSgpfX0oZSk6aShhKGUpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDU3KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMzQpLGUuZXhwb3J0cz1yKDkpLlN0cmluZy5wYWRTdGFydH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigxMzUpLGk9cig5NSk7bihuLlArbi5GKi9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8gU2FmYXJpXC8vLnRlc3QoaSksIlN0cmluZyIse3BhZFN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwhMCl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNSksYT1yKDEzNiksaT1yKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyl7dmFyIHM9U3RyaW5nKGkoZSkpLGw9cy5sZW5ndGgsYz12b2lkIDA9PT1yPyIgIjpTdHJpbmcociksdT1uKHQpO2lmKHU8PWx8fCIiPT1jKXJldHVybiBzO3ZhciBmPXUtbCxoPWEuY2FsbChjLE1hdGguY2VpbChmL2MubGVuZ3RoKSk7cmV0dXJuIGgubGVuZ3RoPmYmJihoPWguc2xpY2UoMCxmKSksbz9oK3M6cytofX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPXIoMzMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1TdHJpbmcoYSh0aGlzKSkscj0iIixpPW4oZSk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHQrPXQpKTEmaSYmKHIrPXQpO3JldHVybiByfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDEzOCksZS5leHBvcnRzPXIoOSkuU3RyaW5nLnBhZEVuZH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigxMzUpLGk9cig5NSk7bihuLlArbi5GKi9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8gU2FmYXJpXC8vLnRlc3QoaSksIlN0cmluZyIse3BhZEVuZDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITEpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTQwKSxlLmV4cG9ydHM9cig5KS5PYmplY3QudmFsdWVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDE0MSkoITEpO24obi5TLCJPYmplY3QiLHt2YWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NCksYT1yKDQyKSxpPXIoNzMpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHIsbz1hKHQpLHM9bihvKSxsPXMubGVuZ3RoLGM9MCx1PVtdO2w+YzspaS5jYWxsKG8scj1zW2MrK10pJiZ1LnB1c2goZT9bcixvW3JdXTpvW3JdKTtyZXR1cm4gdX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pdHJ5e25ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfX0pLG49ITB9Y2F0Y2goZSl7fXQuUmVhZGFibGVTdHJlYW09bj9SZWFkYWJsZVN0cmVhbTpyKDE0MykuUmVhZGFibGVTdHJlYW19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTcpfShbZnVuY3Rpb24oZSx0LHIpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09bihTeW1ib2wuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6bihlKX0saT1yKDEpLmFzc2VydDtmdW5jdGlvbiBvKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8InN5bWJvbCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKX1mdW5jdGlvbiBzKGUsdCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9dC50eXBlSXNPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfSx0LmNyZWF0ZURhdGFQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7aSh0LnR5cGVJc09iamVjdChlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7dmFsdWU6bix3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfSx0LmNyZWF0ZUFycmF5RnJvbUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5BcnJheUJ1ZmZlckNvcHk9ZnVuY3Rpb24oZSx0LHIsbixhKXtuZXcgVWludDhBcnJheShlKS5zZXQobmV3IFVpbnQ4QXJyYXkocixuLGEpLHQpfSx0LkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3Q9ZnVuY3Rpb24oZSx0KXtpKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkociwidmFsdWUiLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRvbmUiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn0sdC5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiEoTnVtYmVyLmlzTmFOKGUpfHxlPT09MS8wfHxlPDApfSx0Lkludm9rZU9yTm9vcD1mdW5jdGlvbihlLHQscil7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSk7dmFyIG49ZVt0XTtpZih2b2lkIDAhPT1uKXJldHVybiBzKG4sZSxyKX0sdC5Qcm9taXNlSW52b2tlT3JOb29wPWZ1bmN0aW9uKGUscixuKXtpKHZvaWQgMCE9PWUpLGkobyhyKSksaShBcnJheS5pc0FycmF5KG4pKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0Lkludm9rZU9yTm9vcChlLHIsbikpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19LHQuUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSksaShBcnJheS5pc0FycmF5KGEpKTt2YXIgbD12b2lkIDA7dHJ5e2w9ZVt0XX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9aWYodm9pZCAwPT09bClyZXR1cm4gbi5hcHBseShudWxsLGEpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobCxlLHIpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSx0LlRyYW5zZmVyQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7aWYoZT1OdW1iZXIoZSksTnVtYmVyLmlzTmFOKGUpfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImhpZ2hXYXRlck1hcmsgcHJvcGVydHkgb2YgYSBxdWV1aW5nIHN0cmF0ZWd5IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub24tTmFOIik7cmV0dXJuIGV9LHQuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3k9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm57c2l6ZTplLGhpZ2hXYXRlck1hcms6cj10LlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhyKX19fSxmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLm1lc3NhZ2U9ZXx8IiIsdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9e3JldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjpmdW5jdGlvbihlKXtlJiZlLmNvbnN0cnVjdG9yPT09biYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9LEFzc2VydGlvbkVycm9yOm4sYXNzZXJ0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IG4odCl9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5JbnZva2VPck5vb3Ascz1pLlByb21pc2VJbnZva2VPck5vb3AsbD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LGM9aS50eXBlSXNPYmplY3QsdT1yKDEpLGY9dS5hc3NlcnQsaD11LnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixkPXIoMykscD1kLkRlcXVldWVWYWx1ZSxtPWQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsZz1kLlBlZWtRdWV1ZVZhbHVlLHY9ZC5SZXNldFF1ZXVlLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrLG89dm9pZCAwPT09aT8xOmk7YSh0aGlzLGUpLHRoaXMuX3N0YXRlPSJ3cml0YWJsZSIsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX3dyaXRlcj12b2lkIDAsdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyPXZvaWQgMCx0aGlzLl93cml0ZVJlcXVlc3RzPVtdLHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCx0aGlzLl9jbG9zZVJlcXVlc3Q9dm9pZCAwLHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCx0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCx0aGlzLl9iYWNrcHJlc3N1cmU9ITE7dmFyIHM9dC50eXBlO2lmKHZvaWQgMCE9PXMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGoodGhpcyx0LG4sbyksdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fc3RhcnRTdGVwcygpfXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PXcodGhpcyk/UHJvbWlzZS5yZWplY3QoSCgiYWJvcnQiKSk6ITA9PT1rKHRoaXMpP1Byb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhYm9ydCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyIikpOlModGhpcyxlKX19LHtrZXk6ImdldFdyaXRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXcodGhpcykpdGhyb3cgSCgiZ2V0V3JpdGVyIik7cmV0dXJuIGIodGhpcyl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09dyh0aGlzKSl0aHJvdyBIKCJsb2NrZWQiKTtyZXR1cm4gayh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBiKGUpe3JldHVybiBuZXcgTyhlKX1mdW5jdGlvbiB3KGUpe3JldHVybiEhYyhlKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGYoITA9PT13KGUpLCJJc1dyaXRhYmxlU3RyZWFtTG9ja2VkIHNob3VsZCBvbmx5IGJlIHVzZWQgb24ga25vd24gd3JpdGFibGUgc3RyZWFtcyIpLHZvaWQgMCE9PWUuX3dyaXRlcn1mdW5jdGlvbiBTKGUsdCl7dmFyIHI9ZS5fc3RhdGU7aWYoImNsb3NlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlc29sdmUodm9pZCAwKTtpZigiZXJyb3JlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlamVjdChlLl9zdG9yZWRFcnJvcik7dmFyIG49bmV3IFR5cGVFcnJvcigiUmVxdWVzdGVkIHRvIGFib3J0Iik7aWYodm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIsInN0YXRlIG11c3QgYmUgd3JpdGFibGUgb3IgZXJyb3JpbmciKTt2YXIgYT0hMTsiZXJyb3JpbmciPT09ciYmKGE9ITAsdD12b2lkIDApO3ZhciBpPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9e19yZXNvbHZlOnIsX3JlamVjdDpuLF9yZWFzb246dCxfd2FzQWxyZWFkeUVycm9yaW5nOmF9fSkpO3JldHVybiExPT09YSYmeChlLG4pLGl9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuX3N0YXRlOyJ3cml0YWJsZSIhPT1yPyhmKCJlcnJvcmluZyI9PT1yKSxBKGUpKTp4KGUsdCl9ZnVuY3Rpb24geChlLHQpe2Yodm9pZCAwPT09ZS5fc3RvcmVkRXJyb3IsInN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCIpLGYoIndyaXRhYmxlIj09PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIik7dmFyIHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO2Yodm9pZCAwIT09ciwiY29udHJvbGxlciBtdXN0IG5vdCBiZSB1bmRlZmluZWQiKSxlLl9zdGF0ZT0iZXJyb3JpbmciLGUuX3N0b3JlZEVycm9yPXQ7dmFyIG49ZS5fd3JpdGVyO3ZvaWQgMCE9PW4mJkQobix0KSwhMT09PUUoZSkmJiEwPT09ci5fc3RhcnRlZCYmQShlKX1mdW5jdGlvbiBBKGUpe2YoImVycm9yaW5nIj09PWUuX3N0YXRlLCJzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZyIpLGYoITE9PT1FKGUpLCJXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlIiksZS5fc3RhdGU9ImVycm9yZWQiLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtmb3IodmFyIHQ9ZS5fc3RvcmVkRXJyb3Iscj0wO3I8ZS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7cisrKWUuX3dyaXRlUmVxdWVzdHNbcl0uX3JlamVjdCh0KTtpZihlLl93cml0ZVJlcXVlc3RzPVtdLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Qpe3ZhciBuPWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q7aWYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsITA9PT1uLl93YXNBbHJlYWR5RXJyb3JpbmcpcmV0dXJuIG4uX3JlamVjdCh0KSx2b2lkIFQoZSk7ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhuLl9yZWFzb24pLnRoZW4oKGZ1bmN0aW9uKCl7bi5fcmVzb2x2ZSgpLFQoZSl9KSwoZnVuY3Rpb24odCl7bi5fcmVqZWN0KHQpLFQoZSl9KSl9ZWxzZSBUKGUpfWZ1bmN0aW9uIEMoZSl7Zih2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3Jlc29sdmUodm9pZCAwKSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDA7dmFyIHQ9ZS5fc3RhdGU7Zigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLCJlcnJvcmluZyI9PT10JiYoZS5fc3RvcmVkRXJyb3I9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmZnVuY3Rpb24oZSl7Zih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0LCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxmKCJwZW5kaW5nIj09PWUuX2Nsb3NlZFByb21pc2VTdGF0ZSwid3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZyIpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icmVzb2x2ZWQifShyKSxmKHZvaWQgMD09PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QsInN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9zdG9yZWRFcnJvciwic3RyZWFtLl9zdG9yZWRFcnJvciA9PT0gdW5kZWZpbmVkIil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0fHx2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdH1mdW5jdGlvbiBFKGUpe3JldHVybiB2b2lkIDAhPT1lLl9pbkZsaWdodFdyaXRlUmVxdWVzdHx8dm9pZCAwIT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3R9ZnVuY3Rpb24gVChlKXtmKCJlcnJvcmVkIj09PWUuX3N0YXRlLCdfc3RyZWFtXy5bW3N0YXRlXV0gaXMgYCJlcnJvcmVkImAnKSx2b2lkIDAhPT1lLl9jbG9zZVJlcXVlc3QmJihmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9jbG9zZVJlcXVlc3QuX3JlamVjdChlLl9zdG9yZWRFcnJvciksZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMCk7dmFyIHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJihZKHQsZS5fc3RvcmVkRXJyb3IpLHQuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBSKGUsdCl7Zigid3JpdGFibGUiPT09ZS5fc3RhdGUpLGYoITE9PT1QKGUpKTt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmdCE9PWUuX2JhY2twcmVzc3VyZSYmKCEwPT09dD9mdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQiKSxmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2UuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXQsZS5fcmVhZHlQcm9taXNlX3JlamVjdD1yfSkpLGUuX3JlYWR5UHJvbWlzZVN0YXRlPSJwZW5kaW5nIn0ocik6KGYoITE9PT10KSxRKHIpKSksZS5fYmFja3ByZXNzdXJlPXR9ZS5leHBvcnRzPXtBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOmIsSXNXcml0YWJsZVN0cmVhbTp3LElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6ayxXcml0YWJsZVN0cmVhbTp5LFdyaXRhYmxlU3RyZWFtQWJvcnQ6UyxXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6VyxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT10KTt2YXIgcj10Ll9zdGF0ZTtyZXR1cm4hMD09PVAodCl8fCJjbG9zZWQiPT09cj9Qcm9taXNlLnJlc29sdmUoKToiZXJyb3JlZCI9PT1yP1Byb21pc2UucmVqZWN0KHQuX3N0b3JlZEVycm9yKTooZigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLEYoZSkpfSxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOk0sV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6TixXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodDpQfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1rKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlciIpO3RoaXMuX293bmVyV3JpdGFibGVTdHJlYW09dCx0Ll93cml0ZXI9dGhpczt2YXIgcixuPXQuX3N0YXRlO2lmKCJ3cml0YWJsZSI9PT1uKSExPT09UCh0KSYmITA9PT10Ll9iYWNrcHJlc3N1cmU/KChyPXRoaXMpLl9yZWFkeVByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7ci5fcmVhZHlQcm9taXNlX3Jlc29sdmU9ZSxyLl9yZWFkeVByb21pc2VfcmVqZWN0PXR9KSksci5fcmVhZHlQcm9taXNlU3RhdGU9InBlbmRpbmciKTpKKHRoaXMpLFgodGhpcyk7ZWxzZSBpZigiZXJyb3JpbmciPT09bilLKHRoaXMsdC5fc3RvcmVkRXJyb3IpLHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksWCh0aGlzKTtlbHNlIGlmKCJjbG9zZWQiPT09bilKKHRoaXMpLGZ1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZXNvbHZlZCJ9KHRoaXMpO2Vsc2V7ZigiZXJyb3JlZCI9PT1uLCJzdGF0ZSBtdXN0IGJlIGVycm9yZWQiKTt2YXIgaT10Ll9zdG9yZWRFcnJvcjtLKHRoaXMsaSksdGhpcy5fcmVhZHlQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxmdW5jdGlvbihlLHQpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZWplY3RlZCJ9KHRoaXMsaSksdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9fXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygiYWJvcnQiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChWKCJhYm9ydCIpKTpmdW5jdGlvbihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07cmV0dXJuIGYodm9pZCAwIT09ciksUyhyLHQpfSh0aGlzLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChHKCJjbG9zZSIpKTt2YXIgZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO3JldHVybiB2b2lkIDA9PT1lP1Byb21pc2UucmVqZWN0KFYoImNsb3NlIikpOiEwPT09UChlKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbSIpKTpGKHRoaXMpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXRocm93IEcoInJlbGVhc2VMb2NrIik7dmFyIGU9dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTt2b2lkIDAhPT1lJiYoZih2b2lkIDAhPT1lLl93cml0ZXIpLE0odGhpcykpfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09SSh0aGlzKT9Qcm9taXNlLnJlamVjdChHKCJ3cml0ZSIpKTp2b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KFYoIndyaXRlIHRvIikpOk4odGhpcyxlKX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITE9PT1JKHRoaXMpP1Byb21pc2UucmVqZWN0KEcoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX0se2tleToiZGVzaXJlZFNpemUiLGdldDpmdW5jdGlvbigpe2lmKCExPT09SSh0aGlzKSl0aHJvdyBHKCJkZXNpcmVkU2l6ZSIpO2lmKHZvaWQgMD09PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0pdGhyb3cgVigiZGVzaXJlZFNpemUiKTtyZXR1cm4gZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtLCJlcnJvcmVkIj09PSh0PWUuX3N0YXRlKXx8ImVycm9yaW5nIj09PXQ/bnVsbDoiY2xvc2VkIj09PXQ/MDpCKGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7dmFyIGUsdH19LHtrZXk6InJlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygicmVhZHkiKSk6dGhpcy5fcmVhZHlQcm9taXNlfX1dKSxlfSgpO2Z1bmN0aW9uIEkoZSl7cmV0dXJuISFjKGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfb3duZXJXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpO3ZhciByPXQuX3N0YXRlO2lmKCJjbG9zZWQiPT09cnx8ImVycm9yZWQiPT09cilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIityKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKSk7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLGYoITE9PT1QKHQpKTt2YXIgbixhPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXtfcmVzb2x2ZTplLF9yZWplY3Q6cn07dC5fY2xvc2VSZXF1ZXN0PW59KSk7cmV0dXJuITA9PT10Ll9iYWNrcHJlc3N1cmUmJiJ3cml0YWJsZSI9PT1yJiZRKGUpLG49dC5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLG0obiwiY2xvc2UiLDApLFUobiksYX1mdW5jdGlvbiBMKGUsdCl7InBlbmRpbmciPT09ZS5fY2xvc2VkUHJvbWlzZVN0YXRlP1koZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZigicGVuZGluZyIhPT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nIiksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiBEKGUsdCl7InBlbmRpbmciPT09ZS5fcmVhZHlQcm9taXNlU3RhdGU/ZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlX3JlamVjdCh0KSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fcmVhZHlQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCIpLGYodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9yZWFkeVByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfWZ1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpLGYodC5fd3JpdGVyPT09ZSk7dmFyIHI9bmV3IFR5cGVFcnJvcigiV3JpdGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKTtEKGUsciksTChlLHIpLHQuX3dyaXRlcj12b2lkIDAsZS5fb3duZXJXcml0YWJsZVN0cmVhbT12b2lkIDB9ZnVuY3Rpb24gTihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT1yKTt2YXIgbj1yLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsYT1mdW5jdGlvbihlLHQpe3ZhciByPWUuX3N0cmF0ZWd5U2l6ZTtpZih2b2lkIDA9PT1yKXJldHVybiAxO3RyeXtyZXR1cm4gcih0KX1jYXRjaCh0KXtyZXR1cm4gcShlLHQpLDF9fShuLHQpO2lmKHIhPT1lLl9vd25lcldyaXRhYmxlU3RyZWFtKXJldHVybiBQcm9taXNlLnJlamVjdChWKCJ3cml0ZSB0byIpKTt2YXIgaT1yLl9zdGF0ZTtpZigiZXJyb3JlZCI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7aWYoITA9PT1QKHIpfHwiY2xvc2VkIj09PWkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvIikpO2lmKCJlcnJvcmluZyI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7Zigid3JpdGFibGUiPT09aSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGYoITA9PT1rKGUpKSxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl93cml0ZVJlcXVlc3RzLnB1c2gobil9KSl9KHIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49e2NodW5rOnR9O3RyeXttKGUsbixyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBxKGUsdCl9dmFyIGE9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCExPT09UChhKSYmIndyaXRhYmxlIj09PWEuX3N0YXRlKXt2YXIgaT16KGUpO1IoYSxpKX1VKGUpfShuLHQsYSksb312YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTaW5rPXIsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCx2KHRoaXMpLHRoaXMuX3N0YXJ0ZWQ9ITE7dmFyIG89bChuLGkpO3RoaXMuX3N0cmF0ZWd5U2l6ZT1vLnNpemUsdGhpcy5fc3RyYXRlZ3lIV009by5oaWdoV2F0ZXJNYXJrLFIodCx6KHRoaXMpKX1yZXR1cm4gbihlLFt7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PSghIWModD10aGlzKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiX3VuZGVybHlpbmdTaW5rIikpKXRocm93IG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIik7dmFyIHQ7IndyaXRhYmxlIj09PXRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGUmJlcodGhpcyxlKX19LHtrZXk6Il9fYWJvcnRTdGVwcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5fdW5kZXJseWluZ1NpbmssImFib3J0IixbZV0pfX0se2tleToiX19lcnJvclN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3YodGhpcyl9fSx7a2V5OiJfX3N0YXJ0U3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW8odGhpcy5fdW5kZXJseWluZ1NpbmssInN0YXJ0IixbdGhpc10pLHI9dGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1Byb21pc2UucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbigpe2YoIndyaXRhYmxlIj09PXIuX3N0YXRlfHwiZXJyb3JpbmciPT09ci5fc3RhdGUpLGUuX3N0YXJ0ZWQ9ITAsVShlKX0pLChmdW5jdGlvbih0KXtmKCJ3cml0YWJsZSI9PT1yLl9zdGF0ZXx8ImVycm9yaW5nIj09PXIuX3N0YXRlKSxlLl9zdGFydGVkPSEwLF8ocix0KX0pKS5jYXRjaChoKX19XSksZX0oKTtmdW5jdGlvbiBCKGUpe3JldHVybiBlLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtpZighMSE9PWUuX3N0YXJ0ZWQmJnZvaWQgMD09PXQuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KXt2YXIgcj10Ll9zdGF0ZTtpZigiY2xvc2VkIiE9PXImJiJlcnJvcmVkIiE9PXIpaWYoImVycm9yaW5nIiE9PXIpe2lmKDAhPT1lLl9xdWV1ZS5sZW5ndGgpe3ZhciBuPWcoZSk7ImNsb3NlIj09PW4/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxmKHZvaWQgMCE9PWUuX2Nsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9ZS5fY2xvc2VSZXF1ZXN0LGUuX2Nsb3NlUmVxdWVzdD12b2lkIDB9KSh0KSxwKGUpLGYoMD09PWUuX3F1ZXVlLmxlbmd0aCwicXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQiKSxzKGUuX3VuZGVybHlpbmdTaW5rLCJjbG9zZSIsW10pLnRoZW4oKGZ1bmN0aW9uKCl7Qyh0KX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSx2b2lkIDAhPT1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0JiYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KHQpLGUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwKSxfKGUsdCl9KHQsZSl9KSkuY2F0Y2goaCl9KGUpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0LCJ0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCIpLGYoMCE9PWUuX3dyaXRlUmVxdWVzdHMubGVuZ3RoLCJ3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5IiksZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9ZS5fd3JpdGVSZXF1ZXN0cy5zaGlmdCgpfSkocikscyhlLl91bmRlcmx5aW5nU2luaywid3JpdGUiLFt0LGVdKS50aGVuKChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVzb2x2ZSh2b2lkIDApLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMH0ocik7dmFyIHQ9ci5fc3RhdGU7aWYoZigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLHAoZSksITE9PT1QKHIpJiYid3JpdGFibGUiPT09dCl7dmFyIG49eihlKTtSKHIsbil9VShlKX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSxfKGUsdCl9KHIsZSl9KSkuY2F0Y2goaCl9KGUsbi5jaHVuayl9fWVsc2UgQSh0KX19ZnVuY3Rpb24gcShlLHQpeyJ3cml0YWJsZSI9PT1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZXKGUsdCl9ZnVuY3Rpb24geihlKXtyZXR1cm4gQihlKTw9MH1mdW5jdGlvbiBXKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2YoIndyaXRhYmxlIj09PXIuX3N0YXRlKSx4KHIsdCl9ZnVuY3Rpb24gSChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHdyaXRlciIpfWZ1bmN0aW9uIFgoZSl7ZS5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD1yLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icGVuZGluZyJ9KSl9ZnVuY3Rpb24gWShlLHQpe2Yodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkIiksZih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZigicGVuZGluZyI9PT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmciKSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn1mdW5jdGlvbiBLKGUsdCl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0icmVqZWN0ZWQifWZ1bmN0aW9uIEooZSl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn1mdW5jdGlvbiBRKGUpe2Yodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCIpLGYodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDApLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYT1yKDEpLmFzc2VydDt0LkRlcXVldWVWYWx1ZT1mdW5jdGlvbihlKXthKCJfcXVldWUiaW4gZSYmIl9xdWV1ZVRvdGFsU2l6ZSJpbiBlLCJTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxhKGUuX3F1ZXVlLmxlbmd0aD4wLCJTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuIik7dmFyIHQ9ZS5fcXVldWUuc2hpZnQoKTtyZXR1cm4gZS5fcXVldWVUb3RhbFNpemUtPXQuc2l6ZSxlLl9xdWV1ZVRvdGFsU2l6ZTwwJiYoZS5fcXVldWVUb3RhbFNpemU9MCksdC52YWx1ZX0sdC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZT1mdW5jdGlvbihlLHQscil7aWYoYSgiX3F1ZXVlImluIGUmJiJfcXVldWVUb3RhbFNpemUiaW4gZSwiU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxyPU51bWJlcihyKSwhbihyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLiIpO2UuX3F1ZXVlLnB1c2goe3ZhbHVlOnQsc2l6ZTpyfSksZS5fcXVldWVUb3RhbFNpemUrPXJ9LHQuUGVla1F1ZXVlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uIiksYShlLl9xdWV1ZS5sZW5ndGg+MCwiU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4iKSxlLl9xdWV1ZVswXS52YWx1ZX0sdC5SZXNldFF1ZXVlPWZ1bmN0aW9uKGUpe2EoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxlLl9xdWV1ZT1bXSxlLl9xdWV1ZVRvdGFsU2l6ZT0wfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5BcnJheUJ1ZmZlckNvcHkscz1pLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsbD1pLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYz1pLkludm9rZU9yTm9vcCx1PWkuUHJvbWlzZUludm9rZU9yTm9vcCxmPWkuVHJhbnNmZXJBcnJheUJ1ZmZlcixoPWkuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksZD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayxwPXIoMCksbT1wLmNyZWF0ZUFycmF5RnJvbUxpc3QsZz1wLmNyZWF0ZURhdGFQcm9wZXJ0eSx2PXAudHlwZUlzT2JqZWN0LHk9cigxKSxiPXkuYXNzZXJ0LHc9eS5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24saz1yKDMpLFM9ay5EZXF1ZXVlVmFsdWUsXz1rLkVucXVldWVWYWx1ZVdpdGhTaXplLHg9ay5SZXNldFF1ZXVlLEE9cigyKSxDPUEuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixQPUEuSXNXcml0YWJsZVN0cmVhbSxFPUEuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxUPUEuV3JpdGFibGVTdHJlYW1BYm9ydCxSPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixPPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxJPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUsRj1BLldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrO2EodGhpcyxlKSx0aGlzLl9zdGF0ZT0icmVhZGFibGUiLHRoaXMuX3JlYWRlcj12b2lkIDAsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX2Rpc3R1cmJlZD0hMSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwO3ZhciBvPXQudHlwZSxzPVN0cmluZyhvKTtpZigiYnl0ZXMiPT09cyl2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGRlKHRoaXMsdCxpKTtlbHNle2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt2b2lkIDA9PT1pJiYoaT0xKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGFlKHRoaXMsdCxuLGkpfX1yZXR1cm4gbihlLFt7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09Tih0aGlzKT9Qcm9taXNlLnJlamVjdChSZSgiY2FuY2VsIikpOiEwPT09aih0aGlzKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXIiKSk6eih0aGlzLGUpfX0se2tleToiZ2V0UmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubW9kZTtpZighMT09PU4odGhpcykpdGhyb3cgUmUoImdldFJlYWRlciIpO2lmKHZvaWQgMD09PXQpcmV0dXJuIE0odGhpcyk7aWYoImJ5b2IiPT09KHQ9U3RyaW5nKHQpKSlyZXR1cm4gRCh0aGlzKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBtb2RlIGlzIHNwZWNpZmllZCIpfX0se2tleToicGlwZVRocm91Z2giLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS53cml0YWJsZSxuPWUucmVhZGFibGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3RyeXtQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoZSx2b2lkIDAsKGZ1bmN0aW9uKCl7fSkpfWNhdGNoKGUpe319KHRoaXMucGlwZVRvKHIsdCkpLG59fSx7a2V5OiJwaXBlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLnByZXZlbnRDbG9zZSxhPXIucHJldmVudEFib3J0LGk9ci5wcmV2ZW50Q2FuY2VsO2lmKCExPT09Tih0aGlzKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoUmUoInBpcGVUbyIpKTtpZighMT09PVAoZSkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8ncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0iKSk7aWYobj1Cb29sZWFuKG4pLGE9Qm9vbGVhbihhKSxpPUJvb2xlYW4oaSksITA9PT1qKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtIikpO2lmKCEwPT09RShlKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbyBjYW5ub3QgYmUgdXNlZCBvbiBhIGxvY2tlZCBXcml0YWJsZVN0cmVhbSIpKTt2YXIgbz1NKHRoaXMpLHM9QyhlKSxsPSExLGM9UHJvbWlzZS5yZXNvbHZlKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHUpe3ZhciBmLGgsZDtpZihnKHQsby5fY2xvc2VkUHJvbWlzZSwoZnVuY3Rpb24odCl7ITE9PT1hP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIFQoZSx0KX0pLCEwLHQpOnkoITAsdCl9KSksZyhlLHMuX2Nsb3NlZFByb21pc2UsKGZ1bmN0aW9uKGUpeyExPT09aT92KChmdW5jdGlvbigpe3JldHVybiB6KHQsZSl9KSwhMCxlKTp5KCEwLGUpfSkpLGY9dCxoPW8uX2Nsb3NlZFByb21pc2UsZD1mdW5jdGlvbigpeyExPT09bj92KChmdW5jdGlvbigpe3JldHVybiBSKHMpfSkpOnkoKX0sImNsb3NlZCI9PT1mLl9zdGF0ZT9kKCk6aC50aGVuKGQpLmNhdGNoKHcpLCEwPT09RihlKXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSl7dmFyIHA9bmV3IFR5cGVFcnJvcigidGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Iik7ITE9PT1pP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIHoodCxwKX0pLCEwLHApOnkoITAscCl9ZnVuY3Rpb24gbSgpe3ZhciBlPWM7cmV0dXJuIGMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZSE9PWM/bSgpOnZvaWQgMH0pKX1mdW5jdGlvbiBnKGUsdCxyKXsiZXJyb3JlZCI9PT1lLl9zdGF0ZT9yKGUuX3N0b3JlZEVycm9yKTp0LmNhdGNoKHIpLmNhdGNoKHcpfWZ1bmN0aW9uIHYodCxyLG4pe2Z1bmN0aW9uIGEoKXt0KCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYihyLG4pfSksKGZ1bmN0aW9uKGUpe3JldHVybiBiKCEwLGUpfSkpLmNhdGNoKHcpfSEwIT09bCYmKGw9ITAsIndyaXRhYmxlIj09PWUuX3N0YXRlJiYhMT09PUYoZSk/bSgpLnRoZW4oYSk6YSgpKX1mdW5jdGlvbiB5KHQscil7ITAhPT1sJiYobD0hMCwid3JpdGFibGUiPT09ZS5fc3RhdGUmJiExPT09RihlKT9tKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYih0LHIpfSkpLmNhdGNoKHcpOmIodCxyKSl9ZnVuY3Rpb24gYihlLHQpe08ocykscmUobyksZT91KHQpOnIodm9pZCAwKX0oZnVuY3Rpb24gZSgpe3JldHVybiBjPVByb21pc2UucmVzb2x2ZSgpLCEwPT09bD9Qcm9taXNlLnJlc29sdmUoKTpzLl9yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmUobykudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTshMCE9PWUuZG9uZSYmKGM9SShzLHQpLmNhdGNoKChmdW5jdGlvbigpe30pKSl9KSl9KSkudGhlbihlKX0pKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe2M9UHJvbWlzZS5yZXNvbHZlKCksdyhlKX0pKX0pKX19LHtrZXk6InRlZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PU4odGhpcykpdGhyb3cgUmUoInRlZSIpO3ZhciBlPUIodGhpcywhMSk7cmV0dXJuIG0oZSl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09Tih0aGlzKSl0aHJvdyBSZSgibG9ja2VkIik7cmV0dXJuIGoodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFEoZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4gbmV3IEooZSl9ZnVuY3Rpb24gTihlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIiKX1mdW5jdGlvbiBqKGUpe3JldHVybiBiKCEwPT09TihlKSwiSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSx2b2lkIDAhPT1lLl9yZWFkZXJ9ZnVuY3Rpb24gQihlLHQpe2IoITA9PT1OKGUpKSxiKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPU0oZSksbj17Y2xvc2VkT3JFcnJvcmVkOiExLGNhbmNlbGVkMTohMSxjYW5jZWxlZDI6ITEscmVhc29uMTp2b2lkIDAscmVhc29uMjp2b2lkIDB9O24ucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5fcmVzb2x2ZT1lfSkpO3ZhciBhPWZ1bmN0aW9uIGUoKXt2YXIgdD1lLl9icmFuY2gxLHI9ZS5fYnJhbmNoMixuPWUuX3RlZVN0YXRlO3JldHVybiBuZShlLl9yZWFkZXIpLnRoZW4oKGZ1bmN0aW9uKGUpe2IodihlKSk7dmFyIGE9ZS52YWx1ZSxpPWUuZG9uZTtpZihiKCJib29sZWFuIj09dHlwZW9mIGkpLCEwPT09aSYmITE9PT1uLmNsb3NlZE9yRXJyb3JlZCYmKCExPT09bi5jYW5jZWxlZDEmJnNlKHQpLCExPT09bi5jYW5jZWxlZDImJnNlKHIpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKSwhMCE9PW4uY2xvc2VkT3JFcnJvcmVkKXt2YXIgbz1hLHM9YTshMT09PW4uY2FuY2VsZWQxJiZsZSh0LG8pLCExPT09bi5jYW5jZWxlZDImJmxlKHIscyl9fSkpfTthLl9yZWFkZXI9cixhLl90ZWVTdGF0ZT1uLGEuX2Nsb25lRm9yQnJhbmNoMj10O3ZhciBpPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDE9ITAsbi5yZWFzb24xPXQsITA9PT1uLmNhbmNlbGVkMil7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtpLl9zdHJlYW09ZSxpLl90ZWVTdGF0ZT1uO3ZhciBvPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDI9ITAsbi5yZWFzb24yPXQsITA9PT1uLmNhbmNlbGVkMSl7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtvLl9zdHJlYW09ZSxvLl90ZWVTdGF0ZT1uO3ZhciBzPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7ZyhzLCJwdWxsIixhKSxnKHMsImNhbmNlbCIsaSk7dmFyIGw9bmV3IEwocyksYz1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO2coYywicHVsbCIsYSksZyhjLCJjYW5jZWwiLG8pO3ZhciB1PW5ldyBMKGMpO3JldHVybiBhLl9icmFuY2gxPWwuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixhLl9icmFuY2gyPXUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixyLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXshMCE9PW4uY2xvc2VkT3JFcnJvcmVkJiYoY2UoYS5fYnJhbmNoMSxlKSxjZShhLl9icmFuY2gyLGUpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKX0pKSxbbCx1XX1mdW5jdGlvbiBVKGUpe3JldHVybiBiKCEwPT09WihlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMucHVzaChuKX0pKX1mdW5jdGlvbiBxKGUpe3JldHVybiBiKCEwPT09JChlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKG4pfSkpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6ImVycm9yZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpOihXKGUpLGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBXKGUpe2IoInJlYWRhYmxlIj09PWUuX3N0YXRlKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgdD1lLl9yZWFkZXI7aWYodm9pZCAwIT09dCl7aWYoITA9PT0kKHQpKXtmb3IodmFyIHI9MDtyPHQuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7cisrKSgwLHQuX3JlYWRSZXF1ZXN0c1tyXS5fcmVzb2x2ZSkocyh2b2lkIDAsITApKTt0Ll9yZWFkUmVxdWVzdHM9W119IWZ1bmN0aW9uKGUpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodm9pZCAwKSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH0odCl9fWZ1bmN0aW9uIEgoZSx0KXtiKCEwPT09TihlKSwic3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0iKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSwic3RhdGUgbXVzdCBiZSByZWFkYWJsZSIpLGUuX3N0YXRlPSJlcnJvcmVkIixlLl9zdG9yZWRFcnJvcj10O3ZhciByPWUuX3JlYWRlcjtpZih2b2lkIDAhPT1yKXtpZighMD09PSQocikpe2Zvcih2YXIgbj0wO248ci5fcmVhZFJlcXVlc3RzLmxlbmd0aDtuKyspci5fcmVhZFJlcXVlc3RzW25dLl9yZWplY3QodCk7ci5fcmVhZFJlcXVlc3RzPVtdfWVsc2V7YihaKHIpLCJyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiKTtmb3IodmFyIGE9MDthPHIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO2ErKylyLl9yZWFkSW50b1JlcXVlc3RzW2FdLl9yZWplY3QodCk7ci5fcmVhZEludG9SZXF1ZXN0cz1bXX1GZShyLHQpLHIuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfX1mdW5jdGlvbiBHKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkUmVxdWVzdHMubGVuZ3RoPjApLG4uX3JlYWRSZXF1ZXN0cy5zaGlmdCgpLl9yZXNvbHZlKHModCxyKSl9ZnVuY3Rpb24gVihlKXtyZXR1cm4gZS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aH1mdW5jdGlvbiBYKGUpe3JldHVybiBlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGh9ZnVuY3Rpb24gWShlKXt2YXIgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiExIT09Wih0KX1mdW5jdGlvbiBLKGUpe3ZhciB0PWUuX3JlYWRlcjtyZXR1cm4gdm9pZCAwIT09dCYmITEhPT0kKHQpfWUuZXhwb3J0cz17UmVhZGFibGVTdHJlYW06TCxJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3JldHVybiBiKCEwPT09TihlKSwiSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSxlLl9kaXN0dXJiZWR9LFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTpzZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTpsZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6Y2UsUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOmZlfTt2YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09Tih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1qKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlciIpO2VlKHRoaXMsdCksdGhpcy5fcmVhZFJlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT0kKHRoaXMpP1Byb21pc2UucmVqZWN0KEllKCJjYW5jZWwiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSl9fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExPT09JCh0aGlzKT9Qcm9taXNlLnJlamVjdChJZSgicmVhZCIpKTp2b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KE9lKCJyZWFkIGZyb20iKSk6bmUodGhpcyl9fSx7a2V5OiJyZWxlYXNlTG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PSQodGhpcykpdGhyb3cgSWUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aD4wKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkIik7cmUodGhpcyl9fX0se2tleToiY2xvc2VkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PSQodGhpcyk/UHJvbWlzZS5yZWplY3QoSWUoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX1dKSxlfSgpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKGEodGhpcyxlKSwhTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZighMT09PXBlKHQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlIHNvdXJjZSIpO2lmKGoodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyIik7ZWUodGhpcyx0KSx0aGlzLl9yZWFkSW50b1JlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFoodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSk6UHJvbWlzZS5yZWplY3QoTGUoImNhbmNlbCIpKX19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaKHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0/UHJvbWlzZS5yZWplY3QoT2UoInJlYWQgZnJvbSIpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoZSk/MD09PWUuYnl0ZUxlbmd0aD9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJ2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoIikpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtyZXR1cm4gYih2b2lkIDAhPT1yKSxyLl9kaXN0dXJiZWQ9ITAsImVycm9yZWQiPT09ci5fc3RhdGU/UHJvbWlzZS5yZWplY3Qoci5fc3RvcmVkRXJyb3IpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLG49MTt0LmNvbnN0cnVjdG9yIT09RGF0YVZpZXcmJihuPXQuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQpO3ZhciBhPXQuY29uc3RydWN0b3IsaT17YnVmZmVyOnQuYnVmZmVyLGJ5dGVPZmZzZXQ6dC5ieXRlT2Zmc2V0LGJ5dGVMZW5ndGg6dC5ieXRlTGVuZ3RoLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6bixjdG9yOmEscmVhZGVyVHlwZToiYnlvYiJ9O2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApcmV0dXJuIGkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKSxVKHIpO2lmKCJjbG9zZWQiPT09ci5fc3RhdGUpe3ZhciBvPW5ldyB0LmNvbnN0cnVjdG9yKGkuYnVmZmVyLGkuYnl0ZU9mZnNldCwwKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobywhMCkpfWlmKGUuX3F1ZXVlVG90YWxTaXplPjApe2lmKCEwPT09a2UoZSxpKSl7dmFyIGw9YmUoaSk7cmV0dXJuIF9lKGUpLFByb21pc2UucmVzb2x2ZShzKGwsITEpKX1pZighMD09PWUuX2Nsb3NlUmVxdWVzdGVkKXt2YXIgYz1uZXcgVHlwZUVycm9yKCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyIik7cmV0dXJuIEVlKGUsYyksUHJvbWlzZS5yZWplY3QoYyl9fWkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKTt2YXIgdT1VKHIpO3JldHVybiBnZShlKSx1fShyLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsdCl9KHRoaXMsZSk6UHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigidmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3IikpOlByb21pc2UucmVqZWN0KExlKCJyZWFkIikpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIVoodGhpcykpdGhyb3cgTGUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg+MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCIpO3JlKHRoaXMpfX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpQcm9taXNlLnJlamVjdChMZSgiY2xvc2VkIikpfX1dKSxlfSgpO2Z1bmN0aW9uIFooZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZEludG9SZXF1ZXN0cyIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZFJlcXVlc3RzIil9ZnVuY3Rpb24gZWUoZSx0KXtlLl9vd25lclJlYWRhYmxlU3RyZWFtPXQsdC5fcmVhZGVyPWUsInJlYWRhYmxlIj09PXQuX3N0YXRlP2Z1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXQsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9cn0pKX0oZSk6ImNsb3NlZCI9PT10Ll9zdGF0ZT9mdW5jdGlvbihlKXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlKTooYigiZXJyb3JlZCI9PT10Ll9zdGF0ZSwic3RhdGUgbXVzdCBiZSBlcnJvcmVkIiksZnVuY3Rpb24oZSx0KXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlLHQuX3N0b3JlZEVycm9yKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgcj1lLl9vd25lclJlYWRhYmxlU3RyZWFtO3JldHVybiBiKHZvaWQgMCE9PXIpLHoocix0KX1mdW5jdGlvbiByZShlKXtiKHZvaWQgMCE9PWUuX293bmVyUmVhZGFibGVTdHJlYW0pLGIoZS5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyPT09ZSksInJlYWRhYmxlIj09PWUuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlP0ZlKGUsbmV3IFR5cGVFcnJvcigiUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKSk6ZnVuY3Rpb24oZSx0KXtiKHZvaWQgMD09PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSksYih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KX0oZSxuZXcgVHlwZUVycm9yKCJSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzcyIpKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxlLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXI9dm9pZCAwLGUuX293bmVyUmVhZGFibGVTdHJlYW09dm9pZCAwfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PWUuX293bmVyUmVhZGFibGVTdHJlYW07cmV0dXJuIGIodm9pZCAwIT09dCksdC5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHModm9pZCAwLCEwKSk6ImVycm9yZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZWplY3QodC5fc3RvcmVkRXJyb3IpOihiKCJyZWFkYWJsZSI9PT10Ll9zdGF0ZSksdC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCkpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09Tih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTb3VyY2U9cix0aGlzLl9xdWV1ZT12b2lkIDAsdGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jbG9zZVJlcXVlc3RlZD0hMSx0aGlzLl9wdWxsQWdhaW49ITEsdGhpcy5fcHVsbGluZz0hMTt2YXIgbz1oKG4saSk7dGhpcy5fc3RyYXRlZ3lTaXplPW8uc2l6ZSx0aGlzLl9zdHJhdGVneUhXTT1vLmhpZ2hXYXRlck1hcms7dmFyIHM9dGhpcyxsPWMociwic3RhcnQiLFt0aGlzXSk7UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKCl7cy5fc3RhcnRlZD0hMCxiKCExPT09cy5fcHVsbGluZyksYighMT09PXMuX3B1bGxBZ2Fpbiksb2Uocyl9KSwoZnVuY3Rpb24oZSl7dWUocyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTtzZSh0aGlzKX19LHtrZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09aWUodGhpcykpdGhyb3cgRGUoImVucXVldWUiKTtpZighMD09PXRoaXMuX2Nsb3NlUmVxdWVzdGVkKXRocm93IG5ldyBUeXBlRXJyb3IoInN0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmciKTt2YXIgdD10aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO2lmKCJyZWFkYWJsZSIhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gKGluICIrdCsiIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8iKTtyZXR1cm4gbGUodGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7Y2UodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwiY2FuY2VsIixbZV0pfX0se2tleToiX19wdWxsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD4wKXt2YXIgdD1TKHRoaXMpO3JldHVybiEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQmJjA9PT10aGlzLl9xdWV1ZS5sZW5ndGg/VyhlKTpvZSh0aGlzKSxQcm9taXNlLnJlc29sdmUocyh0LCExKSl9dmFyIHI9cShlKTtyZXR1cm4gb2UodGhpcykscn19LHtrZXk6ImRlc2lyZWRTaXplIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJkZXNpcmVkU2l6ZSIpO3JldHVybiBmZSh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBpZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl91bmRlcmx5aW5nU291cmNlIil9ZnVuY3Rpb24gb2UoZSl7ITEhPT1mdW5jdGlvbihlKXt2YXIgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07cmV0dXJuImNsb3NlZCIhPT10Ll9zdGF0ZSYmImVycm9yZWQiIT09dC5fc3RhdGUmJighMCE9PWUuX2Nsb3NlUmVxdWVzdGVkJiYoITEhPT1lLl9zdGFydGVkJiYoITA9PT1qKHQpJiZYKHQpPjB8fGZlKGUpPjApKSl9KGUpJiYoITAhPT1lLl9wdWxsaW5nPyhiKCExPT09ZS5fcHVsbEFnYWluKSxlLl9wdWxsaW5nPSEwLHUoZS5fdW5kZXJseWluZ1NvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2lmKGUuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4pcmV0dXJuIGUuX3B1bGxBZ2Fpbj0hMSxvZShlKX0pLChmdW5jdGlvbih0KXt1ZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtiKCExPT09ZS5fY2xvc2VSZXF1ZXN0ZWQpLGIoInJlYWRhYmxlIj09PXQuX3N0YXRlKSxlLl9jbG9zZVJlcXVlc3RlZD0hMCwwPT09ZS5fcXVldWUubGVuZ3RoJiZXKHQpfWZ1bmN0aW9uIGxlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpLCEwPT09aihyKSYmWChyKT4wKUcocix0LCExKTtlbHNle3ZhciBuPTE7aWYodm9pZCAwIT09ZS5fc3RyYXRlZ3lTaXplKXt2YXIgYT1lLl9zdHJhdGVneVNpemU7dHJ5e249YSh0KX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fXRyeXtfKGUsdCxuKX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fW9lKGUpfWZ1bmN0aW9uIGNlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoInJlYWRhYmxlIj09PXIuX3N0YXRlKSx4KGUpLEgocix0KX1mdW5jdGlvbiB1ZShlLHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZjZShlLHQpfWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfXZhciBoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI9dCx0aGlzLl92aWV3PXJ9cmV0dXJuIG4oZSxbe2tleToicmVzcG9uZCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1tZSh0aGlzKSl0aHJvdyBNZSgicmVzcG9uZCIpO2lmKHZvaWQgMD09PXRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkIik7IWZ1bmN0aW9uKGUsdCl7aWYodD1OdW1iZXIodCksITE9PT1sKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gbXVzdCBiZSBhIGZpbml0ZSIpO2IoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCksQ2UoZSx0KX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9fSx7a2V5OiJyZXNwb25kV2l0aE5ld1ZpZXciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09bWUodGhpcykpdGhyb3cgTWUoInJlc3BvbmQiKTtpZih2b2lkIDA9PT10aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IHJlc3BvbmQgd2l0aCBhcnJheSBidWZmZXIgdmlld3MiKTshZnVuY3Rpb24oZSx0KXtiKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApO3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF07aWYoci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQhPT10LmJ5dGVPZmZzZXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QiKTtpZihyLmJ5dGVMZW5ndGghPT10LmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QiKTtyLmJ1ZmZlcj10LmJ1ZmZlcixDZShlLHQuYnl0ZUxlbmd0aCl9KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLGUpfX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXd9fV0pLGV9KCksZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtpZihhKHRoaXMsZSksITE9PT1OKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZih2b2lkIDAhPT10Ll9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZ2l2ZW4gYSBieXRlIHNvdXJjZSIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlPXIsdGhpcy5fcHVsbEFnYWluPSExLHRoaXMuX3B1bGxpbmc9ITEsdmUodGhpcyksdGhpcy5fcXVldWU9dGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fY2xvc2VSZXF1ZXN0ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9zdHJhdGVneUhXTT1kKG4pO3ZhciBpPXIuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKHZvaWQgMCE9PWkmJighMT09PU51bWJlci5pc0ludGVnZXIoaSl8fGk8PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTt0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU9aSx0aGlzLl9wZW5kaW5nUHVsbEludG9zPVtdO3ZhciBvPXRoaXMscz1jKHIsInN0YXJ0IixbdGhpc10pO1Byb21pc2UucmVzb2x2ZShzKS50aGVuKChmdW5jdGlvbigpe28uX3N0YXJ0ZWQ9ITAsYighMT09PW8uX3B1bGxpbmcpLGIoITE9PT1vLl9wdWxsQWdhaW4pLGdlKG8pfSksKGZ1bmN0aW9uKGUpeyJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmRWUobyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXBlKHRoaXMpKXRocm93IE5lKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09dC5fc3RhdGUpLGUuX3F1ZXVlVG90YWxTaXplPjApZS5fY2xvc2VSZXF1ZXN0ZWQ9ITA7ZWxzZXtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiZlLl9wZW5kaW5nUHVsbEludG9zWzBdLmJ5dGVzRmlsbGVkPjApe3ZhciByPW5ldyBUeXBlRXJyb3IoIkluc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXIiKTt0aHJvdyBFZShlLHIpLHJ9Vyh0KX19KHRoaXMpfX0se2tleToiZW5xdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiZW5xdWV1ZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigic3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZyIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIit0KyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0byIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIik7IWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpO3ZhciBuPXQuYnVmZmVyLGE9dC5ieXRlT2Zmc2V0LGk9dC5ieXRlTGVuZ3RoLG89ZihuKTtpZighMD09PUsocikpaWYoMD09PVgocikpd2UoZSxvLGEsaSk7ZWxzZXtiKDA9PT1lLl9xdWV1ZS5sZW5ndGgpO3ZhciBzPW5ldyBVaW50OEFycmF5KG8sYSxpKTtHKHIscywhMSl9ZWxzZSEwPT09WShyKT8od2UoZSxvLGEsaSksQWUoZSkpOihiKCExPT09aihyKSwic3RyZWFtIG11c3Qgbm90IGJlIGxvY2tlZCIpLHdlKGUsbyxhLGkpKX0odGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PXBlKHRoaXMpKXRocm93IE5lKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7RWUodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiYodGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXS5ieXRlc0ZpbGxlZD0wKSx4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UsImNhbmNlbCIsW2VdKX19LHtrZXk6Il9fcHVsbFN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZihiKCEwPT09SyhlKSksdGhpcy5fcXVldWVUb3RhbFNpemU+MCl7YigwPT09WChlKSk7dmFyIHQ9dGhpcy5fcXVldWUuc2hpZnQoKTt0aGlzLl9xdWV1ZVRvdGFsU2l6ZS09dC5ieXRlTGVuZ3RoLF9lKHRoaXMpO3ZhciByPXZvaWQgMDt0cnl7cj1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKHIsITEpKX12YXIgbj10aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7aWYodm9pZCAwIT09bil7dmFyIGE9dm9pZCAwO3RyeXthPW5ldyBBcnJheUJ1ZmZlcihuKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9dmFyIGk9e2J1ZmZlcjphLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOm4sYnl0ZXNGaWxsZWQ6MCxlbGVtZW50U2l6ZToxLGN0b3I6VWludDhBcnJheSxyZWFkZXJUeXBlOiJkZWZhdWx0In07dGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGkpfXZhciBvPXEoZSk7cmV0dXJuIGdlKHRoaXMpLG99fSx7a2V5OiJieW9iUmVxdWVzdCIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiYnlvYlJlcXVlc3QiKTtpZih2b2lkIDA9PT10aGlzLl9ieW9iUmVxdWVzdCYmdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXSx0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtlLmJ5dGVzRmlsbGVkLGUuYnl0ZUxlbmd0aC1lLmJ5dGVzRmlsbGVkKTt0aGlzLl9ieW9iUmVxdWVzdD1uZXcgaGUodGhpcyx0KX1yZXR1cm4gdGhpcy5fYnlvYlJlcXVlc3R9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiZGVzaXJlZFNpemUiKTtyZXR1cm4gVGUodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdW5kZXJseWluZ0J5dGVTb3VyY2UiKX1mdW5jdGlvbiBtZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGdlKGUpeyExIT09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO3JldHVybiJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmKCEwIT09ZS5fY2xvc2VSZXF1ZXN0ZWQmJighMSE9PWUuX3N0YXJ0ZWQmJighMD09PUsodCkmJlgodCk+MHx8KCEwPT09WSh0KSYmVih0KT4wfHxUZShlKT4wKSkpKX0oZSkmJighMCE9PWUuX3B1bGxpbmc/KGIoITE9PT1lLl9wdWxsQWdhaW4pLGUuX3B1bGxpbmc9ITAsdShlLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2UuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsZ2UoZSkpfSksKGZ1bmN0aW9uKHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZFZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHZlKGUpe3hlKGUpLGUuX3BlbmRpbmdQdWxsSW50b3M9W119ZnVuY3Rpb24geWUoZSx0KXtiKCJlcnJvcmVkIiE9PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IG5vdCBiZSBlcnJvcmVkIik7dmFyIHI9ITE7ImNsb3NlZCI9PT1lLl9zdGF0ZSYmKGIoMD09PXQuYnl0ZXNGaWxsZWQpLHI9ITApO3ZhciBuPWJlKHQpOyJkZWZhdWx0Ij09PXQucmVhZGVyVHlwZT9HKGUsbixyKTooYigiYnlvYiI9PT10LnJlYWRlclR5cGUpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aD4wKSxuLl9yZWFkSW50b1JlcXVlc3RzLnNoaWZ0KCkuX3Jlc29sdmUocyh0LHIpKX0oZSxuLHIpKX1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLmJ5dGVzRmlsbGVkLHI9ZS5lbGVtZW50U2l6ZTtyZXR1cm4gYih0PD1lLmJ5dGVMZW5ndGgpLGIodCVyPT0wKSxuZXcgZS5jdG9yKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCx0L3IpfWZ1bmN0aW9uIHdlKGUsdCxyLG4pe2UuX3F1ZXVlLnB1c2goe2J1ZmZlcjp0LGJ5dGVPZmZzZXQ6cixieXRlTGVuZ3RoOm59KSxlLl9xdWV1ZVRvdGFsU2l6ZSs9bn1mdW5jdGlvbiBrZShlLHQpe3ZhciByPXQuZWxlbWVudFNpemUsbj10LmJ5dGVzRmlsbGVkLXQuYnl0ZXNGaWxsZWQlcixhPU1hdGgubWluKGUuX3F1ZXVlVG90YWxTaXplLHQuYnl0ZUxlbmd0aC10LmJ5dGVzRmlsbGVkKSxpPXQuYnl0ZXNGaWxsZWQrYSxzPWktaSVyLGw9YSxjPSExO3M+biYmKGw9cy10LmJ5dGVzRmlsbGVkLGM9ITApO2Zvcih2YXIgdT1lLl9xdWV1ZTtsPjA7KXt2YXIgZj11WzBdLGg9TWF0aC5taW4obCxmLmJ5dGVMZW5ndGgpLGQ9dC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQ7byh0LmJ1ZmZlcixkLGYuYnVmZmVyLGYuYnl0ZU9mZnNldCxoKSxmLmJ5dGVMZW5ndGg9PT1oP3Uuc2hpZnQoKTooZi5ieXRlT2Zmc2V0Kz1oLGYuYnl0ZUxlbmd0aC09aCksZS5fcXVldWVUb3RhbFNpemUtPWgsU2UoZSxoLHQpLGwtPWh9cmV0dXJuITE9PT1jJiYoYigwPT09ZS5fcXVldWVUb3RhbFNpemUsInF1ZXVlIG11c3QgYmUgZW1wdHkiKSxiKHQuYnl0ZXNGaWxsZWQ+MCksYih0LmJ5dGVzRmlsbGVkPHQuZWxlbWVudFNpemUpKSxjfWZ1bmN0aW9uIFNlKGUsdCxyKXtiKDA9PT1lLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aHx8ZS5fcGVuZGluZ1B1bGxJbnRvc1swXT09PXIpLHhlKGUpLHIuYnl0ZXNGaWxsZWQrPXR9ZnVuY3Rpb24gX2UoZSl7YigicmVhZGFibGUiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSksMD09PWUuX3F1ZXVlVG90YWxTaXplJiYhMD09PWUuX2Nsb3NlUmVxdWVzdGVkP1coZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTpnZShlKX1mdW5jdGlvbiB4ZShlKXt2b2lkIDAhPT1lLl9ieW9iUmVxdWVzdCYmKGUuX2J5b2JSZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsZS5fYnlvYlJlcXVlc3QuX3ZpZXc9dm9pZCAwLGUuX2J5b2JSZXF1ZXN0PXZvaWQgMCl9ZnVuY3Rpb24gQWUoZSl7Zm9yKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCk7ZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MDspe2lmKDA9PT1lLl9xdWV1ZVRvdGFsU2l6ZSlyZXR1cm47dmFyIHQ9ZS5fcGVuZGluZ1B1bGxJbnRvc1swXTshMD09PWtlKGUsdCkmJihQZShlKSx5ZShlLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sdCkpfX1mdW5jdGlvbiBDZShlLHQpe3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF0sbj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07aWYoImNsb3NlZCI9PT1uLl9zdGF0ZSl7aWYoMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbSIpOyFmdW5jdGlvbihlLHQpe3QuYnVmZmVyPWYodC5idWZmZXIpLGIoMD09PXQuYnl0ZXNGaWxsZWQsImJ5dGVzRmlsbGVkIG11c3QgYmUgMCIpO3ZhciByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZighMD09PVkocikpZm9yKDtWKHIpPjA7KXllKHIsUGUoZSkpfShlLHIpfWVsc2UgYigicmVhZGFibGUiPT09bi5fc3RhdGUpLGZ1bmN0aW9uKGUsdCxyKXtpZihyLmJ5dGVzRmlsbGVkK3Q+ci5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlIik7aWYoU2UoZSx0LHIpLCEoci5ieXRlc0ZpbGxlZDxyLmVsZW1lbnRTaXplKSl7UGUoZSk7dmFyIG49ci5ieXRlc0ZpbGxlZCVyLmVsZW1lbnRTaXplO2lmKG4+MCl7dmFyIGE9ci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQsaT1yLmJ1ZmZlci5zbGljZShhLW4sYSk7d2UoZSxpLDAsaS5ieXRlTGVuZ3RoKX1yLmJ1ZmZlcj1mKHIuYnVmZmVyKSxyLmJ5dGVzRmlsbGVkLT1uLHllKGUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSxyKSxBZShlKX19KGUsdCxyKX1mdW5jdGlvbiBQZShlKXt2YXIgdD1lLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7cmV0dXJuIHhlKGUpLHR9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgcj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07YigicmVhZGFibGUiPT09ci5fc3RhdGUpLHZlKGUpLHgoZSksSChyLHQpfWZ1bmN0aW9uIFRlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtIil9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlciIpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiKX1mdW5jdGlvbiBGZShlLHQpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH1mdW5jdGlvbiBMZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIil9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIil9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Iil9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIil9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2KSxhPXIoNCksaT1yKDIpO3QuVHJhbnNmb3JtU3RyZWFtPW4uVHJhbnNmb3JtU3RyZWFtLHQuUmVhZGFibGVTdHJlYW09YS5SZWFkYWJsZVN0cmVhbSx0LklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ9YS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlPWEuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU9YS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSx0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZT1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx0LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI9aS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLHQuSXNXcml0YWJsZVN0cmVhbT1pLklzV3JpdGFibGVTdHJlYW0sdC5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkPWkuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCx0LldyaXRhYmxlU3RyZWFtPWkuV3JpdGFibGVTdHJlYW0sdC5Xcml0YWJsZVN0cmVhbUFib3J0PWkuV3JpdGFibGVTdHJlYW1BYm9ydCx0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb249aS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLHQuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsdC5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlfSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBpPXIoMSkuYXNzZXJ0LG89cigwKSxzPW8uSW52b2tlT3JOb29wLGw9by5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssYz1vLlByb21pc2VJbnZva2VPck5vb3AsdT1vLnR5cGVJc09iamVjdCxmPXIoNCksaD1mLlJlYWRhYmxlU3RyZWFtLGQ9Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UscD1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLG09Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsZz1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx2PXIoMikseT12LldyaXRhYmxlU3RyZWFtLGI9di5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7ZnVuY3Rpb24gdyhlLHQpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7dmFyIHI9ZS5fcmVhZGFibGVDb250cm9sbGVyO3RyeXtwKHIsdCl9Y2F0Y2godCl7dGhyb3cgZS5fcmVhZGFibGVDbG9zZWQ9ITAsUyhlLHQpLGUuX3N0b3JlZEVycm9yfSEwPT1nKHIpPD0wJiYhMT09PWUuX2JhY2twcmVzc3VyZSYmQShlLCEwKX1mdW5jdGlvbiBrKGUpe2koITE9PT1lLl9lcnJvcmVkKSxpKCExPT09ZS5fcmVhZGFibGVDbG9zZWQpO3RyeXtkKGUuX3JlYWRhYmxlQ29udHJvbGxlcil9Y2F0Y2goZSl7aSghMSl9ZS5fcmVhZGFibGVDbG9zZWQ9ITB9ZnVuY3Rpb24gUyhlLHQpeyExPT09ZS5fZXJyb3JlZCYmXyhlLHQpfWZ1bmN0aW9uIF8oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksZS5fZXJyb3JlZD0hMCxlLl9zdG9yZWRFcnJvcj10LCExPT09ZS5fd3JpdGFibGVEb25lJiZiKGUuX3dyaXRhYmxlQ29udHJvbGxlcix0KSwhMT09PWUuX3JlYWRhYmxlQ2xvc2VkJiZtKGUuX3JlYWRhYmxlQ29udHJvbGxlcix0KX1mdW5jdGlvbiB4KGUpe3JldHVybiBpKHZvaWQgMCE9PWUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMT09PWUuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMD09PWUuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9ZnVuY3Rpb24gQShlLHQpe2koZS5fYmFja3ByZXNzdXJlIT09dCwiVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gYmFja3ByZXNzdXJlIGlzIGNoYW5nZWQiKSx2b2lkIDAhPT1lLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlJiZlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUodCksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlPXR9KSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpKGUhPT10LCJfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCIpfSkpLGUuX2JhY2twcmVzc3VyZT10fWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdyh0Ll9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSIpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciIpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdHJlYW09dCx0aGlzLl9zdGFydFByb21pc2U9cn1yZXR1cm4gbihlLFt7a2V5OiJzdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHJhbnNmb3JtU3RyZWFtO3JldHVybiB0Ll93cml0YWJsZUNvbnRyb2xsZXI9ZSx0aGlzLl9zdGFydFByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geCh0KX0pKX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksaSghMT09PWUuX3RyYW5zZm9ybWluZyksaSghMT09PWUuX2JhY2twcmVzc3VyZSksZS5fdHJhbnNmb3JtaW5nPSEwO3ZhciByPWUuX3RyYW5zZm9ybWVyLG49ZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcjtyZXR1cm4gbChyLCJ0cmFuc2Zvcm0iLFt0LG5dLEMsW3Qsbl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3RyYW5zZm9ybWluZz0hMSx4KGUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QodCl9KSl9KHRoaXMuX3RyYW5zZm9ybVN0cmVhbSxlKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtlLl93cml0YWJsZURvbmU9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlIHNpZGUgYWJvcnRlZCIpKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMT09PWUuX3RyYW5zZm9ybWluZyksZS5fd3JpdGFibGVEb25lPSEwLGMoZS5fdHJhbnNmb3JtZXIsImZsdXNoIixbZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1lLl9lcnJvcmVkP1Byb21pc2UucmVqZWN0KGUuX3N0b3JlZEVycm9yKTooITE9PT1lLl9yZWFkYWJsZUNsb3NlZCYmayhlKSxQcm9taXNlLnJlc29sdmUoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpfSkpfX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7YSh0aGlzLGUpLHRoaXMuX3RyYW5zZm9ybVN0cmVhbT10LHRoaXMuX3N0YXJ0UHJvbWlzZT1yfXJldHVybiBuKGUsW3trZXk6InN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdHJlYW07cmV0dXJuIHQuX3JlYWRhYmxlQ29udHJvbGxlcj1lLHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3JldHVybiBpKHZvaWQgMCE9PXQuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMD09PXQuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMT09PXQuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksdC5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9KSl9fSx7a2V5OiJwdWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMD09PWUuX2JhY2twcmVzc3VyZSwicHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZSIpLGkodm9pZCAwIT09ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSwiX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLEEoZSwhMSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZX19LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdHJlYW07ZS5fcmVhZGFibGVDbG9zZWQ9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlIHNpZGUgY2FuY2VsZWQiKSl9fV0pLGV9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09RSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlIik7aWYodm9pZCAwIT09dC5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yIik7dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbT10fXJldHVybiBuKGUsW3trZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09UCh0aGlzKSl0aHJvdyBGKCJlbnF1ZXVlIik7dyh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImNsb3NlIik7IWZ1bmN0aW9uKGUpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7ayhlKX0odGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImVycm9yIik7IWZ1bmN0aW9uKGUsdCl7aWYoITA9PT1lLl9lcnJvcmVkKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQiKTtfKGUsdCl9KHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0sZSl9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImRlc2lyZWRTaXplIik7dmFyIGU9dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyO3JldHVybiBnKGUpfX1dKSxlfSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1lcj10O3ZhciByPXQucmVhZGFibGVTdHJhdGVneSxuPXQud3JpdGFibGVTdHJhdGVneTt0aGlzLl90cmFuc2Zvcm1pbmc9ITEsdGhpcy5fZXJyb3JlZD0hMSx0aGlzLl9zdG9yZWRFcnJvcj12b2lkIDAsdGhpcy5fd3JpdGFibGVDb250cm9sbGVyPXZvaWQgMCx0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3dyaXRhYmxlRG9uZT0hMSx0aGlzLl9yZWFkYWJsZUNsb3NlZD0hMSx0aGlzLl9iYWNrcHJlc3N1cmU9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT12b2lkIDAsdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj1uZXcgTyh0aGlzKTt2YXIgbz12b2lkIDAsbD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bz1lfSkpLGM9bmV3IFIodGhpcyxsKTt0aGlzLl9yZWFkYWJsZT1uZXcgaChjLHIpO3ZhciB1PW5ldyBUKHRoaXMsbCk7dGhpcy5fd3JpdGFibGU9bmV3IHkodSxuKSxpKHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciksaSh2b2lkIDAhPT10aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO3ZhciBmPWcodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtBKHRoaXMsZjw9MCk7dmFyIGQ9dGhpcyxwPXModCwic3RhcnQiLFtkLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7byhwKSxsLmNhdGNoKChmdW5jdGlvbihlKXshMT09PWQuX2Vycm9yZWQmJihkLl9lcnJvcmVkPSEwLGQuX3N0b3JlZEVycm9yPWUpfSkpfXJldHVybiBuKGUsW3trZXk6InJlYWRhYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PUUodGhpcykpdGhyb3cgTCgicmVhZGFibGUiKTtyZXR1cm4gdGhpcy5fcmVhZGFibGV9fSx7a2V5OiJ3cml0YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1FKHRoaXMpKXRocm93IEwoIndyaXRhYmxlIik7cmV0dXJuIHRoaXMuX3dyaXRhYmxlfX1dKSxlfSgpO2Z1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiKX1mdW5jdGlvbiBMKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0iKX1lLmV4cG9ydHM9e1RyYW5zZm9ybVN0cmVhbTpJfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpfV0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ITE7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVUkwmJiJvYmplY3QiPT09bihVUkwucHJvdG90eXBlKSYmIm9yaWdpbiJpbiBVUkwucHJvdG90eXBlKXt2YXIgaT1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtpLnBhdGhuYW1lPSJjJTIwZCIsYT0iaHR0cDovL2EvYyUyMGQiPT09aS5ocmVmfX1jYXRjaChlKXt9aWYoYSl0LlVSTD1VUkw7ZWxzZXt2YXIgbz1yKDE0NSkuVVJMLHM9cigzKS5VUkw7cyYmKG8uY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNyZWF0ZU9iamVjdFVSTC5hcHBseShzLGFyZ3VtZW50cyl9LG8ucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3MucmV2b2tlT2JqZWN0VVJMKGUpfSksdC5VUkw9b319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmZ0cD0yMSxlLmZpbGU9MCxlLmdvcGhlcj03MCxlLmh0dHA9ODAsZS5odHRwcz00NDMsZS53cz04MCxlLndzcz00NDM7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBuKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfWZ1bmN0aW9uIGEoKXtoLmNhbGwodGhpcyksdGhpcy5faXNJbnZhbGlkPSEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIiI9PT1lJiZhLmNhbGwodGhpcyksZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO3JldHVybiB0PjMyJiZ0PDEyNyYmLTE9PT1bMzQsMzUsNjAsNjIsNjMsOTZdLmluZGV4T2YodCk/ZTplbmNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ+MzImJnQ8MTI3JiYtMT09PVszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZih0KT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX1yWyIlMmUiXT0iLiIsclsiLiUyZSJdPSIuLiIsclsiJTJlLiJdPSIuLiIsclsiJTJlJTJlIl09Ii4uIjt2YXIgbCxjPS9bYS16QS1aXS8sdT0vW2EtekEtWjAtOVwrXC1cLl0vO2Z1bmN0aW9uIGYodCxmLGgpe2Z1bmN0aW9uIGQoZSl7Yi5wdXNoKGUpfXZhciBwPWZ8fCJzY2hlbWUgc3RhcnQiLG09MCxnPSIiLHY9ITEseT0hMSxiPVtdO2U6Zm9yKDsodFttLTFdIT09bHx8MD09PW0pJiYhdGhpcy5faXNJbnZhbGlkOyl7dmFyIHc9dFttXTtzd2l0Y2gocCl7Y2FzZSJzY2hlbWUgc3RhcnQiOmlmKCF3fHwhYy50ZXN0KHcpKXtpZihmKXtkKCJJbnZhbGlkIHNjaGVtZS4iKTticmVhayBlfWc9IiIscD0ibm8gc2NoZW1lIjtjb250aW51ZX1nKz13LnRvTG93ZXJDYXNlKCkscD0ic2NoZW1lIjticmVhaztjYXNlInNjaGVtZSI6aWYodyYmdS50ZXN0KHcpKWcrPXcudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9PXcpe2lmKGYpe2lmKHc9PT1sKWJyZWFrIGU7ZCgiQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICIrdyk7YnJlYWsgZX1nPSIiLG09MCxwPSJubyBzY2hlbWUiO2NvbnRpbnVlfWlmKHRoaXMuX3NjaGVtZT1nLGc9IiIsZilicmVhayBlO24odGhpcy5fc2NoZW1lKSYmKHRoaXMuX2lzUmVsYXRpdmU9ITApLHA9ImZpbGUiPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSI6dGhpcy5faXNSZWxhdGl2ZSYmaCYmaC5fc2NoZW1lPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOnRoaXMuX2lzUmVsYXRpdmU/ImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6InNjaGVtZSBkYXRhIn1icmVhaztjYXNlInNjaGVtZSBkYXRhIjoiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13Pyh0aGlzLl9mcmFnbWVudD0iIyIscD0iZnJhZ21lbnQiKTp3IT09bCYmIlx0IiE9PXcmJiJcbiIhPT13JiYiXHIiIT09dyYmKHRoaXMuX3NjaGVtZURhdGErPW8odykpO2JyZWFrO2Nhc2Uibm8gc2NoZW1lIjppZihoJiZuKGguX3NjaGVtZSkpe3A9InJlbGF0aXZlIjtjb250aW51ZX1kKCJNaXNzaW5nIHNjaGVtZS4iKSxhLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOmlmKCIvIiE9PXd8fCIvIiE9PXRbbSsxXSl7ZCgiRXhwZWN0ZWQgLywgZ290OiAiK3cpLHA9InJlbGF0aXZlIjtjb250aW51ZX1wPSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiO2JyZWFrO2Nhc2UicmVsYXRpdmUiOmlmKHRoaXMuX2lzUmVsYXRpdmU9ITAsImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5fc2NoZW1lPWguX3NjaGVtZSksdz09PWwpe3RoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQ7YnJlYWsgZX1pZigiLyI9PT13fHwiXFwiPT09dykiXFwiPT09dyYmZCgiXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LiIpLHA9InJlbGF0aXZlIHNsYXNoIjtlbHNlIGlmKCI/Ij09PXcpdGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl9wYXRoPWguX3BhdGguc2xpY2UoKSx0aGlzLl9xdWVyeT0iPyIsdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQscD0icXVlcnkiO2Vsc2V7aWYoIiMiIT09dyl7dmFyIGs9dFttKzFdLFM9dFttKzJdOygiZmlsZSIhPT10aGlzLl9zY2hlbWV8fCFjLnRlc3Qodyl8fCI6IiE9PWsmJiJ8IiE9PWt8fFMhPT1sJiYiLyIhPT1TJiYiXFwiIT09UyYmIj8iIT09UyYmIiMiIT09UykmJih0aGlzLl9ob3N0PWguX2hvc3QsdGhpcy5fcG9ydD1oLl9wb3J0LHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHRoaXMuX3BhdGg9aC5fcGF0aC5zbGljZSgpLHRoaXMuX3BhdGgucG9wKCkpLHA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfXRoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fZnJhZ21lbnQ9IiMiLHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHA9ImZyYWdtZW50In1icmVhaztjYXNlInJlbGF0aXZlIHNsYXNoIjppZigiLyIhPT13JiYiXFwiIT09dyl7ImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl91c2VybmFtZT1oLl91c2VybmFtZSx0aGlzLl9wYXNzd29yZD1oLl9wYXNzd29yZCkscD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9IlxcIj09PXcmJmQoIlxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4iKSxwPSJmaWxlIj09PXRoaXMuX3NjaGVtZT8iZmlsZSBob3N0IjoiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjticmVhaztjYXNlImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6aWYoIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdykscD0iYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjtjb250aW51ZX1wPSJhdXRob3JpdHkgc2Vjb25kIHNsYXNoIjticmVhaztjYXNlImF1dGhvcml0eSBzZWNvbmQgc2xhc2giOmlmKHA9ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyIsIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdyk7Y29udGludWV9YnJlYWs7Y2FzZSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiOmlmKCIvIiE9PXcmJiJcXCIhPT13KXtwPSJhdXRob3JpdHkiO2NvbnRpbnVlfWQoIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiAiK3cpO2JyZWFrO2Nhc2UiYXV0aG9yaXR5IjppZigiQCI9PT13KXt2JiYoZCgiQCBhbHJlYWR5IHNlZW4uIiksZys9IiU0MCIpLHY9ITA7Zm9yKHZhciBfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB4PWdbX107aWYoIlx0IiE9PXgmJiJcbiIhPT14JiYiXHIiIT09eClpZigiOiIhPT14fHxudWxsIT09dGhpcy5fcGFzc3dvcmQpe3ZhciBBPW8oeCk7bnVsbCE9PXRoaXMuX3Bhc3N3b3JkP3RoaXMuX3Bhc3N3b3JkKz1BOnRoaXMuX3VzZXJuYW1lKz1BfWVsc2UgdGhpcy5fcGFzc3dvcmQ9IiI7ZWxzZSBkKCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LiIpfWc9IiJ9ZWxzZXtpZih3PT09bHx8Ii8iPT09d3x8IlxcIj09PXd8fCI/Ij09PXd8fCIjIj09PXcpe20tPWcubGVuZ3RoLGc9IiIscD0iaG9zdCI7Y29udGludWV9Zys9d31icmVhaztjYXNlImZpbGUgaG9zdCI6aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXsyIT09Zy5sZW5ndGh8fCFjLnRlc3QoZ1swXSl8fCI6IiE9PWdbMV0mJiJ8IiE9PWdbMV0/MD09PWcubGVuZ3RoP3A9InJlbGF0aXZlIHBhdGggc3RhcnQiOih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIpOnA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGZpbGUgaG9zdC4iKTpnKz13O2JyZWFrO2Nhc2UiaG9zdCI6Y2FzZSJob3N0bmFtZSI6aWYoIjoiIT09d3x8eSl7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXtpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIsZilicmVhayBlO2NvbnRpbnVlfSJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXc/KCJbIj09PXc/eT0hMDoiXSI9PT13JiYoeT0hMSksZys9dyk6ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6ICIrdyl9ZWxzZSBpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icG9ydCIsImhvc3RuYW1lIj09PWYpYnJlYWsgZTticmVhaztjYXNlInBvcnQiOmlmKC9bMC05XS8udGVzdCh3KSlnKz13O2Vsc2V7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13fHxmKXtpZigiIiE9PWcpe3ZhciBDPXBhcnNlSW50KGcsMTApO0MhPT1lW3RoaXMuX3NjaGVtZV0mJih0aGlzLl9wb3J0PUMrIiIpLGc9IiJ9aWYoZilicmVhayBlO3A9InJlbGF0aXZlIHBhdGggc3RhcnQiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIHBvcnQ6ICIrdyk6YS5jYWxsKHRoaXMpfWJyZWFrO2Nhc2UicmVsYXRpdmUgcGF0aCBzdGFydCI6aWYoIlxcIj09PXcmJmQoIidcXCcgbm90IGFsbG93ZWQgaW4gcGF0aC4iKSxwPSJyZWxhdGl2ZSBwYXRoIiwiLyIhPT13JiYiXFwiIT09dyljb250aW51ZTticmVhaztjYXNlInJlbGF0aXZlIHBhdGgiOnZhciBQO3chPT1sJiYiLyIhPT13JiYiXFwiIT09dyYmKGZ8fCI/IiE9PXcmJiIjIiE9PXcpPyJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJihnKz1vKHcpKTooIlxcIj09PXcmJmQoIlxcIG5vdCBhbGxvd2VkIGluIHJlbGF0aXZlIHBhdGguIiksKFA9cltnLnRvTG93ZXJDYXNlKCldKSYmKGc9UCksIi4uIj09PWc/KHRoaXMuX3BhdGgucG9wKCksIi8iIT09dyYmIlxcIiE9PXcmJnRoaXMuX3BhdGgucHVzaCgiIikpOiIuIj09PWcmJiIvIiE9PXcmJiJcXCIhPT13P3RoaXMuX3BhdGgucHVzaCgiIik6Ii4iIT09ZyYmKCJmaWxlIj09PXRoaXMuX3NjaGVtZSYmMD09PXRoaXMuX3BhdGgubGVuZ3RoJiYyPT09Zy5sZW5ndGgmJmMudGVzdChnWzBdKSYmInwiPT09Z1sxXSYmKGc9Z1swXSsiOiIpLHRoaXMuX3BhdGgucHVzaChnKSksZz0iIiwiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13JiYodGhpcy5fZnJhZ21lbnQ9IiMiLHA9ImZyYWdtZW50IikpO2JyZWFrO2Nhc2UicXVlcnkiOmZ8fCIjIiE9PXc/dyE9PWwmJiJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJih0aGlzLl9xdWVyeSs9cyh3KSk6KHRoaXMuX2ZyYWdtZW50PSIjIixwPSJmcmFnbWVudCIpO2JyZWFrO2Nhc2UiZnJhZ21lbnQiOnchPT1sJiYiXHQiIT09dyYmIlxuIiE9PXcmJiJcciIhPT13JiYodGhpcy5fZnJhZ21lbnQrPXcpfW0rK319ZnVuY3Rpb24gaCgpe3RoaXMuX3NjaGVtZT0iIix0aGlzLl9zY2hlbWVEYXRhPSIiLHRoaXMuX3VzZXJuYW1lPSIiLHRoaXMuX3Bhc3N3b3JkPW51bGwsdGhpcy5faG9zdD0iIix0aGlzLl9wb3J0PSIiLHRoaXMuX3BhdGg9W10sdGhpcy5fcXVlcnk9IiIsdGhpcy5fZnJhZ21lbnQ9IiIsdGhpcy5faXNJbnZhbGlkPSExLHRoaXMuX2lzUmVsYXRpdmU9ITF9ZnVuY3Rpb24gZChlLHQpe3ZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBkfHwodD1uZXcgZChTdHJpbmcodCkpKSx0aGlzLl91cmw9ZSxoLmNhbGwodGhpcyk7dmFyIHI9ZS5yZXBsYWNlKC9eWyBcdFxyXG5cZl0rfFsgXHRcclxuXGZdKyQvZywiIik7Zi5jYWxsKHRoaXMscixudWxsLHQpfWQucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWZ9LGdldCBocmVmKCl7aWYodGhpcy5faXNJbnZhbGlkKXJldHVybiB0aGlzLl91cmw7dmFyIGU9IiI7cmV0dXJuIiI9PT10aGlzLl91c2VybmFtZSYmbnVsbD09PXRoaXMuX3Bhc3N3b3JkfHwoZT10aGlzLl91c2VybmFtZSsobnVsbCE9PXRoaXMuX3Bhc3N3b3JkPyI6Iit0aGlzLl9wYXNzd29yZDoiIikrIkAiKSx0aGlzLnByb3RvY29sKyh0aGlzLl9pc1JlbGF0aXZlPyIvLyIrZSt0aGlzLmhvc3Q6IiIpK3RoaXMucGF0aG5hbWUrdGhpcy5fcXVlcnkrdGhpcy5fZnJhZ21lbnR9LHNldCBocmVmKGUpe2guY2FsbCh0aGlzKSxmLmNhbGwodGhpcyxlKX0sZ2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX3NjaGVtZSsiOiJ9LHNldCBwcm90b2NvbChlKXt0aGlzLl9pc0ludmFsaWR8fGYuY2FsbCh0aGlzLGUrIjoiLCJzY2hlbWUgc3RhcnQiKX0sZ2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX3BvcnQ/dGhpcy5faG9zdCsiOiIrdGhpcy5fcG9ydDp0aGlzLl9ob3N0fSxzZXQgaG9zdChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZmLmNhbGwodGhpcyxlLCJob3N0Iil9LGdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9ob3N0fSxzZXQgaG9zdG5hbWUoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwiaG9zdG5hbWUiKX0sZ2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fcG9ydH0sc2V0IHBvcnQoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwicG9ydCIpfSxnZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX2lzUmVsYXRpdmU/Ii8iK3RoaXMuX3BhdGguam9pbigiLyIpOnRoaXMuX3NjaGVtZURhdGF9LHNldCBwYXRobmFtZShlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcGF0aD1bXSxmLmNhbGwodGhpcyxlLCJyZWxhdGl2ZSBwYXRoIHN0YXJ0IikpfSxnZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3F1ZXJ5fHwiPyI9PT10aGlzLl9xdWVyeT8iIjp0aGlzLl9xdWVyeX0sc2V0IHNlYXJjaChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcXVlcnk9Ij8iLCI/Ij09PWVbMF0mJihlPWUuc2xpY2UoMSkpLGYuY2FsbCh0aGlzLGUsInF1ZXJ5IikpfSxnZXQgaGFzaCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9mcmFnbWVudHx8IiMiPT09dGhpcy5fZnJhZ21lbnQ/IiI6dGhpcy5fZnJhZ21lbnR9LHNldCBoYXNoKGUpe3RoaXMuX2lzSW52YWxpZHx8KHRoaXMuX2ZyYWdtZW50PSIjIiwiIyI9PT1lWzBdJiYoZT1lLnNsaWNlKDEpKSxmLmNhbGwodGhpcyxlLCJmcmFnbWVudCIpKX0sZ2V0IG9yaWdpbigpe3ZhciBlO2lmKHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3NjaGVtZSlyZXR1cm4iIjtzd2l0Y2godGhpcy5fc2NoZW1lKXtjYXNlImRhdGEiOmNhc2UiZmlsZSI6Y2FzZSJqYXZhc2NyaXB0IjpjYXNlIm1haWx0byI6cmV0dXJuIm51bGwiO2Nhc2UiYmxvYiI6dHJ5e3JldHVybiBuZXcgZCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW58fCJudWxsIn1jYXRjaChlKXt9cmV0dXJuIm51bGwifXJldHVybihlPXRoaXMuaG9zdCk/dGhpcy5fc2NoZW1lKyI6Ly8iK2U6IiJ9fSx0LlVSTD1kfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXQ9e3VybDplfTtlbHNlIGlmKCgwLGkuaXNBcnJheUJ1ZmZlcikoZSkpdD17ZGF0YTplfTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBGKXQ9e3JhbmdlOmV9O2Vsc2V7aWYoIm9iamVjdCIhPT1fKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIFVpbnQ4QXJyYXksIHN0cmluZyBvciBhIHBhcmFtZXRlciBvYmplY3QiKTtpZighZS51cmwmJiFlLmRhdGEmJiFlLnJhbmdlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmwiKTt0PWV9dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxhPW51bGwscz1udWxsO2Zvcih2YXIgYyBpbiB0KWlmKCJ1cmwiIT09Y3x8InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cpaWYoInJhbmdlIiE9PWMpaWYoIndvcmtlciIhPT1jKWlmKCJkYXRhIiE9PWN8fHRbY11pbnN0YW5jZW9mIFVpbnQ4QXJyYXkpbltjXT10W2NdO2Vsc2V7dmFyIHU9dFtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbltjXT0oMCxpLnN0cmluZ1RvQnl0ZXMpKHUpO2Vsc2UgaWYoIm9iamVjdCIhPT1fKHUpfHxudWxsPT09dXx8aXNOYU4odS5sZW5ndGgpKXtpZighKDAsaS5pc0FycmF5QnVmZmVyKSh1KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgdHlwZWQgYXJyYXksIHN0cmluZyBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW2NdPW5ldyBVaW50OEFycmF5KHUpfWVsc2UgbltjXT1uZXcgVWludDhBcnJheSh1KX1lbHNlIHM9dFtjXTtlbHNlIGE9dFtjXTtlbHNlIG5bY109bmV3IGkuVVJMKHRbY10sd2luZG93LmxvY2F0aW9uKS5ocmVmO24ucmFuZ2VDaHVua1NpemU9bi5yYW5nZUNodW5rU2l6ZXx8NjU1MzYsbi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxvLkRPTUNNYXBSZWFkZXJGYWN0b3J5LG4uaWdub3JlRXJyb3JzPSEwIT09bi5zdG9wQXRFcnJvcnMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1Zzt2YXIgZD1PYmplY3QudmFsdWVzKGkuTmF0aXZlSW1hZ2VEZWNvZGluZyk7aWYodm9pZCAwIT09bi5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0JiZkLmluY2x1ZGVzKG4ubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCl8fChuLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnR8fGkuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUpLE51bWJlci5pc0ludGVnZXIobi5tYXhJbWFnZVNpemUpfHwobi5tYXhJbWFnZVNpemU9LTEpLCJib29sZWFuIiE9dHlwZW9mIG4uaXNFdmFsU3VwcG9ydGVkJiYobi5pc0V2YWxTdXBwb3J0ZWQ9ITApLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVGb250RmFjZXx8ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZVJhbmdlJiYobi5kaXNhYmxlUmFuZ2U9ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZVN0cmVhbSYmKG4uZGlzYWJsZVN0cmVhbT0hMSksImJvb2xlYW4iIT10eXBlb2Ygbi5kaXNhYmxlQXV0b0ZldGNoJiYobi5kaXNhYmxlQXV0b0ZldGNoPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVDcmVhdGVPYmplY3RVUkwmJihuLmRpc2FibGVDcmVhdGVPYmplY3RVUkw9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkx8fCExKSwoMCxpLnNldFZlcmJvc2l0eUxldmVsKShuLnZlcmJvc2l0eSksIXMpe3ZhciBtPXtwb3N0TWVzc2FnZVRyYW5zZmVyczpuLnBvc3RNZXNzYWdlVHJhbnNmZXJzLHZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0OmYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0fTtzPW0ucG9ydD9OLmZyb21Qb3J0KG0pOm5ldyBOKG0pLHIuX3dvcmtlcj1zfXZhciBnPXIuZG9jSWQ7cmV0dXJuIHMucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBlLmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOihyJiYodC5sZW5ndGg9ci5sZW5ndGgsdC5pbml0aWFsRGF0YT1yLmluaXRpYWxEYXRhKSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOm4sYXBpVmVyc2lvbjoiMi4xLjI2NiIsc291cmNlOntkYXRhOnQuZGF0YSx1cmw6dC51cmwscGFzc3dvcmQ6dC5wYXNzd29yZCxkaXNhYmxlQXV0b0ZldGNoOnQuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTp0LnJhbmdlQ2h1bmtTaXplLGxlbmd0aDp0Lmxlbmd0aH0sbWF4SW1hZ2VTaXplOnQubWF4SW1hZ2VTaXplLGRpc2FibGVGb250RmFjZTp0LmRpc2FibGVGb250RmFjZSxkaXNhYmxlQ3JlYXRlT2JqZWN0VVJMOnQuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxwb3N0TWVzc2FnZVRyYW5zZmVyczplLnBvc3RNZXNzYWdlVHJhbnNmZXJzLGRvY0Jhc2VVcmw6dC5kb2NCYXNlVXJsLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6dC5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0LGlnbm9yZUVycm9yczp0Lmlnbm9yZUVycm9ycyxpc0V2YWxTdXBwb3J0ZWQ6dC5pc0V2YWxTdXBwb3J0ZWR9KS50aGVuKChmdW5jdGlvbih0KXtpZihlLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIik7cmV0dXJuIHR9KSkpfShzLG4sYSxnKS50aGVuKChmdW5jdGlvbihlKXtpZihyLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkxvYWRpbmcgYWJvcnRlZCIpO3ZhciB0O2E/dD1uZXcgcC5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGEpOm4uZGF0YXx8KHQ9RSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKTt2YXIgaT1uZXcgaC5NZXNzYWdlSGFuZGxlcihnLGUscy5wb3J0KTtpLnBvc3RNZXNzYWdlVHJhbnNmZXJzPXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM7dmFyIG89bmV3IEIoaSxyLHQsbik7ci5fdHJhbnNwb3J0PW8saS5zZW5kKCJSZWFkeSIsbnVsbCl9KSl9KSkuY2F0Y2goci5fY2FwYWJpbGl0eS5yZWplY3QpLHJ9LHQuc2V0UERGTmV0d29ya1N0cmVhbUZhY3Rvcnk9ZnVuY3Rpb24oZSl7RT1lfSx0LmJ1aWxkPXQudmVyc2lvbj10LlBERlBhZ2VQcm94eT10LlBERkRvY3VtZW50UHJveHk9dC5QREZXb3JrZXI9dC5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ9dC5Mb29wYmFja1BvcnQ9dm9pZCAwO3ZhciBhPWcobigxNDcpKSxpPW4oMSksbz1uKDE1MSkscz1uKDE1MiksbD1uKDE1MyksYz1uKDE1NCksdT1nKG4oMykpLGY9bigxNTYpLGg9bigxNTcpLGQ9bigxNTgpLHA9bigxNjApLG09bigxNjEpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBiKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4oXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciB4LEEsQz0hMSxQPSExOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyhDPSEwLFA9ITApOlA9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1aXJlanMmJnJlcXVpcmVqcy50b1VybCYmKHg9cmVxdWlyZWpzLnRvVXJsKCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuanMiKSk7dmFyIEUsVD0idW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVpcmVqcyYmcmVxdWlyZWpzLmxvYWQ7aWYoQT1QP2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt0cnl7dmFyIG47bj1yKDg4KSxlKG4uV29ya2VyTWVzc2FnZUhhbmRsZXIpfWNhdGNoKGUpe3QoZSl9fS5iaW5kKG51bGwscikpLmNhdGNoKHQpfSkpfTpUP2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3JlcXVpcmVqcyhbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdLChmdW5jdGlvbihyKXt0cnl7ZShyLldvcmtlck1lc3NhZ2VIYW5kbGVyKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpfTpudWxsLCF4JiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50PyJ1bmRlZmluZWQiOl8oZG9jdW1lbnQpKSYmImN1cnJlbnRTY3JpcHQiaW4gZG9jdW1lbnQpe3ZhciBSPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1ImJih4PVIucmVwbGFjZSgvKFwuKD86bWluXC4pP2pzKShcPy4qKT8kL2ksIi53b3JrZXIkMSQyIikpfXZhciBPLEk9KE89MCxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt3KHRoaXMsZSksdGhpcy5fY2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3RyYW5zcG9ydD1udWxsLHRoaXMuX3dvcmtlcj1udWxsLHRoaXMuZG9jSWQ9ImQiK08rKyx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm9uUGFzc3dvcmQ9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLm9uVW5zdXBwb3J0ZWRGZWF0dXJlPW51bGx9cmV0dXJuIFMoZSxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRlc3Ryb3llZD0hMCwodGhpcy5fdHJhbnNwb3J0P3RoaXMuX3RyYW5zcG9ydC5kZXN0cm95KCk6UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5fdHJhbnNwb3J0PW51bGwsZS5fd29ya2VyJiYoZS5fd29ya2VyLmRlc3Ryb3koKSxlLl93b3JrZXI9bnVsbCl9KSl9fSx7a2V5OiJ0aGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybigwLGkuZGVwcmVjYXRlZCkoIlBERkRvY3VtZW50TG9hZGluZ1Rhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLiIpLHRoaXMucHJvbWlzZS50aGVuLmFwcGx5KHRoaXMucHJvbWlzZSxhcmd1bWVudHMpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19XSksZX0oKSksRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt3KHRoaXMsZSksdGhpcy5sZW5ndGg9dCx0aGlzLmluaXRpYWxEYXRhPXIsdGhpcy5fcmFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2goZSl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGUpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKGUpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ITAsbj0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBpLG89dGhpcy5fcmFuZ2VMaXN0ZW5lcnNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1vLm5leHQoKSkuZG9uZSk7cj0hMCkoMCxpLnZhbHVlKShlLHQpfWNhdGNoKGUpe249ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBhfX19fSx7a2V5OiJvbkRhdGFQcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPXQuX3Byb2dyZXNzTGlzdGVuZXJzW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGk9by5uZXh0KCkpLmRvbmUpO3I9ITApKDAsaS52YWx1ZSkoZSl9Y2F0Y2goZSl7bj0hMCxhPWV9ZmluYWxseXt0cnl7cnx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGF9fX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPXQuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVyc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShpPW8ubmV4dCgpKS5kb25lKTtyPSEwKSgwLGkudmFsdWUpKGUpfWNhdGNoKGUpe249ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBhfX19KSl9fSx7a2V5OiJ0cmFuc3BvcnRSZWFkeSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdERhdGFSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlIil9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCk7dC5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ9Rjt2YXIgTD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3codGhpcyxlKSx0aGlzLmxvYWRpbmdUYXNrPW4sdGhpcy5fcGRmSW5mbz10LHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBTKGUsW3trZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShlKX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgoZSl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKGUpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZU1vZGUoKX19LHtrZXk6ImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPdXRsaW5lKCl9fSx7a2V5OiJnZXRQZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBlcm1pc3Npb25zKCl9fSx7a2V5OiJnZXRNZXRhZGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGF0YSgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZ2V0U3RhdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRTdGF0cygpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGRmSW5mby5udW1QYWdlc319LHtrZXk6ImZpbmdlcnByaW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludH19LHtrZXk6ImxvYWRpbmdQYXJhbXMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtc319XSksZX0oKTt0LlBERkRvY3VtZW50UHJveHk9TDt2YXIgRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dyh0aGlzLGUpLHRoaXMucGFnZUluZGV4PXQsdGhpcy5fcGFnZUluZm89cix0aGlzLl90cmFuc3BvcnQ9bix0aGlzLl9zdGF0cz1hP25ldyBvLlN0YXRUaW1lcjpvLkR1bW15U3RhdFRpbWVyLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBVLHRoaXMuY2xlYW51cEFmdGVyUmVuZGVyPSExLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsdGhpcy5pbnRlbnRTdGF0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3llZD0hMX1yZXR1cm4gUyhlLFt7a2V5OiJnZXRWaWV3cG9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnNjYWxlLHI9ZS5yb3RhdGlvbixuPXZvaWQgMD09PXI/dGhpcy5yb3RhdGU6cixhPWUuZG9udEZsaXAscz12b2lkIDAhPT1hJiZhO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjF8fCJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzBdKSYmKCgwLGkuZGVwcmVjYXRlZCkoImdldFZpZXdwb3J0IGlzIGNhbGxlZCB3aXRoIG9ic29sZXRlIGFyZ3VtZW50cy4iKSx0PWFyZ3VtZW50c1swXSxuPSJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvdGF0ZSxzPSJib29sZWFuIj09dHlwZW9mIGFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdKSxuZXcgby5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOnQscm90YXRpb246bixkb250RmxpcDpzfSl9fSx7a2V5OiJnZXRBbm5vdGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmludGVudCxyPXZvaWQgMD09PXQ/bnVsbDp0O3JldHVybiB0aGlzLmFubm90YXRpb25zUHJvbWlzZSYmdGhpcy5hbm5vdGF0aW9uc0ludGVudD09PXJ8fCh0aGlzLmFubm90YXRpb25zUHJvbWlzZT10aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5wYWdlSW5kZXgsciksdGhpcy5hbm5vdGF0aW9uc0ludGVudD1yKSx0aGlzLmFubm90YXRpb25zUHJvbWlzZX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuY2FudmFzQ29udGV4dCxuPWUudmlld3BvcnQsYT1lLmludGVudCxzPXZvaWQgMD09PWE/ImRpc3BsYXkiOmEsbD1lLmVuYWJsZVdlYkdMLGM9dm9pZCAwIT09bCYmbCx1PWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcyxmPXZvaWQgMCE9PXUmJnUsaD1lLnRyYW5zZm9ybSxkPXZvaWQgMD09PWg/bnVsbDpoLHA9ZS5pbWFnZUxheWVyLGc9dm9pZCAwPT09cD9udWxsOnAsdj1lLmNhbnZhc0ZhY3RvcnkseT12b2lkIDA9PT12P251bGw6dixiPWUuYmFja2dyb3VuZCx3PXZvaWQgMD09PWI/bnVsbDpiLGs9dGhpcy5fc3RhdHM7ay50aW1lKCJPdmVyYWxsIiksdGhpcy5wZW5kaW5nQ2xlYW51cD0hMTt2YXIgUz0icHJpbnQiPT09cz8icHJpbnQiOiJkaXNwbGF5IixfPXl8fG5ldyBvLkRPTUNhbnZhc0ZhY3RvcnkseD1uZXcgbS5XZWJHTENvbnRleHQoe2VuYWJsZTpjfSk7dGhpcy5pbnRlbnRTdGF0ZXNbU118fCh0aGlzLmludGVudFN0YXRlc1tTXT1PYmplY3QuY3JlYXRlKG51bGwpKTt2YXIgQT10aGlzLmludGVudFN0YXRlc1tTXTtBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHl8fChBLnJlY2VpdmluZ09wZXJhdG9yTGlzdD0hMCxBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxBLm9wZXJhdG9yTGlzdD17Zm5BcnJheTpbXSxhcmdzQXJyYXk6W10sbGFzdENodW5rOiExfSxrLnRpbWUoIlBhZ2UgUmVxdWVzdCIpLHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kKCJSZW5kZXJQYWdlUmVxdWVzdCIse3BhZ2VJbmRleDp0aGlzLnBhZ2VOdW1iZXItMSxpbnRlbnQ6UyxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOiEwPT09Zn0pKTt2YXIgQz1mdW5jdGlvbihlKXt2YXIgcj1BLnJlbmRlclRhc2tzLmluZGV4T2YoUCk7cj49MCYmQS5yZW5kZXJUYXNrcy5zcGxpY2UociwxKSx0LmNsZWFudXBBZnRlclJlbmRlciYmKHQucGVuZGluZ0NsZWFudXA9ITApLHQuX3RyeUNsZWFudXAoKSxlP1AuY2FwYWJpbGl0eS5yZWplY3QoZSk6UC5jYXBhYmlsaXR5LnJlc29sdmUoKSxrLnRpbWVFbmQoIlJlbmRlcmluZyIpLGsudGltZUVuZCgiT3ZlcmFsbCIpfSxQPW5ldyB6KHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDpyLHZpZXdwb3J0Om4sdHJhbnNmb3JtOmQsaW1hZ2VMYXllcjpnLGJhY2tncm91bmQ6d30sb2Jqczp0aGlzLm9ianMsY29tbW9uT2Jqczp0aGlzLmNvbW1vbk9ianMsb3BlcmF0b3JMaXN0OkEub3BlcmF0b3JMaXN0LHBhZ2VOdW1iZXI6dGhpcy5wYWdlTnVtYmVyLGNhbnZhc0ZhY3Rvcnk6Xyx3ZWJHTENvbnRleHQ6eCx1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6InByaW50IiE9PVMscGRmQnVnOnRoaXMuX3BkZkJ1Z30pO0EucmVuZGVyVGFza3N8fChBLnJlbmRlclRhc2tzPVtdKSxBLnJlbmRlclRhc2tzLnB1c2goUCk7dmFyIEU9UC50YXNrO3JldHVybiBBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXt0LnBlbmRpbmdDbGVhbnVwP0MoKTooay50aW1lKCJSZW5kZXJpbmciKSxQLmluaXRpYWxpemVHcmFwaGljcyhlKSxQLm9wZXJhdG9yTGlzdENoYW5nZWQoKSl9KSkuY2F0Y2goQyksRX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmludGVudFN0YXRlcy5vcGxpc3R8fCh0aGlzLmludGVudFN0YXRlcy5vcGxpc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIGUsdD10aGlzLmludGVudFN0YXRlcy5vcGxpc3Q7cmV0dXJuIHQub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgoZT17fSkub3BlcmF0b3JMaXN0Q2hhbmdlZD1mdW5jdGlvbigpe2lmKHQub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayl7dC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKHQub3BlcmF0b3JMaXN0KTt2YXIgcj10LnJlbmRlclRhc2tzLmluZGV4T2YoZSk7cj49MCYmdC5yZW5kZXJUYXNrcy5zcGxpY2UociwxKX19LHQucmVjZWl2aW5nT3BlcmF0b3JMaXN0PSEwLHQub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0LnJlbmRlclRhc2tzPVtdLHQucmVuZGVyVGFza3MucHVzaChlKSx0Lm9wZXJhdG9yTGlzdD17Zm5BcnJheTpbXSxhcmdzQXJyYXk6W10sbGFzdENodW5rOiExfSx0aGlzLl9zdGF0cy50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZCgiUmVuZGVyUGFnZVJlcXVlc3QiLHtwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaW50ZW50OiJvcGxpc3QifSkpLHQub3BMaXN0UmVhZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InN0cmVhbVRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubm9ybWFsaXplV2hpdGVzcGFjZSxyPXZvaWQgMCE9PXQmJnQsbj1lLmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLGE9dm9pZCAwIT09biYmbixpPTEwMDtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRUZXh0Q29udGVudCIse3BhZ2VJbmRleDp0aGlzLnBhZ2VOdW1iZXItMSxub3JtYWxpemVXaGl0ZXNwYWNlOiEwPT09cixjb21iaW5lVGV4dEl0ZW1zOiEwIT09YX0se2hpZ2hXYXRlck1hcms6aSxzaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlLml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PXRoaXMuc3RyZWFtVGV4dENvbnRlbnQoZSk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXQuZ2V0UmVhZGVyKCksYT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiB0KCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4saT1yLnZhbHVlO3IuZG9uZT9lKGEpOihPYmplY3QuYXNzaWduKGEuc3R5bGVzLGkuc3R5bGVzKSwobj1hLml0ZW1zKS5wdXNoLmFwcGx5KG4sYihpLml0ZW1zKSksdCgpKX0pLHIpfSgpfSkpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fdHJhbnNwb3J0LnBhZ2VDYWNoZVt0aGlzLnBhZ2VJbmRleF09bnVsbDt2YXIgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJvcGxpc3QiIT09dCYmdGhpcy5pbnRlbnRTdGF0ZXNbdF0ucmVuZGVyVGFza3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpO2UucHVzaChyKSx0LmNhbmNlbCgpfSkpfSksdGhpcyksdGhpcy5vYmpzLmNsZWFyKCksdGhpcy5hbm5vdGF0aW9uc1Byb21pc2U9bnVsbCx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLFByb21pc2UuYWxsKGUpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cChlKX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5wZW5kaW5nQ2xlYW51cCYmIU9iamVjdC5rZXlzKHRoaXMuaW50ZW50U3RhdGVzKS5zb21lKChmdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVudFN0YXRlc1tlXTtyZXR1cm4gMCE9PXQucmVuZGVyVGFza3MubGVuZ3RofHx0LnJlY2VpdmluZ09wZXJhdG9yTGlzdH0pLHRoaXMpJiYoT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmludGVudFN0YXRlc1tlXX0pLHRoaXMpLHRoaXMub2Jqcy5jbGVhcigpLHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlPW51bGwsZSYmdGhpcy5fc3RhdHMgaW5zdGFuY2VvZiBvLlN0YXRUaW1lciYmKHRoaXMuX3N0YXRzPW5ldyBvLlN0YXRUaW1lciksdGhpcy5wZW5kaW5nQ2xlYW51cD0hMSl9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuaW50ZW50U3RhdGVzW3RdO3IuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSYmci5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoZSl9fSx7a2V5OiJfcmVuZGVyUGFnZUNodW5rIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLmludGVudFN0YXRlc1t0XSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXIub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChlLmZuQXJyYXlbbl0pLHIub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5wdXNoKGUuYXJnc0FycmF5W25dKTtyLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bms9ZS5sYXN0Q2h1bms7Zm9yKHZhciBpPTA7aTxyLnJlbmRlclRhc2tzLmxlbmd0aDtpKyspci5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7ZS5sYXN0Q2h1bmsmJihyLnJlY2VpdmluZ09wZXJhdG9yTGlzdD0hMSx0aGlzLl90cnlDbGVhbnVwKCkpfX0se2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4KzF9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGV9fSx7a2V5OiJyZWYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby5yZWZ9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnVzZXJVbml0fX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXd9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzIGluc3RhbmNlb2Ygby5TdGF0VGltZXI/dGhpcy5fc3RhdHM6bnVsbH19XSksZX0oKTt0LlBERlBhZ2VQcm94eT1EO3ZhciBNPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dyh0aGlzLGUpLHRoaXMuX2xpc3RlbmVycz1bXSx0aGlzLl9kZWZlcj10LHRoaXMuX2RlZmVycmVkPVByb21pc2UucmVzb2x2ZSh2b2lkIDApfXJldHVybiBTKGUsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7aWYodGhpcy5fZGVmZXIpe3ZhciBuPW5ldyBXZWFrTWFwLGE9e2RhdGE6ZnVuY3Rpb24gZShyKXtpZigib2JqZWN0IiE9PV8ocil8fG51bGw9PT1yKXJldHVybiByO2lmKG4uaGFzKHIpKXJldHVybiBuLmdldChyKTt2YXIgYSxvO2lmKChhPXIuYnVmZmVyKSYmKDAsaS5pc0FycmF5QnVmZmVyKShhKSl7dmFyIHM9dCYmdC5pbmNsdWRlcyhhKTtyZXR1cm4gbz1yPT09YT9yOnM/bmV3IHIuY29uc3RydWN0b3IoYSxyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKTpuZXcgci5jb25zdHJ1Y3RvcihyKSxuLnNldChyLG8pLG99Zm9yKHZhciBsIGluIG89QXJyYXkuaXNBcnJheShyKT9bXTp7fSxuLnNldChyLG8pLHIpe2Zvcih2YXIgYz12b2lkIDAsdT1yOyEoYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsbCkpOyl1PU9iamVjdC5nZXRQcm90b3R5cGVPZih1KTt2b2lkIDAhPT1jLnZhbHVlJiYiZnVuY3Rpb24iIT10eXBlb2YgYy52YWx1ZSYmKG9bbF09ZShjLnZhbHVlKSl9cmV0dXJuIG99KGUpfTt0aGlzLl9kZWZlcnJlZC50aGVuKChmdW5jdGlvbigpe3IuX2xpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNhbGwodGhpcyxhKX0pLHIpfSkpfWVsc2UgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FsbCh0aGlzLHtkYXRhOmV9KX0pLHRoaXMpfX0se2tleToiYWRkRXZlbnRMaXN0ZW5lciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9saXN0ZW5lcnMucHVzaCh0KX19LHtrZXk6InJlbW92ZUV2ZW50TGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7dGhpcy5fbGlzdGVuZXJzLnNwbGljZShyLDEpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbmVycz1bXX19XSksZX0oKTt0Lkxvb3BiYWNrUG9ydD1NO3ZhciBOPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgV2Vha01hcCxyPTA7ZnVuY3Rpb24gbigpe2lmKGYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMpcmV0dXJuIGYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYodm9pZCAwIT09eClyZXR1cm4geDt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfWZ1bmN0aW9uIGEoKXt0cnl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdy5wZGZqc1dvcmtlciYmd2luZG93LnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyfWNhdGNoKGUpe31yZXR1cm4gbnVsbH1yZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9ZS5uYW1lLG49dm9pZCAwPT09cj9udWxsOnIsYT1lLnBvcnQsbz12b2lkIDA9PT1hP251bGw6YSxsPWUucG9zdE1lc3NhZ2VUcmFuc2ZlcnMsYz12b2lkIDA9PT1sfHxsLHU9ZS52ZXJib3NpdHksZj12b2lkIDA9PT11PygwLGkuZ2V0VmVyYm9zaXR5TGV2ZWwpKCk6dTtpZih3KHRoaXMscyksbyYmdC5oYXMobykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0Iik7aWYodGhpcy5uYW1lPW4sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz0hMSE9PWMsdGhpcy52ZXJib3NpdHk9Zix0aGlzLl9yZWFkeUNhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wb3J0PW51bGwsdGhpcy5fd2ViV29ya2VyPW51bGwsdGhpcy5fbWVzc2FnZUhhbmRsZXI9bnVsbCxvKXJldHVybiB0LnNldChvLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KG8pO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gUyhzLFt7a2V5OiJfaW5pdGlhbGl6ZUZyb21Qb3J0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9wb3J0PWUsdGhpcy5fbWVzc2FnZUhhbmRsZXI9bmV3IGguTWVzc2FnZUhhbmRsZXIoIm1haW4iLCJ3b3JrZXIiLGUpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKCJyZWFkeSIsKGZ1bmN0aW9uKCl7fSkpLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJfaW5pdGlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlciYmIUMmJiFhKCkpe3ZhciBvPW4oKTt0cnl7KDAsaS5pc1NhbWVPcmlnaW4pKHdpbmRvdy5sb2NhdGlvbi5ocmVmLG8pfHwoZT1uZXcgaS5VUkwobyx3aW5kb3cubG9jYXRpb24pLmhyZWYsdD0iaW1wb3J0U2NyaXB0cygnIitlKyInKTsiLG89aS5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSkpKTt2YXIgcz1uZXcgV29ya2VyKG8pLGw9bmV3IGguTWVzc2FnZUhhbmRsZXIoIm1haW4iLCJ3b3JrZXIiLHMpLGM9ZnVuY3Rpb24oKXtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix1KSxsLmRlc3Ryb3koKSxzLnRlcm1pbmF0ZSgpLHIuZGVzdHJveWVkP3IuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTpyLl9zZXR1cEZha2VXb3JrZXIoKX0sdT1mdW5jdGlvbigpe3IuX3dlYldvcmtlcnx8YygpfTtzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix1KSxsLm9uKCJ0ZXN0IiwoZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdSksci5kZXN0cm95ZWQ/YygpOmUmJmUuc3VwcG9ydFR5cGVkQXJyYXk/KHIuX21lc3NhZ2VIYW5kbGVyPWwsci5fcG9ydD1zLHIuX3dlYldvcmtlcj1zLGUuc3VwcG9ydFRyYW5zZmVyc3x8KHIucG9zdE1lc3NhZ2VUcmFuc2ZlcnM9ITEpLHIuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCksbC5zZW5kKCJjb25maWd1cmUiLHt2ZXJib3NpdHk6ci52ZXJib3NpdHl9KSk6KHIuX3NldHVwRmFrZVdvcmtlcigpLGwuZGVzdHJveSgpLHMudGVybWluYXRlKCkpfSkpLGwub24oInJlYWR5IiwoZnVuY3Rpb24oZSl7aWYocy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdSksci5kZXN0cm95ZWQpYygpO2Vsc2UgdHJ5e2YoKX1jYXRjaChlKXtyLl9zZXR1cEZha2VXb3JrZXIoKX19KSk7dmFyIGY9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbci5wb3N0TWVzc2FnZVRyYW5zZmVycz8yNTU6MF0pO3RyeXtsLnNlbmQoInRlc3QiLGUsW2UuYnVmZmVyXSl9Y2F0Y2godCl7KDAsaS5pbmZvKSgiQ2Fubm90IHVzZSBwb3N0TWVzc2FnZSB0cmFuc2ZlcnMiKSxlWzBdPTAsbC5zZW5kKCJ0ZXN0IixlKX19O3JldHVybiB2b2lkIGYoKX1jYXRjaChlKXsoMCxpLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztDfHwoKDAsaS53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxDPSEwKSxmdW5jdGlvbigpe2lmKGUpcmV0dXJuIGUucHJvbWlzZTtlPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHQ9YSgpO3JldHVybiB0PyhlLnJlc29sdmUodCksZS5wcm9taXNlKTooKEF8fGZ1bmN0aW9uKCl7cmV0dXJuKDAsby5sb2FkU2NyaXB0KShuKCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZGZqc1dvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcn0pKX0pKCkudGhlbihlLnJlc29sdmUsZS5yZWplY3QpLGUucHJvbWlzZSl9KCkudGhlbigoZnVuY3Rpb24oZSl7aWYodC5kZXN0cm95ZWQpdC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpO2Vsc2V7dmFyIG49bmV3IE07dC5fcG9ydD1uO3ZhciBhPSJmYWtlIityKyssaT1uZXcgaC5NZXNzYWdlSGFuZGxlcihhKyJfd29ya2VyIixhLG4pO2Uuc2V0dXAoaSxuKTt2YXIgbz1uZXcgaC5NZXNzYWdlSGFuZGxlcihhLGErIl93b3JrZXIiLG4pO3QuX21lc3NhZ2VIYW5kbGVyPW8sdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCdTZXR0aW5nIHVwIGZha2Ugd29ya2VyIGZhaWxlZDogIicuY29uY2F0KGUubWVzc2FnZSwnIi4nKSkpfSkpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl93ZWJXb3JrZXImJih0aGlzLl93ZWJXb3JrZXIudGVybWluYXRlKCksdGhpcy5fd2ViV29ya2VyPW51bGwpLHQuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19LHtrZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InBvcnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0fX0se2tleToibWVzc2FnZUhhbmRsZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcn19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5wb3J0KXRocm93IG5ldyBFcnJvcigiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLiIpO3JldHVybiB0LmhhcyhlLnBvcnQpP3QuZ2V0KGUucG9ydCk6bmV3IHMoZSl9fSx7a2V5OiJnZXRXb3JrZXJTcmMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG4oKX19XSksc30oKX0oKTt0LlBERldvcmtlcj1OO3ZhciBqLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuLGEpe3codGhpcyxlKSx0aGlzLm1lc3NhZ2VIYW5kbGVyPXQsdGhpcy5sb2FkaW5nVGFzaz1yLHRoaXMuY29tbW9uT2Jqcz1uZXcgVSx0aGlzLmZvbnRMb2FkZXI9bmV3IHMuRm9udExvYWRlcih7ZG9jSWQ6ci5kb2NJZCxvblVuc3VwcG9ydGVkRmVhdHVyZTp0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpfSksdGhpcy5fcGFyYW1zPWEsdGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgYS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDphLmNNYXBVcmwsaXNDb21wcmVzc2VkOmEuY01hcFBhY2tlZH0pLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMucGFnZUNhY2hlPVtdLHRoaXMucGFnZVByb21pc2VzPVtdLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuc2V0dXBNZXNzYWdlSGFuZGxlcigpfXJldHVybiBTKGUsW3trZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSYmdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrIikpO3ZhciB0PVtdO3RoaXMucGFnZUNhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJnQucHVzaChlLl9kZXN0cm95KCkpfSkpLHRoaXMucGFnZUNhY2hlPVtdLHRoaXMucGFnZVByb21pc2VzPVtdO3ZhciByPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiB0LnB1c2gociksUHJvbWlzZS5hbGwodCkudGhlbigoZnVuY3Rpb24oKXtlLmZvbnRMb2FkZXIuY2xlYXIoKSxlLl9uZXR3b3JrU3RyZWFtJiZlLl9uZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKCksZS5tZXNzYWdlSGFuZGxlciYmKGUubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLGUubWVzc2FnZUhhbmRsZXI9bnVsbCksZS5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lc3NhZ2VIYW5kbGVyLHQ9dGhpcy5sb2FkaW5nVGFzaztlLm9uKCJHZXRSZWFkZXIiLChmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7KDAsaS5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0pLHRoaXMuX2Z1bGxSZWFkZXI9dGhpcy5fbmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyKCksdGhpcy5fZnVsbFJlYWRlci5vblByb2dyZXNzPWZ1bmN0aW9uKGUpe3IuX2xhc3RQcm9ncmVzcz17bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9fSx0Lm9uUHVsbD1mdW5jdGlvbigpe3IuX2Z1bGxSZWFkZXIucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciByPWUudmFsdWU7ZS5kb25lP3QuY2xvc2UoKTooKDAsaS5hc3NlcnQpKCgwLGkuaXNBcnJheUJ1ZmZlcikocikpLHQuZW5xdWV1ZShuZXcgVWludDhBcnJheShyKSwxLFtyXSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt0LmVycm9yKGUpfSkpfSx0Lm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe3IuX2Z1bGxSZWFkZXIuY2FuY2VsKGUpfX0pLHRoaXMpLGUub24oIlJlYWRlckhlYWRlcnNSZWFkeSIsKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGE9dGhpcy5fZnVsbFJlYWRlcjtyZXR1cm4gYS5oZWFkZXJzUmVhZHkudGhlbigoZnVuY3Rpb24oKXthLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZhLmlzUmFuZ2VTdXBwb3J0ZWR8fChyLl9sYXN0UHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHIuX2xhc3RQcm9ncmVzcyksYS5vblByb2dyZXNzPWZ1bmN0aW9uKGUpe3Qub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDphLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6YS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6YS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSksdGhpcyksZS5vbigiR2V0UmFuZ2VSZWFkZXIiLChmdW5jdGlvbihlLHQpeygwLGkuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtKTt2YXIgcj10aGlzLl9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO3Qub25QdWxsPWZ1bmN0aW9uKCl7ci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI9ZS52YWx1ZTtlLmRvbmU/dC5jbG9zZSgpOigoMCxpLmFzc2VydCkoKDAsaS5pc0FycmF5QnVmZmVyKShyKSksdC5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHIpLDEsW3JdKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSl9LHQub25DYW5jZWw9ZnVuY3Rpb24oZSl7ci5jYW5jZWwoZSl9fSksdGhpcyksZS5vbigiR2V0RG9jIiwoZnVuY3Rpb24oZSl7dmFyIHI9ZS5wZGZJbmZvO3RoaXMubnVtUGFnZXM9ci5udW1QYWdlcyx0aGlzLnBkZkRvY3VtZW50PW5ldyBMKHIsdGhpcyx0KSx0Ll9jYXBhYmlsaXR5LnJlc29sdmUodGhpcy5wZGZEb2N1bWVudCl9KSx0aGlzKSxlLm9uKCJQYXNzd29yZFJlcXVlc3QiLChmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQub25QYXNzd29yZCl0cnl7dC5vblBhc3N3b3JkKChmdW5jdGlvbihlKXtyLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7cGFzc3dvcmQ6ZX0pfSksZS5jb2RlKX1jYXRjaChlKXt0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGUpfWVsc2UgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgaS5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKSk7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5wcm9taXNlfSksdGhpcyksZS5vbigiUGFzc3dvcmRFeGNlcHRpb24iLChmdW5jdGlvbihlKXt0Ll9jYXBhYmlsaXR5LnJlamVjdChuZXcgaS5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKSl9KSx0aGlzKSxlLm9uKCJJbnZhbGlkUERGIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuSW52YWxpZFBERkV4Y2VwdGlvbihlLm1lc3NhZ2UpKX0pLHRoaXMpLGUub24oIk1pc3NpbmdQREYiLChmdW5jdGlvbihlKXt0Ll9jYXBhYmlsaXR5LnJlamVjdChuZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSkpfSksdGhpcyksZS5vbigiVW5leHBlY3RlZFJlc3BvbnNlIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cykpfSksdGhpcyksZS5vbigiVW5rbm93bkVycm9yIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpKX0pLHRoaXMpLGUub24oIkRhdGFMb2FkZWQiLChmdW5jdGlvbihlKXt0Lm9uUHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyh7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdGhpcy5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSx0aGlzKSxlLm9uKCJTdGFydFJlbmRlclBhZ2UiLChmdW5jdGlvbihlKXtpZighdGhpcy5kZXN0cm95ZWQpe3ZhciB0PXRoaXMucGFnZUNhY2hlW2UucGFnZUluZGV4XTt0Ll9zdGF0cy50aW1lRW5kKCJQYWdlIFJlcXVlc3QiKSx0Ll9zdGFydFJlbmRlclBhZ2UoZS50cmFuc3BhcmVuY3ksZS5pbnRlbnQpfX0pLHRoaXMpLGUub24oIlJlbmRlclBhZ2VDaHVuayIsKGZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveWVkfHx0aGlzLnBhZ2VDYWNoZVtlLnBhZ2VJbmRleF0uX3JlbmRlclBhZ2VDaHVuayhlLm9wZXJhdG9yTGlzdCxlLmludGVudCl9KSx0aGlzKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbih0KXt2YXIgcj10aGlzO2lmKCF0aGlzLmRlc3Ryb3llZCl7dmFyIG49eSh0LDMpLGE9blswXSxvPW5bMV0sbD1uWzJdO2lmKCF0aGlzLmNvbW1vbk9ianMuaGFzKGEpKXN3aXRjaChvKXtjYXNlIkZvbnQiOnZhciBjPXRoaXMuX3BhcmFtcztpZigiZXJyb3IiaW4gbCl7dmFyIGY9bC5lcnJvcjsoMCxpLndhcm4pKCJFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiAiLmNvbmNhdChmKSksdGhpcy5jb21tb25PYmpzLnJlc29sdmUoYSxmKTticmVha312YXIgaD1udWxsO2MucGRmQnVnJiZ1LmRlZmF1bHQuRm9udEluc3BlY3RvciYmdS5kZWZhdWx0LkZvbnRJbnNwZWN0b3IuZW5hYmxlZCYmKGg9e3JlZ2lzdGVyRm9udDpmdW5jdGlvbihlLHQpe3UuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmZvbnRBZGRlZChlLHQpfX0pO3ZhciBkPW5ldyBzLkZvbnRGYWNlT2JqZWN0KGwse2lzRXZhbFN1cHBvcnRlZDpjLmlzRXZhbFN1cHBvcnRlZCxkaXNhYmxlRm9udEZhY2U6Yy5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOmMuaWdub3JlRXJyb3JzLG9uVW5zdXBwb3J0ZWRGZWF0dXJlOnRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLmJpbmQodGhpcyksZm9udFJlZ2lzdHJ5Omh9KTt0aGlzLmZvbnRMb2FkZXIuYmluZChkKS50aGVuKChmdW5jdGlvbigpe3IuY29tbW9uT2Jqcy5yZXNvbHZlKGEsZCl9KSwoZnVuY3Rpb24odCl7ZS5zZW5kV2l0aFByb21pc2UoIkZvbnRGYWxsYmFjayIse2lkOmF9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuY29tbW9uT2Jqcy5yZXNvbHZlKGEsZCl9KSl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6dGhpcy5jb21tb25PYmpzLnJlc29sdmUoYSxsKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19fSksdGhpcyksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7aWYoIXRoaXMuZGVzdHJveWVkKXt2YXIgdD15KGUsNCkscj10WzBdLG49dFsxXSxhPXRbMl0saT10WzNdLG89dGhpcy5wYWdlQ2FjaGVbbl07aWYoIW8ub2Jqcy5oYXMocikpc3dpdGNoKGEpe2Nhc2UiSnBlZ1N0cmVhbSI6cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBJbWFnZTtyLm9ubG9hZD1mdW5jdGlvbigpe2Uocil9LHIub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJFcnJvciBkdXJpbmcgSlBFRyBpbWFnZSBsb2FkaW5nIikpfSxyLnNyYz1pfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe28ub2Jqcy5yZXNvbHZlKHIsZSl9KSk7Y2FzZSJJbWFnZSI6by5vYmpzLnJlc29sdmUocixpKSxpJiYiZGF0YSJpbiBpJiZpLmRhdGEubGVuZ3RoPjhlNiYmKG8uY2xlYW51cEFmdGVyUmVuZGVyPSEwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gb2JqZWN0IHR5cGUgIi5jb25jYXQoYSkpfX19KSx0aGlzKSxlLm9uKCJEb2NQcm9ncmVzcyIsKGZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveWVkfHx0Lm9uUHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyh7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pLHRoaXMpLGUub24oIlBhZ2VFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCF0aGlzLmRlc3Ryb3llZCl7dmFyIHQ9dGhpcy5wYWdlQ2FjaGVbZS5wYWdlTnVtLTFdLmludGVudFN0YXRlc1tlLmludGVudF07aWYoIXQuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSl0aHJvdyBuZXcgRXJyb3IoZS5lcnJvcik7aWYodC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnJlamVjdChlLmVycm9yKSx0Lm9wZXJhdG9yTGlzdCl7dC5vcGVyYXRvckxpc3QubGFzdENodW5rPSEwO2Zvcih2YXIgcj0wO3I8dC5yZW5kZXJUYXNrcy5sZW5ndGg7cisrKXQucmVuZGVyVGFza3Nbcl0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfX19KSx0aGlzKSxlLm9uKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHRoaXMpLGUub24oIkpwZWdEZWNvZGUiLChmdW5jdGlvbihlKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJyJkb2N1bWVudCIgaXMgbm90IGRlZmluZWQuJykpO3ZhciB0PXkoZSwyKSxyPXRbMF0sbj10WzFdO3JldHVybiAzIT09biYmMSE9PW4/UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJPbmx5IDMgY29tcG9uZW50cyBvciAxIGNvbXBvbmVudCBjYW4gYmUgcmV0dXJuZWQiKSk6bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7dmFyIGE9bmV3IEltYWdlO2Eub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9YS53aWR0aCxyPWEuaGVpZ2h0LGk9dCpyLG89NCppLHM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkqbiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtsLndpZHRoPXQsbC5oZWlnaHQ9cjt2YXIgYz1sLmdldENvbnRleHQoIjJkIik7Yy5kcmF3SW1hZ2UoYSwwLDApO3ZhciB1PWMuZ2V0SW1hZ2VEYXRhKDAsMCx0LHIpLmRhdGE7aWYoMz09PW4pZm9yKHZhciBmPTAsaD0wO2Y8bztmKz00LGgrPTMpc1toXT11W2ZdLHNbaCsxXT11W2YrMV0sc1toKzJdPXVbZisyXTtlbHNlIGlmKDE9PT1uKWZvcih2YXIgZD0wLHA9MDtkPG87ZCs9NCxwKyspc1twXT11W2RdO2Uoe2RhdGE6cyx3aWR0aDp0LGhlaWdodDpyfSl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJKcGVnRGVjb2RlIGZhaWxlZCB0byBsb2FkIGltYWdlIikpfSxhLnNyYz1yfSkpfSksdGhpcyksZS5vbigiRmV0Y2hCdWlsdEluQ01hcCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnRoaXMuQ01hcFJlYWRlckZhY3RvcnkuZmV0Y2goe25hbWU6ZS5uYW1lfSl9KSx0aGlzKX19LHtrZXk6Il9vblVuc3VwcG9ydGVkRmVhdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mZWF0dXJlSWQ7dGhpcy5kZXN0cm95ZWR8fHRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUmJnRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUodCl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPD0wfHxlPnRoaXMubnVtUGFnZXMpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlIHJlcXVlc3QiKSk7dmFyIHI9ZS0xO2lmKHIgaW4gdGhpcy5wYWdlUHJvbWlzZXMpcmV0dXJuIHRoaXMucGFnZVByb21pc2VzW3JdO3ZhciBuPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlIix7cGFnZUluZGV4OnJ9KS50aGVuKChmdW5jdGlvbihlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zcG9ydCBkZXN0cm95ZWQiKTt2YXIgbj1uZXcgRChyLGUsdCx0Ll9wYXJhbXMucGRmQnVnKTtyZXR1cm4gdC5wYWdlQ2FjaGVbcl09bixufSkpO3JldHVybiB0aGlzLnBhZ2VQcm9taXNlc1tyXT1uLG59fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUluZGV4Iix7cmVmOmV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihlKSl9KSl9fSx7a2V5OiJnZXRBbm5vdGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEFubm90YXRpb25zIix7cGFnZUluZGV4OmUsaW50ZW50OnR9KX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDplfSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsbnVsbCl9fSx7a2V5OiJnZXRBdHRhY2htZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEF0dGFjaG1lbnRzIixudWxsKX19LHtrZXk6ImdldEphdmFTY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRKYXZhU2NyaXB0IixudWxsKX19LHtrZXk6ImdldE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPdXRsaW5lIixudWxsKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57aW5mbzp0WzBdLG1ldGFkYXRhOnRbMV0/bmV3IGQuTWV0YWRhdGEodFsxXSk6bnVsbCxjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTplLl9mdWxsUmVhZGVyP2UuX2Z1bGxSZWFkZXIuZmlsZW5hbWU6bnVsbH19KSl9fSx7a2V5OiJnZXRTdGF0cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFN0YXRzIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJDbGVhbnVwIixudWxsKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9ZS5wYWdlQ2FjaGUubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWUucGFnZUNhY2hlW3RdO24mJm4uY2xlYW51cCgpfWUuY29tbW9uT2Jqcy5jbGVhcigpLGUuZm9udExvYWRlci5jbGVhcigpfSkpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGFyYW1zO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDplLmRpc2FibGVBdXRvRmV0Y2gsZGlzYWJsZUNyZWF0ZU9iamVjdFVSTDplLmRpc2FibGVDcmVhdGVPYmplY3RVUkwsZGlzYWJsZUZvbnRGYWNlOmUuZGlzYWJsZUZvbnRGYWNlLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6ZS5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0fSl9fV0pLGV9KCksVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt3KHRoaXMsZSksdGhpcy5fb2Jqcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBTKGUsW3trZXk6Il9lbnN1cmVPYmoiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vYmpzW2VdP3RoaXMuX29ianNbZV06dGhpcy5fb2Jqc1tlXT17Y2FwYWJpbGl0eTooMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbCxyZXNvbHZlZDohMX19fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKHQpcmV0dXJuIHRoaXMuX2Vuc3VyZU9iaihlKS5jYXBhYmlsaXR5LnByb21pc2UudGhlbih0KSxudWxsO3ZhciByPXRoaXMuX29ianNbZV07aWYoIXJ8fCFyLnJlc29sdmVkKXRocm93IG5ldyBFcnJvcigiUmVxdWVzdGluZyBvYmplY3QgdGhhdCBpc24ndCByZXNvbHZlZCB5ZXQgIi5jb25jYXQoZSwiLiIpKTtyZXR1cm4gci5kYXRhfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9vYmpzW2VdO3JldHVybiEhdCYmdC5yZXNvbHZlZH19LHtrZXk6InJlc29sdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fZW5zdXJlT2JqKGUpO3IucmVzb2x2ZWQ9ITAsci5kYXRhPXQsci5jYXBhYmlsaXR5LnJlc29sdmUodCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmpzPU9iamVjdC5jcmVhdGUobnVsbCl9fV0pLGV9KCkscT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dyh0aGlzLGUpLHRoaXMuX2ludGVybmFsUmVuZGVyVGFzaz10LHRoaXMub25Db250aW51ZT1udWxsfXJldHVybiBTKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCl9fSx7a2V5OiJ0aGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybigwLGkuZGVwcmVjYXRlZCkoIlJlbmRlclRhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLiIpLHRoaXMucHJvbWlzZS50aGVuLmFwcGx5KHRoaXMucHJvbWlzZSxhcmd1bWVudHMpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2V9fV0pLGV9KCksej0oaj1uZXcgV2Vha1NldCxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5jYWxsYmFjayxuPXQucGFyYW1zLGE9dC5vYmpzLG89dC5jb21tb25PYmpzLHM9dC5vcGVyYXRvckxpc3QsbD10LnBhZ2VOdW1iZXIsYz10LmNhbnZhc0ZhY3RvcnksdT10LndlYkdMQ29udGV4dCxmPXQudXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGg9dm9pZCAwIT09ZiYmZixkPXQucGRmQnVnLHA9dm9pZCAwIT09ZCYmZDt3KHRoaXMsZSksdGhpcy5jYWxsYmFjaz1yLHRoaXMucGFyYW1zPW4sdGhpcy5vYmpzPWEsdGhpcy5jb21tb25PYmpzPW8sdGhpcy5vcGVyYXRvckxpc3RJZHg9bnVsbCx0aGlzLm9wZXJhdG9yTGlzdD1zLHRoaXMucGFnZU51bWJlcj1sLHRoaXMuY2FudmFzRmFjdG9yeT1jLHRoaXMud2ViR0xDb250ZXh0PXUsdGhpcy5fcGRmQnVnPXAsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMudGFzaz1uZXcgcSh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgdCxyO3JldHVybiBTKGUsW3trZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihqLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtqLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmdS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyJiZ1LmRlZmF1bHQuU3RlcHBlck1hbmFnZXIuZW5hYmxlZCYmKHRoaXMuc3RlcHBlcj11LmRlZmF1bHQuU3RlcHBlck1hbmFnZXIuY3JlYXRlKHRoaXMucGFnZU51bWJlci0xKSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgdD10aGlzLnBhcmFtcyxyPXQuY2FudmFzQ29udGV4dCxuPXQudmlld3BvcnQsYT10LnRyYW5zZm9ybSxpPXQuaW1hZ2VMYXllcixvPXQuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgYy5DYW52YXNHcmFwaGljcyhyLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHRoaXMud2ViR0xDb250ZXh0LGkpLHRoaXMuZ2Z4LmJlZ2luRHJhd2luZyh7dHJhbnNmb3JtOmEsdmlld3BvcnQ6bix0cmFuc3BhcmVuY3k6ZSxiYWNrZ3JvdW5kOm99KSx0aGlzLm9wZXJhdG9yTGlzdElkeD0wLHRoaXMuZ3JhcGhpY3NSZWFkeT0hMCx0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayYmdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2soKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7dGhpcy5ydW5uaW5nPSExLHRoaXMuY2FuY2VsbGVkPSEwLHRoaXMuZ2Z4JiZ0aGlzLmdmeC5lbmREcmF3aW5nKCksdGhpcy5fY2FudmFzJiZqLmRlbGV0ZSh0aGlzLl9jYW52YXMpLHRoaXMuY2FsbGJhY2soZXx8bmV3IG8uUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMucGFnZU51bWJlciksImNhbnZhcyIpKX19LHtrZXk6Im9wZXJhdG9yTGlzdENoYW5nZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ncmFwaGljc1JlYWR5Pyh0aGlzLnN0ZXBwZXImJnRoaXMuc3RlcHBlci51cGRhdGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QpLHRoaXMucnVubmluZ3x8dGhpcy5fY29udGludWUoKSk6dGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2t8fCh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaz10aGlzLl9jb250aW51ZUJvdW5kKX19LHtrZXk6Il9jb250aW51ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmc9ITAsdGhpcy5jYW5jZWxsZWR8fCh0aGlzLnRhc2sub25Db250aW51ZT90aGlzLnRhc2sub25Db250aW51ZSh0aGlzLl9zY2hlZHVsZU5leHRCb3VuZCk6dGhpcy5fc2NoZWR1bGVOZXh0KCkpfX0se2tleToiX3NjaGVkdWxlTmV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2UuX25leHRCb3VuZCgpLmNhdGNoKGUuY2FuY2VsLmJpbmQoZSkpfSkpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKX19LHtrZXk6Il9uZXh0Iix2YWx1ZToodD1hLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmai5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXt2KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt2KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dKSxlfSgpKTt0LnZlcnNpb249IjIuMS4yNjYiLHQuYnVpbGQ9IjgxZjU4MzVjIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cigxNDgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgYT1mdW5jdGlvbigpe3JldHVybiB0aGlzfHwib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/InVuZGVmaW5lZCI6bihzZWxmKSkmJnNlbGZ9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksaT1hLnJlZ2VuZXJhdG9yUnVudGltZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuaW5kZXhPZigicmVnZW5lcmF0b3JSdW50aW1lIik+PTAsbz1pJiZhLnJlZ2VuZXJhdG9yUnVudGltZTtpZihhLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDAsZS5leHBvcnRzPXIoMTQ5KSxpKWEucmVnZW5lcmF0b3JSdW50aW1lPW87ZWxzZSB0cnl7ZGVsZXRlIGEucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKGUpe2EucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX0hZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LnByb3RvdHlwZSxhPW4uaGFzT3duUHJvcGVydHksaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsbD1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyIsYz0ib2JqZWN0Ij09PXQoZSksdT1yLnJlZ2VuZXJhdG9yUnVudGltZTtpZih1KWMmJihlLmV4cG9ydHM9dSk7ZWxzZXsodT1yLnJlZ2VuZXJhdG9yUnVudGltZT1jP2UuZXhwb3J0czp7fSkud3JhcD1nO3ZhciBmPXt9LGg9e307aFtvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2YscD1kJiZkKGQoUChbXSkpKTtwJiZwIT09biYmYS5jYWxsKHAsbykmJihoPXApO3ZhciBtPXcucHJvdG90eXBlPXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaCk7Yi5wcm90b3R5cGU9bS5jb25zdHJ1Y3Rvcj13LHcuY29uc3RydWN0b3I9Yix3W2xdPWIuZGlzcGxheU5hbWU9IkdlbmVyYXRvckZ1bmN0aW9uIix1LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWJ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHcpOihlLl9fcHJvdG9fXz13LGwgaW4gZXx8KGVbbF09IkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sdS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksUy5wcm90b3R5cGVbc109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdS5Bc3luY0l0ZXJhdG9yPVMsdS5hc3luYz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1uZXcgUyhnKGUsdCxyLG4pKTtyZXR1cm4gdS5pc0dlbmVyYXRvckZ1bmN0aW9uKHQpP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxrKG0pLG1bbF09IkdlbmVyYXRvciIsbVtvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9LHUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2gocik7cmV0dXJuIHQucmV2ZXJzZSgpLGZ1bmN0aW9uIHIoKXtmb3IoO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHIudmFsdWU9bixyLmRvbmU9ITEscn1yZXR1cm4gci5kb25lPSEwLHJ9fSx1LnZhbHVlcz1QLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJmEuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiByKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIHIoImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPWEuY2FsbChpLCJjYXRjaExvYyIpLGw9YS5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gcihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiByKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gcihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiByKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tyXTtpZihuLnRyeUxvYzw9dGhpcy5wcmV2JiZhLmNhbGwobiwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8bi5maW5hbGx5TG9jKXt2YXIgaT1uO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19fWZ1bmN0aW9uIGcoZSx0LHIsbil7dmFyIGE9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiB5P3Q6eSxpPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLG89bmV3IEMobnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1fKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD12KGUsdCxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fShlLHIsbyksaX1mdW5jdGlvbiB2KGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZnVuY3Rpb24geSgpe31mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIHcoKXt9ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfX0pKX1mdW5jdGlvbiBTKGUpe3ZhciByO3RoaXMuX2ludm9rZT1mdW5jdGlvbihuLGkpe2Z1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uIHIobixpLG8scyl7dmFyIGw9dihlW25dLGUsaSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIGM9bC5hcmcsdT1jLnZhbHVlO3JldHVybiB1JiYib2JqZWN0Ij09PXQodSkmJmEuY2FsbCh1LCJfX2F3YWl0Iik/UHJvbWlzZS5yZXNvbHZlKHUuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLG8scyl9KSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxvKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxvLHMpfSkpfXMobC5hcmcpfShuLGkscixvKX0pKX1yZXR1cm4gcj1yP3IudGhlbihvLG8pOm8oKX19ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLF8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBmO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBmfXZhciBuPXYocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24geChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBBKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBDKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goeCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIHI9LTEsbj1mdW5jdGlvbiB0KCl7Zm9yKDsrK3I8ZS5sZW5ndGg7KWlmKGEuY2FsbChlLHIpKXJldHVybiB0LnZhbHVlPWVbcl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gbi5uZXh0PW59fXJldHVybntuZXh0OkV9fWZ1bmN0aW9uIEUoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX0oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmPyJ1bmRlZmluZWQiOnQoc2VsZikpJiZzZWxmfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpKX0pLmNhbGwodGhpcyxyKDE1MCkoZSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYWRkTGlua0F0dHJpYnV0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC51cmwsYT10LnRhcmdldCxpPXQucmVsO2lmKGUuaHJlZj1lLnRpdGxlPXI/KDAsbi5yZW1vdmVOdWxsQ2hhcmFjdGVycykocik6IiIscil7dmFyIG89T2JqZWN0LnZhbHVlcyhkKSxzPW8uaW5jbHVkZXMoYSk/YTpkLk5PTkU7ZS50YXJnZXQ9cFtzXSxlLnJlbD0ic3RyaW5nIj09dHlwZW9mIGk/aToibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvdyJ9fSx0LmdldEZpbGVuYW1lRnJvbVVybD1mdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoIiMiKSxyPWUuaW5kZXhPZigiPyIpLG49TWF0aC5taW4odD4wP3Q6ZS5sZW5ndGgscj4wP3I6ZS5sZW5ndGgpO3JldHVybiBlLnN1YnN0cmluZyhlLmxhc3RJbmRleE9mKCIvIixuKSsxLG4pfSx0LmxvYWRTY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPWUsbi5vbmxvYWQ9dCxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgc2NyaXB0IGF0OiAiLmNvbmNhdChuLnNyYykpKX0sKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQobil9KSl9LHQuRHVtbXlTdGF0VGltZXI9dC5TdGF0VGltZXI9dC5ET01TVkdGYWN0b3J5PXQuRE9NQ01hcFJlYWRlckZhY3Rvcnk9dC5ET01DYW52YXNGYWN0b3J5PXQuREVGQVVMVF9MSU5LX1JFTD10LkxpbmtUYXJnZXQ9dC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249dC5QYWdlVmlld3BvcnQ9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gdCYmaShlLnByb3RvdHlwZSx0KSxyJiZpKGUsciksZX10LkRFRkFVTFRfTElOS19SRUw9Im5vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3ciO3ZhciBzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXthKHRoaXMsZSl9cmV0dXJuIG8oZSxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGU8PTB8fHQ8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1yLmdldENvbnRleHQoIjJkIik7cmV0dXJuIHIud2lkdGg9ZSxyLmhlaWdodD10LHtjYW52YXM6cixjb250ZXh0Om59fX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighZS5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJjYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO2lmKHQ8PTB8fHI8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbnZhcyBzaXplIik7ZS5jYW52YXMud2lkdGg9dCxlLmNhbnZhcy5oZWlnaHQ9cn19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmNhbnZhcyl0aHJvdyBuZXcgRXJyb3IoImNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkIik7ZS5jYW52YXMud2lkdGg9MCxlLmNhbnZhcy5oZWlnaHQ9MCxlLmNhbnZhcz1udWxsLGUuY29udGV4dD1udWxsfX1dKSxlfSgpO3QuRE9NQ2FudmFzRmFjdG9yeT1sO3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmJhc2VVcmwsbj12b2lkIDA9PT1yP251bGw6cixpPXQuaXNDb21wcmVzc2VkLG89dm9pZCAwIT09aSYmaTthKHRoaXMsZSksdGhpcy5iYXNlVXJsPW4sdGhpcy5pc0NvbXByZXNzZWQ9b31yZXR1cm4gbyhlLFt7a2V5OiJmZXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUubmFtZTtyZXR1cm4gdGhpcy5iYXNlVXJsP3I/bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsYSl7dmFyIGk9dC5iYXNlVXJsK3IrKHQuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPW5ldyBYTUxIdHRwUmVxdWVzdDtvLm9wZW4oIkdFVCIsaSwhMCksdC5pc0NvbXByZXNzZWQmJihvLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSxvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKG8ucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkRPTkUpe3ZhciByO2lmKCgyMDA9PT1vLnN0YXR1c3x8MD09PW8uc3RhdHVzKSYmKHQuaXNDb21wcmVzc2VkJiZvLnJlc3BvbnNlP3I9bmV3IFVpbnQ4QXJyYXkoby5yZXNwb25zZSk6IXQuaXNDb21wcmVzc2VkJiZvLnJlc3BvbnNlVGV4dCYmKHI9KDAsbi5zdHJpbmdUb0J5dGVzKShvLnJlc3BvbnNlVGV4dCkpLHIpKXJldHVybiB2b2lkIGUoe2NNYXBEYXRhOnIsY29tcHJlc3Npb25UeXBlOnQuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkV9KTthKG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIisodC5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiKSsiQ01hcCBhdDogIitpKSl9fSxvLnNlbmQobnVsbCl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDTWFwIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIikpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVGhlIENNYXAgImJhc2VVcmwiIHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCwgZW5zdXJlIHRoYXQgdGhlICJjTWFwVXJsIiBhbmQgImNNYXBQYWNrZWQiIEFQSSBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZC4nKSl9fV0pLGV9KCk7dC5ET01DTWFwUmVhZGVyRmFjdG9yeT1jO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2EodGhpcyxlKX1yZXR1cm4gbyhlLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi5hc3NlcnQpKGU+MCYmdD4wLCJJbnZhbGlkIFNWRyBkaW1lbnNpb25zIik7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsInN2ZzpzdmciKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyLnNldEF0dHJpYnV0ZSgid2lkdGgiLGUrInB4Iiksci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsdCsicHgiKSxyLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxyLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK2UrIiAiK3QpLHJ9fSx7a2V5OiJjcmVhdGVFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBlLCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGUiKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocyxlKX19XSksZX0oKTt0LkRPTVNWR0ZhY3Rvcnk9dTt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC52aWV3Qm94LG49dC5zY2FsZSxpPXQucm90YXRpb24sbz10Lm9mZnNldFgscz12b2lkIDA9PT1vPzA6byxsPXQub2Zmc2V0WSxjPXZvaWQgMD09PWw/MDpsLHU9dC5kb250RmxpcCxmPXZvaWQgMCE9PXUmJnU7YSh0aGlzLGUpLHRoaXMudmlld0JveD1yLHRoaXMuc2NhbGU9bix0aGlzLnJvdGF0aW9uPWksdGhpcy5vZmZzZXRYPXMsdGhpcy5vZmZzZXRZPWM7dmFyIGgsZCxwLG0sZyx2LHksYix3PShyWzJdK3JbMF0pLzIsaz0oclszXStyWzFdKS8yO3N3aXRjaChpPShpJT0zNjApPDA/aSszNjA6aSl7Y2FzZSAxODA6aD0tMSxkPTAscD0wLG09MTticmVhaztjYXNlIDkwOmg9MCxkPTEscD0xLG09MDticmVhaztjYXNlIDI3MDpoPTAsZD0tMSxwPS0xLG09MDticmVhaztkZWZhdWx0Omg9MSxkPTAscD0wLG09LTF9ZiYmKHA9LXAsbT0tbSksMD09PWg/KGc9TWF0aC5hYnMoay1yWzFdKSpuK3Msdj1NYXRoLmFicyh3LXJbMF0pKm4rYyx5PU1hdGguYWJzKHJbM10tclsxXSkqbixiPU1hdGguYWJzKHJbMl0tclswXSkqbik6KGc9TWF0aC5hYnMody1yWzBdKSpuK3Msdj1NYXRoLmFicyhrLXJbMV0pKm4rYyx5PU1hdGguYWJzKHJbMl0tclswXSkqbixiPU1hdGguYWJzKHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixkKm4scCpuLG0qbixnLWgqbip3LXAqbiprLHYtZCpuKnctbSpuKmtdLHRoaXMud2lkdGg9eSx0aGlzLmhlaWdodD1ifXJldHVybiBvKGUsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuc2NhbGUsbj12b2lkIDA9PT1yP3RoaXMuc2NhbGU6cixhPXQucm90YXRpb24saT12b2lkIDA9PT1hP3RoaXMucm90YXRpb246YSxvPXQuZG9udEZsaXAscz12b2lkIDAhPT1vJiZvO3JldHVybiBuZXcgZSh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmksb2Zmc2V0WDp0aGlzLm9mZnNldFgsb2Zmc2V0WTp0aGlzLm9mZnNldFksZG9udEZsaXA6c30pfX0se2tleToiY29udmVydFRvVmlld3BvcnRQb2ludCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHRdLHRoaXMudHJhbnNmb3JtKX19LHtrZXk6ImNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVsxXV0sdGhpcy50cmFuc2Zvcm0pLHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbM11dLHRoaXMudHJhbnNmb3JtKTtyZXR1cm5bdFswXSx0WzFdLHJbMF0sclsxXV19fSx7a2V5OiJjb252ZXJ0VG9QZGZQb2ludCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5VdGlsLmFwcGx5SW52ZXJzZVRyYW5zZm9ybShbZSx0XSx0aGlzLnRyYW5zZm9ybSl9fV0pLGV9KCk7dC5QYWdlVmlld3BvcnQ9Zjt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLnR5cGU9dH1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249aDt2YXIgZD17Tk9ORTowLFNFTEY6MSxCTEFOSzoyLFBBUkVOVDozLFRPUDo0fTt0LkxpbmtUYXJnZXQ9ZDt2YXIgcD1bIiIsIl9zZWxmIiwiX2JsYW5rIiwiX3BhcmVudCIsIl90b3AiXSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07YSh0aGlzLGUpLHRoaXMuZW5hYmxlZD0hIXQsdGhpcy5zdGFydGVkPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aW1lcz1bXX1yZXR1cm4gbyhlLFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmVuYWJsZWQmJihlIGluIHRoaXMuc3RhcnRlZCYmKDAsbi53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiK2UpLHRoaXMuc3RhcnRlZFtlXT1EYXRlLm5vdygpKX19LHtrZXk6InRpbWVFbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZW5hYmxlZCYmKGUgaW4gdGhpcy5zdGFydGVkfHwoMCxuLndhcm4pKCJUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgIitlKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6ZSxzdGFydDp0aGlzLnN0YXJ0ZWRbZV0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW2VdKX19LHtrZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRpbWVzLHQ9IiIscj0wLG49MCxhPWUubGVuZ3RoO248YTsrK24pe3ZhciBpPWVbbl0ubmFtZTtpLmxlbmd0aD5yJiYocj1pLmxlbmd0aCl9Zm9yKHZhciBvPTAscz1lLmxlbmd0aDtvPHM7KytvKXt2YXIgbD1lW29dLGM9bC5lbmQtbC5zdGFydDt0Kz0iIi5jb25jYXQobC5uYW1lLnBhZEVuZChyKSwiICIpLmNvbmNhdChjLCJtc1xuIil9cmV0dXJuIHR9fV0pLGV9KCk7dC5TdGF0VGltZXI9bTt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXthKHRoaXMsZSksKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIER1bW15U3RhdFRpbWVyLiIpfXJldHVybiBvKGUsbnVsbCxbe2tleToidGltZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToidGltZUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fV0pLGV9KCk7dC5EdW1teVN0YXRUaW1lcj1nfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRMb2FkZXI9dC5Gb250RmFjZU9iamVjdD12b2lkIDA7dmFyIG4sYT0obj1yKDE0NykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoMSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4obz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1vKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbChlKXtyZXR1cm4obD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksZX12YXIgcCxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmRvY0lkLG49dC5vblVuc3VwcG9ydGVkRmVhdHVyZTtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRm9udExvYWRlci4iKSx0aGlzLmRvY0lkPXIsdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9bix0aGlzLm5hdGl2ZUZvbnRGYWNlcz1bXSx0aGlzLnN0eWxlRWxlbWVudD1udWxsfXZhciB0LHI7cmV0dXJuIGQoZSxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2goZSksZG9jdW1lbnQuZm9udHMuYWRkKGUpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHlsZUVsZW1lbnQ7dHx8KCh0PXRoaXMuc3R5bGVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLmlkPSJQREZKU19GT05UX1NUWUxFX1RBR18iLmNvbmNhdCh0aGlzLmRvY0lkKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0KSk7dmFyIHI9dC5zaGVldDtyLmluc2VydFJ1bGUoZSxyLmNzc1J1bGVzLmxlbmd0aCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5hdGl2ZUZvbnRGYWNlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtkb2N1bWVudC5mb250cy5kZWxldGUoZSl9KSksdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOih0PWEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sbz10aGlzO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXQuYXR0YWNoZWQmJiF0Lm1pc3NpbmdGaWxlKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZih0LmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe2UubmV4dD0xOTticmVha31pZighKHI9dC5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLGUucHJldj03LGUubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOmUubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IGUucHJldj0xMixlLnQwPWUuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDppLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmZvbnR9KSwoMCxpLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdChlLnQwLCInLiIpKSx0LmRpc2FibGVGb250RmFjZT0hMCxlLnQwO2Nhc2UgMTg6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEobj10LmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7ZS5uZXh0PTI1O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShuKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7ZS5uZXh0PTI0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3ZhciByPW8uX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGUpO28uX3ByZXBhcmVGb250TG9hZEV2ZW50KFtuXSxbdF0scil9KSkpO2Nhc2UgMjU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9xdWV1ZUxvYWRpbmdDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrYC4iKX19LHtrZXk6Il9wcmVwYXJlRm9udExvYWRFdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuIil9fSx7a2V5OiJpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkYC4iKX19LHtrZXk6ImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuIil9fSx7a2V5OiJfbG9hZFRlc3RGb250IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfbG9hZFRlc3RGb250YC4iKX19XSksZX0oKTt0LkZvbnRMb2FkZXI9cCx0LkZvbnRMb2FkZXI9cD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBmKHRoaXMsdCksKHI9cyh0aGlzLGwodCkuY2FsbCh0aGlzLGUpKSkubG9hZGluZ0NvbnRleHQ9e3JlcXVlc3RzOltdLG5leHRSZXF1ZXN0SWQ6MH0sci5sb2FkVGVzdEZvbnRJZD0wLHJ9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmMoZSx0KX0odCxlKSxkKHQsW3trZXk6Il9xdWV1ZUxvYWRpbmdDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb2FkaW5nQ29udGV4dCxyPXtpZDoicGRmanMtZm9udC1sb2FkaW5nLSIuY29uY2F0KHQubmV4dFJlcXVlc3RJZCsrKSxkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLGkuYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDt0LnJlcXVlc3RzLmxlbmd0aD4wJiZ0LnJlcXVlc3RzWzBdLmRvbmU7KXt2YXIgZT10LnJlcXVlc3RzLnNoaWZ0KCk7c2V0VGltZW91dChlLmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6ZX07cmV0dXJuIHQucmVxdWVzdHMucHVzaChyKSxyfX0se2tleToiX3ByZXBhcmVGb250TG9hZEV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBlLmNoYXJDb2RlQXQodCk8PDI0fGUuY2hhckNvZGVBdCh0KzEpPDwxNnxlLmNoYXJDb2RlQXQodCsyKTw8OHwyNTUmZS5jaGFyQ29kZUF0KHQrMyl9ZnVuY3Rpb24gYShlLHQscixuKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCx0KStuK2Uuc3Vic3RyaW5nKHQrcil9dmFyIG8scyxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2wud2lkdGg9MSxsLmhlaWdodD0xO3ZhciBjPWwuZ2V0Q29udGV4dCgiMmQiKSx1PTAsZj0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxkPW4oaD1hKGgsOTc2LGYubGVuZ3RoLGYpLDE2KTtmb3Iobz0wLHM9Zi5sZW5ndGgtMztvPHM7bys9NClkPWQtMTQ4MjE4NDc5MituKGYsbyl8MDtvPGYubGVuZ3RoJiYoZD1kLTE0ODIxODQ3OTIrbihmKyJYWFgiLG8pfDApLGg9YShoLDE2LDQsKDAsaS5zdHJpbmczMikoZCkpO3ZhciBwPSJ1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwiLmNvbmNhdChidG9hKGgpLCIpOyIpLG09J0Bmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiInLmNvbmNhdChmLCciO3NyYzonKS5jb25jYXQocCwifSIpO3RoaXMuaW5zZXJ0UnVsZShtKTt2YXIgZz1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7bzxzO28rKylnLnB1c2godFtvXS5sb2FkZWROYW1lKTtnLnB1c2goZik7dmFyIHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHYuc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IGhpZGRlbjt3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4O3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsiKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKXt2YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7eS50ZXh0Q29udGVudD0iSGkiLHkuc3R5bGUuZm9udEZhbWlseT1nW29dLHYuYXBwZW5kQ2hpbGQoeSl9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSxmdW5jdGlvbiBlKHQscil7aWYoKyt1PjMwKXJldHVybigwLGkud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtjLmZvbnQ9IjMwcHggIit0LGMuZmlsbFRleHQoIi4iLDAsMjApLGMuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dChlLmJpbmQobnVsbCx0LHIpKX0oZiwoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHYpLHIuY29tcGxldGUoKX0pKX19LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQuZm9udHM7aWYoZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciB0PS9Nb3ppbGxhXC81LjAuKj9ydjooXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0WzFdPDYzJiYoZT0hMSl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciBlPSExO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yKWU9ITA7ZWxzZXt2YXIgdD0vTW96aWxsYVwvNS4wLio/cnY6KFxkKykuKj8gR2Vja28vLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7dCYmdFsxXT49MTQmJihlPSEwKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGUpfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIl9sb2FkVGVzdEZvbnQiLGF0b2IoIlQxUlVUd0FMQUlBQUF3QXdRMFpHSURIdFpnNEFBQU9ZQUFBQWdVWkdWRTFsa3pad0FBQUVIQUFBQUJ4SFJFVkdBQlFBRlFBQUJEZ0FBQUFlVDFNdk1sWU5Zd2tBQUFFZ0FBQUFZR050WVhBQkRRTFVBQUFDTkFBQUFVSm9aV0ZrL3hWRkRRQUFBTHdBQUFBMmFHaGxZUWRrQStvQUFBRDBBQUFBSkdodGRIZ0Q2QUFBQUFBRVdBQUFBQVp0WVhod0FBSlFBQUFBQVJnQUFBQUdibUZ0WlZqbWRINEFBQUdBQUFBQXNYQnZjM1QvaGdBekFBQURlQUFBQUNBQUFRQUFBQUVBQUxaUkZzUmZEenoxQUFzRDZBQUFBQURPQk9UTEFBQUFBTTRLSER3QUFBQUFBK2dESVFBQUFBZ0FBZ0FBQUFBQUFBQUJBQUFESVFBQUFGb0Q2QUFBQUFBRDZBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFVQUFBQWdBQUFBUUQ2QUgwQUFVQUFBS0tBcndBQUFDTUFvb0N2QUFBQWVBQU1RRUNBQUFDQUFZSkFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBRkJtUldRQXdBQXVBQzRESVA4NEFGb0RJUUFBQUFBQUFRQUFBQUFBQUFBQUFDQUFJQUFCQUFBQURnQ3VBQUVBQUFBQUFBQUFBUUFBQUFFQUFBQUFBQUVBQVFBQUFBRUFBQUFBQUFJQUFRQUFBQUVBQUFBQUFBTUFBUUFBQUFFQUFBQUFBQVFBQVFBQUFBRUFBQUFBQUFVQUFRQUFBQUVBQUFBQUFBWUFBUUFBQUFNQUFRUUpBQUFBQWdBQkFBTUFBUVFKQUFFQUFnQUJBQU1BQVFRSkFBSUFBZ0FCQUFNQUFRUUpBQU1BQWdBQkFBTUFBUVFKQUFRQUFnQUJBQU1BQVFRSkFBVUFBZ0FCQUFNQUFRUUpBQVlBQWdBQldBQllBQUFBQUFBQUF3QUFBQU1BQUFBY0FBRUFBQUFBQUR3QUF3QUJBQUFBSEFBRUFDQUFBQUFFQUFRQUFRQUFBQzcvL3dBQUFDNy8vLy9UQUFFQUFBQUFBQUFCQmdBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUQvZ3dBeUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVFFQUFFQkFRSllBQUVCQVNINER3RDRHd0hFQXZnY0EvZ1hCSXdNQVl1TCtuejV0UVhrRDVqM0NCTG5FUUFDQVFFQklWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZQUFBQkFRQUFEd0FDQVFFRUUvdDNEb3Y2ZkFINmZBVCtmUHA4K253SERvc01Ddm0xQ3ZtMURBejZmQlFBQUFBQUFBQUJBQUFBQU1tSmJ6RUFBQUFBemdUakZRQUFBQURPQk9RcEFBRUFBQUFBQUFBQURBQVVBQVFBQUFBQkFBQUFBZ0FCQUFBQUFBQUFBQUFENkFBQUFBQUFBQT09IikpfX1dKSx0fShtKTt2YXIgZz17Z2V0IHZhbHVlKCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInZhbHVlIiwoMCxpLmlzRXZhbFN1cHBvcnRlZCkoKSl9fSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXIuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bixpPXIuZGlzYWJsZUZvbnRGYWNlLG89dm9pZCAwIT09aSYmaSxzPXIuaWdub3JlRXJyb3JzLGw9dm9pZCAwIT09cyYmcyxjPXIub25VbnN1cHBvcnRlZEZlYXR1cmUsdT12b2lkIDA9PT1jP251bGw6YyxoPXIuZm9udFJlZ2lzdHJ5LGQ9dm9pZCAwPT09aD9udWxsOmg7Zm9yKHZhciBwIGluIGYodGhpcyxlKSx0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCksdCl0aGlzW3BdPXRbcF07dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hLHRoaXMuZGlzYWJsZUZvbnRGYWNlPSEwPT09byx0aGlzLmlnbm9yZUVycm9ycz0hMD09PWwsdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9dSx0aGlzLmZvbnRSZWdpc3RyeT1kfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZU5hdGl2ZUZvbnRGYWNlIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmRhdGF8fHRoaXMuZGlzYWJsZUZvbnRGYWNlKXJldHVybiBudWxsO3ZhciBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gdGhpcy5mb250UmVnaXN0cnkmJnRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzKSxlfX0se2tleToiY3JlYXRlRm9udEZhY2VSdWxlIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmRhdGF8fHRoaXMuZGlzYWJsZUZvbnRGYWNlKXJldHVybiBudWxsO3ZhciBlPSgwLGkuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSksdD0idXJsKGRhdGE6Ii5jb25jYXQodGhpcy5taW1ldHlwZSwiO2Jhc2U2NCwiKS5jb25jYXQoYnRvYShlKSwiKTsiKSxyPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQodCwifSIpO3JldHVybiB0aGlzLmZvbnRSZWdpc3RyeSYmdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMsdCkscn19LHtrZXk6ImdldFBhdGhHZW5lcmF0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dGhpcy5jb21waWxlZEdseXBoc1t0XSlyZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1t0XTt2YXIgcixuO3RyeXtyPWUuZ2V0KHRoaXMubG9hZGVkTmFtZSsiX3BhdGhfIit0KX1jYXRjaChlKXtpZighdGhpcy5pZ25vcmVFcnJvcnMpdGhyb3cgZTtyZXR1cm4gdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUmJnRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtmZWF0dXJlSWQ6aS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250fSksKDAsaS53YXJuKSgnZ2V0UGF0aEdlbmVyYXRvciAtIGlnbm9yaW5nIGNoYXJhY3RlcjogIicuY29uY2F0KGUsJyIuJykpLHRoaXMuY29tcGlsZWRHbHlwaHNbdF09ZnVuY3Rpb24oZSx0KXt9fWlmKHRoaXMuaXNFdmFsU3VwcG9ydGVkJiZnLnZhbHVlKXtmb3IodmFyIGEsbz0iIixzPTAsbD1yLmxlbmd0aDtzPGw7cysrKWE9dm9pZCAwIT09KG49cltzXSkuYXJncz9uLmFyZ3Muam9pbigiLCIpOiIiLG8rPSJjLiIrbi5jbWQrIigiK2ErIik7XG4iO3JldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW3RdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLG8pfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW3RdPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBhPTAsaT1yLmxlbmd0aDthPGk7YSsrKSJzY2FsZSI9PT0obj1yW2FdKS5jbWQmJihuLmFyZ3M9W3QsLXRdKSxlW24uY21kXS5hcHBseShlLG4uYXJncyl9fX1dKSxlfSgpO3QuRm9udEZhY2VPYmplY3Q9dn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGE9cig0KSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50fHwiIixvPS9UcmlkZW50Ly50ZXN0KGkpLHM9L0NyaU9TLy50ZXN0KGkpOyhvfHxzKSYmKG4uZGlzYWJsZUNyZWF0ZU9iamVjdFVSTD0hMCksYSgpJiYobi5kaXNhYmxlRm9udEZhY2U9ITAsbi5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0PSJub25lIiksdC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zPU9iamVjdC5mcmVlemUobil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksYT1yKDE1NSksaT17Z2V0IHZhbHVlKCl7cmV0dXJuKDAsbi5zaGFkb3cpKGksInZhbHVlIiwoMCxuLmlzTGl0dGxlRW5kaWFuKSgpKX19O2Z1bmN0aW9uIG8oZSl7ZS5tb3pDdXJyZW50VHJhbnNmb3JtfHwoZS5fb3JpZ2luYWxTYXZlPWUuc2F2ZSxlLl9vcmlnaW5hbFJlc3RvcmU9ZS5yZXN0b3JlLGUuX29yaWdpbmFsUm90YXRlPWUucm90YXRlLGUuX29yaWdpbmFsU2NhbGU9ZS5zY2FsZSxlLl9vcmlnaW5hbFRyYW5zbGF0ZT1lLnRyYW5zbGF0ZSxlLl9vcmlnaW5hbFRyYW5zZm9ybT1lLnRyYW5zZm9ybSxlLl9vcmlnaW5hbFNldFRyYW5zZm9ybT1lLnNldFRyYW5zZm9ybSxlLl90cmFuc2Zvcm1NYXRyaXg9ZS5fdHJhbnNmb3JtTWF0cml4fHxbMSwwLDAsMSwwLDBdLGUuX3RyYW5zZm9ybVN0YWNrPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtb3pDdXJyZW50VHJhbnNmb3JtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1NYXRyaXgsdD1lWzBdLHI9ZVsxXSxuPWVbMl0sYT1lWzNdLGk9ZVs0XSxvPWVbNV0scz10KmEtcipuLGw9cipuLXQqYTtyZXR1cm5bYS9zLHIvbCxuL2wsdC9zLChhKmktbipvKS9sLChyKmktdCpvKS9zXX19KSxlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1NYXRyaXg7dGhpcy5fdHJhbnNmb3JtU3RhY2sucHVzaChlKSx0aGlzLl90cmFuc2Zvcm1NYXRyaXg9ZS5zbGljZSgwLDYpLHRoaXMuX29yaWdpbmFsU2F2ZSgpfSxlLnJlc3RvcmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtlJiYodGhpcy5fdHJhbnNmb3JtTWF0cml4PWUsdGhpcy5fb3JpZ2luYWxSZXN0b3JlKCkpfSxlLnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3RyYW5zZm9ybU1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XSx0aGlzLl9vcmlnaW5hbFRyYW5zbGF0ZShlLHQpfSxlLnNjYWxlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtTWF0cml4O3JbMF09clswXSplLHJbMV09clsxXSplLHJbMl09clsyXSp0LHJbM109clszXSp0LHRoaXMuX29yaWdpbmFsU2NhbGUoZSx0KX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4sYSxpLG8pe3ZhciBzPXRoaXMuX3RyYW5zZm9ybU1hdHJpeDt0aGlzLl90cmFuc2Zvcm1NYXRyaXg9W3NbMF0qdCtzWzJdKnIsc1sxXSp0K3NbM10qcixzWzBdKm4rc1syXSphLHNbMV0qbitzWzNdKmEsc1swXSppK3NbMl0qbytzWzRdLHNbMV0qaStzWzNdKm8rc1s1XV0sZS5fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4sYSxpLG8pfSxlLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixhLGksbyl7dGhpcy5fdHJhbnNmb3JtTWF0cml4PVt0LHIsbixhLGksb10sZS5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0odCxyLG4sYSxpLG8pfSxlLnJvdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLG49dGhpcy5fdHJhbnNmb3JtTWF0cml4O3RoaXMuX3RyYW5zZm9ybU1hdHJpeD1bblswXSp0K25bMl0qcixuWzFdKnQrblszXSpyLG5bMF0qLXIrblsyXSp0LG5bMV0qLXIrblszXSp0LG5bNF0sbls1XV0sdGhpcy5fb3JpZ2luYWxSb3RhdGUoZSl9KX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYW52YXNGYWN0b3J5PWUsdGhpcy5jYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZT17Z2V0Q2FudmFzOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhO3JldHVybiB2b2lkIDAhPT10aGlzLmNhY2hlW2VdPyhhPXRoaXMuY2FjaGVbZV0sdGhpcy5jYW52YXNGYWN0b3J5LnJlc2V0KGEsdCxyKSxhLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSk6KGE9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSh0LHIpLHRoaXMuY2FjaGVbZV09YSksbiYmbyhhLmNvbnRleHQpLGF9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuY2FjaGUpe3ZhciB0PXRoaXMuY2FjaGVbZV07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3kodCksZGVsZXRlIHRoaXMuY2FjaGVbZV19fX0sZX0oKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYWxwaGFJc1NoYXBlPSExLHRoaXMuZm9udFNpemU9MCx0aGlzLmZvbnRTaXplU2NhbGU9MSx0aGlzLnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLmZvbnRNYXRyaXg9bi5GT05UX0lERU5USVRZX01BVFJJWCx0aGlzLmxlYWRpbmc9MCx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPSIjMDAwMDAwIix0aGlzLnN0cm9rZUNvbG9yPSIjMDAwMDAwIix0aGlzLnBhdHRlcm5GaWxsPSExLHRoaXMuZmlsbEFscGhhPTEsdGhpcy5zdHJva2VBbHBoYT0xLHRoaXMubGluZVdpZHRoPTEsdGhpcy5hY3RpdmVTTWFzaz1udWxsLHRoaXMucmVzdW1lU01hc2tDdHg9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9LHNldEN1cnJlbnRQb2ludDpmdW5jdGlvbihlLHQpe3RoaXMueD1lLHRoaXMueT10fX0sZX0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEsaSl7dGhpcy5jdHg9ZSx0aGlzLmN1cnJlbnQ9bmV3IGwsdGhpcy5zdGF0ZVN0YWNrPVtdLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5yZXM9bnVsbCx0aGlzLnhvYmpzPW51bGwsdGhpcy5jb21tb25PYmpzPXQsdGhpcy5vYmpzPXIsdGhpcy5jYW52YXNGYWN0b3J5PW4sdGhpcy53ZWJHTENvbnRleHQ9YSx0aGlzLmltYWdlTGF5ZXI9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHModGhpcy5jYW52YXNGYWN0b3J5KSxlJiZvKGUpLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH1mdW5jdGlvbiB0KGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGEpZS5wdXRJbWFnZURhdGEodCwwLDApO2Vsc2V7dmFyIHIsYSxvLHMsbCxjPXQuaGVpZ2h0LHU9dC53aWR0aCxmPWMlMTYsaD0oYy1mKS8xNixkPTA9PT1mP2g6aCsxLHA9ZS5jcmVhdGVJbWFnZURhdGEodSwxNiksbT0wLGc9dC5kYXRhLHY9cC5kYXRhO2lmKHQua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgeT1nLmJ5dGVMZW5ndGgsYj1uZXcgVWludDMyQXJyYXkodi5idWZmZXIsMCx2LmJ5dGVMZW5ndGg+PjIpLHc9Yi5sZW5ndGgsaz11Kzc+PjMsUz00Mjk0OTY3Mjk1LF89aS52YWx1ZT80Mjc4MTkwMDgwOjI1NTtmb3IoYT0wO2E8ZDthKyspe2ZvcihzPWE8aD8xNjpmLHI9MCxvPTA7bzxzO28rKyl7Zm9yKHZhciB4PXktbSxBPTAsQz14Pms/dTo4KngtNyxQPS04JkMsRT0wLFQ9MDtBPFA7QSs9OClUPWdbbSsrXSxiW3IrK109MTI4JlQ/UzpfLGJbcisrXT02NCZUP1M6XyxiW3IrK109MzImVD9TOl8sYltyKytdPTE2JlQ/UzpfLGJbcisrXT04JlQ/UzpfLGJbcisrXT00JlQ/UzpfLGJbcisrXT0yJlQ/UzpfLGJbcisrXT0xJlQ/UzpfO2Zvcig7QTxDO0ErKykwPT09RSYmKFQ9Z1ttKytdLEU9MTI4KSxiW3IrK109VCZFP1M6XyxFPj49MX1mb3IoO3I8dzspYltyKytdPTA7ZS5wdXRJbWFnZURhdGEocCwwLDE2KmEpfX1lbHNlIGlmKHQua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe2ZvcihvPTAsbD0xNip1KjQsYT0wO2E8aDthKyspdi5zZXQoZy5zdWJhcnJheShtLG0rbCkpLG0rPWwsZS5wdXRJbWFnZURhdGEocCwwLG8pLG8rPTE2O2E8ZCYmKGw9dSpmKjQsdi5zZXQoZy5zdWJhcnJheShtLG0rbCkpLGUucHV0SW1hZ2VEYXRhKHAsMCxvKSl9ZWxzZXtpZih0LmtpbmQhPT1uLkltYWdlS2luZC5SR0JfMjRCUFApdGhyb3cgbmV3IEVycm9yKCJiYWQgaW1hZ2Uga2luZDogIi5jb25jYXQodC5raW5kKSk7Zm9yKGw9dSoocz0xNiksYT0wO2E8ZDthKyspe2ZvcihhPj1oJiYobD11KihzPWYpKSxyPTAsbz1sO28tLTspdltyKytdPWdbbSsrXSx2W3IrK109Z1ttKytdLHZbcisrXT1nW20rK10sdltyKytdPTI1NTtlLnB1dEltYWdlRGF0YShwLDAsMTYqYSl9fX19ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgcj10LmhlaWdodCxuPXQud2lkdGgsYT1yJTE2LGk9KHItYSkvMTYsbz0wPT09YT9pOmkrMSxzPWUuY3JlYXRlSW1hZ2VEYXRhKG4sMTYpLGw9MCxjPXQuZGF0YSx1PXMuZGF0YSxmPTA7ZjxvO2YrKyl7Zm9yKHZhciBoPWY8aT8xNjphLGQ9MyxwPTA7cDxoO3ArKylmb3IodmFyIG09MCxnPTA7ZzxuO2crKyl7aWYoIW0pe3ZhciB2PWNbbCsrXTttPTEyOH11W2RdPXYmbT8wOjI1NSxkKz00LG0+Pj0xfWUucHV0SW1hZ2VEYXRhKHMsMCwxNipmKX19ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj1bInN0cm9rZVN0eWxlIiwiZmlsbFN0eWxlIiwiZmlsbFJ1bGUiLCJnbG9iYWxBbHBoYSIsImxpbmVXaWR0aCIsImxpbmVDYXAiLCJsaW5lSm9pbiIsIm1pdGVyTGltaXQiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJmb250Il0sbj0wLGE9ci5sZW5ndGg7bjxhO24rKyl7dmFyIGk9cltuXTt2b2lkIDAhPT1lW2ldJiYodFtpXT1lW2ldKX12b2lkIDAhPT1lLnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkpLHQubGluZURhc2hPZmZzZXQ9ZS5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gdShlKXtlLnN0cm9rZVN0eWxlPSIjMDAwMDAwIixlLmZpbGxTdHlsZT0iIzAwMDAwMCIsZS5maWxsUnVsZT0ibm9uemVybyIsZS5nbG9iYWxBbHBoYT0xLGUubGluZVdpZHRoPTEsZS5saW5lQ2FwPSJidXR0IixlLmxpbmVKb2luPSJtaXRlciIsZS5taXRlckxpbWl0PTEwLGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciIsZS5mb250PSIxMHB4IHNhbnMtc2VyaWYiLHZvaWQgMCE9PWUuc2V0TGluZURhc2gmJihlLnNldExpbmVEYXNoKFtdKSxlLmxpbmVEYXNoT2Zmc2V0PTApfWZ1bmN0aW9uIGYoZSx0LHIsbil7Zm9yKHZhciBhPWUubGVuZ3RoLGk9MztpPGE7aSs9NCl7dmFyIG89ZVtpXTtpZigwPT09byllW2ktM109dCxlW2ktMl09cixlW2ktMV09bjtlbHNlIGlmKG88MjU1KXt2YXIgcz0yNTUtbztlW2ktM109ZVtpLTNdKm8rdCpzPj44LGVbaS0yXT1lW2ktMl0qbytyKnM+PjgsZVtpLTFdPWVbaS0xXSpvK24qcz4+OH19fWZ1bmN0aW9uIGgoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPTM7YTxuO2ErPTQpe3ZhciBpPXI/cltlW2FdXTplW2FdO3RbYV09dFthXSppKigxLzI1NSl8MH19ZnVuY3Rpb24gZChlLHQscil7Zm9yKHZhciBuPWUubGVuZ3RoLGE9MzthPG47YSs9NCl7dmFyIGk9NzcqZVthLTNdKzE1MiplW2EtMl0rMjgqZVthLTFdO3RbYV09cj90W2FdKnJbaT4+OF0+Pjg6dFthXSppPj4xNn19ZnVuY3Rpb24gcChlLHQscixuKXt2YXIgYT10LmNhbnZhcyxpPXQuY29udGV4dDtlLnNldFRyYW5zZm9ybSh0LnNjYWxlWCwwLDAsdC5zY2FsZVksdC5vZmZzZXRYLHQub2Zmc2V0WSk7dmFyIG89dC5iYWNrZHJvcHx8bnVsbDtpZighdC50cmFuc2Zlck1hcCYmbi5pc0VuYWJsZWQpe3ZhciBzPW4uY29tcG9zZVNNYXNrKHtsYXllcjpyLmNhbnZhcyxtYXNrOmEscHJvcGVydGllczp7c3VidHlwZTp0LnN1YnR5cGUsYmFja2Ryb3A6b319KTtyZXR1cm4gZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHZvaWQgZS5kcmF3SW1hZ2Uocyx0Lm9mZnNldFgsdC5vZmZzZXRZKX0hZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsbD0hIWksYz1sP2lbMF06MCx1PWw/aVsxXTowLHA9bD9pWzJdOjA7cz0iTHVtaW5vc2l0eSI9PT1hP2Q6aDtmb3IodmFyIG09TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksZz0wO2c8bjtnKz1tKXt2YXIgdj1NYXRoLm1pbihtLG4tZykseT1lLmdldEltYWdlRGF0YSgwLGcscix2KSxiPXQuZ2V0SW1hZ2VEYXRhKDAsZyxyLHYpO2wmJmYoeS5kYXRhLGMsdSxwKSxzKHkuZGF0YSxiLmRhdGEsbyksZS5wdXRJbWFnZURhdGEoYiwwLGcpfX0oaSxyLGEud2lkdGgsYS5oZWlnaHQsdC5zdWJ0eXBlLG8sdC50cmFuc2Zlck1hcCksZS5kcmF3SW1hZ2UoYSwwLDApfXZhciBtPVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sZz1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLHY9e30seT17fTtmb3IodmFyIGIgaW4gZS5wcm90b3R5cGU9e2JlZ2luRHJhd2luZzpmdW5jdGlvbihlKXt2YXIgdD1lLnRyYW5zZm9ybSxyPWUudmlld3BvcnQsbj1lLnRyYW5zcGFyZW5jeSxhPXZvaWQgMCE9PW4mJm4saT1lLmJhY2tncm91bmQsbz12b2lkIDA9PT1pP251bGw6aSxzPXRoaXMuY3R4LmNhbnZhcy53aWR0aCxsPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQ7aWYodGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LmZpbGxTdHlsZT1vfHwicmdiKDI1NSwgMjU1LCAyNTUpIix0aGlzLmN0eC5maWxsUmVjdCgwLDAscyxsKSx0aGlzLmN0eC5yZXN0b3JlKCksYSl7dmFyIGM9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoInRyYW5zcGFyZW50IixzLGwsITApO3RoaXMuY29tcG9zaXRlQ3R4PXRoaXMuY3R4LHRoaXMudHJhbnNwYXJlbnRDYW52YXM9Yy5jYW52YXMsdGhpcy5jdHg9Yy5jb250ZXh0LHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsdGhpcy5jb21wb3NpdGVDdHgubW96Q3VycmVudFRyYW5zZm9ybSl9dGhpcy5jdHguc2F2ZSgpLHUodGhpcy5jdHgpLHQmJnRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KSx0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsci50cmFuc2Zvcm0pLHRoaXMuYmFzZVRyYW5zZm9ybT10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCksdGhpcy5pbWFnZUxheWVyJiZ0aGlzLmltYWdlTGF5ZXIuYmVnaW5MYXlvdXQoKX0sZXhlY3V0ZU9wZXJhdG9yTGlzdDpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1lLmFyZ3NBcnJheSxvPWUuZm5BcnJheSxzPXR8fDAsbD1pLmxlbmd0aDtpZihsPT09cylyZXR1cm4gcztmb3IodmFyIGMsdT1sLXM+MTAmJiJmdW5jdGlvbiI9PXR5cGVvZiByLGY9dT9EYXRlLm5vdygpKzE1OjAsaD0wLGQ9dGhpcy5jb21tb25PYmpzLHA9dGhpcy5vYmpzOzspe2lmKHZvaWQgMCE9PWEmJnM9PT1hLm5leHRCcmVha1BvaW50KXJldHVybiBhLmJyZWFrSXQocyxyKSxzO2lmKChjPW9bc10pIT09bi5PUFMuZGVwZW5kZW5jeSl0aGlzW2NdLmFwcGx5KHRoaXMsaVtzXSk7ZWxzZSBmb3IodmFyIG09aVtzXSxnPTAsdj1tLmxlbmd0aDtnPHY7ZysrKXt2YXIgeT1tW2ddLGI9ImciPT09eVswXSYmIl8iPT09eVsxXT9kOnA7aWYoIWIuaGFzKHkpKXJldHVybiBiLmdldCh5LHIpLHN9aWYoKytzPT09bClyZXR1cm4gcztpZih1JiYrK2g+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7aD0wfX19LGVuZERyYXdpbmc6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiZ0aGlzLmVuZFNNYXNrR3JvdXAoKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcyYmKHRoaXMuY3R4PXRoaXMuY29tcG9zaXRlQ3R4LHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLnRyYW5zcGFyZW50Q2FudmFzLDAsMCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMudHJhbnNwYXJlbnRDYW52YXM9bnVsbCksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMud2ViR0xDb250ZXh0LmNsZWFyKCksdGhpcy5pbWFnZUxheWVyJiZ0aGlzLmltYWdlTGF5ZXIuZW5kTGF5b3V0KCl9LHNldExpbmVXaWR0aDpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQubGluZVdpZHRoPWUsdGhpcy5jdHgubGluZVdpZHRoPWV9LHNldExpbmVDYXA6ZnVuY3Rpb24oZSl7dGhpcy5jdHgubGluZUNhcD1tW2VdfSxzZXRMaW5lSm9pbjpmdW5jdGlvbihlKXt0aGlzLmN0eC5saW5lSm9pbj1nW2VdfSxzZXRNaXRlckxpbWl0OmZ1bmN0aW9uKGUpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9ZX0sc2V0RGFzaDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY3R4O3ZvaWQgMCE9PXIuc2V0TGluZURhc2gmJihyLnNldExpbmVEYXNoKGUpLHIubGluZURhc2hPZmZzZXQ9dCl9LHNldFJlbmRlcmluZ0ludGVudDpmdW5jdGlvbihlKXt9LHNldEZsYXRuZXNzOmZ1bmN0aW9uKGUpe30sc2V0R1N0YXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7dmFyIG49ZVt0XSxhPW5bMF0saT1uWzFdO3N3aXRjaChhKXtjYXNlIkxXIjp0aGlzLnNldExpbmVXaWR0aChpKTticmVhaztjYXNlIkxDIjp0aGlzLnNldExpbmVDYXAoaSk7YnJlYWs7Y2FzZSJMSiI6dGhpcy5zZXRMaW5lSm9pbihpKTticmVhaztjYXNlIk1MIjp0aGlzLnNldE1pdGVyTGltaXQoaSk7YnJlYWs7Y2FzZSJEIjp0aGlzLnNldERhc2goaVswXSxpWzFdKTticmVhaztjYXNlIlJJIjp0aGlzLnNldFJlbmRlcmluZ0ludGVudChpKTticmVhaztjYXNlIkZMIjp0aGlzLnNldEZsYXRuZXNzKGkpO2JyZWFrO2Nhc2UiRm9udCI6dGhpcy5zZXRGb250KGlbMF0saVsxXSk7YnJlYWs7Y2FzZSJDQSI6dGhpcy5jdXJyZW50LnN0cm9rZUFscGhhPW5bMV07YnJlYWs7Y2FzZSJjYSI6dGhpcy5jdXJyZW50LmZpbGxBbHBoYT1uWzFdLHRoaXMuY3R4Lmdsb2JhbEFscGhhPW5bMV07YnJlYWs7Y2FzZSJCTSI6dGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWk7YnJlYWs7Y2FzZSJTTWFzayI6dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiYodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aD4wJiZ0aGlzLnN0YXRlU3RhY2tbdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aC0xXS5hY3RpdmVTTWFzaz09PXRoaXMuY3VycmVudC5hY3RpdmVTTWFzaz90aGlzLnN1c3BlbmRTTWFza0dyb3VwKCk6dGhpcy5lbmRTTWFza0dyb3VwKCkpLHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaz1pP3RoaXMudGVtcFNNYXNrOm51bGwsdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiZ0aGlzLmJlZ2luU01hc2tHcm91cCgpLHRoaXMudGVtcFNNYXNrPW51bGx9fX0sYmVnaW5TTWFza0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLHQ9ZS5jYW52YXMud2lkdGgscj1lLmNhbnZhcy5oZWlnaHQsbj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsYT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhuLHQsciwhMCksaT10aGlzLmN0eCxvPWkubW96Q3VycmVudFRyYW5zZm9ybTt0aGlzLmN0eC5zYXZlKCk7dmFyIHM9YS5jb250ZXh0O3Muc2NhbGUoMS9lLnNjYWxlWCwxL2Uuc2NhbGVZKSxzLnRyYW5zbGF0ZSgtZS5vZmZzZXRYLC1lLm9mZnNldFkpLHMudHJhbnNmb3JtLmFwcGx5KHMsbyksZS5zdGFydFRyYW5zZm9ybUludmVyc2U9cy5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSxjKGkscyksdGhpcy5jdHg9cyx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKSx0aGlzLmdyb3VwU3RhY2sucHVzaChpKSx0aGlzLmdyb3VwTGV2ZWwrK30sc3VzcGVuZFNNYXNrR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN0eDt0aGlzLmdyb3VwTGV2ZWwtLSx0aGlzLmN0eD10aGlzLmdyb3VwU3RhY2sucG9wKCkscCh0aGlzLmN0eCx0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2ssZSx0aGlzLndlYkdMQ29udGV4dCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSxjKGUsdGhpcy5jdHgpLHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eD1lO3ZhciB0PW4uVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSxlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO3RoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KSxlLnNhdmUoKSxlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZS5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS5yZXN0b3JlKCl9LHJlc3VtZVNNYXNrR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHgsdD10aGlzLmN0eDt0aGlzLmN0eD1lLHRoaXMuZ3JvdXBTdGFjay5wdXNoKHQpLHRoaXMuZ3JvdXBMZXZlbCsrfSxlbmRTTWFza0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdHg7dGhpcy5ncm91cExldmVsLS0sdGhpcy5jdHg9dGhpcy5ncm91cFN0YWNrLnBvcCgpLHAodGhpcy5jdHgsdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLGUsdGhpcy53ZWJHTENvbnRleHQpLHRoaXMuY3R4LnJlc3RvcmUoKSxjKGUsdGhpcy5jdHgpO3ZhciB0PW4uVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSxlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO3RoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KX0sc2F2ZTpmdW5jdGlvbigpe3RoaXMuY3R4LnNhdmUoKTt2YXIgZT10aGlzLmN1cnJlbnQ7dGhpcy5zdGF0ZVN0YWNrLnB1c2goZSksdGhpcy5jdXJyZW50PWUuY2xvbmUoKSx0aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHg9bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCYmdGhpcy5yZXN1bWVTTWFza0dyb3VwKCksbnVsbD09PXRoaXMuY3VycmVudC5hY3RpdmVTTWFza3x8MCE9PXRoaXMuc3RhdGVTdGFjay5sZW5ndGgmJnRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoLTFdLmFjdGl2ZVNNYXNrPT09dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrfHx0aGlzLmVuZFNNYXNrR3JvdXAoKSwwIT09dGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCYmKHRoaXMuY3VycmVudD10aGlzLnN0YXRlU3RhY2sucG9wKCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3RoaXMuY3R4LnRyYW5zZm9ybShlLHQscixuLGEsaSksdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsfSxjb25zdHJ1Y3RQYXRoOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuY3R4LGE9dGhpcy5jdXJyZW50LGk9YS54LG89YS55LHM9MCxsPTAsYz1lLmxlbmd0aDtzPGM7cysrKXN3aXRjaCgwfGVbc10pe2Nhc2Ugbi5PUFMucmVjdGFuZ2xlOmk9dFtsKytdLG89dFtsKytdO3ZhciB1PXRbbCsrXSxmPXRbbCsrXTswPT09dSYmKHU9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpLDA9PT1mJiYoZj10aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSk7dmFyIGg9aSt1LGQ9bytmO3RoaXMuY3R4Lm1vdmVUbyhpLG8pLHRoaXMuY3R4LmxpbmVUbyhoLG8pLHRoaXMuY3R4LmxpbmVUbyhoLGQpLHRoaXMuY3R4LmxpbmVUbyhpLGQpLHRoaXMuY3R4LmxpbmVUbyhpLG8pLHRoaXMuY3R4LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2Ugbi5PUFMubW92ZVRvOmk9dFtsKytdLG89dFtsKytdLHIubW92ZVRvKGksbyk7YnJlYWs7Y2FzZSBuLk9QUy5saW5lVG86aT10W2wrK10sbz10W2wrK10sci5saW5lVG8oaSxvKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86aT10W2wrNF0sbz10W2wrNV0sci5iZXppZXJDdXJ2ZVRvKHRbbF0sdFtsKzFdLHRbbCsyXSx0W2wrM10saSxvKSxsKz02O2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzI6ci5iZXppZXJDdXJ2ZVRvKGksbyx0W2xdLHRbbCsxXSx0W2wrMl0sdFtsKzNdKSxpPXRbbCsyXSxvPXRbbCszXSxsKz00O2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzM6aT10W2wrMl0sbz10W2wrM10sci5iZXppZXJDdXJ2ZVRvKHRbbF0sdFtsKzFdLGksbyxpLG8pLGwrPTQ7YnJlYWs7Y2FzZSBuLk9QUy5jbG9zZVBhdGg6ci5jbG9zZVBhdGgoKX1hLnNldEN1cnJlbnRQb2ludChpLG8pfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLmN0eC5jbG9zZVBhdGgoKX0sc3Ryb2tlOmZ1bmN0aW9uKGUpe2U9dm9pZCAwPT09ZXx8ZTt2YXIgdD10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjt0LmxpbmVXaWR0aD1NYXRoLm1heCguNjUqdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCksdGhpcy5jdXJyZW50LmxpbmVXaWR0aCksdC5nbG9iYWxBbHBoYT10aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEsciYmci5oYXNPd25Qcm9wZXJ0eSgidHlwZSIpJiYiUGF0dGVybiI9PT1yLnR5cGU/KHQuc2F2ZSgpLHQuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcyksdC5zdHJva2UoKSx0LnJlc3RvcmUoKSk6dC5zdHJva2UoKSxlJiZ0aGlzLmNvbnN1bWVQYXRoKCksdC5nbG9iYWxBbHBoYT10aGlzLmN1cnJlbnQuZmlsbEFscGhhfSxjbG9zZVN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5zdHJva2UoKX0sZmlsbDpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGU7dmFyIHQ9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQuZmlsbENvbG9yLG49ITE7dGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsJiYodC5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiZ0LnNldFRyYW5zZm9ybS5hcHBseSh0LHRoaXMuYmFzZVRyYW5zZm9ybSksdC5maWxsU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcyksbj0hMCksdGhpcy5wZW5kaW5nRU9GaWxsPyh0LmZpbGwoImV2ZW5vZGQiKSx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEpOnQuZmlsbCgpLG4mJnQucmVzdG9yZSgpLGUmJnRoaXMuY29uc3VtZVBhdGgoKX0sZW9GaWxsOmZ1bmN0aW9uKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwLHRoaXMuZmlsbCgpfSxmaWxsU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5maWxsKCExKSx0aGlzLnN0cm9rZSghMSksdGhpcy5jb25zdW1lUGF0aCgpfSxlb0ZpbGxTdHJva2U6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlRU9GaWxsU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwLHRoaXMuY2xvc2VQYXRoKCksdGhpcy5maWxsU3Ryb2tlKCl9LGVuZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9LGNsaXA6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPXZ9LGVvQ2xpcDpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9eX0sYmVnaW5UZXh0OmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfSxlbmRUZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wZW5kaW5nVGV4dFBhdGhzLHQ9dGhpcy5jdHg7aWYodm9pZCAwIT09ZSl7dC5zYXZlKCksdC5iZWdpblBhdGgoKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LnNldFRyYW5zZm9ybS5hcHBseSh0LG4udHJhbnNmb3JtKSx0LnRyYW5zbGF0ZShuLngsbi55KSxuLmFkZFRvUGF0aCh0LG4uZm9udFNpemUpfXQucmVzdG9yZSgpLHQuY2xpcCgpLHQuYmVnaW5QYXRoKCksZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRoc31lbHNlIHQuYmVnaW5QYXRoKCl9LHNldENoYXJTcGFjaW5nOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz1lfSxzZXRXb3JkU3BhY2luZzpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9ZX0sc2V0SFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPWUvMTAwfSxzZXRMZWFkaW5nOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC5sZWFkaW5nPS1lfSxzZXRGb250OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldChlKSxhPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQoZSkpO2lmKGEuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXg/ci5mb250TWF0cml4Om4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWEuZm9udE1hdHJpeFswXSYmMCE9PWEuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK2UpLHQ8MD8odD0tdCxhLmZvbnREaXJlY3Rpb249LTEpOmEuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPXQsIXIuaXNUeXBlM0ZvbnQpe3ZhciBpPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89ci5ibGFjaz8iOTAwIjpyLmJvbGQ/ImJvbGQiOiJub3JtYWwiLHM9ci5pdGFsaWM/Iml0YWxpYyI6Im5vcm1hbCIsbD0nIicuY29uY2F0KGksJyIsICcpLmNvbmNhdChyLmZhbGxiYWNrTmFtZSksYz10PDE2PzE2OnQ+MTAwPzEwMDp0O3RoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPXQvYyx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQoYywicHggIikuY29uY2F0KGwpfX0sc2V0VGV4dFJlbmRlcmluZ01vZGU6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPWV9LHNldFRleHRSaXNlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0UmlzZT1lfSxtb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9ZSx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPXR9LHNldExlYWRpbmdNb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuc2V0TGVhZGluZygtdCksdGhpcy5tb3ZlVGV4dChlLHQpfSxzZXRUZXh0TWF0cml4OmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt0aGlzLmN1cnJlbnQudGV4dE1hdHJpeD1bZSx0LHIsbixhLGldLHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGU9TWF0aC5zcXJ0KGUqZSt0KnQpLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfSxuZXh0TGluZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9LHBhaW50Q2hhcjpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXRoaXMuY3R4LHM9dGhpcy5jdXJyZW50LGw9cy5mb250LGM9cy50ZXh0UmVuZGVyaW5nTW9kZSx1PXMuZm9udFNpemUvcy5mb250U2l6ZVNjYWxlLGY9YyZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0ssaD0hIShjJm4uVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyksZD1zLnBhdHRlcm5GaWxsJiZsLmRhdGE7KGwuZGlzYWJsZUZvbnRGYWNlfHxofHxkKSYmKGk9bC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcyxlKSksbC5kaXNhYmxlRm9udEZhY2V8fGQ/KG8uc2F2ZSgpLG8udHJhbnNsYXRlKHQsciksby5iZWdpblBhdGgoKSxpKG8sdSksYSYmby5zZXRUcmFuc2Zvcm0uYXBwbHkobyxhKSxmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8by5maWxsKCksZiE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8by5zdHJva2UoKSxvLnJlc3RvcmUoKSk6KGYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwmJmYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFfHxvLmZpbGxUZXh0KGUsdCxyKSxmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UmJmYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFfHxvLnN0cm9rZVRleHQoZSx0LHIpKSxoJiYodGhpcy5wZW5kaW5nVGV4dFBhdGhzfHwodGhpcy5wZW5kaW5nVGV4dFBhdGhzPVtdKSkucHVzaCh7dHJhbnNmb3JtOm8ubW96Q3VycmVudFRyYW5zZm9ybSx4OnQseTpyLGZvbnRTaXplOnUsYWRkVG9QYXRoOml9KX0sZ2V0IGlzRm9udFN1YnBpeGVsQUFFbmFibGVkKCl7dmFyIGU9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSgxMCwxMCkuY29udGV4dDtlLnNjYWxlKDEuNSwxKSxlLmZpbGxUZXh0KCJJIiwwLDEwKTtmb3IodmFyIHQ9ZS5nZXRJbWFnZURhdGEoMCwwLDEwLDEwKS5kYXRhLHI9ITEsYT0zO2E8dC5sZW5ndGg7YSs9NClpZih0W2FdPjAmJnRbYV08MjU1KXtyPSEwO2JyZWFrfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIscil9LHNob3dUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3VycmVudCxyPXQuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQoZSk7dmFyIGE9dC5mb250U2l6ZTtpZigwIT09YSl7dmFyIGksbz10aGlzLmN0eCxzPXQuZm9udFNpemVTY2FsZSxsPXQuY2hhclNwYWNpbmcsYz10LndvcmRTcGFjaW5nLHU9dC5mb250RGlyZWN0aW9uLGY9dC50ZXh0SFNjYWxlKnUsaD1lLmxlbmd0aCxkPXIudmVydGljYWwscD1kPzE6LTEsbT1yLmRlZmF1bHRWTWV0cmljcyxnPWEqdC5mb250TWF0cml4WzBdLHY9dC50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhdC5wYXR0ZXJuRmlsbDtpZihvLnNhdmUoKSx0LnBhdHRlcm5GaWxsKXtvLnNhdmUoKTt2YXIgeT10LmZpbGxDb2xvci5nZXRQYXR0ZXJuKG8sdGhpcyk7aT1vLm1vekN1cnJlbnRUcmFuc2Zvcm0sby5yZXN0b3JlKCksby5maWxsU3R5bGU9eX1vLnRyYW5zZm9ybS5hcHBseShvLHQudGV4dE1hdHJpeCksby50cmFuc2xhdGUodC54LHQueSt0LnRleHRSaXNlKSx1PjA/by5zY2FsZShmLC0xKTpvLnNjYWxlKGYsMSk7dmFyIGI9dC5saW5lV2lkdGgsdz10LnRleHRNYXRyaXhTY2FsZTtpZigwPT09d3x8MD09PWIpe3ZhciBrPXQudGV4dFJlbmRlcmluZ01vZGUmbi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO2shPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmayE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fCh0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsYj0uNjUqdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2UgYi89dzsxIT09cyYmKG8uc2NhbGUocyxzKSxiLz1zKSxvLmxpbmVXaWR0aD1iO3ZhciBTLF89MDtmb3IoUz0wO1M8aDsrK1Mpe3ZhciB4PWVbU107aWYoKDAsbi5pc051bSkoeCkpXys9cCp4KmEvMWUzO2Vsc2V7dmFyIEEsQyxQLEUsVCxSLE8sST0hMSxGPSh4LmlzU3BhY2U/YzowKStsLEw9eC5mb250Q2hhcixEPXguYWNjZW50LE09eC53aWR0aDtpZihkPyhUPXgudm1ldHJpY3x8bSxSPS0oUj14LnZtZXRyaWM/VFsxXTouNSpNKSpnLE89VFsyXSpnLE09VD8tVFswXTpNLEE9Ui9zLEM9KF8rTykvcyk6KEE9Xy9zLEM9MCksci5yZW1lYXN1cmUmJk0+MCl7dmFyIE49MWUzKm8ubWVhc3VyZVRleHQoTCkud2lkdGgvYSpzO2lmKE08TiYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIGo9TS9OO0k9ITAsby5zYXZlKCksby5zY2FsZShqLDEpLEEvPWp9ZWxzZSBNIT09TiYmKEErPShNLU4pLzJlMyphL3MpfSh4LmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKHYmJiFEP28uZmlsbFRleHQoTCxBLEMpOih0aGlzLnBhaW50Q2hhcihMLEEsQyxpKSxEJiYoUD1BK0Qub2Zmc2V0LngvcyxFPUMtRC5vZmZzZXQueS9zLHRoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsUCxFLGkpKSkpLF8rPU0qZytGKnUsSSYmby5yZXN0b3JlKCl9fWQ/dC55LT1fKmY6dC54Kz1fKmYsby5yZXN0b3JlKCl9fSxzaG93VHlwZTNUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxpLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsbD1zLmZvbnQsYz1zLmZvbnRTaXplLHU9cy5mb250RGlyZWN0aW9uLGY9bC52ZXJ0aWNhbD8xOi0xLGg9cy5jaGFyU3BhY2luZyxkPXMud29yZFNwYWNpbmcscD1zLnRleHRIU2NhbGUqdSxtPXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxnPWUubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsby5zYXZlKCksby50cmFuc2Zvcm0uYXBwbHkobyxzLnRleHRNYXRyaXgpLG8udHJhbnNsYXRlKHMueCxzLnkpLG8uc2NhbGUocCx1KSx0PTA7dDxnOysrdClpZihyPWVbdF0sKDAsbi5pc051bSkocikpaT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGksMCkscy54Kz1pKnA7ZWxzZXt2YXIgdj0oci5pc1NwYWNlP2Q6MCkraCx5PWwuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07eT8odGhpcy5wcm9jZXNzaW5nVHlwZTM9cix0aGlzLnNhdmUoKSxvLnNjYWxlKGMsYyksby50cmFuc2Zvcm0uYXBwbHkobyxtKSx0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3QoeSksdGhpcy5yZXN0b3JlKCksYT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3Iud2lkdGgsMF0sbSlbMF0qYyt2LG8udHJhbnNsYXRlKGEsMCkscy54Kz1hKnApOigwLG4ud2FybikoJ1R5cGUzIGNoYXJhY3RlciAiJy5jb25jYXQoci5vcGVyYXRvckxpc3RJZCwnIiBpcyBub3QgYXZhaWxhYmxlLicpKX1vLnJlc3RvcmUoKSx0aGlzLnByb2Nlc3NpbmdUeXBlMz1udWxsfX0sc2V0Q2hhcldpZHRoOmZ1bmN0aW9uKGUsdCl7fSxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3RoaXMuY3R4LnJlY3QocixuLGEtcixpLW4pLHRoaXMuY2xpcCgpLHRoaXMuZW5kUGF0aCgpfSxnZXRDb2xvck5fUGF0dGVybjpmdW5jdGlvbih0KXt2YXIgcixuPXRoaXM7aWYoIlRpbGluZ1BhdHRlcm4iPT09dFswXSl7dmFyIGk9dFsxXSxvPXRoaXMuYmFzZVRyYW5zZm9ybXx8dGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpLHM9e2NyZWF0ZUNhbnZhc0dyYXBoaWNzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LG4uY29tbW9uT2JqcyxuLm9ianMsbi5jYW52YXNGYWN0b3J5LG4ud2ViR0xDb250ZXh0KX19O3I9bmV3IGEuVGlsaW5nUGF0dGVybih0LGksdGhpcy5jdHgscyxvKX1lbHNlIHI9KDAsYS5nZXRTaGFkaW5nUGF0dGVybkZyb21JUikodCk7cmV0dXJuIHJ9LHNldFN0cm9rZUNvbG9yTjpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyl9LHNldEZpbGxDb2xvck46ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITB9LHNldFN0cm9rZVJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdHguc3Ryb2tlU3R5bGU9YSx0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I9YX0sc2V0RmlsbFJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdHguZmlsbFN0eWxlPWEsdGhpcy5jdXJyZW50LmZpbGxDb2xvcj1hLHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbD0hMX0sc2hhZGluZ0ZpbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jdHg7dGhpcy5zYXZlKCk7dmFyIHI9KDAsYS5nZXRTaGFkaW5nUGF0dGVybkZyb21JUikoZSk7dC5maWxsU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcywhMCk7dmFyIGk9dC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtpZihpKXt2YXIgbz10LmNhbnZhcyxzPW8ud2lkdGgsbD1vLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxpKSx1PW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCxsXSxpKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbcywwXSxpKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbcyxsXSxpKSxkPU1hdGgubWluKGNbMF0sdVswXSxmWzBdLGhbMF0pLHA9TWF0aC5taW4oY1sxXSx1WzFdLGZbMV0saFsxXSksbT1NYXRoLm1heChjWzBdLHVbMF0sZlswXSxoWzBdKSxnPU1hdGgubWF4KGNbMV0sdVsxXSxmWzFdLGhbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KGQscCxtLWQsZy1wKX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5yZXN0b3JlKCl9LGJlZ2luSW5saW5lSW1hZ2U6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW5saW5lSW1hZ2UiKX0sYmVnaW5JbWFnZURhdGE6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9LHBhaW50Rm9ybVhPYmplY3RCZWdpbjpmdW5jdGlvbihlLHQpe2lmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KGUpJiY2PT09ZS5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsZSksdGhpcy5iYXNlVHJhbnNmb3JtPXRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sdCl7dmFyIHI9dFsyXS10WzBdLG49dFszXS10WzFdO3RoaXMuY3R4LnJlY3QodFswXSx0WzFdLHIsbiksdGhpcy5jbGlwKCksdGhpcy5lbmRQYXRoKCl9fSxwYWludEZvcm1YT2JqZWN0RW5kOmZ1bmN0aW9uKCl7dGhpcy5yZXN0b3JlKCksdGhpcy5iYXNlVHJhbnNmb3JtPXRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpfSxiZWdpbkdyb3VwOmZ1bmN0aW9uKGUpe3RoaXMuc2F2ZSgpO3ZhciB0PXRoaXMuY3R4O2UuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSxlLmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj10Lm1vekN1cnJlbnRUcmFuc2Zvcm07aWYoZS5tYXRyaXgmJnQudHJhbnNmb3JtLmFwcGx5KHQsZS5tYXRyaXgpLCFlLmJib3gpdGhyb3cgbmV3IEVycm9yKCJCb3VuZGluZyBib3ggaXMgcmVxdWlyZWQuIik7dmFyIGE9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUuYmJveCx0Lm1vekN1cnJlbnRUcmFuc2Zvcm0pLGk9WzAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdO2E9bi5VdGlsLmludGVyc2VjdChhLGkpfHxbMCwwLDAsMF07dmFyIG89TWF0aC5mbG9vcihhWzBdKSxzPU1hdGguZmxvb3IoYVsxXSksbD1NYXRoLm1heChNYXRoLmNlaWwoYVsyXSktbywxKSx1PU1hdGgubWF4KE1hdGguY2VpbChhWzNdKS1zLDEpLGY9MSxoPTE7bD40MDk2JiYoZj1sLzQwOTYsbD00MDk2KSx1PjQwOTYmJihoPXUvNDA5Nix1PTQwOTYpO3ZhciBkPSJncm91cEF0Iit0aGlzLmdyb3VwTGV2ZWw7ZS5zbWFzayYmKGQrPSJfc21hc2tfIit0aGlzLnNtYXNrQ291bnRlcisrJTIpO3ZhciBwPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGQsbCx1LCEwKSxtPXAuY29udGV4dDttLnNjYWxlKDEvZiwxL2gpLG0udHJhbnNsYXRlKC1vLC1zKSxtLnRyYW5zZm9ybS5hcHBseShtLHIpLGUuc21hc2s/dGhpcy5zbWFza1N0YWNrLnB1c2goe2NhbnZhczpwLmNhbnZhcyxjb250ZXh0Om0sb2Zmc2V0WDpvLG9mZnNldFk6cyxzY2FsZVg6ZixzY2FsZVk6aCxzdWJ0eXBlOmUuc21hc2suc3VidHlwZSxiYWNrZHJvcDplLnNtYXNrLmJhY2tkcm9wLHRyYW5zZmVyTWFwOmUuc21hc2sudHJhbnNmZXJNYXB8fG51bGwsc3RhcnRUcmFuc2Zvcm1JbnZlcnNlOm51bGx9KToodC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQudHJhbnNsYXRlKG8scyksdC5zY2FsZShmLGgpKSxjKHQsbSksdGhpcy5jdHg9bSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKSx0aGlzLmdyb3VwU3RhY2sucHVzaCh0KSx0aGlzLmdyb3VwTGV2ZWwrKyx0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9bnVsbH0sZW5kR3JvdXA6ZnVuY3Rpb24oZSl7dGhpcy5ncm91cExldmVsLS07dmFyIHQ9dGhpcy5jdHg7dGhpcy5jdHg9dGhpcy5ncm91cFN0YWNrLnBvcCgpLHZvaWQgMCE9PXRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZD90aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITE6dGhpcy5jdHgubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLGUuc21hc2s/dGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpOnRoaXMuY3R4LmRyYXdJbWFnZSh0LmNhbnZhcywwLDApLHRoaXMucmVzdG9yZSgpfSxiZWdpbkFubm90YXRpb25zOmZ1bmN0aW9uKCl7dGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiZ0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsdGhpcy5iYXNlVHJhbnNmb3JtKX0sZW5kQW5ub3RhdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLnJlc3RvcmUoKX0sYmVnaW5Bbm5vdGF0aW9uOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLnNhdmUoKSx1KHRoaXMuY3R4KSx0aGlzLmN1cnJlbnQ9bmV3IGwsQXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoKXt2YXIgbj1lWzJdLWVbMF0sYT1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0sbixhKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX10aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLHQpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMscil9LGVuZEFubm90YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJlc3RvcmUoKX0scGFpbnRKcGVnWE9iamVjdDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5vYmpzLmdldChlKTtpZihhKXt0aGlzLnNhdmUoKTt2YXIgaT10aGlzLmN0eDtpZihpLnNjYWxlKDEvdCwtMS9yKSxpLmRyYXdJbWFnZShhLDAsMCxhLndpZHRoLGEuaGVpZ2h0LDAsLXIsdCxyKSx0aGlzLmltYWdlTGF5ZXIpe3ZhciBvPWkubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2Uscz10aGlzLmdldENhbnZhc1Bvc2l0aW9uKDAsMCk7dGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtvYmpJZDplLGxlZnQ6c1swXSx0b3A6c1sxXSx3aWR0aDp0L29bMF0saGVpZ2h0OnIvb1szXX0pfXRoaXMucmVzdG9yZSgpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9LHBhaW50SW1hZ2VNYXNrWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN0eCxuPWUud2lkdGgsYT1lLmhlaWdodCxpPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbz10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscz10aGlzLnByb2Nlc3NpbmdUeXBlMztpZihzJiZ2b2lkIDA9PT1zLmNvbXBpbGVkJiYocy5jb21waWxlZD1uPD0xZTMmJmE8PTFlMz9mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpPWUud2lkdGgsbz1lLmhlaWdodCxzPWkrMSxsPW5ldyBVaW50OEFycmF5KHMqKG8rMSkpLGM9bmV3IFVpbnQ4QXJyYXkoWzAsMiw0LDAsMSwwLDUsNCw4LDEwLDAsOCwwLDIsMSwwXSksdT1pKzcmLTgsZj1lLmRhdGEsaD1uZXcgVWludDhBcnJheSh1Km8pLGQ9MDtmb3IodD0wLGE9Zi5sZW5ndGg7dDxhO3QrKylmb3IodmFyIHA9MTI4LG09Zlt0XTtwPjA7KWhbZCsrXT1tJnA/MDoyNTUscD4+PTE7dmFyIGc9MDtmb3IoMCE9PWhbZD0wXSYmKGxbMF09MSwrK2cpLHI9MTtyPGk7cisrKWhbZF0hPT1oW2QrMV0mJihsW3JdPWhbZF0/MjoxLCsrZyksZCsrO2ZvcigwIT09aFtkXSYmKGxbcl09MiwrK2cpLHQ9MTt0PG87dCsrKXtuPXQqcyxoWyhkPXQqdSktdV0hPT1oW2RdJiYobFtuXT1oW2RdPzE6OCwrK2cpO3ZhciB2PShoW2RdPzQ6MCkrKGhbZC11XT84OjApO2ZvcihyPTE7cjxpO3IrKyljW3Y9KHY+PjIpKyhoW2QrMV0/NDowKSsoaFtkLXUrMV0/ODowKV0mJihsW24rcl09Y1t2XSwrK2cpLGQrKztpZihoW2QtdV0hPT1oW2RdJiYobFtuK3JdPWhbZF0/Mjo0LCsrZyksZz4xZTMpcmV0dXJuIG51bGx9Zm9yKG49dCpzLDAhPT1oW2Q9dSooby0xKV0mJihsW25dPTgsKytnKSxyPTE7cjxpO3IrKyloW2RdIT09aFtkKzFdJiYobFtuK3JdPWhbZF0/NDo4LCsrZyksZCsrO2lmKDAhPT1oW2RdJiYobFtuK3JdPTQsKytnKSxnPjFlMylyZXR1cm4gbnVsbDt2YXIgeT1uZXcgSW50MzJBcnJheShbMCxzLC0xLDAsLXMsMCwwLDAsMV0pLGI9W107Zm9yKHQ9MDtnJiZ0PD1vO3QrKyl7Zm9yKHZhciB3PXQqcyxrPXcraTt3PGsmJiFsW3ddOyl3Kys7aWYodyE9PWspe3ZhciBTLF89W3clcyx0XSx4PWxbd10sQT13O2Rve3ZhciBDPXlbeF07ZG97dys9Q313aGlsZSghbFt3XSk7NSE9PShTPWxbd10pJiYxMCE9PVM/KHg9UyxsW3ddPTApOih4PVMmNTEqeD4+NCxsW3ddJj14Pj4yfHg8PDIpLF8ucHVzaCh3JXMpLF8ucHVzaCh3L3N8MCksLS1nfXdoaWxlKEEhPT13KTtiLnB1c2goXyksLS10fX1yZXR1cm4gZnVuY3Rpb24oZSl7ZS5zYXZlKCksZS5zY2FsZSgxL2ksLTEvbyksZS50cmFuc2xhdGUoMCwtbyksZS5iZWdpblBhdGgoKTtmb3IodmFyIHQ9MCxyPWIubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWJbdF07ZS5tb3ZlVG8oblswXSxuWzFdKTtmb3IodmFyIGE9MixzPW4ubGVuZ3RoO2E8czthKz0yKWUubGluZVRvKG5bYV0sblthKzFdKX1lLmZpbGwoKSxlLmJlZ2luUGF0aCgpLGUucmVzdG9yZSgpfX0oe2RhdGE6ZS5kYXRhLHdpZHRoOm4saGVpZ2h0OmF9KTpudWxsKSxzJiZzLmNvbXBpbGVkKXMuY29tcGlsZWQodCk7ZWxzZXt2YXIgbD10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsbixhKSxjPWwuY29udGV4dDtjLnNhdmUoKSxyKGMsZSksYy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsYy5maWxsU3R5bGU9bz9pLmdldFBhdHRlcm4oYyx0aGlzKTppLGMuZmlsbFJlY3QoMCwwLG4sYSksYy5yZXN0b3JlKCksdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChsLmNhbnZhcyl9fSxwYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQ6ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9ZS53aWR0aCxvPWUuaGVpZ2h0LHM9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixsPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxjPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJtYXNrQ2FudmFzIixpLG8pLHU9Yy5jb250ZXh0O3Uuc2F2ZSgpLHIodSxlKSx1Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLWluIix1LmZpbGxTdHlsZT1sP3MuZ2V0UGF0dGVybih1LHRoaXMpOnMsdS5maWxsUmVjdCgwLDAsaSxvKSx1LnJlc3RvcmUoKTtmb3IodmFyIGY9dGhpcy5jdHgsaD0wLGQ9YS5sZW5ndGg7aDxkO2grPTIpZi5zYXZlKCksZi50cmFuc2Zvcm0odCwwLDAsbixhW2hdLGFbaCsxXSksZi5zY2FsZSgxLC0xKSxmLmRyYXdJbWFnZShjLmNhbnZhcywwLDAsaSxvLDAsLTEsMSwxKSxmLnJlc3RvcmUoKX0scGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixhPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXt2YXIgcz1lW2ldLGw9cy53aWR0aCxjPXMuaGVpZ2h0LHU9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoIm1hc2tDYW52YXMiLGwsYyksZj11LmNvbnRleHQ7Zi5zYXZlKCkscihmLHMpLGYuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2UtaW4iLGYuZmlsbFN0eWxlPWE/bi5nZXRQYXR0ZXJuKGYsdGhpcyk6bixmLmZpbGxSZWN0KDAsMCxsLGMpLGYucmVzdG9yZSgpLHQuc2F2ZSgpLHQudHJhbnNmb3JtLmFwcGx5KHQscy50cmFuc2Zvcm0pLHQuc2NhbGUoMSwtMSksdC5kcmF3SW1hZ2UodS5jYW52YXMsMCwwLGwsYywwLC0xLDEsMSksdC5yZXN0b3JlKCl9fSxwYWludEltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9ianMuZ2V0KGUpO3Q/dGhpcy5wYWludElubGluZUltYWdlWE9iamVjdCh0KTooMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpPXRoaXMub2Jqcy5nZXQoZSk7aWYoaSl7Zm9yKHZhciBvPWkud2lkdGgscz1pLmhlaWdodCxsPVtdLGM9MCx1PWEubGVuZ3RoO2M8dTtjKz0yKWwucHVzaCh7dHJhbnNmb3JtOlt0LDAsMCxyLGFbY10sYVtjKzFdXSx4OjAseTowLHc6byxoOnN9KTt0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaSxsKX1lbHNlKDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfSxwYWludElubGluZUltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgcj1lLndpZHRoLG49ZS5oZWlnaHQsYT10aGlzLmN0eDt0aGlzLnNhdmUoKSxhLnNjYWxlKDEvciwtMS9uKTt2YXIgaSxvLHM9YS5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSxsPXNbMF0sYz1zWzFdLHU9TWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLDEpLGY9c1syXSxoPXNbM10sZD1NYXRoLm1heChNYXRoLnNxcnQoZipmK2gqaCksMSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCFlLmRhdGEpaT1lO2Vsc2V7dmFyIHA9KG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pKS5jb250ZXh0O3QocCxlKSxpPW8uY2FudmFzfWZvcih2YXIgbT1yLGc9bix2PSJwcmVzY2FsZTEiO3U+MiYmbT4xfHxkPjImJmc+MTspe3ZhciB5PW0sYj1nO3U+MiYmbT4xJiYodS89bS8oeT1NYXRoLmNlaWwobS8yKSkpLGQ+MiYmZz4xJiYoZC89Zy8oYj1NYXRoLmNlaWwoZy8yKSkpLChwPShvPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKHYseSxiKSkuY29udGV4dCkuY2xlYXJSZWN0KDAsMCx5LGIpLHAuZHJhd0ltYWdlKGksMCwwLG0sZywwLDAseSxiKSxpPW8uY2FudmFzLG09eSxnPWIsdj0icHJlc2NhbGUxIj09PXY/InByZXNjYWxlMiI6InByZXNjYWxlMSJ9aWYoYS5kcmF3SW1hZ2UoaSwwLDAsbSxnLDAsLW4scixuKSx0aGlzLmltYWdlTGF5ZXIpe3ZhciB3PXRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oMCwtbik7dGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtpbWdEYXRhOmUsbGVmdDp3WzBdLHRvcDp3WzFdLHdpZHRoOnIvc1swXSxoZWlnaHQ6bi9zWzNdfSl9dGhpcy5yZXN0b3JlKCl9LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN0eCxhPWUud2lkdGgsaT1lLmhlaWdodCxvPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpbmxpbmVJbWFnZSIsYSxpKTt0KG8uY29udGV4dCxlKTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspe3ZhciBjPXJbc107aWYobi5zYXZlKCksbi50cmFuc2Zvcm0uYXBwbHkobixjLnRyYW5zZm9ybSksbi5zY2FsZSgxLC0xKSxuLmRyYXdJbWFnZShvLmNhbnZhcyxjLngsYy55LGMudyxjLmgsMCwtMSwxLDEpLHRoaXMuaW1hZ2VMYXllcil7dmFyIHU9dGhpcy5nZXRDYW52YXNQb3NpdGlvbihjLngsYy55KTt0aGlzLmltYWdlTGF5ZXIuYXBwZW5kSW1hZ2Uoe2ltZ0RhdGE6ZSxsZWZ0OnVbMF0sdG9wOnVbMV0sd2lkdGg6YSxoZWlnaHQ6aX0pfW4ucmVzdG9yZSgpfX0scGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOmZ1bmN0aW9uKCl7dGhpcy5jdHguZmlsbFJlY3QoMCwwLDEsMSl9LHBhaW50WE9iamVjdDpmdW5jdGlvbigpeygwLG4ud2FybikoIlVuc3VwcG9ydGVkICdwYWludFhPYmplY3QnIGNvbW1hbmQuIil9LG1hcmtQb2ludDpmdW5jdGlvbihlKXt9LG1hcmtQb2ludFByb3BzOmZ1bmN0aW9uKGUsdCl7fSxiZWdpbk1hcmtlZENvbnRlbnQ6ZnVuY3Rpb24oZSl7fSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczpmdW5jdGlvbihlLHQpe30sZW5kTWFya2VkQ29udGVudDpmdW5jdGlvbigpe30sYmVnaW5Db21wYXQ6ZnVuY3Rpb24oKXt9LGVuZENvbXBhdDpmdW5jdGlvbigpe30sY29uc3VtZVBhdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN0eDt0aGlzLnBlbmRpbmdDbGlwJiYodGhpcy5wZW5kaW5nQ2xpcD09PXk/ZS5jbGlwKCJldmVub2RkIik6ZS5jbGlwKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsKSxlLmJlZ2luUGF0aCgpfSxnZXRTaW5nbGVQaXhlbFdpZHRoOmZ1bmN0aW9uKGUpe2lmKG51bGw9PT10aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTt0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPU1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdLHRbMl0qdFsyXSt0WzNdKnRbM10pKX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH0sZ2V0Q2FudmFzUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO3JldHVybltyWzBdKmUrclsyXSp0K3JbNF0sclsxXSplK3JbM10qdCtyWzVdXX19LG4uT1BTKWUucHJvdG90eXBlW24uT1BTW2JdXT1lLnByb3RvdHlwZVtiXTtyZXR1cm4gZX0oKTt0LkNhbnZhc0dyYXBoaWNzPWN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0U2hhZGluZ1BhdHRlcm5Gcm9tSVI9ZnVuY3Rpb24oZSl7dmFyIHQ9YVtlWzBdXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQoZVswXSkpO3JldHVybiB0LmZyb21JUihlKX0sdC5UaWxpbmdQYXR0ZXJuPXZvaWQgMDt2YXIgbj1yKDEpLGE9e1JhZGlhbEF4aWFsOntmcm9tSVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxXSxyPWVbMl0sbj1lWzNdLGE9ZVs0XSxpPWVbNV0sbz1lWzZdO3JldHVybnt0eXBlOiJQYXR0ZXJuIixnZXRQYXR0ZXJuOmZ1bmN0aW9uKGUpe3ZhciBzOyJheGlhbCI9PT10P3M9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudChuWzBdLG5bMV0sYVswXSxhWzFdKToicmFkaWFsIj09PXQmJihzPWUuY3JlYXRlUmFkaWFsR3JhZGllbnQoblswXSxuWzFdLGksYVswXSxhWzFdLG8pKTtmb3IodmFyIGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpe3ZhciB1PXJbbF07cy5hZGRDb2xvclN0b3AodVswXSx1WzFdKX1yZXR1cm4gc319fX19LGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpLG8scyl7dmFyIGwsYz10LmNvb3Jkcyx1PXQuY29sb3JzLGY9ZS5kYXRhLGg9NCplLndpZHRoO2NbcisxXT5jW24rMV0mJihsPXIscj1uLG49bCxsPWksaT1vLG89bCksY1tuKzFdPmNbYSsxXSYmKGw9bixuPWEsYT1sLGw9byxvPXMscz1sKSxjW3IrMV0+Y1tuKzFdJiYobD1yLHI9bixuPWwsbD1pLGk9byxvPWwpO3ZhciBkPShjW3JdK3Qub2Zmc2V0WCkqdC5zY2FsZVgscD0oY1tyKzFdK3Qub2Zmc2V0WSkqdC5zY2FsZVksbT0oY1tuXSt0Lm9mZnNldFgpKnQuc2NhbGVYLGc9KGNbbisxXSt0Lm9mZnNldFkpKnQuc2NhbGVZLHY9KGNbYV0rdC5vZmZzZXRYKSp0LnNjYWxlWCx5PShjW2ErMV0rdC5vZmZzZXRZKSp0LnNjYWxlWTtpZighKHA+PXkpKWZvcih2YXIgYix3LGssUyxfLHgsQSxDLFAsRT11W2ldLFQ9dVtpKzFdLFI9dVtpKzJdLE89dVtvXSxJPXVbbysxXSxGPXVbbysyXSxMPXVbc10sRD11W3MrMV0sTT11W3MrMl0sTj1NYXRoLnJvdW5kKHApLGo9TWF0aC5yb3VuZCh5KSxCPU47Qjw9ajtCKyspe0I8Zz8oYj1kLShkLW0pKihQPUI8cD8wOnA9PT1nPzE6KHAtQikvKHAtZykpLHc9RS0oRS1PKSpQLGs9VC0oVC1JKSpQLFM9Ui0oUi1GKSpQKTooYj1tLShtLXYpKihQPUI+eT8xOmc9PT15PzA6KGctQikvKGcteSkpLHc9Ty0oTy1MKSpQLGs9SS0oSS1EKSpQLFM9Ri0oRi1NKSpQKSxfPWQtKGQtdikqKFA9QjxwPzA6Qj55PzE6KHAtQikvKHAteSkpLHg9RS0oRS1MKSpQLEE9VC0oVC1EKSpQLEM9Ui0oUi1NKSpQO2Zvcih2YXIgVT1NYXRoLnJvdW5kKE1hdGgubWluKGIsXykpLHE9TWF0aC5yb3VuZChNYXRoLm1heChiLF8pKSx6PWgqQis0KlUsVz1VO1c8PXE7VysrKVA9KFA9KGItVykvKGItXykpPDA/MDpQPjE/MTpQLGZbeisrXT13LSh3LXgpKlB8MCxmW3orK109ay0oay1BKSpQfDAsZlt6KytdPVMtKFMtQykqUHwwLGZbeisrXT0yNTV9fWZ1bmN0aW9uIHQodCxyLG4pe3ZhciBhLGksbz1yLmNvb3JkcyxzPXIuY29sb3JzO3N3aXRjaChyLnR5cGUpe2Nhc2UibGF0dGljZSI6dmFyIGw9ci52ZXJ0aWNlc1BlclJvdyxjPU1hdGguZmxvb3Ioby5sZW5ndGgvbCktMSx1PWwtMTtmb3IoYT0wO2E8YzthKyspZm9yKHZhciBmPWEqbCxoPTA7aDx1O2grKyxmKyspZSh0LG4sb1tmXSxvW2YrMV0sb1tmK2xdLHNbZl0sc1tmKzFdLHNbZitsXSksZSh0LG4sb1tmK2wrMV0sb1tmKzFdLG9bZitsXSxzW2YrbCsxXSxzW2YrMV0sc1tmK2xdKTticmVhaztjYXNlInRyaWFuZ2xlcyI6Zm9yKGE9MCxpPW8ubGVuZ3RoO2E8aTthKz0zKWUodCxuLG9bYV0sb1thKzFdLG9bYSsyXSxzW2FdLHNbYSsxXSxzW2ErMl0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGZpZ3VyZSIpfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4sYSxpLG8scyxsKXt2YXIgYyx1LGYsaCxkPU1hdGguZmxvb3IoZVswXSkscD1NYXRoLmZsb29yKGVbMV0pLG09TWF0aC5jZWlsKGVbMl0pLWQsZz1NYXRoLmNlaWwoZVszXSktcCx2PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhtKnJbMF0qMS4xKSksM2UzKSx5PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhnKnJbMV0qMS4xKSksM2UzKSxiPW0vdix3PWcveSxrPXtjb29yZHM6bixjb2xvcnM6YSxvZmZzZXRYOi1kLG9mZnNldFk6LXAsc2NhbGVYOjEvYixzY2FsZVk6MS93fSxTPXYrNCxfPXkrNDtpZihsLmlzRW5hYmxlZCljPWwuZHJhd0ZpZ3VyZXMoe3dpZHRoOnYsaGVpZ2h0OnksYmFja2dyb3VuZENvbG9yOm8sZmlndXJlczppLGNvbnRleHQ6a30pLCh1PXMuZ2V0Q2FudmFzKCJtZXNoIixTLF8sITEpKS5jb250ZXh0LmRyYXdJbWFnZShjLDIsMiksYz11LmNhbnZhcztlbHNle3ZhciB4PSh1PXMuZ2V0Q2FudmFzKCJtZXNoIixTLF8sITEpKS5jb250ZXh0LEE9eC5jcmVhdGVJbWFnZURhdGEodix5KTtpZihvKXt2YXIgQz1BLmRhdGE7Zm9yKGY9MCxoPUMubGVuZ3RoO2Y8aDtmKz00KUNbZl09b1swXSxDW2YrMV09b1sxXSxDW2YrMl09b1syXSxDW2YrM109MjU1fWZvcihmPTA7ZjxpLmxlbmd0aDtmKyspdChBLGlbZl0sayk7eC5wdXRJbWFnZURhdGEoQSwyLDIpLGM9dS5jYW52YXN9cmV0dXJue2NhbnZhczpjLG9mZnNldFg6ZC0yKmIsb2Zmc2V0WTpwLTIqdyxzY2FsZVg6YixzY2FsZVk6d319fSgpO2EuTWVzaD17ZnJvbUlSOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMl0scj1lWzNdLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs4XTtyZXR1cm57dHlwZToiUGF0dGVybiIsZ2V0UGF0dGVybjpmdW5jdGlvbihlLGMsdSl7dmFyIGY7aWYodSlmPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO2Vsc2UgaWYoZj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoYy5iYXNlVHJhbnNmb3JtKSxzKXt2YXIgaD1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUocyk7Zj1bZlswXSpoWzBdLGZbMV0qaFsxXV19dmFyIGQ9aShvLGYsdCxyLGEsdT9udWxsOmwsYy5jYWNoZWRDYW52YXNlcyxjLndlYkdMQ29udGV4dCk7cmV0dXJuIHV8fChlLnNldFRyYW5zZm9ybS5hcHBseShlLGMuYmFzZVRyYW5zZm9ybSkscyYmZS50cmFuc2Zvcm0uYXBwbHkoZSxzKSksZS50cmFuc2xhdGUoZC5vZmZzZXRYLGQub2Zmc2V0WSksZS5zY2FsZShkLnNjYWxlWCxkLnNjYWxlWSksZS5jcmVhdGVQYXR0ZXJuKGQuY2FudmFzLCJuby1yZXBlYXQiKX19fX0sYS5EdW1teT17ZnJvbUlSOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBhdHRlcm4iLGdldFBhdHRlcm46ZnVuY3Rpb24oKXtyZXR1cm4iaG90cGluayJ9fX19O3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9MSx0PTI7ZnVuY3Rpb24gcihlLHQscixuLGEpe3RoaXMub3BlcmF0b3JMaXN0PWVbMl0sdGhpcy5tYXRyaXg9ZVszXXx8WzEsMCwwLDEsMCwwXSx0aGlzLmJib3g9ZVs0XSx0aGlzLnhzdGVwPWVbNV0sdGhpcy55c3RlcD1lWzZdLHRoaXMucGFpbnRUeXBlPWVbN10sdGhpcy50aWxpbmdUeXBlPWVbOF0sdGhpcy5jb2xvcj10LHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5PW4sdGhpcy5iYXNlVHJhbnNmb3JtPWEsdGhpcy50eXBlPSJQYXR0ZXJuIix0aGlzLmN0eD1yfXJldHVybiByLnByb3RvdHlwZT17Y3JlYXRlUGF0dGVybkNhbnZhczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wZXJhdG9yTGlzdCxyPXRoaXMuYmJveCxhPXRoaXMueHN0ZXAsaT10aGlzLnlzdGVwLG89dGhpcy5wYWludFR5cGUscz10aGlzLnRpbGluZ1R5cGUsbD10aGlzLmNvbG9yLGM9dGhpcy5jYW52YXNHcmFwaGljc0ZhY3Rvcnk7KDAsbi5pbmZvKSgiVGlsaW5nVHlwZTogIitzKTt2YXIgdT1yWzBdLGY9clsxXSxoPXJbMl0sZD1yWzNdLHA9W3UsZl0sbT1bdSthLGYraV0sZz1tWzBdLXBbMF0sdj1tWzFdLXBbMV0seT1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLGI9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksdz1beVswXSpiWzBdLHlbMV0qYlsxXV07Zz1NYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoZyp3WzBdKSksM2UzKSx2PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyh2KndbMV0pKSwzZTMpO3ZhciBrPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLHYsITApLFM9ay5jb250ZXh0LF89Yy5jcmVhdGVDYW52YXNHcmFwaGljcyhTKTtfLmdyb3VwTGV2ZWw9ZS5ncm91cExldmVsLHRoaXMuc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KF8sbyxsKSx0aGlzLnNldFNjYWxlKGcsdixhLGkpLHRoaXMudHJhbnNmb3JtVG9TY2FsZShfKTt2YXIgeD1bMSwwLDAsMSwtcFswXSwtcFsxXV07cmV0dXJuIF8udHJhbnNmb3JtLmFwcGx5KF8seCksdGhpcy5jbGlwQmJveChfLHIsdSxmLGgsZCksXy5leGVjdXRlT3BlcmF0b3JMaXN0KHQpLGsuY2FudmFzfSxzZXRTY2FsZTpmdW5jdGlvbihlLHQscixuKXt0aGlzLnNjYWxlPVtlL3IsdC9uXX0sdHJhbnNmb3JtVG9TY2FsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNjYWxlLHI9W3RbMF0sMCwwLHRbMV0sMCwwXTtlLnRyYW5zZm9ybS5hcHBseShlLHIpfSxzY2FsZVRvQ29udGV4dDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2NhbGU7dGhpcy5jdHguc2NhbGUoMS9lWzBdLDEvZVsxXSl9LGNsaXBCYm94OmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXtpZihBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGgpe3ZhciBvPWEtcixzPWktbjtlLmN0eC5yZWN0KHIsbixvLHMpLGUuY2xpcCgpLGUuZW5kUGF0aCgpfX0sc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0OmZ1bmN0aW9uKHIsYSxpKXt2YXIgbz1yLmN0eCxzPXIuY3VycmVudDtzd2l0Y2goYSl7Y2FzZSBlOnZhciBsPXRoaXMuY3R4O28uZmlsbFN0eWxlPWwuZmlsbFN0eWxlLG8uc3Ryb2tlU3R5bGU9bC5zdHJva2VTdHlsZSxzLmZpbGxDb2xvcj1sLmZpbGxTdHlsZSxzLnN0cm9rZUNvbG9yPWwuc3Ryb2tlU3R5bGU7YnJlYWs7Y2FzZSB0OnZhciBjPW4uVXRpbC5tYWtlQ3NzUmdiKGlbMF0saVsxXSxpWzJdKTtvLmZpbGxTdHlsZT1jLG8uc3Ryb2tlU3R5bGU9YyxzLmZpbGxDb2xvcj1jLHMuc3Ryb2tlQ29sb3I9YzticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnN1cHBvcnRlZCBwYWludCB0eXBlOiAiLmNvbmNhdChhKSl9fSxnZXRQYXR0ZXJuOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVQYXR0ZXJuQ2FudmFzKHQpO3JldHVybihlPXRoaXMuY3R4KS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSx0aGlzLmJhc2VUcmFuc2Zvcm0pLGUudHJhbnNmb3JtLmFwcGx5KGUsdGhpcy5tYXRyaXgpLHRoaXMuc2NhbGVUb0NvbnRleHQoKSxlLmNyZWF0ZVBhdHRlcm4ociwicmVwZWF0Iil9fSxyfSgpO3QuVGlsaW5nUGF0dGVybj1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFdvcmtlck9wdGlvbnM9dm9pZCAwO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7dC5HbG9iYWxXb3JrZXJPcHRpb25zPW4sbi53b3JrZXJQb3J0PXZvaWQgMD09PW4ud29ya2VyUG9ydD9udWxsOm4ud29ya2VyUG9ydCxuLndvcmtlclNyYz12b2lkIDA9PT1uLndvcmtlclNyYz8iIjpuLndvcmtlclNyY30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NZXNzYWdlSGFuZGxlcj1wO3ZhciBuLGE9KG49cigxNDcpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0saT1yKDEpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBzKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtzKGksbixhLG8sbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtzKGksbixhLG8sbCwidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB1KCl7cmV0dXJuKHU9bChhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGk9YXJndW1lbnRzO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobj1pLmxlbmd0aD4yJiZ2b2lkIDAhPT1pWzJdP2lbMl06bnVsbCx0KXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdC5hcHBseShuLHIpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoZSl7aWYoIm9iamVjdCIhPT1vKGUpKXJldHVybiBlO3N3aXRjaChlLm5hbWUpe2Nhc2UiQWJvcnRFeGNlcHRpb24iOnJldHVybiBuZXcgaS5BYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBpLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBFcnJvcil8fGUgaW5zdGFuY2VvZiBpLkFib3J0RXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBpLlVua25vd25FcnJvckV4Y2VwdGlvbj9lOm5ldyBpLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX1mdW5jdGlvbiBkKGUsdCxyKXt0P2UucmVzb2x2ZSgpOmUucmVqZWN0KHIpfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBuPXRoaXM7dGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXQsdGhpcy5jb21PYmo9cix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz0hMCx0aGlzLnN0cmVhbVNpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zdHJlYW1Db250cm9sbGVycz1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBhPXRoaXMuY2FsbGJhY2tzQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksaT10aGlzLmFjdGlvbkhhbmRsZXI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9vbkNvbU9iak9uTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7aWYodC50YXJnZXROYW1lPT09bi5zb3VyY2VOYW1lKWlmKHQuc3RyZWFtKW4uX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKHQpO2Vsc2UgaWYodC5pc1JlcGx5KXt2YXIgbz10LmNhbGxiYWNrSWQ7aWYoISh0LmNhbGxiYWNrSWQgaW4gYSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChvKSk7dmFyIHM9YVtvXTtkZWxldGUgYVtvXSwiZXJyb3IiaW4gdD9zLnJlamVjdChmKHQuZXJyb3IpKTpzLnJlc29sdmUodC5kYXRhKX1lbHNle2lmKCEodC5hY3Rpb24gaW4gaSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogIi5jb25jYXQodC5hY3Rpb24pKTt2YXIgbD1pW3QuYWN0aW9uXTtpZih0LmNhbGxiYWNrSWQpe3ZhciBjPW4uc291cmNlTmFtZSx1PXQuc291cmNlTmFtZTtQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBsWzBdLmNhbGwobFsxXSx0LmRhdGEpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6Yyx0YXJnZXROYW1lOnUsaXNSZXBseTohMCxjYWxsYmFja0lkOnQuY2FsbGJhY2tJZCxkYXRhOmV9KX0pLChmdW5jdGlvbihlKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmMsdGFyZ2V0TmFtZTp1LGlzUmVwbHk6ITAsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZXJyb3I6aChlKX0pfSkpfWVsc2UgdC5zdHJlYW1JZD9uLl9jcmVhdGVTdHJlYW1TaW5rKHQpOmxbMF0uY2FsbChsWzFdLHQuZGF0YSl9fSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX1wLnByb3RvdHlwZT17b246ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihuW2VdKXRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJy5jb25jYXQoZSwnIicpKTtuW2VdPVt0LHJdfSxzZW5kOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj17c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0fTt0aGlzLnBvc3RNZXNzYWdlKG4scil9LHNlbmRXaXRoUHJvbWlzZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5jYWxsYmFja0lkKyssYT17c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0LGNhbGxiYWNrSWQ6bn0sbz0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tzQ2FwYWJpbGl0aWVzW25dPW87dHJ5e3RoaXMucG9zdE1lc3NhZ2UoYSxyKX1jYXRjaChlKXtvLnJlamVjdChlKX1yZXR1cm4gby5wcm9taXNlfSxzZW5kV2l0aFN0cmVhbTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT10aGlzLG89dGhpcy5zdHJlYW1JZCsrLHM9dGhpcy5zb3VyY2VOYW1lLGw9dGhpcy50YXJnZXROYW1lO3JldHVybiBuZXcgaS5SZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24ocil7dmFyIG49KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXT17Y29udHJvbGxlcjpyLHN0YXJ0Q2FsbDpuLGlzQ2xvc2VkOiExfSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLGFjdGlvbjplLHN0cmVhbUlkOm8sZGF0YTp0LGRlc2lyZWRTaXplOnIuZGVzaXJlZFNpemV9KSxuLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOmwsc3RyZWFtOiJwdWxsIixzdHJlYW1JZDpvLGRlc2lyZWRTaXplOmUuZGVzaXJlZFNpemV9KSx0LnByb21pc2V9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3JldHVybiBhLnN0cmVhbUNvbnRyb2xsZXJzW29dLmNhbmNlbENhbGw9dCxhLnN0cmVhbUNvbnRyb2xsZXJzW29dLmlzQ2xvc2VkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOmwsc3RyZWFtOiJjYW5jZWwiLHJlYXNvbjplLHN0cmVhbUlkOm99KSx0LnByb21pc2V9fSxyKX0sX2NyZWF0ZVN0cmVhbVNpbms6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMsbj10aGlzLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dLGE9ZS5zdHJlYW1JZCxvPWUuZGVzaXJlZFNpemUscz10aGlzLnNvdXJjZU5hbWUsbD1lLnNvdXJjZU5hbWUsdT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGY9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdHJlYW0sbj1lLmNodW5rLGk9ZS50cmFuc2ZlcnMsbz1lLnN1Y2Nlc3MsYz1lLnJlYXNvbjt0LnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbTpyLHN0cmVhbUlkOmEsY2h1bms6bixzdWNjZXNzOm8scmVhc29uOmN9LGkpfSxoPXtlbnF1ZXVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3ZhciBuPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09dCxuPjAmJnRoaXMuZGVzaXJlZFNpemU8PTAmJih0aGlzLnNpbmtDYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5yZWFkeT10aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2UpLGYoe3N0cmVhbToiZW5xdWV1ZSIsY2h1bms6ZSx0cmFuc2ZlcnM6cn0pfX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmlzQ2FuY2VsbGVkfHwodGhpcy5pc0NhbmNlbGxlZD0hMCxmKHtzdHJlYW06ImNsb3NlIn0pLGRlbGV0ZSByLnN0cmVhbVNpbmtzW2FdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsZih7c3RyZWFtOiJlcnJvciIscmVhc29uOmV9KSl9LHNpbmtDYXBhYmlsaXR5OnUsb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTpvLHJlYWR5Om51bGx9O2guc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLGgucmVhZHk9aC5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlLHRoaXMuc3RyZWFtU2lua3NbYV09aCxjKG5bMF0sW2UuZGF0YSxoXSxuWzFdKS50aGVuKChmdW5jdGlvbigpe2Yoe3N0cmVhbToic3RhcnRfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtmKHtzdHJlYW06InN0YXJ0X2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSl9LF9wcm9jZXNzU3RyZWFtTWVzc2FnZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5zb3VyY2VOYW1lLG49ZS5zb3VyY2VOYW1lLGE9ZS5zdHJlYW1JZCxvPWZ1bmN0aW9uKGUpe3ZhciBpPWUuc3RyZWFtLG89ZS5zdWNjZXNzLHM9ZS5yZWFzb247dC5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOm4sc3RyZWFtOmksc3VjY2VzczpvLHN0cmVhbUlkOmEscmVhc29uOnN9KX0scz1mdW5jdGlvbigpe1Byb21pc2UuYWxsKFt0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLnN0YXJ0Q2FsbCx0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLnB1bGxDYWxsLHQuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSYmKHQ9ZS5wcm9taXNlLFByb21pc2UucmVzb2x2ZSh0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSkpO3ZhciB0fSkpKS50aGVuKChmdW5jdGlvbigpe2RlbGV0ZSB0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdfSkpfTtzd2l0Y2goZS5zdHJlYW0pe2Nhc2Uic3RhcnRfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5zdGFydENhbGwsZS5zdWNjZXNzLGYoZS5yZWFzb24pKTticmVhaztjYXNlInB1bGxfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5wdWxsQ2FsbCxlLnN1Y2Nlc3MsZihlLnJlYXNvbikpO2JyZWFrO2Nhc2UicHVsbCI6aWYoIXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0pe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pO2JyZWFrfXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uZGVzaXJlZFNpemU8PTAmJmUuZGVzaXJlZFNpemU+MCYmdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCksdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZT1lLmRlc2lyZWRTaXplLGModGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5vblB1bGwpLnRoZW4oKGZ1bmN0aW9uKCl7byh7c3RyZWFtOiJwdWxsX2NvbXBsZXRlIixzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7byh7c3RyZWFtOiJwdWxsX2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSk7YnJlYWs7Y2FzZSJlbnF1ZXVlIjooMCxpLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXSwiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWR8fHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UiY2xvc2UiOmlmKCgwLGkuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWQpYnJlYWs7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5pc0Nsb3NlZD0hMCx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKSxzKCk7YnJlYWs7Y2FzZSJlcnJvciI6KDAsaS5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0sImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIiksdGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jb250cm9sbGVyLmVycm9yKGYoZS5yZWFzb24pKSxzKCk7YnJlYWs7Y2FzZSJjYW5jZWxfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jYW5jZWxDYWxsLGUuc3VjY2VzcyxmKGUucmVhc29uKSkscygpO2JyZWFrO2Nhc2UiY2FuY2VsIjppZighdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXSlicmVhaztjKHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0ub25DYW5jZWwsW2YoZS5yZWFzb24pXSkudGhlbigoZnVuY3Rpb24oKXtvKHtzdHJlYW06ImNhbmNlbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe28oe3N0cmVhbToiY2FuY2VsX2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSksdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoZihlLnJlYXNvbikpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7dCYmdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz90aGlzLmNvbU9iai5wb3N0TWVzc2FnZShlLHQpOnRoaXMuY29tT2JqLnBvc3RNZXNzYWdlKGUpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWV0YWRhdGE9dm9pZCAwO3ZhciBuPXIoMSksYT1yKDE1OSk7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB0LCJNZXRhZGF0YTogaW5wdXQgaXMgbm90IGEgc3RyaW5nIiksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9KG5ldyBhLlNpbXBsZVhNTFBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhPU9iamVjdC5jcmVhdGUobnVsbCksciYmdGhpcy5fcGFyc2Uocil9dmFyIHQscixvO3JldHVybiB0PWUsKHI9W3trZXk6Il9yZXBhaXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL14oW148XSspLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj0iIixhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtuKz1vPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/U3RyaW5nLmZyb21DaGFyQ29kZShvKToiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyJ9cmV0dXJuIj4iK259KSl9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlmb3IodD10LmZpcnN0Q2hpbGQ7dCYmInJkZjpyZGYiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyl0PXQubmV4dFNpYmxpbmc7dmFyIHI9dD90Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk6bnVsbDtpZih0JiYicmRmOnJkZiI9PT1yJiZ0Lmhhc0NoaWxkTm9kZXMoKSlmb3IodmFyIG49dC5jaGlsZE5vZGVzLGE9MCxpPW4ubGVuZ3RoO2E8aTthKyspe3ZhciBvPW5bYV07aWYoInJkZjpkZXNjcmlwdGlvbiI9PT1vLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpZm9yKHZhciBzPTAsbD1vLmNoaWxkTm9kZXMubGVuZ3RoO3M8bDtzKyspaWYoIiN0ZXh0IiE9PW8uY2hpbGROb2Rlc1tzXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgYz1vLmNoaWxkTm9kZXNbc10sdT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5fbWV0YWRhdGFbdV09Yy50ZXh0Q29udGVudC50cmltKCl9fX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWV0YWRhdGFbZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpudWxsfX0se2tleToiZ2V0QWxsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXRhZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21ldGFkYXRhW2VdfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxvJiZpKHQsbyksZX0oKTt0Lk1ldGFkYXRhPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1uKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuKG89InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldDpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPXMoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKHIpOmEudmFsdWV9fSkoZSx0LHJ8fGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuKHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4obD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gYyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBmKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TaW1wbGVYTUxQYXJzZXI9dm9pZCAwO3ZhciBoPTAsZD0tMixwPS0zLG09LTQsZz0tNSx2PS02LHk9LTk7ZnVuY3Rpb24gYihlLHQpe3ZhciByPWVbdF07cmV0dXJuIiAiPT09cnx8IlxuIj09PXJ8fCJcciI9PT1yfHwiXHQiPT09cn12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIGYoZSxbe2tleToiX3Jlc29sdmVFbnRpdGllcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZS5yZXBsYWNlKC8mKFteO10rKTsvZywoZnVuY3Rpb24oZSxyKXtpZigiI3giPT09ci5zdWJzdHJpbmcoMCwyKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChyLnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXIuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10LGE9W107ZnVuY3Rpb24gaSgpe2Zvcig7bjxlLmxlbmd0aCYmYihlLG4pOykrK259Zm9yKDtuPGUubGVuZ3RoJiYhYihlLG4pJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dOykrK247Zm9yKHI9ZS5zdWJzdHJpbmcodCxuKSxpKCk7bjxlLmxlbmd0aCYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXSYmIj8iIT09ZVtuXTspe2koKTtmb3IodmFyIG8scz0iIjtuPGUubGVuZ3RoJiYhYihlLG4pJiYiPSIhPT1lW25dOylzKz1lW25dLCsrbjtpZihpKCksIj0iIT09ZVtuXSlyZXR1cm4gbnVsbDsrK24saSgpO3ZhciBsPWVbbl07aWYoJyInIT09bCYmIiciIT09bClyZXR1cm4gbnVsbDt2YXIgYz1lLmluZGV4T2YobCwrK24pO2lmKGM8MClyZXR1cm4gbnVsbDtvPWUuc3Vic3RyaW5nKG4sYyksYS5wdXNoKHtuYW1lOnMsdmFsdWU6dGhpcy5fcmVzb2x2ZUVudGl0aWVzKG8pfSksbj1jKzEsaSgpfXJldHVybntuYW1lOnIsYXR0cmlidXRlczphLHBhcnNlZDpuLXR9fX0se2tleToiX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPXQ7bjxlLmxlbmd0aCYmIWIoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3I9ZS5zdWJzdHJpbmcodCxuKSxmdW5jdGlvbigpe2Zvcig7bjxlLmxlbmd0aCYmYihlLG4pOykrK259KCk7Zm9yKHZhciBhPW47bjxlLmxlbmd0aCYmKCI/IiE9PWVbbl18fCI+IiE9PWVbbisxXSk7KSsrbjtyZXR1cm57bmFtZTpyLHZhbHVlOmUuc3Vic3RyaW5nKGEsbikscGFyc2VkOm4tdH19fSx7a2V5OiJwYXJzZVhtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDspe3ZhciByPXQ7aWYoIjwiPT09ZVt0XSl7dmFyIG49dm9pZCAwO3N3aXRjaChlWysrcl0pe2Nhc2UiLyI6aWYoKytyLChuPWUuaW5kZXhPZigiPiIscikpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHkpO3RoaXMub25FbmRFbGVtZW50KGUuc3Vic3RyaW5nKHIsbikpLHI9bisxO2JyZWFrO2Nhc2UiPyI6KytyO3ZhciBhPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUscik7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKHIrYS5wYXJzZWQscithLnBhcnNlZCsyKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocCk7dGhpcy5vblBpKGEubmFtZSxhLnZhbHVlKSxyKz1hLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKHIrMSxyKzMpKXtpZigobj1lLmluZGV4T2YoIi0tXHgzZSIsciszKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoZyk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoZCk7dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKHIrOCxuKSkscj1uKzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhyKzEscis4KSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3Iodik7dmFyIGk9ZS5pbmRleE9mKCJbIixyKzgpLG89ITE7aWYoKG49ZS5pbmRleE9mKCI+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihtKTtpZihpPjAmJm4+aSl7aWYoKG49ZS5pbmRleE9mKCJdPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IobSk7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBsPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1sKXJldHVybiB2b2lkIHRoaXMub25FcnJvcih2KTt2YXIgYz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcocitsLnBhcnNlZCxyK2wucGFyc2VkKzIpKWM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhyK2wucGFyc2VkLHIrbC5wYXJzZWQrMSkpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHkpO3RoaXMub25CZWdpbkVsZW1lbnQobC5uYW1lLGwuYXR0cmlidXRlcyxjKSxyKz1sLnBhcnNlZCsoYz8yOjEpfX1lbHNle2Zvcig7cjxlLmxlbmd0aCYmIjwiIT09ZVtyXTspcisrO3ZhciB1PWUuc3Vic3RyaW5nKHQscik7dGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHUpKX10PXJ9fX0se2tleToib25SZXNvbHZlRW50aXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iJiIuY29uY2F0KGUsIjsiKX19LHtrZXk6Im9uUGkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7fX0se2tleToib25Db21tZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkRvY3R5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe319XSksZX0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2ModGhpcyxlKSx0aGlzLm5vZGVOYW1lPXQsdGhpcy5ub2RlVmFsdWU9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Tm9kZSIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KX1yZXR1cm4gZihlLFt7a2V5OiJoYXNDaGlsZE5vZGVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlcy5sZW5ndGg+MH19LHtrZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX1dKSxlfSgpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlO3JldHVybiBjKHRoaXMsdCksKGU9aSh0aGlzLHModCkuY2FsbCh0aGlzKSkpLl9jdXJyZW50RnJhZ21lbnQ9bnVsbCxlLl9zdGFjaz1udWxsLGUuX2Vycm9yQ29kZT1oLGV9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmwoZSx0KX0odCxlKSxmKHQsW3trZXk6InBhcnNlRnJvbVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fY3VycmVudEZyYWdtZW50PVtdLHRoaXMuX3N0YWNrPVtdLHRoaXMuX2Vycm9yQ29kZT1oLHRoaXMucGFyc2VYbWwoZSksdGhpcy5fZXJyb3JDb2RlPT09aCl7dmFyIHQ9YSh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiBvKHModC5wcm90b3R5cGUpLCJvblJlc29sdmVFbnRpdHkiLHRoaXMpLmNhbGwodGhpcyxlKX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighYihlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IGsoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgaygiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgayhlKTtuLmNoaWxkTm9kZXM9W10sdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobikscnx8KHRoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudEZyYWdtZW50KSx0aGlzLl9jdXJyZW50RnJhZ21lbnQ9bi5jaGlsZE5vZGVzKX19LHtrZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEZyYWdtZW50PXRoaXMuX3N0YWNrLnBvcCgpfHxbXTt2YXIgdD10aGlzLl9jdXJyZW50RnJhZ21lbnRbdGhpcy5fY3VycmVudEZyYWdtZW50Lmxlbmd0aC0xXTtpZih0KWZvcih2YXIgcj0wLG49dC5jaGlsZE5vZGVzLmxlbmd0aDtyPG47cisrKXQuY2hpbGROb2Rlc1tyXS5wYXJlbnROb2RlPXR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksdH0odyk7dC5TaW1wbGVYTUxQYXJzZXI9U30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbixhPShuPXIoMTQ3KSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cigxKTtmdW5jdGlvbiBvKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gcyhlKXtvKGksbixhLHMsbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtvKGksbixhLHMsbCwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIHI9dGhpczsoMCxpLmFzc2VydCkodCksdGhpcy5fcXVldWVkQ2h1bmtzPVtdO3ZhciBuPWUuaW5pdGlhbERhdGE7aWYobiYmbi5sZW5ndGg+MCl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGEpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD10LHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24oZSx0KXtyLl9vblJlY2VpdmVEYXRhKHtiZWdpbjplLGNodW5rOnR9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24oZSl7ci5fb25Qcm9ncmVzcyh7bG9hZGVkOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIoKGZ1bmN0aW9uKGUpe3IuX29uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQudHJhbnNwb3J0UmVhZHkoKX1mdW5jdGlvbiB0KGUsdCl7dGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT0hMSx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMuX3F1ZXVlZENodW5rcz10fHxbXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9oZWFkZXJzUmVhZHk9UHJvbWlzZS5yZXNvbHZlKCksZS5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcyx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgcixuO2Z1bmN0aW9uIG8oZSx0LHIpe3RoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXQsdGhpcy5fZW5kPXIsdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXJldHVybiBlLnByb3RvdHlwZT17X29uUmVjZWl2ZURhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5jaHVuaykuYnVmZmVyO2lmKHZvaWQgMD09PWUuYmVnaW4pdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuX2VucXVldWUodCk6dGhpcy5fcXVldWVkQ2h1bmtzLnB1c2godCk7ZWxzZXt2YXIgcj10aGlzLl9yYW5nZVJlYWRlcnMuc29tZSgoZnVuY3Rpb24ocil7cmV0dXJuIHIuX2JlZ2luPT09ZS5iZWdpbiYmKHIuX2VucXVldWUodCksITApfSkpOygwLGkuYXNzZXJ0KShyKX19LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3JhbmdlUmVhZGVycy5sZW5ndGg+MCl7dmFyIHQ9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdO3Qub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWR9KX19LF9yZW1vdmVSYW5nZVJlYWRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yYW5nZVJlYWRlcnMuaW5kZXhPZihlKTt0Pj0wJiZ0aGlzLl9yYW5nZVJlYWRlcnMuc3BsaWNlKHQsMSl9LGdldEZ1bGxSZWFkZXI6ZnVuY3Rpb24oKXsoMCxpLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKTt2YXIgZT10aGlzLl9xdWV1ZWRDaHVua3M7cmV0dXJuIHRoaXMuX3F1ZXVlZENodW5rcz1udWxsLG5ldyB0KHRoaXMsZSl9LGdldFJhbmdlUmVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG8odGhpcyxlLHQpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZShlLHQpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9LGNhbmNlbEFsbFJlcXVlc3RzOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpLHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX0sdC5wcm90b3R5cGU9e19lbnF1ZXVlOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmV8fCh0aGlzLl9yZXF1ZXN0cy5sZW5ndGg+MD90aGlzLl9yZXF1ZXN0cy5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOmUsZG9uZTohMX0pOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpKX0sZ2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9LGdldCBmaWxlbmFtZSgpe3JldHVybiB0aGlzLl9maWxlbmFtZX0sZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1JhbmdlU3VwcG9ydGVkfSxnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RofSxyZWFkOihyPXMoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoPjApKXtlLm5leHQ9MzticmVha31yZXR1cm4gdD10aGlzLl9xdWV1ZWRDaHVua3Muc2hpZnQoKSxlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dCxkb25lOiExfSk7Y2FzZSAzOmlmKCF0aGlzLl9kb25lKXtlLm5leHQ9NTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA1OnJldHVybiByPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSxlLmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdfX0sby5wcm90b3R5cGU9e19lbnF1ZXVlOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmV8fCgwPT09dGhpcy5fcmVxdWVzdHMubGVuZ3RoP3RoaXMuX3F1ZXVlZENodW5rPWU6KHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6ZSxkb25lOiExfSksdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdKSx0aGlzLl9kb25lPSEwLHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcykpfSxnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX0scmVhZDoobj1zKGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLl9xdWV1ZWRDaHVuayl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQ9dGhpcy5fcXVldWVkQ2h1bmssdGhpcy5fcXVldWVkQ2h1bms9bnVsbCxlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dCxkb25lOiExfSk7Y2FzZSA0OmlmKCF0aGlzLl9kb25lKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA2OnJldHVybiByPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSxlLmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyl9fSxlfSgpO3QuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1sfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldlYkdMQ29udGV4dD12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZW5hYmxlLG49dm9pZCAwIT09ciYmcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLl9lbmFibGVkPSEwPT09bn12YXIgdCxyLGk7cmV0dXJuIHQ9ZSwocj1be2tleToiY29tcG9zZVNNYXNrIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxheWVyLHI9ZS5tYXNrLG49ZS5wcm9wZXJ0aWVzO3JldHVybiBvLmNvbXBvc2VTTWFzayh0LHIsbil9fSx7a2V5OiJkcmF3RmlndXJlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxyPWUuaGVpZ2h0LG49ZS5iYWNrZ3JvdW5kQ29sb3IsYT1lLmZpZ3VyZXMsaT1lLmNvbnRleHQ7cmV0dXJuIG8uZHJhd0ZpZ3VyZXModCxyLG4sYSxpKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe28uY2xlYW51cCgpfX0se2tleToiaXNFbmFibGVkIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9lbmFibGVkO3JldHVybiBlJiYoZT1vLnRyeUluaXRHTCgpKSwoMCxuLnNoYWRvdykodGhpcywiaXNFbmFibGVkIixlKX19XSkmJmEodC5wcm90b3R5cGUsciksaSYmYSh0LGkpLGV9KCk7dC5XZWJHTENvbnRleHQ9aTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBuPWUuY3JlYXRlU2hhZGVyKHIpO2lmKGUuc2hhZGVyU291cmNlKG4sdCksZS5jb21waWxlU2hhZGVyKG4pLCFlLmdldFNoYWRlclBhcmFtZXRlcihuLGUuQ09NUElMRV9TVEFUVVMpKXt2YXIgYT1lLmdldFNoYWRlckluZm9Mb2cobik7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uOiAiK2EpfXJldHVybiBufWZ1bmN0aW9uIHQodCxyKXtyZXR1cm4gZSh0LHIsdC5WRVJURVhfU0hBREVSKX1mdW5jdGlvbiByKHQscil7cmV0dXJuIGUodCxyLHQuRlJBR01FTlRfU0hBREVSKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciByPWUuY3JlYXRlUHJvZ3JhbSgpLG49MCxhPXQubGVuZ3RoO248YTsrK24pZS5hdHRhY2hTaGFkZXIocix0W25dKTtpZihlLmxpbmtQcm9ncmFtKHIpLCFlLmdldFByb2dyYW1QYXJhbWV0ZXIocixlLkxJTktfU1RBVFVTKSl7dmFyIGk9ZS5nZXRQcm9ncmFtSW5mb0xvZyhyKTt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIGR1cmluZyBwcm9ncmFtIGxpbmtpbmc6ICIraSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLHQscil7ZS5hY3RpdmVUZXh0dXJlKHIpO3ZhciBuPWUuY3JlYXRlVGV4dHVyZSgpO3JldHVybiBlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCxuKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTkVBUkVTVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLk5FQVJFU1QpLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLlJHQkEsZS5SR0JBLGUuVU5TSUdORURfQllURSx0KSxufXZhciBpLG87ZnVuY3Rpb24gcygpe2l8fChvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9by5nZXRDb250ZXh0KCJ3ZWJnbCIse3ByZW11bHRpcGxpZWRhbHBoYTohMX0pKX12YXIgbD1udWxsLGM9bnVsbDtyZXR1cm57dHJ5SW5pdEdMOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBzKCksISFpfWNhdGNoKGUpe31yZXR1cm4hMX0sY29tcG9zZVNNYXNrOmZ1bmN0aW9uKGUsYyx1KXt2YXIgZj1lLndpZHRoLGg9ZS5oZWlnaHQ7bHx8ZnVuY3Rpb24oKXt2YXIgZSxhO3MoKSxlPW8sbz1udWxsLGE9aSxpPW51bGw7dmFyIGM9bihhLFt0KGEsIiAgYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIgY2xpcFNwYWNlID0gKGFfcG9zaXRpb24gLyB1X3Jlc29sdXRpb24pICogMi4wIC0gMS4wOyAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFNwYWNlICogdmVjMigxLCAtMSksIDAsIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSxyKGEsIiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9iYWNrZHJvcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBpbnQgdV9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBpbWFnZUNvbG9yID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4Q29vcmQpOyAgICAgICAgICAgICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHVfbWFzaywgdl90ZXhDb29yZCk7ICAgICAgICAgICAgICAgICBpZiAodV9iYWNrZHJvcC5hID4gMC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ29sb3IucmdiID0gbWFza0NvbG9yLnJnYiAqIG1hc2tDb2xvci5hICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfYmFja2Ryb3AucmdiICogKDEuMCAtIG1hc2tDb2xvci5hKTsgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbHVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1X3N1YnR5cGUgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1bSA9IG1hc2tDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVtID0gbWFza0NvbG9yLnIgKiAwLjMgKyBtYXNrQ29sb3IuZyAqIDAuNTkgKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDb2xvci5iICogMC4xMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ29sb3IuYSAqPSBsdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNvbG9yLnJnYiAqPSBpbWFnZUNvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gaW1hZ2VDb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpXSk7YS51c2VQcm9ncmFtKGMpO3ZhciB1PXt9O3UuZ2w9YSx1LmNhbnZhcz1lLHUucmVzb2x1dGlvbkxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGMsInVfcmVzb2x1dGlvbiIpLHUucG9zaXRpb25Mb2NhdGlvbj1hLmdldEF0dHJpYkxvY2F0aW9uKGMsImFfcG9zaXRpb24iKSx1LmJhY2tkcm9wTG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9iYWNrZHJvcCIpLHUuc3VidHlwZUxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGMsInVfc3VidHlwZSIpO3ZhciBmPWEuZ2V0QXR0cmliTG9jYXRpb24oYywiYV90ZXhDb29yZCIpLGg9YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9pbWFnZSIpLGQ9YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9tYXNrIikscD1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihhLkFSUkFZX0JVRkZFUixwKSxhLmJ1ZmZlckRhdGEoYS5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwwLDEsMCwxLDEsMCwxLDFdKSxhLlNUQVRJQ19EUkFXKSxhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGYpLGEudmVydGV4QXR0cmliUG9pbnRlcihmLDIsYS5GTE9BVCwhMSwwLDApLGEudW5pZm9ybTFpKGgsMCksYS51bmlmb3JtMWkoZCwxKSxsPXV9KCk7dmFyIGQ9bCxwPWQuY2FudmFzLG09ZC5nbDtwLndpZHRoPWYscC5oZWlnaHQ9aCxtLnZpZXdwb3J0KDAsMCxtLmRyYXdpbmdCdWZmZXJXaWR0aCxtLmRyYXdpbmdCdWZmZXJIZWlnaHQpLG0udW5pZm9ybTJmKGQucmVzb2x1dGlvbkxvY2F0aW9uLGYsaCksdS5iYWNrZHJvcD9tLnVuaWZvcm00ZihkLnJlc29sdXRpb25Mb2NhdGlvbix1LmJhY2tkcm9wWzBdLHUuYmFja2Ryb3BbMV0sdS5iYWNrZHJvcFsyXSwxKTptLnVuaWZvcm00ZihkLnJlc29sdXRpb25Mb2NhdGlvbiwwLDAsMCwwKSxtLnVuaWZvcm0xaShkLnN1YnR5cGVMb2NhdGlvbiwiTHVtaW5vc2l0eSI9PT11LnN1YnR5cGU/MTowKTt2YXIgZz1hKG0sZSxtLlRFWFRVUkUwKSx2PWEobSxjLG0uVEVYVFVSRTEpLHk9bS5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gbS5iaW5kQnVmZmVyKG0uQVJSQVlfQlVGRkVSLHkpLG0uYnVmZmVyRGF0YShtLkFSUkFZX0JVRkZFUixuZXcgRmxvYXQzMkFycmF5KFswLDAsZiwwLDAsaCwwLGgsZiwwLGYsaF0pLG0uU1RBVElDX0RSQVcpLG0uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZC5wb3NpdGlvbkxvY2F0aW9uKSxtLnZlcnRleEF0dHJpYlBvaW50ZXIoZC5wb3NpdGlvbkxvY2F0aW9uLDIsbS5GTE9BVCwhMSwwLDApLG0uY2xlYXJDb2xvcigwLDAsMCwwKSxtLmVuYWJsZShtLkJMRU5EKSxtLmJsZW5kRnVuYyhtLk9ORSxtLk9ORV9NSU5VU19TUkNfQUxQSEEpLG0uY2xlYXIobS5DT0xPUl9CVUZGRVJfQklUKSxtLmRyYXdBcnJheXMobS5UUklBTkdMRVMsMCw2KSxtLmZsdXNoKCksbS5kZWxldGVUZXh0dXJlKGcpLG0uZGVsZXRlVGV4dHVyZSh2KSxtLmRlbGV0ZUJ1ZmZlcih5KSxwfSxkcmF3RmlndXJlczpmdW5jdGlvbihlLGEsbCx1LGYpe2N8fGZ1bmN0aW9uKCl7dmFyIGUsYTtzKCksZT1vLG89bnVsbCxhPWksaT1udWxsO3ZhciBsPW4oYSxbdChhLCIgIGF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjMyBhX2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3Jlc29sdXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV9zY2FsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSAoYV9wb3NpdGlvbiArIHVfb2Zmc2V0KSAqIHVfc2NhbGU7ICAgICAgICAgICAgICB2ZWMyIGNsaXBTcGFjZSA9IChwb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBTcGFjZSAqIHZlYzIoMSwgLTEpLCAwLCAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2X2NvbG9yID0gdmVjNChhX2NvbG9yIC8gMjU1LjAsIDEuMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikscihhLCIgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWM0IHZfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildKTthLnVzZVByb2dyYW0obCk7dmFyIHU9e307dS5nbD1hLHUuY2FudmFzPWUsdS5yZXNvbHV0aW9uTG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24obCwidV9yZXNvbHV0aW9uIiksdS5zY2FsZUxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVfc2NhbGUiKSx1Lm9mZnNldExvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVfb2Zmc2V0IiksdS5wb3NpdGlvbkxvY2F0aW9uPWEuZ2V0QXR0cmliTG9jYXRpb24obCwiYV9wb3NpdGlvbiIpLHUuY29sb3JMb2NhdGlvbj1hLmdldEF0dHJpYkxvY2F0aW9uKGwsImFfY29sb3IiKSxjPXV9KCk7dmFyIGg9YyxkPWguY2FudmFzLHA9aC5nbDtkLndpZHRoPWUsZC5oZWlnaHQ9YSxwLnZpZXdwb3J0KDAsMCxwLmRyYXdpbmdCdWZmZXJXaWR0aCxwLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHAudW5pZm9ybTJmKGgucmVzb2x1dGlvbkxvY2F0aW9uLGUsYSk7dmFyIG0sZyx2LHk9MDtmb3IobT0wLGc9dS5sZW5ndGg7bTxnO20rKylzd2l0Y2godVttXS50eXBlKXtjYXNlImxhdHRpY2UiOnkrPSgodj11W21dLmNvb3Jkcy5sZW5ndGgvdVttXS52ZXJ0aWNlc1BlclJvd3wwKS0xKSoodVttXS52ZXJ0aWNlc1BlclJvdy0xKSo2O2JyZWFrO2Nhc2UidHJpYW5nbGVzIjp5Kz11W21dLmNvb3Jkcy5sZW5ndGh9dmFyIGI9bmV3IEZsb2F0MzJBcnJheSgyKnkpLHc9bmV3IFVpbnQ4QXJyYXkoMyp5KSxrPWYuY29vcmRzLFM9Zi5jb2xvcnMsXz0wLHg9MDtmb3IobT0wLGc9dS5sZW5ndGg7bTxnO20rKyl7dmFyIEE9dVttXSxDPUEuY29vcmRzLFA9QS5jb2xvcnM7c3dpdGNoKEEudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgRT1BLnZlcnRpY2VzUGVyUm93O3Y9Qy5sZW5ndGgvRXwwO2Zvcih2YXIgVD0xO1Q8djtUKyspZm9yKHZhciBSPVQqRSsxLE89MTtPPEU7TysrLFIrKyliW19dPWtbQ1tSLUUtMV1dLGJbXysxXT1rW0NbUi1FLTFdKzFdLGJbXysyXT1rW0NbUi1FXV0sYltfKzNdPWtbQ1tSLUVdKzFdLGJbXys0XT1rW0NbUi0xXV0sYltfKzVdPWtbQ1tSLTFdKzFdLHdbeF09U1tQW1ItRS0xXV0sd1t4KzFdPVNbUFtSLUUtMV0rMV0sd1t4KzJdPVNbUFtSLUUtMV0rMl0sd1t4KzNdPVNbUFtSLUVdXSx3W3grNF09U1tQW1ItRV0rMV0sd1t4KzVdPVNbUFtSLUVdKzJdLHdbeCs2XT1TW1BbUi0xXV0sd1t4KzddPVNbUFtSLTFdKzFdLHdbeCs4XT1TW1BbUi0xXSsyXSxiW18rNl09YltfKzJdLGJbXys3XT1iW18rM10sYltfKzhdPWJbXys0XSxiW18rOV09YltfKzVdLGJbXysxMF09a1tDW1JdXSxiW18rMTFdPWtbQ1tSXSsxXSx3W3grOV09d1t4KzNdLHdbeCsxMF09d1t4KzRdLHdbeCsxMV09d1t4KzVdLHdbeCsxMl09d1t4KzZdLHdbeCsxM109d1t4KzddLHdbeCsxNF09d1t4KzhdLHdbeCsxNV09U1tQW1JdXSx3W3grMTZdPVNbUFtSXSsxXSx3W3grMTddPVNbUFtSXSsyXSxfKz0xMix4Kz0xODticmVhaztjYXNlInRyaWFuZ2xlcyI6Zm9yKHZhciBJPTAsRj1DLmxlbmd0aDtJPEY7SSsrKWJbX109a1tDW0ldXSxiW18rMV09a1tDW0ldKzFdLHdbeF09U1tQW0ldXSx3W3grMV09U1tQW0ldKzFdLHdbeCsyXT1TW1BbSV0rMl0sXys9Mix4Kz0zfX1sP3AuY2xlYXJDb2xvcihsWzBdLzI1NSxsWzFdLzI1NSxsWzJdLzI1NSwxKTpwLmNsZWFyQ29sb3IoMCwwLDAsMCkscC5jbGVhcihwLkNPTE9SX0JVRkZFUl9CSVQpO3ZhciBMPXAuY3JlYXRlQnVmZmVyKCk7cC5iaW5kQnVmZmVyKHAuQVJSQVlfQlVGRkVSLEwpLHAuYnVmZmVyRGF0YShwLkFSUkFZX0JVRkZFUixiLHAuU1RBVElDX0RSQVcpLHAuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaC5wb3NpdGlvbkxvY2F0aW9uKSxwLnZlcnRleEF0dHJpYlBvaW50ZXIoaC5wb3NpdGlvbkxvY2F0aW9uLDIscC5GTE9BVCwhMSwwLDApO3ZhciBEPXAuY3JlYXRlQnVmZmVyKCk7cmV0dXJuIHAuYmluZEJ1ZmZlcihwLkFSUkFZX0JVRkZFUixEKSxwLmJ1ZmZlckRhdGEocC5BUlJBWV9CVUZGRVIsdyxwLlNUQVRJQ19EUkFXKSxwLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGguY29sb3JMb2NhdGlvbikscC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGguY29sb3JMb2NhdGlvbiwzLHAuVU5TSUdORURfQllURSwhMSwwLDApLHAudW5pZm9ybTJmKGguc2NhbGVMb2NhdGlvbixmLnNjYWxlWCxmLnNjYWxlWSkscC51bmlmb3JtMmYoaC5vZmZzZXRMb2NhdGlvbixmLm9mZnNldFgsZi5vZmZzZXRZKSxwLmRyYXdBcnJheXMocC5UUklBTkdMRVMsMCx5KSxwLmZsdXNoKCkscC5kZWxldGVCdWZmZXIoTCkscC5kZWxldGVCdWZmZXIoRCksZH0sY2xlYW51cDpmdW5jdGlvbigpe2wmJmwuY2FudmFzJiYobC5jYW52YXMud2lkdGg9MCxsLmNhbnZhcy5oZWlnaHQ9MCksYyYmYy5jYW52YXMmJihjLmNhbnZhcy53aWR0aD0wLGMuY2FudmFzLmhlaWdodD0wKSxsPW51bGwsYz1udWxsfX19KCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVuZGVyVGV4dExheWVyPXZvaWQgMDt2YXIgbixhPXIoMSksaT0obj1yKDMpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0sbz1mdW5jdGlvbigpe3ZhciBlPS9cUy8sdD1bImxlZnQ6ICIsMCwicHg7IHRvcDogIiwwLCJweDsgZm9udC1zaXplOiAiLDAsInB4OyBmb250LWZhbWlseTogIiwiIiwiOyJdO2Z1bmN0aW9uIHIocixuLGkpe3ZhciBvLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLGw9e3N0eWxlOm51bGwsYW5nbGU6MCxjYW52YXNXaWR0aDowLGlzV2hpdGVzcGFjZTohMSxvcmlnaW5hbFRyYW5zZm9ybTpudWxsLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdUb3A6MCxzY2FsZToxfTtpZihyLl90ZXh0RGl2cy5wdXNoKHMpLG89bi5zdHIsIWUudGVzdChvKSlyZXR1cm4gbC5pc1doaXRlc3BhY2U9ITAsdm9pZCByLl90ZXh0RGl2UHJvcGVydGllcy5zZXQocyxsKTt2YXIgYz1hLlV0aWwudHJhbnNmb3JtKHIuX3ZpZXdwb3J0LnRyYW5zZm9ybSxuLnRyYW5zZm9ybSksdT1NYXRoLmF0YW4yKGNbMV0sY1swXSksZj1pW24uZm9udE5hbWVdO2YudmVydGljYWwmJih1Kz1NYXRoLlBJLzIpO3ZhciBoLGQscD1NYXRoLnNxcnQoY1syXSpjWzJdK2NbM10qY1szXSksbT1wO2lmKGYuYXNjZW50P209Zi5hc2NlbnQqbTpmLmRlc2NlbnQmJihtPSgxK2YuZGVzY2VudCkqbSksMD09PXU/KGg9Y1s0XSxkPWNbNV0tbSk6KGg9Y1s0XSttKk1hdGguc2luKHUpLGQ9Y1s1XS1tKk1hdGguY29zKHUpKSx0WzFdPWgsdFszXT1kLHRbNV09cCx0WzddPWYuZm9udEZhbWlseSxsLnN0eWxlPXQuam9pbigiIikscy5zZXRBdHRyaWJ1dGUoInN0eWxlIixsLnN0eWxlKSxzLnRleHRDb250ZW50PW4uc3RyLHIuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYocy5kYXRhc2V0LmZvbnROYW1lPW4uZm9udE5hbWUpLDAhPT11JiYobC5hbmdsZT11KigxODAvTWF0aC5QSSkpLG4uc3RyLmxlbmd0aD4xJiYoZi52ZXJ0aWNhbD9sLmNhbnZhc1dpZHRoPW4uaGVpZ2h0KnIuX3ZpZXdwb3J0LnNjYWxlOmwuY2FudmFzV2lkdGg9bi53aWR0aCpyLl92aWV3cG9ydC5zY2FsZSksci5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHMsbCksci5fdGV4dENvbnRlbnRTdHJlYW0mJnIuX2xheW91dFRleHQocyksci5fZW5oYW5jZVRleHRTZWxlY3Rpb24pe3ZhciBnPTEsdj0wOzAhPT11JiYoZz1NYXRoLmNvcyh1KSx2PU1hdGguc2luKHUpKTt2YXIgeSxiLHc9KGYudmVydGljYWw/bi5oZWlnaHQ6bi53aWR0aCkqci5fdmlld3BvcnQuc2NhbGUsaz1wOzAhPT11Pyh5PVtnLHYsLXYsZyxoLGRdLGI9YS5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsdyxrXSx5KSk6Yj1baCxkLGgrdyxkK2tdLHIuX2JvdW5kcy5wdXNoKHtsZWZ0OmJbMF0sdG9wOmJbMV0scmlnaHQ6YlsyXSxib3R0b206YlszXSxkaXY6cyxzaXplOlt3LGtdLG06eX0pfX1mdW5jdGlvbiBuKGUpe2lmKCFlLl9jYW5jZWxlZCl7dmFyIHQ9ZS5fdGV4dERpdnMscj1lLl9jYXBhYmlsaXR5LG49dC5sZW5ndGg7aWYobj4xZTUpcmV0dXJuIGUuX3JlbmRlcmluZ0RvbmU9ITAsdm9pZCByLnJlc29sdmUoKTtpZighZS5fdGV4dENvbnRlbnRTdHJlYW0pZm9yKHZhciBhPTA7YTxuO2ErKyllLl9sYXlvdXRUZXh0KHRbYV0pO2UuX3JlbmRlcmluZ0RvbmU9ITAsci5yZXNvbHZlKCl9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PWUuX2JvdW5kcyxyPWUuX3ZpZXdwb3J0LG49ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIubWFwKChmdW5jdGlvbihlLHQpe3JldHVybnt4MTplLmxlZnQseTE6ZS50b3AseDI6ZS5yaWdodCx5MjplLmJvdHRvbSxpbmRleDp0LHgxTmV3OnZvaWQgMCx4Mk5ldzp2b2lkIDB9fSkpO3MoZSxuKTt2YXIgYT1uZXcgQXJyYXkoci5sZW5ndGgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXg7YVt0XT17bGVmdDplLngxTmV3LHRvcDowLHJpZ2h0OmUueDJOZXcsYm90dG9tOjB9fSkpLHIubWFwKChmdW5jdGlvbih0LHIpe3ZhciBpPWFbcl0sbz1uW3JdO28ueDE9dC50b3Asby55MT1lLWkucmlnaHQsby54Mj10LmJvdHRvbSxvLnkyPWUtaS5sZWZ0LG8uaW5kZXg9cixvLngxTmV3PXZvaWQgMCxvLngyTmV3PXZvaWQgMH0pKSxzKHQsbiksbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4O2FbdF0udG9wPWUueDFOZXcsYVt0XS5ib3R0b209ZS54Mk5ld30pKSxhfShyLndpZHRoLHIuaGVpZ2h0LHQpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89dFtpXS5kaXYsbD1lLl90ZXh0RGl2UHJvcGVydGllcy5nZXQobyk7aWYoMCE9PWwuYW5nbGUpe3ZhciBjPW5baV0sdT10W2ldLGY9dS5tLGg9ZlswXSxkPWZbMV0scD1bWzAsMF0sWzAsdS5zaXplWzFdXSxbdS5zaXplWzBdLDBdLHUuc2l6ZV0sbT1uZXcgRmxvYXQ2NEFycmF5KDY0KTtwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9YS5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsZik7bVt0KzBdPWgmJihjLmxlZnQtclswXSkvaCxtW3QrNF09ZCYmKGMudG9wLXJbMV0pL2QsbVt0KzhdPWgmJihjLnJpZ2h0LXJbMF0pL2gsbVt0KzEyXT1kJiYoYy5ib3R0b20tclsxXSkvZCxtW3QrMTZdPWQmJihjLmxlZnQtclswXSkvLWQsbVt0KzIwXT1oJiYoYy50b3AtclsxXSkvaCxtW3QrMjRdPWQmJihjLnJpZ2h0LXJbMF0pLy1kLG1bdCsyOF09aCYmKGMuYm90dG9tLXJbMV0pL2gsbVt0KzMyXT1oJiYoYy5sZWZ0LXJbMF0pLy1oLG1bdCszNl09ZCYmKGMudG9wLXJbMV0pLy1kLG1bdCs0MF09aCYmKGMucmlnaHQtclswXSkvLWgsbVt0KzQ0XT1kJiYoYy5ib3R0b20tclsxXSkvLWQsbVt0KzQ4XT1kJiYoYy5sZWZ0LXJbMF0pL2QsbVt0KzUyXT1oJiYoYy50b3AtclsxXSkvLWgsbVt0KzU2XT1kJiYoYy5yaWdodC1yWzBdKS9kLG1bdCs2MF09aCYmKGMuYm90dG9tLXJbMV0pLy1ofSkpO3ZhciBnPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MCxhPTA7YTxyO2ErKyl7dmFyIGk9ZVt0KytdO2k+MCYmKG49bj9NYXRoLm1pbihpLG4pOmkpfXJldHVybiBufSx2PTErTWF0aC5taW4oTWF0aC5hYnMoaCksTWF0aC5hYnMoZCkpO2wucGFkZGluZ0xlZnQ9ZyhtLDMyLDE2KS92LGwucGFkZGluZ1RvcD1nKG0sNDgsMTYpL3YsbC5wYWRkaW5nUmlnaHQ9ZyhtLDAsMTYpL3YsbC5wYWRkaW5nQm90dG9tPWcobSwxNiwxNikvdixlLl90ZXh0RGl2UHJvcGVydGllcy5zZXQobyxsKX1lbHNlIGwucGFkZGluZ0xlZnQ9dFtpXS5sZWZ0LW5baV0ubGVmdCxsLnBhZGRpbmdUb3A9dFtpXS50b3AtbltpXS50b3AsbC5wYWRkaW5nUmlnaHQ9bltpXS5yaWdodC10W2ldLnJpZ2h0LGwucGFkZGluZ0JvdHRvbT1uW2ldLmJvdHRvbS10W2ldLmJvdHRvbSxlLl90ZXh0RGl2UHJvcGVydGllcy5zZXQobyxsKX19ZnVuY3Rpb24gcyhlLHQpe3Quc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS54MS10LngxfHxlLmluZGV4LXQuaW5kZXh9KSk7dmFyIHI9W3tzdGFydDotMS8wLGVuZDoxLzAsYm91bmRhcnk6e3gxOi0xLzAseTE6LTEvMCx4MjowLHkyOjEvMCxpbmRleDotMSx4MU5ldzowLHgyTmV3OjB9fV07dC5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoJiZyW3RdLmVuZDw9ZS55MTspdCsrO2Zvcih2YXIgbixhLGk9ci5sZW5ndGgtMTtpPj0wJiZyW2ldLnN0YXJ0Pj1lLnkyOylpLS07dmFyIG8scyxsPS0xLzA7Zm9yKG89dDtvPD1pO28rKyl7dmFyIGM7KGM9KGE9KG49cltvXSkuYm91bmRhcnkpLngyPmUueDE/YS5pbmRleD5lLmluZGV4P2EueDFOZXc6ZS54MTp2b2lkIDA9PT1hLngyTmV3PyhhLngyK2UueDEpLzI6YS54Mk5ldyk+bCYmKGw9Yyl9Zm9yKGUueDFOZXc9bCxvPXQ7bzw9aTtvKyspdm9pZCAwPT09KGE9KG49cltvXSkuYm91bmRhcnkpLngyTmV3P2EueDI+ZS54MT9hLmluZGV4PmUuaW5kZXgmJihhLngyTmV3PWEueDIpOmEueDJOZXc9bDphLngyTmV3PmwmJihhLngyTmV3PU1hdGgubWF4KGwsYS54MikpO3ZhciB1PVtdLGY9bnVsbDtmb3Iobz10O288PWk7bysrKXt2YXIgaD0oYT0obj1yW29dKS5ib3VuZGFyeSkueDI+ZS54Mj9hOmU7Zj09PWg/dVt1Lmxlbmd0aC0xXS5lbmQ9bi5lbmQ6KHUucHVzaCh7c3RhcnQ6bi5zdGFydCxlbmQ6bi5lbmQsYm91bmRhcnk6aH0pLGY9aCl9Zm9yKHJbdF0uc3RhcnQ8ZS55MSYmKHVbMF0uc3RhcnQ9ZS55MSx1LnVuc2hpZnQoe3N0YXJ0OnJbdF0uc3RhcnQsZW5kOmUueTEsYm91bmRhcnk6clt0XS5ib3VuZGFyeX0pKSxlLnkyPHJbaV0uZW5kJiYodVt1Lmxlbmd0aC0xXS5lbmQ9ZS55Mix1LnB1c2goe3N0YXJ0OmUueTIsZW5kOnJbaV0uZW5kLGJvdW5kYXJ5OnJbaV0uYm91bmRhcnl9KSksbz10O288PWk7bysrKWlmKHZvaWQgMD09PShhPShuPXJbb10pLmJvdW5kYXJ5KS54Mk5ldyl7dmFyIGQ9ITE7Zm9yKHM9dC0xOyFkJiZzPj0wJiZyW3NdLnN0YXJ0Pj1hLnkxO3MtLSlkPXJbc10uYm91bmRhcnk9PT1hO2ZvcihzPWkrMTshZCYmczxyLmxlbmd0aCYmcltzXS5lbmQ8PWEueTI7cysrKWQ9cltzXS5ib3VuZGFyeT09PWE7Zm9yKHM9MDshZCYmczx1Lmxlbmd0aDtzKyspZD11W3NdLmJvdW5kYXJ5PT09YTtkfHwoYS54Mk5ldz1sKX1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHIsW3QsaS10KzFdLmNvbmNhdCh1KSl9KSksci5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmJvdW5kYXJ5O3ZvaWQgMD09PXIueDJOZXcmJihyLngyTmV3PU1hdGgubWF4KGUsci54MikpfSkpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50ZXh0Q29udGVudCxyPWUudGV4dENvbnRlbnRTdHJlYW0sbj1lLmNvbnRhaW5lcixvPWUudmlld3BvcnQscz1lLnRleHREaXZzLGw9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGM9ZS5lbmhhbmNlVGV4dFNlbGVjdGlvbjt0aGlzLl90ZXh0Q29udGVudD10LHRoaXMuX3RleHRDb250ZW50U3RyZWFtPXIsdGhpcy5fY29udGFpbmVyPW4sdGhpcy5fdmlld3BvcnQ9byx0aGlzLl90ZXh0RGl2cz1zfHxbXSx0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyPWx8fFtdLHRoaXMuX2VuaGFuY2VUZXh0U2VsZWN0aW9uPSEhYyx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKCFpLmRlZmF1bHQuRm9udEluc3BlY3Rvcnx8IWkuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmVuYWJsZWQpLHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemU9bnVsbCx0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHk9bnVsbCx0aGlzLl9sYXlvdXRUZXh0Q3R4PW51bGwsdGhpcy5fdGV4dERpdlByb3BlcnRpZXM9bmV3IFdlYWtNYXAsdGhpcy5fcmVuZGVyaW5nRG9uZT0hMSx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVuZGVyVGltZXI9bnVsbCx0aGlzLl9ib3VuZHM9W119cmV0dXJuIGwucHJvdG90eXBlPXtnZXQgcHJvbWlzZSgpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3JlYWRlciYmKHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IGEuQWJvcnRFeGNlcHRpb24oInRleHQgbGF5ZXIgdGFzayBjYW5jZWxsZWQiKSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhbmNlbGVkPSEwLG51bGwhPT10aGlzLl9yZW5kZXJUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lciksdGhpcy5fcmVuZGVyVGltZXI9bnVsbCksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QoImNhbmNlbGVkIil9LF9wcm9jZXNzSXRlbXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTtuKyspdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ci5wdXNoKGVbbl0uc3RyKSxyKHRoaXMsZVtuXSx0KX0sX2xheW91dFRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY29udGFpbmVyLHI9dGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KGUpO2lmKCFyLmlzV2hpdGVzcGFjZSl7dmFyIG49ZS5zdHlsZS5mb250U2l6ZSxhPWUuc3R5bGUuZm9udEZhbWlseTtuPT09dGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSYmYT09PXRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseXx8KHRoaXMuX2xheW91dFRleHRDdHguZm9udD1uKyIgIithLHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemU9bix0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHk9YSk7dmFyIGk9dGhpcy5fbGF5b3V0VGV4dEN0eC5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aCxvPSIiOzAhPT1yLmNhbnZhc1dpZHRoJiZpPjAmJihyLnNjYWxlPXIuY2FudmFzV2lkdGgvaSxvPSJzY2FsZVgoIi5jb25jYXQoci5zY2FsZSwiKSIpKSwwIT09ci5hbmdsZSYmKG89InJvdGF0ZSgiLmNvbmNhdChyLmFuZ2xlLCJkZWcpICIpLmNvbmNhdChvKSksby5sZW5ndGg+MCYmKHIub3JpZ2luYWxUcmFuc2Zvcm09byxlLnN0eWxlLnRyYW5zZm9ybT1vKSx0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZSxyKSx0LmFwcGVuZENoaWxkKGUpfX0sX3JlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxpPU9iamVjdC5jcmVhdGUobnVsbCksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpZihvLm1vek9wYXF1ZT0hMCx0aGlzLl9sYXlvdXRUZXh0Q3R4PW8uZ2V0Q29udGV4dCgiMmQiLHthbHBoYTohMX0pLHRoaXMuX3RleHRDb250ZW50KXt2YXIgcz10aGlzLl90ZXh0Q29udGVudC5pdGVtcyxsPXRoaXMuX3RleHRDb250ZW50LnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMocyxsKSxyLnJlc29sdmUoKX1lbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgInRleHRDb250ZW50IiBub3IgInRleHRDb250ZW50U3RyZWFtIiBwYXJhbWV0ZXJzIHNwZWNpZmllZC4nKTt0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTdHJlYW0uZ2V0UmVhZGVyKCksZnVuY3Rpb24gZSgpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24obil7dmFyIGE9bi52YWx1ZTtuLmRvbmU/ci5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24oaSxhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsaSksZSgpKX0pLHIucmVqZWN0KX0oKX1yLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtpPW51bGwsZT90Ll9yZW5kZXJUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe24odCksdC5fcmVuZGVyVGltZXI9bnVsbH0pLGUpOm4odCl9KSx0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCl9LGV4cGFuZFRleHREaXZzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2VuaGFuY2VUZXh0U2VsZWN0aW9uJiZ0aGlzLl9yZW5kZXJpbmdEb25lKXtudWxsIT09dGhpcy5fYm91bmRzJiYobyh0aGlzKSx0aGlzLl9ib3VuZHM9bnVsbCk7Zm9yKHZhciB0PTAscj10aGlzLl90ZXh0RGl2cy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49dGhpcy5fdGV4dERpdnNbdF0sYT10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQobik7aWYoIWEuaXNXaGl0ZXNwYWNlKWlmKGUpe3ZhciBpPSIiLHM9IiI7MSE9PWEuc2NhbGUmJihpPSJzY2FsZVgoIithLnNjYWxlKyIpIiksMCE9PWEuYW5nbGUmJihpPSJyb3RhdGUoIithLmFuZ2xlKyJkZWcpICIraSksMCE9PWEucGFkZGluZ0xlZnQmJihzKz0iIHBhZGRpbmctbGVmdDogIithLnBhZGRpbmdMZWZ0L2Euc2NhbGUrInB4OyIsaSs9IiB0cmFuc2xhdGVYKCIrLWEucGFkZGluZ0xlZnQvYS5zY2FsZSsicHgpIiksMCE9PWEucGFkZGluZ1RvcCYmKHMrPSIgcGFkZGluZy10b3A6ICIrYS5wYWRkaW5nVG9wKyJweDsiLGkrPSIgdHJhbnNsYXRlWSgiKy1hLnBhZGRpbmdUb3ArInB4KSIpLDAhPT1hLnBhZGRpbmdSaWdodCYmKHMrPSIgcGFkZGluZy1yaWdodDogIithLnBhZGRpbmdSaWdodC9hLnNjYWxlKyJweDsiKSwwIT09YS5wYWRkaW5nQm90dG9tJiYocys9IiBwYWRkaW5nLWJvdHRvbTogIithLnBhZGRpbmdCb3R0b20rInB4OyIpLCIiIT09cyYmbi5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnN0eWxlK3MpLCIiIT09aSYmKG4uc3R5bGUudHJhbnNmb3JtPWkpfWVsc2Ugbi5zdHlsZS5wYWRkaW5nPTAsbi5zdHlsZS50cmFuc2Zvcm09YS5vcmlnaW5hbFRyYW5zZm9ybXx8IiJ9fX19LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBsKHt0ZXh0Q29udGVudDplLnRleHRDb250ZW50LHRleHRDb250ZW50U3RyZWFtOmUudGV4dENvbnRlbnRTdHJlYW0sY29udGFpbmVyOmUuY29udGFpbmVyLHZpZXdwb3J0OmUudmlld3BvcnQsdGV4dERpdnM6ZS50ZXh0RGl2cyx0ZXh0Q29udGVudEl0ZW1zU3RyOmUudGV4dENvbnRlbnRJdGVtc1N0cixlbmhhbmNlVGV4dFNlbGVjdGlvbjplLmVuaGFuY2VUZXh0U2VsZWN0aW9ufSk7cmV0dXJuIHQuX3JlbmRlcihlLnRpbWVvdXQpLHR9fSgpO3QucmVuZGVyVGV4dExheWVyPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQW5ub3RhdGlvbkxheWVyPXZvaWQgMDt2YXIgbj1yKDE1MSksYT1yKDEpO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybihpPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1jKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChyKTphLnZhbHVlfX0pKGUsdCxyfHxlKX1mdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PW8odCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2woZSk6dH1mdW5jdGlvbiBsKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBjKGUpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuKGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcChlLHQscil7cmV0dXJuIHQmJmQoZS5wcm90b3R5cGUsdCksciYmZChlLHIpLGV9dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aCh0aGlzLGUpfXJldHVybiBwKGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS5kYXRhLmFubm90YXRpb25UeXBlKXtjYXNlIGEuQW5ub3RhdGlvblR5cGUuTElOSzpyZXR1cm4gbmV3IHYoZSk7Y2FzZSBhLkFubm90YXRpb25UeXBlLlRFWFQ6cmV0dXJuIG5ldyB5KGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ6c3dpdGNoKGUuZGF0YS5maWVsZFR5cGUpe2Nhc2UiVHgiOnJldHVybiBuZXcgdyhlKTtjYXNlIkJ0biI6cmV0dXJuIGUuZGF0YS5yYWRpb0J1dHRvbj9uZXcgUyhlKTplLmRhdGEuY2hlY2tCb3g/bmV3IGsoZSk6bmV3IF8oZSk7Y2FzZSJDaCI6cmV0dXJuIG5ldyB4KGUpfXJldHVybiBuZXcgYihlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuUE9QVVA6cmV0dXJuIG5ldyBBKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgUChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgRShlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgVChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBSKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBJKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OOnJldHVybiBuZXcgTyhlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUOnJldHVybiBuZXcgRihlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgTChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk6cmV0dXJuIG5ldyBEKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ6cmV0dXJuIG5ldyBNKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IE4oZSk7Y2FzZSBhLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOnJldHVybiBuZXcgaihlKTtkZWZhdWx0OnJldHVybiBuZXcgZyhlKX19fV0pLGV9KCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aCh0aGlzLGUpLHRoaXMuaXNSZW5kZXJhYmxlPXIsdGhpcy5kYXRhPXQuZGF0YSx0aGlzLmxheWVyPXQubGF5ZXIsdGhpcy5wYWdlPXQucGFnZSx0aGlzLnZpZXdwb3J0PXQudmlld3BvcnQsdGhpcy5saW5rU2VydmljZT10LmxpbmtTZXJ2aWNlLHRoaXMuZG93bmxvYWRNYW5hZ2VyPXQuZG93bmxvYWRNYW5hZ2VyLHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoPXQuaW1hZ2VSZXNvdXJjZXNQYXRoLHRoaXMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcz10LnJlbmRlckludGVyYWN0aXZlRm9ybXMsdGhpcy5zdmdGYWN0b3J5PXQuc3ZnRmFjdG9yeSxyJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG4pKX1yZXR1cm4gcChlLFt7a2V5OiJfY3JlYXRlQ29udGFpbmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD10aGlzLmRhdGEscj10aGlzLnBhZ2Usbj10aGlzLnZpZXdwb3J0LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIpLG89dC5yZWN0WzJdLXQucmVjdFswXSxzPXQucmVjdFszXS10LnJlY3RbMV07aS5zZXRBdHRyaWJ1dGUoImRhdGEtYW5ub3RhdGlvbi1pZCIsdC5pZCk7dmFyIGw9YS5VdGlsLm5vcm1hbGl6ZVJlY3QoW3QucmVjdFswXSxyLnZpZXdbM10tdC5yZWN0WzFdK3Iudmlld1sxXSx0LnJlY3RbMl0sci52aWV3WzNdLXQucmVjdFszXStyLnZpZXdbMV1dKTtpZihpLnN0eWxlLnRyYW5zZm9ybT0ibWF0cml4KCIrbi50cmFuc2Zvcm0uam9pbigiLCIpKyIpIixpLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0tbFswXSsicHggIistbFsxXSsicHgiLCFlJiZ0LmJvcmRlclN0eWxlLndpZHRoPjApe2kuc3R5bGUuYm9yZGVyV2lkdGg9dC5ib3JkZXJTdHlsZS53aWR0aCsicHgiLHQuYm9yZGVyU3R5bGUuc3R5bGUhPT1hLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FJiYoby09Mip0LmJvcmRlclN0eWxlLndpZHRoLHMtPTIqdC5ib3JkZXJTdHlsZS53aWR0aCk7dmFyIGM9dC5ib3JkZXJTdHlsZS5ob3Jpem9udGFsQ29ybmVyUmFkaXVzLHU9dC5ib3JkZXJTdHlsZS52ZXJ0aWNhbENvcm5lclJhZGl1cztpZihjPjB8fHU+MCl7dmFyIGY9YysicHggLyAiK3UrInB4IjtpLnN0eWxlLmJvcmRlclJhZGl1cz1mfXN3aXRjaCh0LmJvcmRlclN0eWxlLnN0eWxlKXtjYXNlIGEuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDppLnN0eWxlLmJvcmRlclN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSBhLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOmkuc3R5bGUuYm9yZGVyU3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSBhLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDooMCxhLndhcm4pKCJVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZCIpO2JyZWFrO2Nhc2UgYS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldCIpO2JyZWFrO2Nhc2UgYS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORTppLnN0eWxlLmJvcmRlckJvdHRvbVN0eWxlPSJzb2xpZCJ9dC5jb2xvcj9pLnN0eWxlLmJvcmRlckNvbG9yPWEuVXRpbC5tYWtlQ3NzUmdiKDB8dC5jb2xvclswXSwwfHQuY29sb3JbMV0sMHx0LmNvbG9yWzJdKTppLnN0eWxlLmJvcmRlcldpZHRoPTB9cmV0dXJuIGkuc3R5bGUubGVmdD1sWzBdKyJweCIsaS5zdHlsZS50b3A9bFsxXSsicHgiLGkuc3R5bGUud2lkdGg9bysicHgiLGkuc3R5bGUuaGVpZ2h0PXMrInB4IixpfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dHx8KCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS5oZWlnaHQ9ZS5zdHlsZS5oZWlnaHQsdC5zdHlsZS53aWR0aD1lLnN0eWxlLndpZHRoLGUuYXBwZW5kQ2hpbGQodCkpO3ZhciBuPW5ldyBDKHtjb250YWluZXI6ZSx0cmlnZ2VyOnQsY29sb3I6ci5jb2xvcix0aXRsZTpyLnRpdGxlLGNvbnRlbnRzOnIuY29udGVudHMsaGlkZVdyYXBwZXI6ITB9KS5yZW5kZXIoKTtuLnN0eWxlLmxlZnQ9ZS5zdHlsZS53aWR0aCxlLmFwcGVuZENoaWxkKG4pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkIil9fV0pLGV9KCksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEudXJsfHxlLmRhdGEuZGVzdHx8ZS5kYXRhLmFjdGlvbik7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ibGlua0Fubm90YXRpb24iO3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMubGlua1NlcnZpY2Uscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuKDAsbi5hZGRMaW5rQXR0cmlidXRlcykocix7dXJsOmUudXJsLHRhcmdldDplLm5ld1dpbmRvdz9uLkxpbmtUYXJnZXQuQkxBTks6dC5leHRlcm5hbExpbmtUYXJnZXQscmVsOnQuZXh0ZXJuYWxMaW5rUmVsfSksZS51cmx8fChlLmFjdGlvbj90aGlzLl9iaW5kTmFtZWRBY3Rpb24ocixlLmFjdGlvbik6dGhpcy5fYmluZExpbmsocixlLmRlc3QpKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9iaW5kTGluayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2UuaHJlZj10aGlzLmxpbmtTZXJ2aWNlLmdldERlc3RpbmF0aW9uSGFzaCh0KSxlLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdCYmci5saW5rU2VydmljZS5uYXZpZ2F0ZVRvKHQpLCExfSx0JiYoZS5jbGFzc05hbWU9ImludGVybmFsTGluayIpfX0se2tleToiX2JpbmROYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2UuaHJlZj10aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybCgiIiksZS5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIubGlua1NlcnZpY2UuZXhlY3V0ZU5hbWVkQWN0aW9uKHQpLCExfSxlLmNsYXNzTmFtZT0iaW50ZXJuYWxMaW5rIn19XSksdH0oZykseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUscikpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIGUuc3R5bGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodCxlLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoLGUuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsZS5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsZS5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLGUuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsZSx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuY29udGFpbmVyfX1dKSx0fShnKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaCh0aGlzLHQpLHModGhpcyxjKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLHc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zfHwhZS5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhZS5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idGV4dFdpZGdldEFubm90YXRpb24iO3ZhciBlPW51bGw7aWYodGhpcy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKXtpZih0aGlzLmRhdGEubXVsdGlMaW5lPyhlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIikpLnRleHRDb250ZW50PXRoaXMuZGF0YS5maWVsZFZhbHVlOigoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS50eXBlPSJ0ZXh0IixlLnNldEF0dHJpYnV0ZSgidmFsdWUiLHRoaXMuZGF0YS5maWVsZFZhbHVlKSksZS5kaXNhYmxlZD10aGlzLmRhdGEucmVhZE9ubHksbnVsbCE9PXRoaXMuZGF0YS5tYXhMZW4mJihlLm1heExlbmd0aD10aGlzLmRhdGEubWF4TGVuKSx0aGlzLmRhdGEuY29tYil7dmFyIHQ9KHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdKS90aGlzLmRhdGEubWF4TGVuO2UuY2xhc3NMaXN0LmFkZCgiY29tYiIpLGUuc3R5bGUubGV0dGVyU3BhY2luZz0iY2FsYygiK3QrInB4IC0gMWNoKSJ9fWVsc2V7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnRleHRDb250ZW50PXRoaXMuZGF0YS5maWVsZFZhbHVlLGUuc3R5bGUudmVydGljYWxBbGlnbj0ibWlkZGxlIixlLnN0eWxlLmRpc3BsYXk9InRhYmxlLWNlbGwiO3ZhciByPW51bGw7dGhpcy5kYXRhLmZvbnRSZWZOYW1lJiZ0aGlzLnBhZ2UuY29tbW9uT2Jqcy5oYXModGhpcy5kYXRhLmZvbnRSZWZOYW1lKSYmKHI9dGhpcy5wYWdlLmNvbW1vbk9ianMuZ2V0KHRoaXMuZGF0YS5mb250UmVmTmFtZSkpLHRoaXMuX3NldFRleHRTdHlsZShlLHIpfXJldHVybiBudWxsIT09dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQmJihlLnN0eWxlLnRleHRBbGlnbj1bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XSksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfc2V0VGV4dFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUuc3R5bGU7aWYoci5mb250U2l6ZT10aGlzLmRhdGEuZm9udFNpemUrInB4IixyLmRpcmVjdGlvbj10aGlzLmRhdGEuZm9udERpcmVjdGlvbjwwPyJydGwiOiJsdHIiLHQpe3IuZm9udFdlaWdodD10LmJsYWNrP3QuYm9sZD8iOTAwIjoiYm9sZCI6dC5ib2xkPyJib2xkIjoibm9ybWFsIixyLmZvbnRTdHlsZT10Lml0YWxpYz8iaXRhbGljIjoibm9ybWFsIjt2YXIgbj10LmxvYWRlZE5hbWU/JyInK3QubG9hZGVkTmFtZSsnIiwgJzoiIixhPXQuZmFsbGJhY2tOYW1lfHwiSGVsdmV0aWNhLCBzYW5zLXNlcmlmIjtyLmZvbnRGYW1pbHk9bithfX19XSksdH0oYiksaz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuY2FsbCh0aGlzLGUsZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGUuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LGUudHlwZT0iY2hlY2tib3giLHRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuY29udGFpbmVyfX1dKSx0fShiKSxTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGgodGhpcyx0KSxzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxlLnJlbmRlckludGVyYWN0aXZlRm9ybXMpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvbiI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gZS5kaXNhYmxlZD10aGlzLmRhdGEucmVhZE9ubHksZS50eXBlPSJyYWRpbyIsZS5uYW1lPXRoaXMuZGF0YS5maWVsZE5hbWUsdGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUmJmUuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGIpLF89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWkoYyh0LnByb3RvdHlwZSksInJlbmRlciIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcHVzaEJ1dHRvbiIsZX19XSksdH0odikseD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuY2FsbCh0aGlzLGUsZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNob2ljZVdpZGdldEFubm90YXRpb24iO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO2UuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuZGF0YS5jb21ib3x8KGUuc2l6ZT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsdGhpcy5kYXRhLm11bHRpU2VsZWN0JiYoZS5tdWx0aXBsZT0hMCkpO2Zvcih2YXIgdD0wLHI9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPXRoaXMuZGF0YS5vcHRpb25zW3RdLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7YS50ZXh0Q29udGVudD1uLmRpc3BsYXlWYWx1ZSxhLnZhbHVlPW4uZXhwb3J0VmFsdWUsdGhpcy5kYXRhLmZpZWxkVmFsdWUuaW5jbHVkZXMobi5kaXNwbGF5VmFsdWUpJiZhLnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLCEwKSxlLmFwcGVuZENoaWxkKGEpfXJldHVybiB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oYiksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hKCFlLmRhdGEudGl0bGUmJiFlLmRhdGEuY29udGVudHMpO3JldHVybiBzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxyKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiIsWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0uaW5jbHVkZXModGhpcy5kYXRhLnBhcmVudFR5cGUpKXJldHVybiB0aGlzLmNvbnRhaW5lcjt2YXIgZT0nW2RhdGEtYW5ub3RhdGlvbi1pZD0iJyt0aGlzLmRhdGEucGFyZW50SWQrJyJdJyx0PXRoaXMubGF5ZXIucXVlcnlTZWxlY3RvcihlKTtpZighdClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIHI9bmV3IEMoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOnQsY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlOnRoaXMuZGF0YS50aXRsZSxjb250ZW50czp0aGlzLmRhdGEuY29udGVudHN9KSxuPXBhcnNlRmxvYXQodC5zdHlsZS5sZWZ0KSxhPXBhcnNlRmxvYXQodC5zdHlsZS53aWR0aCk7cmV0dXJuIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0tKG4rYSkrInB4IC0iK3Quc3R5bGUudG9wLHRoaXMuY29udGFpbmVyLnN0eWxlLmxlZnQ9bithKyJweCIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoci5yZW5kZXIoKSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2godGhpcyxlKSx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRyaWdnZXI9dC50cmlnZ2VyLHRoaXMuY29sb3I9dC5jb2xvcix0aGlzLnRpdGxlPXQudGl0bGUsdGhpcy5jb250ZW50cz10LmNvbnRlbnRzLHRoaXMuaGlkZVdyYXBwZXI9dC5oaWRlV3JhcHBlcnx8ITEsdGhpcy5waW5uZWQ9ITF9cmV0dXJuIHAoZSxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJwb3B1cFdyYXBwZXIiLHRoaXMuaGlkZUVsZW1lbnQ9dGhpcy5oaWRlV3JhcHBlcj9lOnRoaXMuY29udGFpbmVyLHRoaXMuaGlkZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0icG9wdXAiO3ZhciByPXRoaXMuY29sb3I7aWYocil7dmFyIG49LjcqKDI1NS1yWzBdKStyWzBdLGk9LjcqKDI1NS1yWzFdKStyWzFdLG89LjcqKDI1NS1yWzJdKStyWzJdO3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPWEuVXRpbC5tYWtlQ3NzUmdiKDB8biwwfGksMHxvKX12YXIgcz10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7cmV0dXJuIGwudGV4dENvbnRlbnQ9dGhpcy50aXRsZSx0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX3RvZ2dsZS5iaW5kKHRoaXMpKSx0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzLl9zaG93LmJpbmQodGhpcywhMSkpLHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oaWRlLmJpbmQodGhpcywhMCkpLHQuYXBwZW5kQ2hpbGQobCksdC5hcHBlbmRDaGlsZChzKSxlLmFwcGVuZENoaWxkKHQpLGV9fSx7a2V5OiJfZm9ybWF0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikscj1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxuPTAsYT1yLmxlbmd0aDtuPGE7KytuKXt2YXIgaT1yW25dO3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSkpLG48YS0xJiZ0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpfXJldHVybiB0fX0se2tleToiX3RvZ2dsZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBpbm5lZD90aGlzLl9oaWRlKCEwKTp0aGlzLl9zaG93KCEwKX19LHtrZXk6Il9zaG93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07ZSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIikmJih0aGlzLmhpZGVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIiksdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4Kz0xKX19LHtrZXk6Il9oaWRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07ZSYmKHRoaXMucGlubmVkPSExKSx0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIil8fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleC09MSl9fV0pLGV9KCksUD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJsaW5lQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIixlLnJlY3RbMl0tZS5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsZS5yZWN0WzNdLWUubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLGUucmVjdFsyXS1lLmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIixlLnJlY3RbM10tZS5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGgpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLG4uYXBwZW5kQ2hpbGQoYSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGEsZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT1lLmJvcmRlclN0eWxlLndpZHRoLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJ4IixhLzIpLGkuc2V0QXR0cmlidXRlKCJ5IixhLzIpLGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdC1hKSxpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixyLWEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGkuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGksZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2lyY2xlQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT1lLmJvcmRlclN0eWxlLndpZHRoLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzplbGxpcHNlIik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJjeCIsdC8yKSxpLnNldEF0dHJpYnV0ZSgiY3kiLHIvMiksaS5zZXRBdHRyaWJ1dGUoInJ4Iix0LzItYS8yKSxpLnNldEF0dHJpYnV0ZSgicnkiLHIvMi1hLzIpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGkuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGksZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLFI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtoKHRoaXMsdCk7dmFyIG49ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuKHI9cyh0aGlzLGModCkuY2FsbCh0aGlzLGUsbiwhMCkpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlsaW5lQW5ub3RhdGlvbiIsci5zdmdFbGVtZW50TmFtZT0ic3ZnOnBvbHlsaW5lIixyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO2Zvcih2YXIgZT10aGlzLmRhdGEsdD1lLnJlY3RbMl0tZS5yZWN0WzBdLHI9ZS5yZWN0WzNdLWUucmVjdFsxXSxuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodCxyKSxhPWUudmVydGljZXMsaT1bXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgbD1hW29dLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWFbb10ueTtpLnB1c2gobCsiLCIrYyl9aT1pLmpvaW4oIiAiKTt2YXIgdT1lLmJvcmRlclN0eWxlLndpZHRoLGY9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGYuc2V0QXR0cmlidXRlKCJwb2ludHMiLGkpLGYuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHUpLGYuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGYuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoZiksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGYsZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLE89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gaCh0aGlzLHQpLChyPXModGhpcyxjKHQpLmNhbGwodGhpcyxlKSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWdvbkFubm90YXRpb24iLHIuc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5Z29uIixyfXJldHVybiB1KHQsZSksdH0oUiksST1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO2godGhpcyx0KTt2YXIgbj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4ocj1zKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxuLCEwKSkpLmNvbnRhaW5lckNsYXNzTmFtZT0iaW5rQW5ub3RhdGlvbiIsci5zdmdFbGVtZW50TmFtZT0ic3ZnOnBvbHlsaW5lIixyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO2Zvcih2YXIgZT10aGlzLmRhdGEsdD1lLnJlY3RbMl0tZS5yZWN0WzBdLHI9ZS5yZWN0WzNdLWUucmVjdFsxXSxuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodCxyKSxhPWUuaW5rTGlzdHMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWFbaV0sbD1bXSxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgZj1zW2NdLngtZS5yZWN0WzBdLGg9ZS5yZWN0WzNdLXNbY10ueTtsLnB1c2goZisiLCIraCl9bD1sLmpvaW4oIiAiKTt2YXIgZD1lLmJvcmRlclN0eWxlLndpZHRoLHA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cC5zZXRBdHRyaWJ1dGUoInBvaW50cyIsbCkscC5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsZCkscC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50IikscC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIscCxlKSxuLmFwcGVuZENoaWxkKHApfXJldHVybiB0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImhpZ2hsaWdodEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsbnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSx0fShnKSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpO3ZhciByPSEhKGUuZGF0YS5oYXNQb3B1cHx8ZS5kYXRhLnRpdGxlfHxlLmRhdGEuY29udGVudHMpO3JldHVybiBzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxyLCEwKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ1bmRlcmxpbmVBbm5vdGF0aW9uIix0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLG51bGwsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oZyksRD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1aWdnbHlBbm5vdGF0aW9uIix0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLG51bGwsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oZyksTT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3RyaWtlb3V0QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lcixudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLE49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0YW1wQW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lcixudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLGo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtoKHRoaXMsdCk7dmFyIGk9KHI9cyh0aGlzLGModCkuY2FsbCh0aGlzLGUsITApKSkuZGF0YS5maWxlLG89aS5maWxlbmFtZSx1PWkuY29udGVudDtyZXR1cm4gci5maWxlbmFtZT0oMCxuLmdldEZpbGVuYW1lRnJvbVVybCkobyksci5jb250ZW50PXUsci5saW5rU2VydmljZS5ldmVudEJ1cyYmci5saW5rU2VydmljZS5ldmVudEJ1cy5kaXNwYXRjaCgiZmlsZWF0dGFjaG1lbnRhbm5vdGF0aW9uIix7c291cmNlOmwobChyKSksaWQ6KDAsYS5zdHJpbmdUb1BERlN0cmluZykobyksZmlsZW5hbWU6byxjb250ZW50OnV9KSxyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJmaWxlQXR0YWNobWVudEFubm90YXRpb24iO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQsZS5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aCxlLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSx0aGlzLmRhdGEuaGFzUG9wdXB8fCF0aGlzLmRhdGEudGl0bGUmJiF0aGlzLmRhdGEuY29udGVudHN8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGUsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9kb3dubG9hZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRvd25sb2FkTWFuYWdlcj90aGlzLmRvd25sb2FkTWFuYWdlci5kb3dubG9hZERhdGEodGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUsIiIpOigwLGEud2FybikoIkRvd25sb2FkIGNhbm5vdCBiZSBzdGFydGVkIGR1ZSB0byB1bmF2YWlsYWJsZSBkb3dubG9hZCBtYW5hZ2VyIil9fV0pLHR9KGcpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aCh0aGlzLGUpfXJldHVybiBwKGUsbnVsbCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUuYW5ub3RhdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBhPWUuYW5ub3RhdGlvbnNbdF07aWYoYSl7dmFyIGk9bS5jcmVhdGUoe2RhdGE6YSxsYXllcjplLmRpdixwYWdlOmUucGFnZSx2aWV3cG9ydDplLnZpZXdwb3J0LGxpbmtTZXJ2aWNlOmUubGlua1NlcnZpY2UsZG93bmxvYWRNYW5hZ2VyOmUuZG93bmxvYWRNYW5hZ2VyLGltYWdlUmVzb3VyY2VzUGF0aDplLmltYWdlUmVzb3VyY2VzUGF0aHx8IiIscmVuZGVySW50ZXJhY3RpdmVGb3JtczplLnJlbmRlckludGVyYWN0aXZlRm9ybXN8fCExLHN2Z0ZhY3Rvcnk6bmV3IG4uRE9NU1ZHRmFjdG9yeX0pO2kuaXNSZW5kZXJhYmxlJiZlLmRpdi5hcHBlbmRDaGlsZChpLnJlbmRlcigpKX19fX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUuYW5ub3RhdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWUuYW5ub3RhdGlvbnNbdF0sYT1lLmRpdi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInK24uaWQrJyJdJyk7YSYmKGEuc3R5bGUudHJhbnNmb3JtPSJtYXRyaXgoIitlLnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIikrIikiKX1lLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpfX1dKSxlfSgpO3QuQW5ub3RhdGlvbkxheWVyPUJ9LGZ1bmN0aW9uKGUsbixpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU1ZHR3JhcGhpY3M9dm9pZCAwO3ZhciBvLHM9aSgxKSxsPWkoMTUxKSxjPShvPWkoNCkpJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfSx1PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9O24uU1ZHR3JhcGhpY3M9dTt2YXIgZj17Zm9udFN0eWxlOiJub3JtYWwiLGZvbnRXZWlnaHQ6Im5vcm1hbCIsZmlsbENvbG9yOiIjMDAwMDAwIn0saD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksbj1uZXcgSW50MzJBcnJheSgyNTYpLGk9MDtpPDI1NjtpKyspe2Zvcih2YXIgbz1pLGw9MDtsPDg7bCsrKW89MSZvPzM5ODgyOTIzODRebz4+MSYyMTQ3NDgzNjQ3Om8+PjEmMjE0NzQ4MzY0NztuW2ldPW99ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT1hLG89dC5sZW5ndGg7cltpXT1vPj4yNCYyNTUscltpKzFdPW8+PjE2JjI1NSxyW2krMl09bz4+OCYyNTUscltpKzNdPTI1NSZvLHJbaSs9NF09MjU1JmUuY2hhckNvZGVBdCgwKSxyW2krMV09MjU1JmUuY2hhckNvZGVBdCgxKSxyW2krMl09MjU1JmUuY2hhckNvZGVBdCgyKSxyW2krM109MjU1JmUuY2hhckNvZGVBdCgzKSxpKz00LHIuc2V0KHQsaSk7dmFyIHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT0tMSxpPXQ7aTxyO2krKyl7dmFyIG89MjU1JihhXmVbaV0pO2E9YT4+PjhebltvXX1yZXR1cm4tMV5hfShyLGErNCxpKz10Lmxlbmd0aCk7cltpXT1zPj4yNCYyNTUscltpKzFdPXM+PjE2JjI1NSxyW2krMl09cz4+OCYyNTUscltpKzNdPTI1NSZzfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5sZW5ndGgscj1NYXRoLmNlaWwodC82NTUzNSksbj1uZXcgVWludDhBcnJheSgyK3QrNSpyKzQpLGE9MDtuW2ErK109MTIwLG5bYSsrXT0xNTY7Zm9yKHZhciBpPTA7dD42NTUzNTspblthKytdPTAsblthKytdPTI1NSxuW2ErK109MjU1LG5bYSsrXT0wLG5bYSsrXT0wLG4uc2V0KGUuc3ViYXJyYXkoaSxpKzY1NTM1KSxhKSxhKz02NTUzNSxpKz02NTUzNSx0LT02NTUzNTtuW2ErK109MSxuW2ErK109MjU1JnQsblthKytdPXQ+PjgmMjU1LG5bYSsrXT0yNTUmfnQsblthKytdPSg2NTUzNSZ+dCk+PjgmMjU1LG4uc2V0KGUuc3ViYXJyYXkoaSksYSksYSs9ZS5sZW5ndGgtaTt2YXIgbz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTEsYT0wLGk9dDtpPHI7KytpKWE9KGErKG49KG4rKDI1NSZlW2ldKSklNjU1MjEpKSU2NTUyMTtyZXR1cm4gYTw8MTZ8bn0oZSwwLGUubGVuZ3RoKTtyZXR1cm4gblthKytdPW8+PjI0JjI1NSxuW2ErK109bz4+MTYmMjU1LG5bYSsrXT1vPj44JjI1NSxuW2ErK109MjU1Jm8sbn1mdW5jdGlvbiBoKG4saSxvLGwpe3ZhciBoLGQscCxtPW4ud2lkdGgsZz1uLmhlaWdodCx2PW4uZGF0YTtzd2l0Y2goaSl7Y2FzZSBzLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpkPTAsaD0xLHA9bSs3Pj4zO2JyZWFrO2Nhc2Ugcy5JbWFnZUtpbmQuUkdCXzI0QlBQOmQ9MixoPTgscD0zKm07YnJlYWs7Y2FzZSBzLkltYWdlS2luZC5SR0JBXzMyQlBQOmQ9NixoPTgscD00Km07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9dmFyIHksYix3PW5ldyBVaW50OEFycmF5KCgxK3ApKmcpLGs9MCxTPTA7Zm9yKHk9MDt5PGc7Kyt5KXdbaysrXT0wLHcuc2V0KHYuc3ViYXJyYXkoUyxTK3ApLGspLFMrPXAsays9cDtpZihpPT09cy5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAmJmwpZm9yKGs9MCx5PTA7eTxnO3krKylmb3IoaysrLGI9MDtiPHA7YisrKXdbaysrXV49MjU1O3ZhciBfPW5ldyBVaW50OEFycmF5KFttPj4yNCYyNTUsbT4+MTYmMjU1LG0+PjgmMjU1LDI1NSZtLGc+PjI0JjI1NSxnPj4xNiYyNTUsZz4+OCYyNTUsMjU1JmcsaCxkLDAsMCwwXSkseD1mdW5jdGlvbihlKXtpZighKDAsYy5kZWZhdWx0KSgpKXJldHVybiBmKGUpO3RyeXt2YXIgbjtuPXBhcnNlSW50KGEudmVyc2lvbnMubm9kZSk+PTg/ZTpuZXcgdChlKTt2YXIgaT1yKDQ0KS5kZWZsYXRlU3luYyhuLHtsZXZlbDo5fSk7cmV0dXJuIGkgaW5zdGFuY2VvZiBVaW50OEFycmF5P2k6bmV3IFVpbnQ4QXJyYXkoaSl9Y2F0Y2goZSl7KDAscy53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrZSl9cmV0dXJuIGYoZSl9KHcpLEE9ZS5sZW5ndGgrMzYrXy5sZW5ndGgreC5sZW5ndGgsQz1uZXcgVWludDhBcnJheShBKSxQPTA7cmV0dXJuIEMuc2V0KGUsUCksdSgiSUhEUiIsXyxDLFArPWUubGVuZ3RoKSx1KCJJREFUQSIseCxDLFArPTEyK18ubGVuZ3RoKSxQKz0xMit4Lmxlbmd0aCx1KCJJRU5EIixuZXcgVWludDhBcnJheSgwKSxDLFApLCgwLHMuY3JlYXRlT2JqZWN0VVJMKShDLCJpbWFnZS9wbmciLG8pfXJldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGgoZSx2b2lkIDA9PT1lLmtpbmQ/cy5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHQscil9fSgpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy5mb250V2VpZ2h0PWYuZm9udFdlaWdodCx0aGlzLmZvbnRTaXplPTAsdGhpcy50ZXh0TWF0cml4PXMuSURFTlRJVFlfTUFUUklYLHRoaXMuZm9udE1hdHJpeD1zLkZPTlRfSURFTlRJVFlfTUFUUklYLHRoaXMubGVhZGluZz0wLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMueD0wLHRoaXMueT0wLHRoaXMubGluZVg9MCx0aGlzLmxpbmVZPTAsdGhpcy5jaGFyU3BhY2luZz0wLHRoaXMud29yZFNwYWNpbmc9MCx0aGlzLnRleHRIU2NhbGU9MSx0aGlzLnRleHRSaXNlPTAsdGhpcy5maWxsQ29sb3I9Zi5maWxsQ29sb3IsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGUucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpfSxzZXRDdXJyZW50UG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLng9ZSx0aGlzLnk9dH19LGV9KCk7bi5TVkdHcmFwaGljcz11PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9ZS50b0ZpeGVkKDEwKSxyPXQubGVuZ3RoLTE7aWYoIjAiIT09dFtyXSlyZXR1cm4gdDtkb3tyLS19d2hpbGUoIjAiPT09dFtyXSk7cmV0dXJuIHQuc3Vic3RyaW5nKDAsIi4iPT09dFtyXT9yOnIrMSl9ZnVuY3Rpb24gdCh0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiK2UodFswXSkrIiAiK2UodFszXSkrIikiO2lmKHRbMF09PT10WzNdJiZ0WzFdPT09LXRbMl0pcmV0dXJuInJvdGF0ZSgiK2UoMTgwKk1hdGguYWNvcyh0WzBdKS9NYXRoLlBJKSsiKSJ9ZWxzZSBpZigxPT09dFswXSYmMD09PXRbMV0mJjA9PT10WzJdJiYxPT09dFszXSlyZXR1cm4idHJhbnNsYXRlKCIrZSh0WzRdKSsiICIrZSh0WzVdKSsiKSI7cmV0dXJuIm1hdHJpeCgiK2UodFswXSkrIiAiK2UodFsxXSkrIiAiK2UodFsyXSkrIiAiK2UodFszXSkrIiAiK2UodFs0XSkrIiAiK2UodFs1XSkrIikifWZ1bmN0aW9uIHIoZSx0LHIpe3RoaXMuc3ZnRmFjdG9yeT1uZXcgbC5ET01TVkdGYWN0b3J5LHRoaXMuY3VycmVudD1uZXcgZCx0aGlzLnRyYW5zZm9ybU1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLnRyYW5zZm9ybVN0YWNrPVtdLHRoaXMuZXh0cmFTdGFjaz1bXSx0aGlzLmNvbW1vbk9ianM9ZSx0aGlzLm9ianM9dCx0aGlzLnBlbmRpbmdDbGlwPW51bGwsdGhpcy5wZW5kaW5nRU9GaWxsPSExLHRoaXMuZW1iZWRGb250cz0hMSx0aGlzLmVtYmVkZGVkRm9udHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNzc1N0eWxlPW51bGwsdGhpcy5mb3JjZURhdGFTY2hlbWE9ISFyfXZhciBuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixhPVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0saT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLG89MCxjPTA7cmV0dXJuIHIucHJvdG90eXBlPXtzYXZlOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMudHJhbnNmb3JtTWF0cml4KTt2YXIgZT10aGlzLmN1cnJlbnQ7dGhpcy5leHRyYVN0YWNrLnB1c2goZSksdGhpcy5jdXJyZW50PWUuY2xvbmUoKX0scmVzdG9yZTpmdW5jdGlvbigpe3RoaXMudHJhbnNmb3JtTWF0cml4PXRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCksdGhpcy5jdXJyZW50PXRoaXMuZXh0cmFTdGFjay5wb3AoKSx0aGlzLnBlbmRpbmdDbGlwPW51bGwsdGhpcy50Z3JwPW51bGx9LGdyb3VwOmZ1bmN0aW9uKGUpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZShlKSx0aGlzLnJlc3RvcmUoKX0sbG9hZERlcGVuZGVuY2llczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPWUuZm5BcnJheSxuPXIubGVuZ3RoLGE9ZS5hcmdzQXJyYXksaT0wO2k8bjtpKyspaWYocy5PUFMuZGVwZW5kZW5jeT09PXJbaV0pZm9yKHZhciBvPWFbaV0sbD0wLGM9by5sZW5ndGg7bDxjO2wrKyl7dmFyIHUsZj1vW2xdLGg9ImdfIj09PWYuc3Vic3RyaW5nKDAsMik7dT1uZXcgUHJvbWlzZShoP2Z1bmN0aW9uKGUpe3QuY29tbW9uT2Jqcy5nZXQoZixlKX06ZnVuY3Rpb24oZSl7dC5vYmpzLmdldChmLGUpfSksdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHUpfXJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bZSx0LHIsbixhLGldO3RoaXMudHJhbnNmb3JtTWF0cml4PXMuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgsbyksdGhpcy50Z3JwPW51bGx9LGdldFNWRzpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7dGhpcy52aWV3cG9ydD10O3ZhciBuPXRoaXMuX2luaXRpYWxpemUodCk7cmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhlKS50aGVuKChmdW5jdGlvbigpe3IudHJhbnNmb3JtTWF0cml4PXMuSURFTlRJVFlfTUFUUklYO3ZhciB0PXIuY29udmVydE9wTGlzdChlKTtyZXR1cm4gci5leGVjdXRlT3BUcmVlKHQpLG59KSl9LGNvbnZlcnRPcExpc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hcmdzQXJyYXkscj1lLmZuQXJyYXksbj1yLmxlbmd0aCxhPVtdLGk9W107Zm9yKHZhciBvIGluIHMuT1BTKWFbcy5PUFNbb11dPW87Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIGM9cltsXTtpLnB1c2goe2ZuSWQ6YyxmbjphW2NdLGFyZ3M6dFtsXX0pfXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj1bXSxuPWUubGVuZ3RoLGE9MDthPG47YSsrKSJzYXZlIiE9PWVbYV0uZm4/InJlc3RvcmUiPT09ZVthXS5mbj90PXIucG9wKCk6dC5wdXNoKGVbYV0pOih0LnB1c2goe2ZuSWQ6OTIsZm46Imdyb3VwIixpdGVtczpbXX0pLHIucHVzaCh0KSx0PXRbdC5sZW5ndGgtMV0uaXRlbXMpO3JldHVybiB0fShpKX0sZXhlY3V0ZU9wVHJlZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspe3ZhciBuPWVbcl0uZm4sYT1lW3JdLmZuSWQsaT1lW3JdLmFyZ3M7c3dpdGNoKDB8YSl7Y2FzZSBzLk9QUy5iZWdpblRleHQ6dGhpcy5iZWdpblRleHQoKTticmVhaztjYXNlIHMuT1BTLmRlcGVuZGVuY3k6YnJlYWs7Y2FzZSBzLk9QUy5zZXRMZWFkaW5nOnRoaXMuc2V0TGVhZGluZyhpKTticmVhaztjYXNlIHMuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDp0aGlzLnNldExlYWRpbmdNb3ZlVGV4dChpWzBdLGlbMV0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0Rm9udDp0aGlzLnNldEZvbnQoaSk7YnJlYWs7Y2FzZSBzLk9QUy5zaG93VGV4dDpjYXNlIHMuT1BTLnNob3dTcGFjZWRUZXh0OnRoaXMuc2hvd1RleHQoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5lbmRUZXh0OnRoaXMuZW5kVGV4dCgpO2JyZWFrO2Nhc2Ugcy5PUFMubW92ZVRleHQ6dGhpcy5tb3ZlVGV4dChpWzBdLGlbMV0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0Q2hhclNwYWNpbmc6dGhpcy5zZXRDaGFyU3BhY2luZyhpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldFdvcmRTcGFjaW5nOnRoaXMuc2V0V29yZFNwYWNpbmcoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRIU2NhbGU6dGhpcy5zZXRIU2NhbGUoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRUZXh0TWF0cml4OnRoaXMuc2V0VGV4dE1hdHJpeChpWzBdLGlbMV0saVsyXSxpWzNdLGlbNF0saVs1XSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRUZXh0UmlzZTp0aGlzLnNldFRleHRSaXNlKGlbMF0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6dGhpcy5zZXRUZXh0UmVuZGVyaW5nTW9kZShpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldExpbmVXaWR0aDp0aGlzLnNldExpbmVXaWR0aChpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldExpbmVKb2luOnRoaXMuc2V0TGluZUpvaW4oaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRMaW5lQ2FwOnRoaXMuc2V0TGluZUNhcChpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldE1pdGVyTGltaXQ6dGhpcy5zZXRNaXRlckxpbWl0KGlbMF0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0RmlsbFJHQkNvbG9yOnRoaXMuc2V0RmlsbFJHQkNvbG9yKGlbMF0saVsxXSxpWzJdKTticmVhaztjYXNlIHMuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnRoaXMuc2V0U3Ryb2tlUkdCQ29sb3IoaVswXSxpWzFdLGlbMl0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0RGFzaDp0aGlzLnNldERhc2goaVswXSxpWzFdKTticmVhaztjYXNlIHMuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShpWzBdKTticmVhaztjYXNlIHMuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBzLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIHMuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIHMuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIHMuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIHMuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2Ugcy5PUFMucGFpbnRKcGVnWE9iamVjdDp0aGlzLnBhaW50SnBlZ1hPYmplY3QoaVswXSxpWzFdLGlbMl0pO2JyZWFrO2Nhc2Ugcy5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChpWzBdKTticmVhaztjYXNlIHMuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3QoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oaVswXSxpWzFdKTticmVhaztjYXNlIHMuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBzLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIHMuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIHMuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2Ugcy5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKGlbMF0saVsxXSxpWzJdLGlbM10saVs0XSxpWzVdKTticmVhaztjYXNlIHMuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKGlbMF0saVsxXSk7YnJlYWs7Y2FzZSBzLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChlW3JdLml0ZW1zKTticmVhaztkZWZhdWx0OigwLHMud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIituKX19fSxzZXRXb3JkU3BhY2luZzpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9ZX0sc2V0Q2hhclNwYWNpbmc6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nPWV9LG5leHRMaW5lOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX0sc2V0VGV4dE1hdHJpeDpmdW5jdGlvbih0LHIsbixhLGksbyl7dmFyIHM9dGhpcy5jdXJyZW50O3RoaXMuY3VycmVudC50ZXh0TWF0cml4PXRoaXMuY3VycmVudC5saW5lTWF0cml4PVt0LHIsbixhLGksb10sdGhpcy5jdXJyZW50Lng9dGhpcy5jdXJyZW50LmxpbmVYPTAsdGhpcy5jdXJyZW50Lnk9dGhpcy5jdXJyZW50LmxpbmVZPTAscy54Y29vcmRzPVtdLHMudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHMudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHMuZm9udEZhbWlseSkscy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLGUocy5mb250U2l6ZSkrInB4Iikscy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1zLnkpKSxzLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iikscy50eHRFbGVtZW50LmFwcGVuZENoaWxkKHMudHNwYW4pfSxiZWdpblRleHQ6ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MCx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLmN1cnJlbnQubGluZU1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLmN1cnJlbnQudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHRoaXMuY3VycmVudC50eHRFbGVtZW50PXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dGV4dCIpLHRoaXMuY3VycmVudC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W119LG1vdmVUZXh0OmZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5jdXJyZW50O3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPXIsbi54Y29vcmRzPVtdLG4udHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLG4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLG4uZm9udEZhbWlseSksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLGUobi5mb250U2l6ZSkrInB4Iiksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1uLnkpKX0sc2hvd1RleHQ6ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5jdXJyZW50LGE9bi5mb250LGk9bi5mb250U2l6ZTtpZigwIT09aSl7dmFyIG8sbD1uLmNoYXJTcGFjaW5nLGM9bi53b3JkU3BhY2luZyx1PW4uZm9udERpcmVjdGlvbixoPW4udGV4dEhTY2FsZSp1LGQ9ci5sZW5ndGgscD1hLnZlcnRpY2FsLG09aSpuLmZvbnRNYXRyaXhbMF0sZz0wO2ZvcihvPTA7bzxkOysrbyl7dmFyIHY9cltvXTtpZihudWxsIT09dilpZigoMCxzLmlzTnVtKSh2KSlnKz0tdippKi4wMDE7ZWxzZXt2YXIgeT12LndpZHRoLGI9di5mb250Q2hhcix3PXkqbSsoKHYuaXNTcGFjZT9jOjApK2wpKnU7di5pc0luRm9udHx8YS5taXNzaW5nRmlsZT8obi54Y29vcmRzLnB1c2gobi54K2cqaCksbi50c3Bhbi50ZXh0Q29udGVudCs9YixnKz13KTpnKz13fWVsc2UgZys9dSpjfXA/bi55LT1nKmg6bi54Kz1nKmgsbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixuLnhjb29yZHMubWFwKGUpLmpvaW4oIiAiKSksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1uLnkpKSxuLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixuLmZvbnRGYW1pbHkpLG4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIixlKG4uZm9udFNpemUpKyJweCIpLG4uZm9udFN0eWxlIT09Zi5mb250U3R5bGUmJm4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zdHlsZSIsbi5mb250U3R5bGUpLG4uZm9udFdlaWdodCE9PWYuZm9udFdlaWdodCYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsbi5mb250V2VpZ2h0KTt2YXIgaz1uLnRleHRSZW5kZXJpbmdNb2RlJnMuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztrPT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxrPT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8obi5maWxsQ29sb3IhPT1mLmZpbGxDb2xvciYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixuLmZpbGxDb2xvciksbi5maWxsQWxwaGE8MSYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLW9wYWNpdHkiLG4uZmlsbEFscGhhKSk6bi50ZXh0UmVuZGVyaW5nTW9kZT09PXMuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEg/bi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwidHJhbnNwYXJlbnQiKTpuLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJub25lIiksayE9PXMuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZrIT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhuLnRzcGFuKTt2YXIgUz1uLnRleHRNYXRyaXg7MCE9PW4udGV4dFJpc2UmJigoUz1TLnNsaWNlKCkpWzVdKz1uLnRleHRSaXNlKSxuLnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIix0KFMpKyIgc2NhbGUoMSwgLTEpIiksbi50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLG4udHh0RWxlbWVudC5hcHBlbmRDaGlsZChuLnRzcGFuKSxuLnR4dGdycC5hcHBlbmRDaGlsZChuLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobi50eHRFbGVtZW50KX19LHNldExlYWRpbmdNb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuc2V0TGVhZGluZygtdCksdGhpcy5tb3ZlVGV4dChlLHQpfSxhZGRGb250U3R5bGU6ZnVuY3Rpb24oZSl7dGhpcy5jc3NTdHlsZXx8KHRoaXMuY3NzU3R5bGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpzdHlsZSIpLHRoaXMuY3NzU3R5bGUuc2V0QXR0cmlidXRlTlMobnVsbCwidHlwZSIsInRleHQvY3NzIiksdGhpcy5kZWZzLmFwcGVuZENoaWxkKHRoaXMuY3NzU3R5bGUpKTt2YXIgdD0oMCxzLmNyZWF0ZU9iamVjdFVSTCkoZS5kYXRhLGUubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInK2UubG9hZGVkTmFtZSsnIjsgc3JjOiB1cmwoJyt0KyIpOyB9XG4ifSxzZXRGb250OmZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY3VycmVudCxuPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksYT10WzFdO3RoaXMuY3VycmVudC5mb250PW4sdGhpcy5lbWJlZEZvbnRzJiZuLmRhdGEmJiF0aGlzLmVtYmVkZGVkRm9udHNbbi5sb2FkZWROYW1lXSYmKHRoaXMuYWRkRm9udFN0eWxlKG4pLHRoaXMuZW1iZWRkZWRGb250c1tuLmxvYWRlZE5hbWVdPW4pLHIuZm9udE1hdHJpeD1uLmZvbnRNYXRyaXg/bi5mb250TWF0cml4OnMuRk9OVF9JREVOVElUWV9NQVRSSVg7dmFyIGk9bi5ibGFjaz9uLmJvbGQ/ImJvbGRlciI6ImJvbGQiOm4uYm9sZD8iYm9sZCI6Im5vcm1hbCIsbz1uLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIjthPDA/KGE9LWEsci5mb250RGlyZWN0aW9uPS0xKTpyLmZvbnREaXJlY3Rpb249MSxyLmZvbnRTaXplPWEsci5mb250RmFtaWx5PW4ubG9hZGVkTmFtZSxyLmZvbnRXZWlnaHQ9aSxyLmZvbnRTdHlsZT1vLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZSgtci55KSksci54Y29vcmRzPVtdfSxlbmRUZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UudGV4dFJlbmRlcmluZ01vZGUmcy5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHJiZlLnR4dEVsZW1lbnQmJmUudHh0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkmJihlLmVsZW1lbnQ9ZS50eHRFbGVtZW50LHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpKX0sc2V0TGluZVdpZHRoOmZ1bmN0aW9uKGUpe2U+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9ZSl9LHNldExpbmVDYXA6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxpbmVDYXA9YVtlXX0sc2V0TGluZUpvaW46ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxpbmVKb2luPWlbZV19LHNldE1pdGVyTGltaXQ6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9ZX0sc2V0U3Ryb2tlQWxwaGE6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LnN0cm9rZUFscGhhPWV9LHNldFN0cm9rZVJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1zLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPW59LHNldEZpbGxBbHBoYTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWV9LHNldEZpbGxSR0JDb2xvcjpmdW5jdGlvbihlLHQscil7dmFyIG49cy5VdGlsLm1ha2VDc3NSZ2IoZSx0LHIpO3RoaXMuY3VycmVudC5maWxsQ29sb3I9bix0aGlzLmN1cnJlbnQudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHRoaXMuY3VycmVudC54Y29vcmRzPVtdfSxzZXREYXNoOmZ1bmN0aW9uKGUsdCl7dGhpcy5jdXJyZW50LmRhc2hBcnJheT1lLHRoaXMuY3VycmVudC5kYXNoUGhhc2U9dH0sY29uc3RydWN0UGF0aDpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuY3VycmVudCxhPW4ueCxpPW4ueTtuLnBhdGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpwYXRoIik7Zm9yKHZhciBvPVtdLGw9dC5sZW5ndGgsYz0wLHU9MDtjPGw7YysrKXN3aXRjaCgwfHRbY10pe2Nhc2Ugcy5PUFMucmVjdGFuZ2xlOmE9clt1KytdLGk9clt1KytdO3ZhciBmPWErclt1KytdLGg9aStyW3UrK107by5wdXNoKCJNIixlKGEpLGUoaSksIkwiLGUoZiksZShpKSwiTCIsZShmKSxlKGgpLCJMIixlKGEpLGUoaCksIloiKTticmVhaztjYXNlIHMuT1BTLm1vdmVUbzphPXJbdSsrXSxpPXJbdSsrXSxvLnB1c2goIk0iLGUoYSksZShpKSk7YnJlYWs7Y2FzZSBzLk9QUy5saW5lVG86YT1yW3UrK10saT1yW3UrK10sby5wdXNoKCJMIixlKGEpLGUoaSkpO2JyZWFrO2Nhc2Ugcy5PUFMuY3VydmVUbzphPXJbdSs0XSxpPXJbdSs1XSxvLnB1c2goIkMiLGUoclt1XSksZShyW3UrMV0pLGUoclt1KzJdKSxlKHJbdSszXSksZShhKSxlKGkpKSx1Kz02O2JyZWFrO2Nhc2Ugcy5PUFMuY3VydmVUbzI6YT1yW3UrMl0saT1yW3UrM10sby5wdXNoKCJDIixlKGEpLGUoaSksZShyW3VdKSxlKHJbdSsxXSksZShyW3UrMl0pLGUoclt1KzNdKSksdSs9NDticmVhaztjYXNlIHMuT1BTLmN1cnZlVG8zOmE9clt1KzJdLGk9clt1KzNdLG8ucHVzaCgiQyIsZShyW3VdKSxlKHJbdSsxXSksZShhKSxlKGkpLGUoYSksZShpKSksdSs9NDticmVhaztjYXNlIHMuT1BTLmNsb3NlUGF0aDpvLnB1c2goIloiKX1uLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsby5qb2luKCIgIikpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobi5wYXRoKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGEsaSl9LGVuZFBhdGg6ZnVuY3Rpb24oKXtpZih0aGlzLnBlbmRpbmdDbGlwKXt2YXIgZT10aGlzLmN1cnJlbnQscj0iY2xpcHBhdGgiK287bysrO3ZhciBuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtuLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsdCh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBhPWUuZWxlbWVudC5jbG9uZU5vZGUoITApOyJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLG4uYXBwZW5kQ2hpbGQoYSksdGhpcy5kZWZzLmFwcGVuZENoaWxkKG4pLGUuYWN0aXZlQ2xpcFVybCYmKGUuY2xpcEdyb3VwPW51bGwsdGhpcy5leHRyYVN0YWNrLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xpcEdyb3VwPW51bGx9KSksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXBhdGgiLGUuYWN0aXZlQ2xpcFVybCkpLGUuYWN0aXZlQ2xpcFVybD0idXJsKCMiK3IrIikiLHRoaXMudGdycD1udWxsfX0sY2xpcDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmdDbGlwPWV9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudDtpZihlLnBhdGgpe3ZhciB0PWUucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIik7dCs9IloiLGUucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIix0KX19LHNldExlYWRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LWV9LHNldFRleHRSaXNlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0UmlzZT1lfSxzZXRUZXh0UmVuZGVyaW5nTW9kZTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9ZX0sc2V0SFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPWUvMTAwfSxzZXRHU3RhdGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj1lW3RdLGE9blswXSxpPW5bMV07c3dpdGNoKGEpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGkpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChpKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGkpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChpKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChpWzBdLGlbMV0pO2JyZWFrO2Nhc2UiRm9udCI6dGhpcy5zZXRGb250KGkpO2JyZWFrO2Nhc2UiQ0EiOnRoaXMuc2V0U3Ryb2tlQWxwaGEoaSk7YnJlYWs7Y2FzZSJjYSI6dGhpcy5zZXRGaWxsQWxwaGEoaSk7YnJlYWs7ZGVmYXVsdDooMCxzLndhcm4pKCJVbmltcGxlbWVudGVkIGdyYXBoaWMgc3RhdGUgIithKX19fSxmaWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UuZWxlbWVudCYmKGUuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixlLmZpbGxDb2xvciksZS5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX0sc3Ryb2tlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UuZWxlbWVudCYmKHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoZS5lbGVtZW50KSxlLmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSx0aGlzLmVuZFBhdGgoKSl9LF9zZXRTdHJva2VBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY3VycmVudDt0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIsci5zdHJva2VDb2xvciksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utb3BhY2l0eSIsci5zdHJva2VBbHBoYSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbWl0ZXJsaW1pdCIsZShyLm1pdGVyTGltaXQpKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lY2FwIixyLmxpbmVDYXApLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWxpbmVqb2luIixyLmxpbmVKb2luKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS13aWR0aCIsZShyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixyLmRhc2hBcnJheS5tYXAoZSkuam9pbigiICIpKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1kYXNob2Zmc2V0IixlKHIuZGFzaFBoYXNlKSsicHgiKX0sZW9GaWxsOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmVsZW1lbnQmJnRoaXMuY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLmZpbGwoKX0sZmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9LGVvRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5lbGVtZW50JiZ0aGlzLmN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLnN0cm9rZSgpfSxjbG9zZUZpbGxTdHJva2U6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfSxjbG9zZUVPRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX0scGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LHQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIiwiMXB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKHQpfSxwYWludEpwZWdYT2JqZWN0OmZ1bmN0aW9uKHQscixhKXt2YXIgaT10aGlzLm9ianMuZ2V0KHQpLG89dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzppbWFnZSIpO28uc2V0QXR0cmlidXRlTlMobiwieGxpbms6aHJlZiIsaS5zcmMpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGUocikpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixlKGEpKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1hKSksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK2UoMS9yKSsiICIrZSgtMS9hKSsiKSIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobyl9LHBhaW50SW1hZ2VYT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2Jqcy5nZXQoZSk7dD90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQpOigwLHMud2FybikoIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXQiKX0scGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6ZnVuY3Rpb24odCxyKXt2YXIgYT10LndpZHRoLGk9dC5oZWlnaHQsbz1oKHQsdGhpcy5mb3JjZURhdGFTY2hlbWEsISFyKSxzPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3Muc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsZShhKSkscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGUoaSkpLHRoaXMuY3VycmVudC5lbGVtZW50PXMsdGhpcy5jbGlwKCJub256ZXJvIik7dmFyIGw9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzppbWFnZSIpO2wuc2V0QXR0cmlidXRlTlMobiwieGxpbms6aHJlZiIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZSgtaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGUoYSkrInB4IiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGUoaSkrInB4IiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK2UoMS9hKSsiICIrZSgtMS9pKSsiKSIpLHI/ci5hcHBlbmRDaGlsZChsKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGwpfSxwYWludEltYWdlTWFza1hPYmplY3Q6ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5jdXJyZW50LG49dC53aWR0aCxhPXQuaGVpZ2h0LGk9ci5maWxsQ29sb3I7ci5tYXNrSWQ9Im1hc2siK2MrKzt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOm1hc2siKTtvLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyLm1hc2tJZCk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixlKG4pKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsZShhKSkscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixpKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsIm1hc2siLCJ1cmwoIyIrci5tYXNrSWQrIikiKSx0aGlzLmRlZnMuYXBwZW5kQ2hpbGQobyksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChzKSx0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQsbyl9LHBhaW50Rm9ybVhPYmplY3RCZWdpbjpmdW5jdGlvbih0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkmJjY9PT10Lmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0odFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pLHIpe3ZhciBuPXJbMl0tclswXSxhPXJbM10tclsxXSxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsclswXSksaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixyWzFdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixlKG4pKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsZShhKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9aSx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKX19LHBhaW50Rm9ybVhPYmplY3RFbmQ6ZnVuY3Rpb24oKXt9LF9pbml0aWFsaXplOmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZS53aWR0aCxlLmhlaWdodCksbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtyLmFwcGVuZENoaWxkKG4pLHRoaXMuZGVmcz1uO3ZhciBhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO3JldHVybiBhLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsdChlLnRyYW5zZm9ybSkpLHIuYXBwZW5kQ2hpbGQoYSksdGhpcy5zdmc9YSxyfSxfZW5zdXJlQ2xpcEdyb3VwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VycmVudC5jbGlwR3JvdXApe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO2Uuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoZSksdGhpcy5jdXJyZW50LmNsaXBHcm91cD1lfXJldHVybiB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwfSxfZW5zdXJlVHJhbnNmb3JtR3JvdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50Z3JwfHwodGhpcy50Z3JwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpLHRoaXMudGdycC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLHQodGhpcy50cmFuc2Zvcm1NYXRyaXgpKSx0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybD90aGlzLl9lbnN1cmVDbGlwR3JvdXAoKS5hcHBlbmRDaGlsZCh0aGlzLnRncnApOnRoaXMuc3ZnLmFwcGVuZENoaWxkKHRoaXMudGdycCkpLHRoaXMudGdycH19LHJ9KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGTm9kZVN0cmVhbT12b2lkIDA7dmFyIGEsaT0oYT1uKDE0NykpJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfSxvPW4oMSkscz1uKDE2Nik7ZnVuY3Rpb24gbChlKXtyZXR1cm4obD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1sKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdShlKXtyZXR1cm4odT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZoKGUsdCl9ZnVuY3Rpb24gaChlLHQpe3JldHVybihoPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBkKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB2KGUsdCxyKXtyZXR1cm4gdCYmZyhlLnByb3RvdHlwZSx0KSxyJiZnKGUsciksZX12YXIgeT1yKDQ1KSxiPXIoNDYpLHc9cig0Nyksaz1yKDQ4KSxTPS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHIsbjttKHRoaXMsZSksdGhpcy5zb3VyY2U9dCx0aGlzLnVybD0ocj10LnVybCwiZmlsZToiPT09KG49ay5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP2sucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZ0Lmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdD1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0KSx0aGlzLl9mdWxsUmVxdWVzdD10aGlzLmlzRnNVcmw/bmV3IFQodGhpcyk6bmV3IFAodGhpcyksdGhpcy5fZnVsbFJlcXVlc3R9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmlzRnNVcmw/bmV3IFIodGhpcyxlLHQpOm5ldyBFKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3QmJnRoaXMuX2Z1bGxSZXF1ZXN0LmNhbmNlbChlKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpfX1dKSxlfSgpO3QuUERGTm9kZVN0cmVhbT1fO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXttKHRoaXMsZSksdGhpcy5fdXJsPXQudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgcj10LnNvdXJjZTt0aGlzLl9jb250ZW50TGVuZ3RoPXIubGVuZ3RoLHRoaXMuX2xvYWRlZD0wLHRoaXMuX2ZpbGVuYW1lPW51bGwsdGhpcy5fZGlzYWJsZVJhbmdlPXIuZGlzYWJsZVJhbmdlfHwhMSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1yLnJhbmdlQ2h1bmtTaXplLHRoaXMuX3JhbmdlQ2h1bmtTaXplfHx0aGlzLl9kaXNhYmxlUmFuZ2V8fCh0aGlzLl9kaXNhYmxlUmFuZ2U9ITApLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFyLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hci5kaXNhYmxlUmFuZ2UsdGhpcy5fcmVhZGFibGVTdHJlYW09bnVsbCx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxvLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5PSgwLG8uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9dmFyIHQ7cmV0dXJuIHYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9cChpLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIGkuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDQ6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXtlLm5leHQ9NjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDY6aWYobnVsbCE9PSh0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKSkpe2UubmV4dD0xMDticmVha31yZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsby5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxlLmFicnVwdCgicmV0dXJuIix0aGlzLnJlYWQoKSk7Y2FzZSAxMDpyZXR1cm4gdGhpcy5fbG9hZGVkKz10Lmxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSkscj1uZXcgVWludDhBcnJheSh0KS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIsZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3koZSk6dGhpcy5fZXJyb3IoZSl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3N0b3JlZEVycm9yPWUsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPWUsZS5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe3QuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxlLm9uKCJlbmQiLChmdW5jdGlvbigpe2UuZGVzdHJveSgpLHQuX2RvbmU9ITAsdC5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLGUub24oImVycm9yIiwoZnVuY3Rpb24oZSl7dC5fZXJyb3IoZSl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgby5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiY29udGVudExlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fV0pLGV9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bSh0aGlzLGUpLHRoaXMuX3VybD10LnVybCx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGwsdGhpcy5fbG9hZGVkPTAsdGhpcy5fcmVhZGFibGVTdHJlYW09bnVsbCx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxvLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3ZhciByPXQuc291cmNlO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFyLmRpc2FibGVTdHJlYW19dmFyIHQ7cmV0dXJuIHYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9cChpLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIGkuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDQ6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXtlLm5leHQ9NjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDY6aWYobnVsbCE9PSh0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKSkpe2UubmV4dD0xMDticmVha31yZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsby5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxlLmFicnVwdCgicmV0dXJuIix0aGlzLnJlYWQoKSk7Y2FzZSAxMDpyZXR1cm4gdGhpcy5fbG9hZGVkKz10Lmxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLHI9bmV3IFVpbnQ4QXJyYXkodCkuYnVmZmVyLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpyLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KGUpOnRoaXMuX2Vycm9yKGUpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdG9yZWRFcnJvcj1lLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT1lLGUub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXt0Ll9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksZS5vbigiZW5kIiwoZnVuY3Rpb24oKXtlLmRlc3Ryb3koKSx0Ll9kb25lPSEwLHQuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxlLm9uKCJlcnJvciIsKGZ1bmN0aW9uKGUpe3QuX2Vycm9yKGUpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fV0pLGV9KCk7ZnVuY3Rpb24gQyhlLHQpe3JldHVybntwcm90b2NvbDplLnByb3RvY29sLGF1dGg6ZS5hdXRoLGhvc3Q6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRoOmUucGF0aCxtZXRob2Q6IkdFVCIsaGVhZGVyczp0fX12YXIgUD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KTt2YXIgbj1mdW5jdGlvbih0KXtpZig0MDQ9PT10LnN0YXR1c0NvZGUpe3ZhciBuPW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChyLl91cmwsJyIuJykpO3JldHVybiByLl9zdG9yZWRFcnJvcj1uLHZvaWQgci5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KG4pfXIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKSxyLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gci5fcmVhZGFibGVTdHJlYW0uaGVhZGVyc1tlLnRvTG93ZXJDYXNlKCldfSxpPSgwLHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjphLGlzSHR0cDplLmlzSHR0cCxyYW5nZUNodW5rU2l6ZTpyLl9yYW5nZUNodW5rU2l6ZSxkaXNhYmxlUmFuZ2U6ci5fZGlzYWJsZVJhbmdlfSksbD1pLmFsbG93UmFuZ2VSZXF1ZXN0cyxjPWkuc3VnZ2VzdGVkTGVuZ3RoO3IuX2lzUmFuZ2VTdXBwb3J0ZWQ9bCxyLl9jb250ZW50TGVuZ3RoPWN8fHIuX2NvbnRlbnRMZW5ndGgsci5fZmlsZW5hbWU9KDAscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShhKX07cmV0dXJuKHI9Yyh0aGlzLHUodCkuY2FsbCh0aGlzLGUpKSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09ci5fdXJsLnByb3RvY29sP3IuX3JlcXVlc3Q9Yi5yZXF1ZXN0KEMoci5fdXJsLGUuaHR0cEhlYWRlcnMpLG4pOnIuX3JlcXVlc3Q9dy5yZXF1ZXN0KEMoci5fdXJsLGUuaHR0cEhlYWRlcnMpLG4pLHIuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24oZSl7ci5fc3RvcmVkRXJyb3I9ZSxyLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZSl9KSksci5fcmVxdWVzdC5lbmQoKSxyfXJldHVybiBmKHQsZSksdH0oeCksRT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTtmb3IodmFyIGkgaW4gbSh0aGlzLHQpLChhPWModGhpcyx1KHQpLmNhbGwodGhpcyxlKSkpLl9odHRwSGVhZGVycz17fSxlLmh0dHBIZWFkZXJzKXt2YXIgcz1lLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PXMmJihhLl9odHRwSGVhZGVyc1tpXT1zKX1hLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQociwiLSIpLmNvbmNhdChuLTEpO3ZhciBsPWZ1bmN0aW9uKGUpe2lmKDQwNCE9PWUuc3RhdHVzQ29kZSlhLl9zZXRSZWFkYWJsZVN0cmVhbShlKTtlbHNle3ZhciB0PW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLl91cmwsJyIuJykpO2EuX3N0b3JlZEVycm9yPXR9fTtyZXR1cm4gYS5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1hLl91cmwucHJvdG9jb2w/YS5fcmVxdWVzdD1iLnJlcXVlc3QoQyhhLl91cmwsYS5faHR0cEhlYWRlcnMpLGwpOmEuX3JlcXVlc3Q9dy5yZXF1ZXN0KEMoYS5fdXJsLGEuX2h0dHBIZWFkZXJzKSxsKSxhLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKGUpe2EuX3N0b3JlZEVycm9yPWV9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiBmKHQsZSksdH0oQSksVD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KSxyPWModGhpcyx1KHQpLmNhbGwodGhpcyxlKSk7dmFyIG49ZGVjb2RlVVJJQ29tcG9uZW50KHIuX3VybC5wYXRoKTtyZXR1cm4gUy50ZXN0KHIuX3VybC5ocmVmKSYmKG49bi5yZXBsYWNlKC9eXC8vLCIiKSkseS5sc3RhdChuLChmdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIkVOT0VOVCI9PT1lLmNvZGUmJihlPW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChuLCciLicpKSksci5fc3RvcmVkRXJyb3I9ZSx2b2lkIHIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChlKTtyLl9jb250ZW50TGVuZ3RoPXQuc2l6ZSxyLl9zZXRSZWFkYWJsZVN0cmVhbSh5LmNyZWF0ZVJlYWRTdHJlYW0obikpLHIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxyfXJldHVybiBmKHQsZSksdH0oeCksUj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTttKHRoaXMsdCksYT1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsZSkpO3ZhciBpPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIFMudGVzdChhLl91cmwuaHJlZikmJihpPWkucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKHkuY3JlYXRlUmVhZFN0cmVhbShpLHtzdGFydDpyLGVuZDpuLTF9KSksYX1yZXR1cm4gZih0LGUpLHR9KEEpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gNDA0PT09ZXx8MD09PWUmJi9eZmlsZTovLnRlc3QodCk/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrdCsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiK2UrJykgd2hpbGUgcmV0cmlldmluZyBQREYgIicrdCsnIi4nLGUpfSx0LmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSgiQ29udGVudC1EaXNwb3NpdGlvbiIpO2lmKHQpe3ZhciByPSgwLGEuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKSh0KTtpZigvXC5wZGYkL2kudGVzdChyKSlyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldFJlc3BvbnNlSGVhZGVyLHI9ZS5pc0h0dHAsYT1lLnJhbmdlQ2h1bmtTaXplLGk9ZS5kaXNhYmxlUmFuZ2U7KDAsbi5hc3NlcnQpKGE+MCwiUmFuZ2UgY2h1bmsgc2l6ZSBtdXN0IGJlIGxhcmdlciB0aGFuIHplcm8iKTt2YXIgbz17YWxsb3dSYW5nZVJlcXVlc3RzOiExLHN1Z2dlc3RlZExlbmd0aDp2b2lkIDB9LHM9cGFyc2VJbnQodCgiQ29udGVudC1MZW5ndGgiKSwxMCk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIocyk/KG8uc3VnZ2VzdGVkTGVuZ3RoPXMsczw9MiphP286aXx8IXI/bzoiYnl0ZXMiIT09dCgiQWNjZXB0LVJhbmdlcyIpP286ImlkZW50aXR5IiE9PSh0KCJDb250ZW50LUVuY29kaW5nIil8fCJpZGVudGl0eSIpP286KG8uYWxsb3dSYW5nZVJlcXVlc3RzPSEwLG8pKTpvfSx0LnZhbGlkYXRlUmVzcG9uc2VTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIDIwMD09PWV8fDIwNj09PWV9O3ZhciBuPXIoMSksYT1yKDE2Nyl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PSEwLHI9bygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyhlKTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIGwoYT1mKGE9dShhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9W10sYT1vKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KHQ9YS5leGVjKGUpKTspe3ZhciBpPW4odCw0KSxzPWlbMV0sbD1pWzJdLGY9aVszXTtpZigocz1wYXJzZUludChzLDEwKSlpbiByKXtpZigwPT09cylicmVha31lbHNlIHJbc109W2wsZl19dmFyIGg9W107Zm9yKHM9MDtzPHIubGVuZ3RoJiZzIGluIHI7KytzKXt2YXIgZD1uKHJbc10sMik7bD1kWzBdLGY9YyhmPWRbMV0pLGwmJihmPXVuZXNjYXBlKGYpLDA9PT1zJiYoZj11KGYpKSksaC5wdXNoKGYpfXJldHVybiBoLmpvaW4oIiIpfShlKSlyZXR1cm4gbChmKHIpKTtpZihyPW8oImZpbGVuYW1lIiwiaSIpLmV4ZWMoZSkpe3ZhciBpPWMocj1yWzFdKTtyZXR1cm4gbChpPWYoaSkpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86Xnw7KVxccyoiK2UrJ1xccyo9XFxzKihbXiI7XFxzXVteO1xcc10qfCIoPzpbXiJcXFxcXXxcXFxcIj8pKyI/KScsdCl9ZnVuY3Rpb24gcyhlLHIpe2lmKGUpe2lmKCEvXltceDAwLVx4RkZdKyQvLnRlc3QocikpcmV0dXJuIHI7dHJ5e3ZhciBuPW5ldyBUZXh0RGVjb2RlcihlLHtmYXRhbDohMH0pLGE9QXJyYXkuZnJvbShyLChmdW5jdGlvbihlKXtyZXR1cm4gMjU1JmUuY2hhckNvZGVBdCgwKX0pKTtyPW4uZGVjb2RlKG5ldyBVaW50OEFycmF5KGEpKSx0PSExfWNhdGNoKG4pe2lmKC9edXRmLT84JC9pLnRlc3QoZSkpdHJ5e3I9ZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShyKSksdD0hMX1jYXRjaChlKXt9fX1yZXR1cm4gcn1mdW5jdGlvbiBsKGUpe3JldHVybiB0JiYvW1x4ODAtXHhmZl0vLnRlc3QoZSkmJihlPXMoInV0Zi04IixlKSx0JiYoZT1zKCJpc28tODg1OS0xIixlKSkpLGV9ZnVuY3Rpb24gYyhlKXtpZihlLnN0YXJ0c1dpdGgoJyInKSl7Zm9yKHZhciB0PWUuc2xpY2UoMSkuc3BsaXQoJ1xcIicpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXS5pbmRleE9mKCciJyk7LTEhPT1uJiYodFtyXT10W3JdLnNsaWNlKDAsbiksdC5sZW5ndGg9cisxKSx0W3JdPXRbcl0ucmVwbGFjZSgvXFwoLikvZywiJDEiKX1lPXQuam9pbignIicpfXJldHVybiBlfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5pbmRleE9mKCInIik7cmV0dXJuLTE9PT10P2U6cyhlLnNsaWNlKDAsdCksZS5zbGljZSh0KzEpLnJlcGxhY2UoL15bXiddKicvLCIiKSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4hZS5zdGFydHNXaXRoKCI9PyIpfHwvW1x4MDAtXHgxOVx4ODAtXHhmZl0vLnRlc3QoZSk/ZTplLnJlcGxhY2UoLz1cPyhbXHctXSopXD8oW1FxQmJdKVw/KCg/OlteP118XD8oPyE9KSkqKVw/PS9nLChmdW5jdGlvbihlLHQscixuKXtpZigicSI9PT1yfHwiUSI9PT1yKXJldHVybiBzKHQsbj0obj1uLnJlcGxhY2UoL18vZywiICIpKS5yZXBsYWNlKC89KFswLTlhLWZBLUZdezJ9KS9nLChmdW5jdGlvbihlLHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQsMTYpKX0pKSk7dHJ5e249YXRvYihuKX1jYXRjaChlKXt9cmV0dXJuIHModCxuKX0pKX1yZXR1cm4iIn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGRmV0Y2hTdHJlYW09dm9pZCAwO3ZhciBuLGE9KG49cigxNDcpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0saT1yKDEpLG89cigxNjYpO2Z1bmN0aW9uIHMoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe3MoaSxuLGEsbyxsLCJuZXh0IixlKX1mdW5jdGlvbiBsKGUpe3MoaSxuLGEsbyxsLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxlfWZ1bmN0aW9uIGgoZSx0LHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczplLHNpZ25hbDpyJiZyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczp0PyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Yyh0aGlzLGUpLHRoaXMuc291cmNlPXQsdGhpcy5pc0h0dHA9L15odHRwcz86L2kudGVzdCh0LnVybCksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmdC5odHRwSGVhZGVyc3x8e30sdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbCx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzPVtdfXJldHVybiBmKGUsW3trZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHAodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbSh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbmNlbChlKX0pKX19XSksZX0oKTt0LlBERkZldGNoU3RyZWFtPWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Yyh0aGlzLGUpLHRoaXMuX3N0cmVhbT10LHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuX2xvYWRlZD0wLHRoaXMuX2ZpbGVuYW1lPW51bGw7dmFyIG49dC5zb3VyY2U7Zm9yKHZhciBhIGluIHRoaXMuX3dpdGhDcmVkZW50aWFscz1uLndpdGhDcmVkZW50aWFscyx0aGlzLl9jb250ZW50TGVuZ3RoPW4ubGVuZ3RoLHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fZGlzYWJsZVJhbmdlPW4uZGlzYWJsZVJhbmdlfHwhMSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1uLnJhbmdlQ2h1bmtTaXplLHRoaXMuX3JhbmdlQ2h1bmtTaXplfHx0aGlzLl9kaXNhYmxlUmFuZ2V8fCh0aGlzLl9kaXNhYmxlUmFuZ2U9ITApLCJ1bmRlZmluZWQiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyJiYodGhpcy5fYWJvcnRDb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXIpLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFuLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hbi5kaXNhYmxlUmFuZ2UsdGhpcy5faGVhZGVycz1uZXcgSGVhZGVycyx0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpe3ZhciBzPXRoaXMuX3N0cmVhbS5odHRwSGVhZGVyc1thXTt2b2lkIDAhPT1zJiZ0aGlzLl9oZWFkZXJzLmFwcGVuZChhLHMpfXZhciBsPW4udXJsO2ZldGNoKGwsaCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbihlKXtpZighKDAsby52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShlLnN0YXR1cykpdGhyb3coMCxvLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKGUuc3RhdHVzLGwpO3IuX3JlYWRlcj1lLmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciB0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmhlYWRlcnMuZ2V0KHQpfSxuPSgwLG8udmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjp0LGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLHM9bi5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1hLHIuX2NvbnRlbnRMZW5ndGg9c3x8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxvLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHQpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IGkuQWJvcnRFeGNlcHRpb24oInN0cmVhbWluZyBpcyBkaXNhYmxlZCIpKX0pKS5jYXRjaCh0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QpLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciB0O3JldHVybiBmKGUsW3trZXk6InJlYWQiLHZhbHVlOih0PWwoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saTtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsdGhpcy5fcmVhZGVyLnJlYWQoKTtjYXNlIDQ6aWYodD1lLnNlbnQscj10LnZhbHVlLCEobj10LmRvbmUpKXtlLm5leHQ9OTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIsZG9uZTpufSk7Y2FzZSA5OnJldHVybiB0aGlzLl9sb2FkZWQrPXIuYnl0ZUxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlciYmdGhpcy5fcmVhZGVyLmNhbmNlbChlKSx0aGlzLl9hYm9ydENvbnRyb2xsZXImJnRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX0se2tleToiaGVhZGVyc1JlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzUmFuZ2VTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfX0se2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19XSksZX0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9dGhpcztjKHRoaXMsZSksdGhpcy5fc3RyZWFtPXQsdGhpcy5fcmVhZGVyPW51bGwsdGhpcy5fbG9hZGVkPTA7dmFyIHM9dC5zb3VyY2U7Zm9yKHZhciBsIGluIHRoaXMuX3dpdGhDcmVkZW50aWFscz1zLndpdGhDcmVkZW50aWFscyx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFzLmRpc2FibGVTdHJlYW0sInVuZGVmaW5lZCIhPXR5cGVvZiBBYm9ydENvbnRyb2xsZXImJih0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlciksdGhpcy5faGVhZGVycz1uZXcgSGVhZGVycyx0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpe3ZhciB1PXRoaXMuX3N0cmVhbS5odHRwSGVhZGVyc1tsXTt2b2lkIDAhPT11JiZ0aGlzLl9oZWFkZXJzLmFwcGVuZChsLHUpfXZhciBmPXIrIi0iKyhuLTEpO3RoaXMuX2hlYWRlcnMuYXBwZW5kKCJSYW5nZSIsImJ5dGVzPSIrZik7dmFyIGQ9cy51cmw7ZmV0Y2goZCxoKHRoaXMuX2hlYWRlcnMsdGhpcy5fd2l0aENyZWRlbnRpYWxzLHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCEoMCxvLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKGUuc3RhdHVzKSl0aHJvdygwLG8uY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikoZS5zdGF0dXMsZCk7YS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3JlYWRlcj1lLmJvZHkuZ2V0UmVhZGVyKCl9KSksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIHQ7cmV0dXJuIGYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9bChhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixpO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZih0PWUuc2VudCxyPXQudmFsdWUsIShuPXQuZG9uZSkpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6cixkb25lOm59KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9ci5ieXRlTGVuZ3RoLHRoaXMub25Qcm9ncmVzcyYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6dGhpcy5fbG9hZGVkfSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlciYmdGhpcy5fcmVhZGVyLmNhbmNlbChlKSx0aGlzLl9hYm9ydENvbnRyb2xsZXImJnRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX0se2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19XSksZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZOZXR3b3JrU3RyZWFtPW0sdC5OZXR3b3JrTWFuYWdlcj11O3ZhciBuPXMocigxNDcpKSxhPXIoMSksaT1yKDE2Niksbz1zKHIoMykpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGwoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiB1KGUsdCl7dGhpcy51cmw9ZSx0PXR8fHt9LHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmdC5odHRwSGVhZGVyc3x8e30sdGhpcy53aXRoQ3JlZGVudGlhbHM9dC53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuZ2V0WGhyPXQuZ2V0WGhyfHxmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9LHRoaXMuY3VyclhocklkPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmxvYWRlZFJlcXVlc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1lLnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90OigwLGEuc3RyaW5nVG9CeXRlcykodCkuYnVmZmVyfXZhciBoLGQscD1mdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGUub3BlbigiR0VUIixvLmRlZmF1bHQubG9jYXRpb24uaHJlZiksZS5yZXNwb25zZVR5cGU9Im1vei1jaHVua2VkLWFycmF5YnVmZmVyIiwibW96LWNodW5rZWQtYXJyYXlidWZmZXIiPT09ZS5yZXNwb25zZVR5cGV9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIG0oZSl7dGhpcy5fc291cmNlPWUsdGhpcy5fbWFuYWdlcj1uZXcgdShlLnVybCx7aHR0cEhlYWRlcnM6ZS5odHRwSGVhZGVycyx3aXRoQ3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHN9KSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1lLnJhbmdlQ2h1bmtTaXplLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1mdW5jdGlvbiBnKGUsdCl7dGhpcy5fbWFuYWdlcj1lO3ZhciByPXtvbkhlYWRlcnNSZWNlaXZlZDp0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3NpdmVEYXRhOnQuZGlzYWJsZVN0cmVhbT9udWxsOnRoaXMuX29uUHJvZ3Jlc3NpdmVEYXRhLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9dC51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKHIpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9dC5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9dC5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfWZ1bmN0aW9uIHYoZSx0LHIpe3RoaXMuX21hbmFnZXI9ZTt2YXIgbj17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl9yZXF1ZXN0SWQ9ZS5yZXF1ZXN0UmFuZ2UodCxyLG4pLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX3F1ZXVlZENodW5rPW51bGwsdGhpcy5fZG9uZT0hMSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLm9uQ2xvc2VkPW51bGx9dS5wcm90b3R5cGU9e3JlcXVlc3RSYW5nZTpmdW5jdGlvbihlLHQscil7dmFyIG49e2JlZ2luOmUsZW5kOnR9O2Zvcih2YXIgYSBpbiByKW5bYV09clthXTtyZXR1cm4gdGhpcy5yZXF1ZXN0KG4pfSxyZXF1ZXN0RnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGUpfSxyZXF1ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0WGhyKCkscj10aGlzLmN1cnJYaHJJZCsrLG49dGhpcy5wZW5kaW5nUmVxdWVzdHNbcl09e3hocjp0fTtmb3IodmFyIGEgaW4gdC5vcGVuKCJHRVQiLHRoaXMudXJsKSx0LndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgaT10aGlzLmh0dHBIZWFkZXJzW2FdO3ZvaWQgMCE9PWkmJnQuc2V0UmVxdWVzdEhlYWRlcihhLGkpfWlmKHRoaXMuaXNIdHRwJiYiYmVnaW4iaW4gZSYmImVuZCJpbiBlKXt2YXIgbz1lLmJlZ2luKyItIisoZS5lbmQtMSk7dC5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrbyksbi5leHBlY3RlZFN0YXR1cz0yMDZ9ZWxzZSBuLmV4cGVjdGVkU3RhdHVzPTIwMDtyZXR1cm4gcCYmZS5vblByb2dyZXNzaXZlRGF0YT8odC5yZXNwb25zZVR5cGU9Im1vei1jaHVua2VkLWFycmF5YnVmZmVyIixuLm9uUHJvZ3Jlc3NpdmVEYXRhPWUub25Qcm9ncmVzc2l2ZURhdGEsbi5tb3pDaHVua2VkPSEwKTp0LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGUub25FcnJvciYmKHQub25lcnJvcj1mdW5jdGlvbihyKXtlLm9uRXJyb3IodC5zdGF0dXMpfSksdC5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSx0Lm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPWUub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9ZS5vbkRvbmUsbi5vbkVycm9yPWUub25FcnJvcixuLm9uUHJvZ3Jlc3M9ZS5vblByb2dyZXNzLHQuc2VuZChudWxsKSxyfSxvblByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5wZW5kaW5nUmVxdWVzdHNbZV07aWYocil7aWYoci5tb3pDaHVua2VkKXt2YXIgbj1mKHIueGhyKTtyLm9uUHJvZ3Jlc3NpdmVEYXRhKG4pfXZhciBhPXIub25Qcm9ncmVzczthJiZhKHQpfX0sb25TdGF0ZUNoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMucGVuZGluZ1JlcXVlc3RzW2VdO2lmKHIpe3ZhciBuPXIueGhyO2lmKG4ucmVhZHlTdGF0ZT49MiYmci5vbkhlYWRlcnNSZWNlaXZlZCYmKHIub25IZWFkZXJzUmVjZWl2ZWQoKSxkZWxldGUgci5vbkhlYWRlcnNSZWNlaXZlZCksND09PW4ucmVhZHlTdGF0ZSYmZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cylpZihkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0sMD09PW4uc3RhdHVzJiZ0aGlzLmlzSHR0cClyLm9uRXJyb3ImJnIub25FcnJvcihuLnN0YXR1cyk7ZWxzZXt2YXIgYT1uLnN0YXR1c3x8MjAwO2lmKDIwMD09PWEmJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fGE9PT1yLmV4cGVjdGVkU3RhdHVzKXt0aGlzLmxvYWRlZFJlcXVlc3RzW2VdPSEwO3ZhciBpPWYobik7aWYoMjA2PT09YSl7dmFyIG89bi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1SYW5nZSIpLHM9L2J5dGVzIChcZCspLShcZCspXC8oXGQrKS8uZXhlYyhvKSxsPXBhcnNlSW50KHNbMV0sMTApO3Iub25Eb25lKHtiZWdpbjpsLGNodW5rOml9KX1lbHNlIHIub25Qcm9ncmVzc2l2ZURhdGE/ci5vbkRvbmUobnVsbCk6aT9yLm9uRG9uZSh7YmVnaW46MCxjaHVuazppfSk6ci5vbkVycm9yJiZyLm9uRXJyb3Iobi5zdGF0dXMpfWVsc2Ugci5vbkVycm9yJiZyLm9uRXJyb3Iobi5zdGF0dXMpfX19LGhhc1BlbmRpbmdSZXF1ZXN0czpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cylyZXR1cm4hMDtyZXR1cm4hMX0sZ2V0UmVxdWVzdFhocjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0ueGhyfSxpc1N0cmVhbWluZ1JlcXVlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLnBlbmRpbmdSZXF1ZXN0c1tlXS5vblByb2dyZXNzaXZlRGF0YX0saXNQZW5kaW5nUmVxdWVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c30saXNMb2FkZWRSZXF1ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMubG9hZGVkUmVxdWVzdHN9LGFib3J0QWxsUmVxdWVzdHM6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpdGhpcy5hYm9ydFJlcXVlc3QoMHxlKX0sYWJvcnRSZXF1ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGVuZGluZ1JlcXVlc3RzW2VdLnhocjtkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0sdC5hYm9ydCgpfX0sbS5wcm90b3R5cGU9e19vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YoZSk7dD49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UodCwxKX0sZ2V0RnVsbFJlYWRlcjpmdW5jdGlvbigpe3JldHVybigwLGEuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBnKHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn0sZ2V0UmFuZ2VSZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdih0aGlzLl9tYW5hZ2VyLGUsdCk7cmV0dXJuIHIub25DbG9zZWQ9dGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn0sY2FuY2VsQWxsUmVxdWVzdHM6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpfX0sZy5wcm90b3R5cGU9e19vbkhlYWRlcnNSZWNlaXZlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Z1bGxSZXF1ZXN0SWQsdD10aGlzLl9tYW5hZ2VyLmdldFJlcXVlc3RYaHIoZSkscj1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRSZXNwb25zZUhlYWRlcihlKX0sbj0oMCxpLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKSh7Z2V0UmVzcG9uc2VIZWFkZXI6cixpc0h0dHA6dGhpcy5fbWFuYWdlci5pc0h0dHAscmFuZ2VDaHVua1NpemU6dGhpcy5fcmFuZ2VDaHVua1NpemUsZGlzYWJsZVJhbmdlOnRoaXMuX2Rpc2FibGVSYW5nZX0pLGE9bi5hbGxvd1JhbmdlUmVxdWVzdHMsbz1uLnN1Z2dlc3RlZExlbmd0aDthJiYodGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hMCksdGhpcy5fY29udGVudExlbmd0aD1vfHx0aGlzLl9jb250ZW50TGVuZ3RoLHRoaXMuX2ZpbGVuYW1lPSgwLGkuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikocik7dmFyIHM9dGhpcy5fbWFuYWdlcjtzLmlzU3RyZWFtaW5nUmVxdWVzdChlKT90aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMDp0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZzLmFib3J0UmVxdWVzdChlKSx0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlc29sdmUoKX0sX29uUHJvZ3Jlc3NpdmVEYXRhOmZ1bmN0aW9uKGUpe3RoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6ZSxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2goZSl9LF9vbkRvbmU6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5fb25Qcm9ncmVzc2l2ZURhdGEoZS5jaHVuayksdGhpcy5fZG9uZT0hMCx0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjB8fCh0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSksdGhpcy5fcmVxdWVzdHM9W10pfSxfb25FcnJvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl91cmwscj0oMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKGUsdCk7dGhpcy5fc3RvcmVkRXJyb3I9cix0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdChyKSx0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlamVjdChyKX0pKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9jYWNoZWRDaHVua3M9W119LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpe3RoaXMub25Qcm9ncmVzcyYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS5sZW5ndGhDb21wdXRhYmxlP2UudG90YWw6dGhpcy5fY29udGVudExlbmd0aH0pfSxnZXQgZmlsZW5hbWUoKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9LGdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9LGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH0sZ2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2V9LHJlYWQ6KGg9YyhuLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIG4uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe2UubmV4dD0yO2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgMjppZighKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGg+MCkpe2UubmV4dD01O2JyZWFrfXJldHVybiB0PXRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp0LGRvbmU6ITF9KTtjYXNlIDU6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDc6cmV0dXJuIHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLGUuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QoZSksdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19LHYucHJvdG90eXBlPXtfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLm9uQ2xvc2VkJiZ0aGlzLm9uQ2xvc2VkKHRoaXMpfSxfb25Eb25lOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz10LHRoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2Nsb3NlKCl9LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpeyF0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOmUubG9hZGVkfSl9LGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiExfSxyZWFkOihkPWMobi5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBuLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXtlLm5leHQ9NDticmVha31yZXR1cm4gdD10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp0LGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLGUuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjYW5jZWw6ZnVuY3Rpb24oZSl7dGhpcy5fZG9uZT0hMCx0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSksdGhpcy5fcmVxdWVzdHM9W10sdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19fV0pfSxlLmV4cG9ydHM9aSgpfSkuY2FsbCh0aGlzLHIoMjkpLkJ1ZmZlcixyKDE4KSxyKDI0KSl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9lLmV4cG9ydHM9cj1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmUuZXhwb3J0cz1yPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scih0KX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXQuZm9jdXNFdmVudHM9dC5rZXlib2FyZEV2ZW50cz10LnRvdWNoRXZlbnRzPXQubW91c2VFdmVudHM9dm9pZCAwO3ZhciBuPVsib25DbGljayIsIm9uQ29udGV4dE1lbnUiLCJvbkRvdWJsZUNsaWNrIiwib25EcmFnIiwib25EcmFnRW5kIiwib25EcmFnRW50ZXIiLCJvbkRyYWdFeGl0Iiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25EcmFnU3RhcnQiLCJvbkRyb3AiLCJvbk1vdXNlRG93biIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZU91dCIsIm9uTW91c2VPdmVyIiwib25Nb3VzZVVwIl07dC5tb3VzZUV2ZW50cz1uO3ZhciBhPVsib25Ub3VjaENhbmNlbCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCJdO3QudG91Y2hFdmVudHM9YTt2YXIgaT1bIm9uS2V5RG93biIsIm9uS2V5UHJlc3MiLCJvbktleVVwIl07dC5rZXlib2FyZEV2ZW50cz1pO3ZhciBvPVsib25Gb2N1cyIsIm9uQmx1ciJdO3QuZm9jdXNFdmVudHM9bzt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciByPXt9O3JldHVybltdLmNvbmNhdChuLGEsaSxvKS5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dJiYocltuXT1mdW5jdGlvbihyKXtyZXR1cm4gdD9lW25dKHIsdChuKSk6ZVtuXShyKX0pfSkpLHJ9O3QuZGVmYXVsdD1zfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwZGZqcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRG9jdW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk91dGxpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSk7dmFyIGE9bihyKDIwKSksaT1uKHIoNTUpKSxvPW4ocig3MSkpLHM9bihyKDc3KSksbD1yKDEwKTtsLmlzTG9jYWxGaWxlU3lzdGVtJiYoMCxsLndhcm5PbkRldikoIllvdSBhcmUgcnVubmluZyBSZWFjdC1QREYgZnJvbSB5b3VyIGxvY2FsIGZpbGUgc3lzdGVtLiBQREYuanMgV29ya2VyIG1heSBmYWlsIHRvIGxvYWQgZHVlIHRvIGJyb3dzZXIncyBzZWN1cml0eSBwb2xpY2llcy4gSWYgeW91J3JlIG9uIEdvb2dsZSBDaHJvbWUsIHlvdSBjYW4gdXNlIC0tYWxsb3ctZmlsZS1hY2Nlc3MtZnJvbS1maWxlcyBmbGFnIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIiksYS5kZWZhdWx0Lkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPSJwZGYud29ya2VyLmpzIn0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKGUpe2lmKHI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKHI9PT1pfHwhcikmJnNldFRpbWVvdXQpcmV0dXJuIHI9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiByKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiByLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDppfWNhdGNoKGUpe3I9aX10cnl7bj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpvfWNhdGNoKGUpe249b319KCk7dmFyIGwsYz1bXSx1PSExLGY9LTE7ZnVuY3Rpb24gaCgpe3UmJmwmJih1PSExLGwubGVuZ3RoP2M9bC5jb25jYXQoYyk6Zj0tMSxjLmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIXUpe3ZhciBlPXMoaCk7dT0hMDtmb3IodmFyIHQ9Yy5sZW5ndGg7dDspe2ZvcihsPWMsYz1bXTsrK2Y8dDspbCYmbFtmXS5ydW4oKTtmPS0xLHQ9Yy5sZW5ndGh9bD1udWxsLHU9ITEsZnVuY3Rpb24oZSl7aWYobj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChuPT09b3x8IW4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG49Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7bihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIG0oKXt9YS5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO2MucHVzaChuZXcgcChlLHQpKSwxIT09Yy5sZW5ndGh8fHV8fHMoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9ImJyb3dzZXIiLGEuYnJvd3Nlcj0hMCxhLmVudj17fSxhLmFyZ3Y9W10sYS52ZXJzaW9uPSIiLGEudmVyc2lvbnM9e30sYS5vbj1tLGEuYWRkTGlzdGVuZXI9bSxhLm9uY2U9bSxhLm9mZj1tLGEucmVtb3ZlTGlzdGVuZXI9bSxhLnJlbW92ZUFsbExpc3RlbmVycz1tLGEuZW1pdD1tLGEucHJlcGVuZExpc3RlbmVyPW0sYS5wcmVwZW5kT25jZUxpc3RlbmVyPW0sYS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxhLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LGE9T2JqZWN0LmtleXMoT2JqZWN0KHIpKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGE9YS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7bihlLHQsclt0XSl9KSl9cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIodCxuKXtyZXR1cm4gZS5leHBvcnRzPXI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHIodCxuKX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQXJyYXk/ZS5jb25jYXQodCk6ZX0pLFtdKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLmpvaW4oIiAiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qCm9iamVjdC1hc3NpZ24KKGMpIFNpbmRyZSBTb3JodXMKQGxpY2Vuc2UgTUlUCiovdmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8oZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30scj0wO3I8MTA7cisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuW2VdPWV9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLHMsbD1vKGUpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlhLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWkuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KdmFyIG49cig0MSksYT1yKDQyKSxpPXIoNDMpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBzKGUsdCl7aWYobygpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIGwuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPWwucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IGwodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gbChlLHQscil7aWYoIShsLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBsKSlyZXR1cm4gbmV3IGwoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gZih0aGlzLGUpfXJldHVybiBjKHRoaXMsZSx0LHIpfWZ1bmN0aW9uIGMoZSx0LHIsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPWwucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO2lmKCFsLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIG49MHxwKHQsciksYT0oZT1zKGUsbikpLndyaXRlKHQscik7YSE9PW4mJihlPWUuc2xpY2UoMCxhKSk7cmV0dXJuIGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKGwuaXNCdWZmZXIodCkpe3ZhciByPTB8ZCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1zKGUscikpLmxlbmd0aD9lOih0LmNvcHkoZSwwLDAsciksZSl9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChuPXQubGVuZ3RoKSE9bj9zKGUsMCk6aChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZpKHQuZGF0YSkpcmV0dXJuIGgoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiB1KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gZihlLHQpe2lmKHUodCksZT1zKGUsdDwwPzA6MHxkKHQpKSwhbC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxkKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIGQoZSl7aWYoZT49bygpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIHAoZSx0KXtpZihsLmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBVKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcShlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBVKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIG0oZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gVCh0aGlzLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEUodGhpcyx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQSh0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBSKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGcoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiB2KGUsdCxyLG4sYSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9YT8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKGEpcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighYSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1sLmZyb20odCxuKSksbC5pc0J1ZmZlcih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOnkoZSx0LHIsbixhKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2E/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTp5KGUsW3RdLHIsbixhKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB5KGUsdCxyLG4sYSl7dmFyIGksbz0xLHM9ZS5sZW5ndGgsbD10Lmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDE9PT1vP2VbdF06ZS5yZWFkVUludDE2QkUodCpvKX1pZihhKXt2YXIgdT0tMTtmb3IoaT1yO2k8cztpKyspaWYoYyhlLGkpPT09Yyh0LC0xPT09dT8wOmktdSkpe2lmKC0xPT09dSYmKHU9aSksaS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGktPWktdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxpPXI7aT49MDtpLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihjKGUsaStoKSE9PWModCxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBpfXJldHVybi0xfWZ1bmN0aW9uIGIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGE9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+YSYmKG49YSk6bj1hO3ZhciBpPXQubGVuZ3RoO2lmKGklMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmkvMiYmKG49aS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKm8sMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBvO2VbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHcoZSx0LHIsbil7cmV0dXJuIHooVSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBrKGUsdCxyLG4pe3JldHVybiB6KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fSh0KSxlLHIsbil9ZnVuY3Rpb24gUyhlLHQscixuKXtyZXR1cm4gayhlLHQscixuKX1mdW5jdGlvbiBfKGUsdCxyLG4pe3JldHVybiB6KHEodCksZSxyLG4pfWZ1bmN0aW9uIHgoZSx0LHIsbil7cmV0dXJuIHooZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhLGk9W10sbz0wO288ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrbylyPWUuY2hhckNvZGVBdChvKSxuPXI+PjgsYT1yJTI1NixpLnB1c2goYSksaS5wdXNoKG4pO3JldHVybiBpfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBBKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9uLmZyb21CeXRlQXJyYXkoZSk6bi5mcm9tQnl0ZUFycmF5KGUuc2xpY2UodCxyKSl9ZnVuY3Rpb24gQyhlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sYT10O2E8cjspe3ZhciBpLG8scyxsLGM9ZVthXSx1PW51bGwsZj1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGErZjw9cilzd2l0Y2goZil7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbYSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6aT1lW2ErMV0sbz1lW2ErMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0Omk9ZVthKzFdLG89ZVthKzJdLHM9ZVthKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsZj0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGErPWZ9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciByPSIiLG49MDtmb3IoO248dDspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShuLG4rPTQwOTYpKTtyZXR1cm4gcn0obil9dC5CdWZmZXI9bCx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7K2UhPWUmJihlPTApO3JldHVybiBsLmFsbG9jKCtlKX0sdC5JTlNQRUNUX01BWF9CWVRFUz01MCxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09ZS5UWVBFRF9BUlJBWV9TVVBQT1JUP2UuVFlQRURfQVJSQVlfU1VQUE9SVDpmdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZS5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PWUuZm9vKCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1vKCksbC5wb29sU2l6ZT04MTkyLGwuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPWwucHJvdG90eXBlLGV9LGwuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LGwuVFlQRURfQVJSQVlfU1VQUE9SVCYmKGwucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxsLl9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuc3BlY2llcyYmbFtTeW1ib2wuc3BlY2llc109PT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9KSksbC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB1KHQpLHQ8PTA/cyhlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuP3MoZSx0KS5maWxsKHIsbik6cyhlLHQpLmZpbGwocik6cyhlLHQpfShudWxsLGUsdCxyKX0sbC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gZihudWxsLGUpfSxsLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gZihudWxsLGUpfSxsLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX0sbC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIWwuaXNCdWZmZXIoZSl8fCFsLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxhPTAsaT1NYXRoLm1pbihyLG4pO2E8aTsrK2EpaWYoZVthXSE9PXRbYV0pe3I9ZVthXSxuPXRbYV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxsLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGwuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPWwuYWxsb2NVbnNhZmUodCksYT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoIWwuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGEpLGErPW8ubGVuZ3RofXJldHVybiBufSxsLmJ5dGVMZW5ndGg9cCxsLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsbC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWcodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGwucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClnKHRoaXMsdCx0KzMpLGcodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWcodGhpcyx0LHQrNyksZyh0aGlzLHQrMSx0KzYpLGcodGhpcyx0KzIsdCs1KSxnKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsZSk6bS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGwucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighbC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09bC5jb21wYXJlKHRoaXMsZSl9LGwucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIixyPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCxyKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+ciYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxsLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIWwuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09YSYmKGE9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1hJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWEpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGk9KGE+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0odD4+Pj0wKSxzPU1hdGgubWluKGksbyksYz10aGlzLnNsaWNlKG4sYSksdT1lLnNsaWNlKHQsciksZj0wO2Y8czsrK2YpaWYoY1tmXSE9PXVbZl0pe2k9Y1tmXSxvPXVbZl07YnJlYWt9cmV0dXJuIGk8bz8tMTpvPGk/MTowfSxsLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSxsLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdih0aGlzLGUsdCxyLCEwKX0sbC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2KHRoaXMsZSx0LHIsITEpfSxsLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgYT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmEpJiYocj1hKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBpPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gYih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB3KHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBrKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBfKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4geCh0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGk9ITB9fSxsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIFAoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBhPXQ7YTxyOysrYSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBFKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgYT10O2E8cjsrK2Epbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGE9IiIsaT10O2k8cjsrK2kpYSs9QihlW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBSKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGE9IiIsaT0wO2k8bi5sZW5ndGg7aSs9MilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0rMjU2Km5baSsxXSk7cmV0dXJuIGF9ZnVuY3Rpb24gTyhlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSShlLHQscixuLGEsaSl7aWYoIWwuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+YXx8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEYoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgYT0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciwyKTthPGk7KythKWVbcithXT0odCYyNTU8PDgqKG4/YToxLWEpKT4+PjgqKG4/YToxLWEpfWZ1bmN0aW9uIEwoZSx0LHIsbil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBhPTAsaT1NYXRoLm1pbihlLmxlbmd0aC1yLDQpO2E8aTsrK2EpZVtyK2FdPXQ+Pj44KihuP2E6My1hKSYyNTV9ZnVuY3Rpb24gRChlLHQscixuLGEsaSl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE0oZSx0LHIsbixpKXtyZXR1cm4gaXx8RChlLDAsciw0KSxhLndyaXRlKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIE4oZSx0LHIsbixpKXtyZXR1cm4gaXx8RChlLDAsciw4KSxhLndyaXRlKGUsdCxyLG4sNTIsOCkscis4fWwucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLGwuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1sLnByb3RvdHlwZTtlbHNle3ZhciBhPXQtZTtyPW5ldyBsKGEsdm9pZCAwKTtmb3IodmFyIGk9MDtpPGE7KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxsLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8TyhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGE9MSxpPTA7KytpPHQmJihhKj0yNTYpOyluKz10aGlzW2UraV0qYTtyZXR1cm4gbn0sbC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fE8oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0sYT0xO3Q+MCYmKGEqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmE7cmV0dXJuIG59LGwucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sbC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sbC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sbC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxsLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TyhlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGwucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fE8oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxhPTEsaT0wOysraTx0JiYoYSo9MjU2KTspbis9dGhpc1tlK2ldKmE7cmV0dXJuIG4+PShhKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxsLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxPKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsYT0xLGk9dGhpc1tlKy0tbl07bj4wJiYoYSo9MjU2KTspaSs9dGhpc1tlKy0tbl0qYTtyZXR1cm4gaT49KGEqPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LGwucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sbC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxPKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGwucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8TyhlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxsLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxsLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxsLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksYS5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sbC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TyhlLDQsdGhpcy5sZW5ndGgpLGEucmVhZCh0aGlzLGUsITEsMjMsNCl9LGwucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsOCx0aGlzLmxlbmd0aCksYS5yZWFkKHRoaXMsZSwhMCw1Miw4KX0sbC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSw4LHRoaXMubGVuZ3RoKSxhLnJlYWQodGhpcyxlLCExLDUyLDgpfSxsLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fEkodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT0xLGk9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8ciYmKGEqPTI1Nik7KXRoaXNbdCtpXT1lL2EmMjU1O3JldHVybiB0K3J9LGwucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8SSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBhPXItMSxpPTE7Zm9yKHRoaXNbdCthXT0yNTUmZTstLWE+PTAmJihpKj0yNTYpOyl0aGlzW3QrYV09ZS9pJjI1NTtyZXR1cm4gdCtyfSxsLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMSwyNTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sbC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDIsNjU1MzUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Rih0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMiw2NTUzNSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzJ9LGwucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkwodGhpcyxlLHQsITApLHQrNH0sbC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6TCh0aGlzLGUsdCwhMSksdCs0fSxsLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGE9TWF0aC5wb3coMiw4KnItMSk7SSh0aGlzLGUsdCxyLGEtMSwtYSl9dmFyIGk9MCxvPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpLTFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sbC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBhPU1hdGgucG93KDIsOCpyLTEpO0kodGhpcyxlLHQscixhLTEsLWEpfXZhciBpPXItMSxvPTEscz0wO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpKzFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sbC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMSwxMjcsLTEyOCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxsLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Rih0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGwuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpMKHRoaXMsZSx0LCEwKSx0KzR9LGwucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkwodGhpcyxlLHQsITEpLHQrNH0sbC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTSh0aGlzLGUsdCwhMCxyKX0sbC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTSh0aGlzLGUsdCwhMSxyKX0sbC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE4odGhpcyxlLHQsITAscil9LGwucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBOKHRoaXMsZSx0LCExLHIpfSxsLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGEsaT1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihhPWktMTthPj0wOy0tYSllW2ErdF09dGhpc1thK3JdO2Vsc2UgaWYoaTwxZTN8fCFsLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGE9MDthPGk7KythKWVbYSt0XT10aGlzW2Ercl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxsLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBhPWUuY2hhckNvZGVBdCgwKTthPDI1NiYmKGU9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFsLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIGk7aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPHI7KytpKXRoaXNbaV09ZTtlbHNle3ZhciBvPWwuaXNCdWZmZXIoZSk/ZTpVKG5ldyBsKGUsbikudG9TdHJpbmcoKSkscz1vLmxlbmd0aDtmb3IoaT0wO2k8ci10OysraSl0aGlzW2krdF09b1tpJXNdfXJldHVybiB0aGlzfTt2YXIgaj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBCKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBVKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGE9bnVsbCxpPVtdLG89MDtvPG47KytvKXtpZigocj1lLmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighYSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1hPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpLGE9cjtjb250aW51ZX1yPTY1NTM2KyhhLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGEmJih0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtpZihhPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO2kucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7aS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO2kucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBxKGUpe3JldHVybiBuLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoaiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24geihlLHQscixuKXtmb3IodmFyIGE9MDthPG4mJiEoYStyPj10Lmxlbmd0aHx8YT49ZS5sZW5ndGgpOysrYSl0W2Ercl09ZVthXTtyZXR1cm4gYX19KS5jYWxsKHRoaXMscigxOCkpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig1Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixhLGk9bihlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKylyPW9bYV0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIGE9bihyKDApKSxpPW4ocig0KSksbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS50eXBlO3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX21lc3NhZ2UgcmVhY3QtcGRmX19tZXNzYWdlLS0iLmNvbmNhdChyKX0sdCl9O28ucHJvcFR5cGVzPXtjaGlsZHJlbjppLmRlZmF1bHQubm9kZSx0eXBlOmkuZGVmYXVsdC5vbmVPZihbImVycm9yIiwibG9hZGluZyIsIm5vLWRhdGEiXSkuaXNSZXF1aXJlZH07dmFyIHM9bzt0LmRlZmF1bHQ9c30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj1yKDYwKS5QREZMaW5rU2VydmljZTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj0oMCxyKDApLmNyZWF0ZUNvbnRleHQpKG51bGwpO3QuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3MyksYT1yKDc0KSxpPXIoNzUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuKGUpfHxhKGUsdCl8fGkoKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uIGUoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl7MDt0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX0oKSxlLmV4cG9ydHM9cigzOCl9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig4OSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMAogKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIG49cigyOCksYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGk9YT9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsbz1hP1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LHM9YT9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LGw9YT9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LGM9YT9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LHU9YT9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LGY9YT9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsaD1hP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsZD1hP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTM7YSYmU3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpO3ZhciBwPWE/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LG09YT9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTY7YSYmU3ltYm9sLmZvcigicmVhY3QuZnVuZGFtZW50YWwiKSxhJiZTeW1ib2wuZm9yKCJyZWFjdC5yZXNwb25kZXIiKSxhJiZTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO3ZhciBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQrPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyXSk7cmV0dXJuIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgIit0KyIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiJ9dmFyIHk9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGI9e307ZnVuY3Rpb24gdyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1yfHx5fWZ1bmN0aW9uIGsoKXt9ZnVuY3Rpb24gUyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1yfHx5fXcucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKHYoODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LCJzZXRTdGF0ZSIpfSx3LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX0say5wcm90b3R5cGU9dy5wcm90b3R5cGU7dmFyIF89Uy5wcm90b3R5cGU9bmV3IGs7Xy5jb25zdHJ1Y3Rvcj1TLG4oXyx3LnByb3RvdHlwZSksXy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgeD17Y3VycmVudDpudWxsfSxBPXtjdXJyZW50Om51bGx9LEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxQPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gRShlLHQscil7dmFyIG4sYT17fSxvPW51bGwscz1udWxsO2lmKG51bGwhPXQpZm9yKG4gaW4gdm9pZCAwIT09dC5yZWYmJihzPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKG89IiIrdC5rZXkpLHQpQy5jYWxsKHQsbikmJiFQLmhhc093blByb3BlcnR5KG4pJiYoYVtuXT10W25dKTt2YXIgbD1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWwpYS5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxsKXtmb3IodmFyIGM9QXJyYXkobCksdT0wO3U8bDt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTthLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG4gaW4gbD1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1hW25dJiYoYVtuXT1sW25dKTtyZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUsa2V5Om8scmVmOnMscHJvcHM6YSxfb3duZXI6QS5jdXJyZW50fX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1pfXZhciBSPS9cLysvZyxPPVtdO2Z1bmN0aW9uIEkoZSx0LHIsbil7aWYoTy5sZW5ndGgpe3ZhciBhPU8ucG9wKCk7cmV0dXJuIGEucmVzdWx0PWUsYS5rZXlQcmVmaXg9dCxhLmZ1bmM9cixhLmNvbnRleHQ9bixhLmNvdW50PTAsYX1yZXR1cm57cmVzdWx0OmUsa2V5UHJlZml4OnQsZnVuYzpyLGNvbnRleHQ6bixjb3VudDowfX1mdW5jdGlvbiBGKGUpe2UucmVzdWx0PW51bGwsZS5rZXlQcmVmaXg9bnVsbCxlLmZ1bmM9bnVsbCxlLmNvbnRleHQ9bnVsbCxlLmNvdW50PTAsMTA+Ty5sZW5ndGgmJk8ucHVzaChlKX1mdW5jdGlvbiBMKGUsdCxyKXtyZXR1cm4gbnVsbD09ZT8wOmZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIHM9dHlwZW9mIHQ7InVuZGVmaW5lZCIhPT1zJiYiYm9vbGVhbiIhPT1zfHwodD1udWxsKTt2YXIgbD0hMTtpZihudWxsPT09dClsPSEwO2Vsc2Ugc3dpdGNoKHMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaTpjYXNlIG86bD0hMH19aWYobClyZXR1cm4gbihhLHQsIiI9PT1yPyIuIitEKHQsMCk6ciksMTtpZihsPTAscj0iIj09PXI/Ii4iOnIrIjoiLEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXIrRChzPXRbY10sYyk7bCs9ZShzLHUsbixhKX1lbHNlIGlmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQ/dT1udWxsOnU9ImZ1bmN0aW9uIj09dHlwZW9mKHU9ZyYmdFtnXXx8dFsiQEBpdGVyYXRvciJdKT91Om51bGwsImZ1bmN0aW9uIj09dHlwZW9mIHUpZm9yKHQ9dS5jYWxsKHQpLGM9MDshKHM9dC5uZXh0KCkpLmRvbmU7KWwrPWUocz1zLnZhbHVlLHU9citEKHMsYysrKSxuLGEpO2Vsc2UgaWYoIm9iamVjdCI9PT1zKXRocm93IG49IiIrdCxFcnJvcih2KDMxLCJbb2JqZWN0IE9iamVjdF0iPT09bj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjpuLCIiKSk7cmV0dXJuIGx9KGUsIiIsdCxyKX1mdW5jdGlvbiBEKGUsdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2UoL1s9Ol0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9KGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBNKGUsdCl7ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKX1mdW5jdGlvbiBOKGUsdCxyKXt2YXIgbj1lLnJlc3VsdCxhPWUua2V5UHJlZml4O2U9ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKSxBcnJheS5pc0FycmF5KGUpP2ooZSxuLHIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWUmJihUKGUpJiYoZT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjppLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGUsYSsoIWUua2V5fHx0JiZ0LmtleT09PWUua2V5PyIiOigiIitlLmtleSkucmVwbGFjZShSLCIkJi8iKSsiLyIpK3IpKSxuLnB1c2goZSkpfWZ1bmN0aW9uIGooZSx0LHIsbixhKXt2YXIgaT0iIjtudWxsIT1yJiYoaT0oIiIrcikucmVwbGFjZShSLCIkJi8iKSsiLyIpLEwoZSxOLHQ9SSh0LGksbixhKSksRih0KX1mdW5jdGlvbiBCKCl7dmFyIGU9eC5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHYoMzIxKSk7cmV0dXJuIGV9dmFyIFU9e0NoaWxkcmVuOnttYXA6ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIG49W107cmV0dXJuIGooZSxuLG51bGwsdCxyKSxufSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXJldHVybiBlO0woZSxNLHQ9SShudWxsLG51bGwsdCxyKSksRih0KX0sY291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSwoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBqKGUsdCxudWxsLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKSx0fSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFUKGUpKXRocm93IEVycm9yKHYoMTQzKSk7cmV0dXJuIGV9fSxjcmVhdGVSZWY6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sQ29tcG9uZW50OncsUHVyZUNvbXBvbmVudDpTLGNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmYsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOnUsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpoLHJlbmRlcjplfX0sbGF6eTpmdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6bSxfY3RvcjplLF9zdGF0dXM6LTEsX3Jlc3VsdDpudWxsfX0sbWVtbzpmdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpwLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQigpLnVzZUNhbGxiYWNrKGUsdCl9LHVzZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQigpLnVzZUNvbnRleHQoZSx0KX0sdXNlRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIoKS51c2VFZmZlY3QoZSx0KX0sdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxyKX0sdXNlRGVidWdWYWx1ZTpmdW5jdGlvbigpe30sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIoKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3JldHVybiBCKCkudXNlTWVtbyhlLHQpfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQigpLnVzZVJlZHVjZXIoZSx0LHIpfSx1c2VSZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIEIoKS51c2VSZWYoZSl9LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBCKCkudXNlU3RhdGUoZSl9LEZyYWdtZW50OnMsUHJvZmlsZXI6YyxTdHJpY3RNb2RlOmwsU3VzcGVuc2U6ZCxjcmVhdGVFbGVtZW50OkUsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXRocm93IEVycm9yKHYoMjY3LGUpKTt2YXIgYT1uKHt9LGUucHJvcHMpLG89ZS5rZXkscz1lLnJlZixsPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYocz10LnJlZixsPUEuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihvPSIiK3Qua2V5KSxlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGM9ZS50eXBlLmRlZmF1bHRQcm9wcztmb3IodSBpbiB0KUMuY2FsbCh0LHUpJiYhUC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGFbdV09dm9pZCAwPT09dFt1XSYmdm9pZCAwIT09Yz9jW3VdOnRbdV0pfXZhciB1PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09dSlhLmNoaWxkcmVuPXI7ZWxzZSBpZigxPHUpe2M9QXJyYXkodSk7Zm9yKHZhciBmPTA7Zjx1O2YrKyljW2ZdPWFyZ3VtZW50c1tmKzJdO2EuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUudHlwZSxrZXk6byxyZWY6cyxwcm9wczphLF9vd25lcjpsfX0sY3JlYXRlRmFjdG9yeTpmdW5jdGlvbihlKXt2YXIgdD1FLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0saXNWYWxpZEVsZW1lbnQ6VCx2ZXJzaW9uOiIxNi4xMi4wIixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp4LFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOntzdXNwZW5zZTpudWxsfSxSZWFjdEN1cnJlbnRPd25lcjpBLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bn19LHE9e2RlZmF1bHQ6VX0sej1xJiZVfHxxO2UuZXhwb3J0cz16LmRlZmF1bHR8fHp9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBuPXIoMCksYT1yKDI4KSxpPXIoMzkpO2Z1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3JdKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn1pZighbil0aHJvdyBFcnJvcihvKDIyNykpO3ZhciBzPW51bGwsbD17fTtmdW5jdGlvbiBjKCl7aWYocylmb3IodmFyIGUgaW4gbCl7dmFyIHQ9bFtlXSxyPXMuaW5kZXhPZihlKTtpZighKC0xPHIpKXRocm93IEVycm9yKG8oOTYsZSkpO2lmKCFmW3JdKXtpZighdC5leHRyYWN0RXZlbnRzKXRocm93IEVycm9yKG8oOTcsZSkpO2Zvcih2YXIgbiBpbiBmW3JdPXQscj10LmV2ZW50VHlwZXMpe3ZhciBhPXZvaWQgMCxpPXJbbl0sYz10LGQ9bjtpZihoLmhhc093blByb3BlcnR5KGQpKXRocm93IEVycm9yKG8oOTksZCkpO2hbZF09aTt2YXIgcD1pLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO2lmKHApe2ZvcihhIGluIHApcC5oYXNPd25Qcm9wZXJ0eShhKSYmdShwW2FdLGMsZCk7YT0hMH1lbHNlIGkucmVnaXN0cmF0aW9uTmFtZT8odShpLnJlZ2lzdHJhdGlvbk5hbWUsYyxkKSxhPSEwKTphPSExO2lmKCFhKXRocm93IEVycm9yKG8oOTgsbixlKSl9fX19ZnVuY3Rpb24gdShlLHQscil7aWYoZFtlXSl0aHJvdyBFcnJvcihvKDEwMCxlKSk7ZFtlXT10LHBbZV09dC5ldmVudFR5cGVzW3JdLmRlcGVuZGVuY2llc312YXIgZj1bXSxoPXt9LGQ9e30scD17fTtmdW5jdGlvbiBtKGUsdCxyLG4sYSxpLG8scyxsKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e3QuYXBwbHkocixjKX1jYXRjaChlKXt0aGlzLm9uRXJyb3IoZSl9fXZhciBnPSExLHY9bnVsbCx5PSExLGI9bnVsbCx3PXtvbkVycm9yOmZ1bmN0aW9uKGUpe2c9ITAsdj1lfX07ZnVuY3Rpb24gayhlLHQscixuLGEsaSxvLHMsbCl7Zz0hMSx2PW51bGwsbS5hcHBseSh3LGFyZ3VtZW50cyl9dmFyIFM9bnVsbCxfPW51bGwseD1udWxsO2Z1bmN0aW9uIEEoZSx0LHIpe3ZhciBuPWUudHlwZXx8InVua25vd24tZXZlbnQiO2UuY3VycmVudFRhcmdldD14KHIpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLHMsbCxjKXtpZihrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnKXtpZighZyl0aHJvdyBFcnJvcihvKDE5OCkpO3ZhciB1PXY7Zz0hMSx2PW51bGwseXx8KHk9ITAsYj11KX19KG4sdCx2b2lkIDAsZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gQyhlLHQpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IobygzMCkpO3JldHVybiBudWxsPT1lP3Q6QXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpPyhlLnB1c2guYXBwbHkoZSx0KSxlKTooZS5wdXNoKHQpLGUpOkFycmF5LmlzQXJyYXkodCk/W2VdLmNvbmNhdCh0KTpbZSx0XX1mdW5jdGlvbiBQKGUsdCxyKXtBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0LHIpOmUmJnQuY2FsbChyLGUpfXZhciBFPW51bGw7ZnVuY3Rpb24gVChlKXtpZihlKXt2YXIgdD1lLl9kaXNwYXRjaExpc3RlbmVycyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtuKyspQShlLHRbbl0scltuXSk7ZWxzZSB0JiZBKGUsdCxyKTtlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwsZS5pc1BlcnNpc3RlbnQoKXx8ZS5jb25zdHJ1Y3Rvci5yZWxlYXNlKGUpfX1mdW5jdGlvbiBSKGUpe2lmKG51bGwhPT1lJiYoRT1DKEUsZSkpLGU9RSxFPW51bGwsZSl7aWYoUChlLFQpLEUpdGhyb3cgRXJyb3Iobyg5NSkpO2lmKHkpdGhyb3cgZT1iLHk9ITEsYj1udWxsLGV9fXZhciBPPXtpbmplY3RFdmVudFBsdWdpbk9yZGVyOmZ1bmN0aW9uKGUpe2lmKHMpdGhyb3cgRXJyb3IobygxMDEpKTtzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLGMoKX0saW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ITE7Zm9yKHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj1lW3RdO2lmKCFsLmhhc093blByb3BlcnR5KHQpfHxsW3RdIT09bil7aWYobFt0XSl0aHJvdyBFcnJvcihvKDEwMix0KSk7bFt0XT1uLHI9ITB9fXImJmMoKX19O2Z1bmN0aW9uIEkoZSx0KXt2YXIgcj1lLnN0YXRlTm9kZTtpZighcilyZXR1cm4gbnVsbDt2YXIgbj1TKHIpO2lmKCFuKXJldHVybiBudWxsO3I9blt0XTtlOnN3aXRjaCh0KXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjoobj0hbi5kaXNhYmxlZCl8fChuPSEoImJ1dHRvbiI9PT0oZT1lLnR5cGUpfHwiaW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZSkpLGU9IW47YnJlYWsgZTtkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZihyJiYiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBFcnJvcihvKDIzMSx0LHR5cGVvZiByKSk7cmV0dXJuIHJ9dmFyIEY9bi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtGLmhhc093blByb3BlcnR5KCJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIil8fChGLlJlYWN0Q3VycmVudERpc3BhdGNoZXI9e2N1cnJlbnQ6bnVsbH0pLEYuaGFzT3duUHJvcGVydHkoIlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnIil8fChGLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnPXtzdXNwZW5zZTpudWxsfSk7dmFyIEw9L14oLiopW1xcXC9dLyxEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsTT1EP1N5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKTo2MDEwMyxOPUQ/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsaj1EP1N5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik6NjAxMDcsQj1EP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsVT1EP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQscT1EP1N5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIik6NjAxMDksej1EP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxXPUQ/U3ltYm9sLmZvcigicmVhY3QuY29uY3VycmVudF9tb2RlIik6NjAxMTEsSD1EP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsRz1EP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMsVj1EP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlX2xpc3QiKTo2MDEyMCxYPUQ/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LFk9RD9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTY7RCYmU3ltYm9sLmZvcigicmVhY3QuZnVuZGFtZW50YWwiKSxEJiZTeW1ib2wuZm9yKCJyZWFjdC5yZXNwb25kZXIiKSxEJiZTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO3ZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBKKGUpe3JldHVybiBudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKGU9SyYmZVtLXXx8ZVsiQEBpdGVyYXRvciJdKT9lOm51bGx9ZnVuY3Rpb24gUShlKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIGo6cmV0dXJuIkZyYWdtZW50IjtjYXNlIE46cmV0dXJuIlBvcnRhbCI7Y2FzZSBVOnJldHVybiJQcm9maWxlciI7Y2FzZSBCOnJldHVybiJTdHJpY3RNb2RlIjtjYXNlIEc6cmV0dXJuIlN1c3BlbnNlIjtjYXNlIFY6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHo6cmV0dXJuIkNvbnRleHQuQ29uc3VtZXIiO2Nhc2UgcTpyZXR1cm4iQ29udGV4dC5Qcm92aWRlciI7Y2FzZSBIOnZhciB0PWUucmVuZGVyO3JldHVybiB0PXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZS5kaXNwbGF5TmFtZXx8KCIiIT09dD8iRm9yd2FyZFJlZigiK3QrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSBYOnJldHVybiBRKGUudHlwZSk7Y2FzZSBZOmlmKGU9MT09PWUuX3N0YXR1cz9lLl9yZXN1bHQ6bnVsbClyZXR1cm4gUShlKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBaKGUpe3ZhciB0PSIiO2Rve2U6c3dpdGNoKGUudGFnKXtjYXNlIDM6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6Y2FzZSAxMDpjYXNlIDk6dmFyIHI9IiI7YnJlYWsgZTtkZWZhdWx0OnZhciBuPWUuX2RlYnVnT3duZXIsYT1lLl9kZWJ1Z1NvdXJjZSxpPVEoZS50eXBlKTtyPW51bGwsbiYmKHI9UShuLnR5cGUpKSxuPWksaT0iIixhP2k9IiAoYXQgIithLmZpbGVOYW1lLnJlcGxhY2UoTCwiIikrIjoiK2EubGluZU51bWJlcisiKSI6ciYmKGk9IiAoY3JlYXRlZCBieSAiK3IrIikiKSxyPSJcbiAgICBpbiAiKyhufHwiVW5rbm93biIpK2l9dCs9cixlPWUucmV0dXJufXdoaWxlKGUpO3JldHVybiB0fXZhciAkPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fHZvaWQgMD09PXdpbmRvdy5kb2N1bWVudHx8dm9pZCAwPT09d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGVlPW51bGwsdGU9bnVsbCxyZT1udWxsO2Z1bmN0aW9uIG5lKGUpe2lmKGU9XyhlKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlKXRocm93IEVycm9yKG8oMjgwKSk7dmFyIHQ9UyhlLnN0YXRlTm9kZSk7ZWUoZS5zdGF0ZU5vZGUsZS50eXBlLHQpfX1mdW5jdGlvbiBhZShlKXt0ZT9yZT9yZS5wdXNoKGUpOnJlPVtlXTp0ZT1lfWZ1bmN0aW9uIGllKCl7aWYodGUpe3ZhciBlPXRlLHQ9cmU7aWYocmU9dGU9bnVsbCxuZShlKSx0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspbmUodFtlXSl9fWZ1bmN0aW9uIG9lKGUsdCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gc2UoZSx0LHIsbil7cmV0dXJuIGUodCxyLG4pfWZ1bmN0aW9uIGxlKCl7fXZhciBjZT1vZSx1ZT0hMSxmZT0hMTtmdW5jdGlvbiBoZSgpe251bGw9PT10ZSYmbnVsbD09PXJlfHwobGUoKSxpZSgpKX1uZXcgTWFwO3ZhciBkZT0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLHBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbWU9e30sZ2U9e307ZnVuY3Rpb24gdmUoZSx0LHIsbixhLGkpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT10fHwzPT09dHx8ND09PXQsdGhpcy5hdHRyaWJ1dGVOYW1lPW4sdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9YSx0aGlzLm11c3RVc2VQcm9wZXJ0eT1yLHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPXQsdGhpcy5zYW5pdGl6ZVVSTD1pfXZhciB5ZT17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDAsITEsZSxudWxsLCExKX0pKSxbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07eWVbdF09bmV3IHZlKHQsMSwhMSxlWzFdLG51bGwsITEpfSkpLFsiY29udGVudEVkaXRhYmxlIiwiZHJhZ2dhYmxlIiwic3BlbGxDaGVjayIsInZhbHVlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSksWyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMiwhMSxlLG51bGwsITEpfSkpLCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGUiLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSksWyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMywhMCxlLG51bGwsITEpfSkpLFsiY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsNCwhMSxlLG51bGwsITEpfSkpLFsiY29scyIsInJvd3MiLCJzaXplIiwic3BhbiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDYsITEsZSxudWxsLCExKX0pKSxbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEpfSkpO3ZhciBiZT0vW1wtOl0oW2Etel0pL2c7ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX1mdW5jdGlvbiBrZShlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uib2JqZWN0IjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIFNlKGUsdCxyLG4pe3ZhciBhPXllLmhhc093blByb3BlcnR5KHQpP3llW3RdOm51bGw7KG51bGwhPT1hPzA9PT1hLnR5cGU6IW4mJigyPHQubGVuZ3RoJiYoIm8iPT09dFswXXx8Ik8iPT09dFswXSkmJigibiI9PT10WzFdfHwiTiI9PT10WzFdKSkpfHwoZnVuY3Rpb24oZSx0LHIsbil7aWYobnVsbD09dHx8ZnVuY3Rpb24oZSx0LHIsbil7aWYobnVsbCE9PXImJjA9PT1yLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hbiYmKG51bGwhPT1yPyFyLmFjY2VwdHNCb29sZWFuczoiZGF0YS0iIT09KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSkpJiYiYXJpYS0iIT09ZSk7ZGVmYXVsdDpyZXR1cm4hMX19KGUsdCxyLG4pKXJldHVybiEwO2lmKG4pcmV0dXJuITE7aWYobnVsbCE9PXIpc3dpdGNoKHIudHlwZSl7Y2FzZSAzOnJldHVybiF0O2Nhc2UgNDpyZXR1cm4hMT09PXQ7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9KHQscixhLG4pJiYocj1udWxsKSxufHxudWxsPT09YT9mdW5jdGlvbihlKXtyZXR1cm4hIXBlLmNhbGwoZ2UsZSl8fCFwZS5jYWxsKG1lLGUpJiYoZGUudGVzdChlKT9nZVtlXT0hMDoobWVbZV09ITAsITEpKX0odCkmJihudWxsPT09cj9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK3IpKTphLm11c3RVc2VQcm9wZXJ0eT9lW2EucHJvcGVydHlOYW1lXT1udWxsPT09cj8zIT09YS50eXBlJiYiIjpyOih0PWEuYXR0cmlidXRlTmFtZSxuPWEuYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1yP2UucmVtb3ZlQXR0cmlidXRlKHQpOihyPTM9PT0oYT1hLnR5cGUpfHw0PT09YSYmITA9PT1yPyIiOiIiK3Isbj9lLnNldEF0dHJpYnV0ZU5TKG4sdCxyKTplLnNldEF0dHJpYnV0ZSh0LHIpKSkpfWZ1bmN0aW9uIF9lKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmImlucHV0Ij09PWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT10fHwicmFkaW8iPT09dCl9ZnVuY3Rpb24geGUoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWZ1bmN0aW9uKGUpe3ZhciB0PV9lKGUpPyJjaGVja2VkIjoidmFsdWUiLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxuPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnZvaWQgMCE9PXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLmdldCYmImZ1bmN0aW9uIj09dHlwZW9mIHIuc2V0KXt2YXIgYT1yLmdldCxpPXIuc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe249IiIrZSxpLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOnIuZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBufSxzZXRWYWx1ZTpmdW5jdGlvbihlKXtuPSIiK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fShlKSl9ZnVuY3Rpb24gQWUoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciByPXQuZ2V0VmFsdWUoKSxuPSIiO3JldHVybiBlJiYobj1fZShlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksKGU9bikhPT1yJiYodC5zZXRWYWx1ZShlKSwhMCl9ZnVuY3Rpb24gQ2UoZSx0KXt2YXIgcj10LmNoZWNrZWQ7cmV0dXJuIGEoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9cj9yOmUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIFBlKGUsdCl7dmFyIHI9bnVsbD09dC5kZWZhdWx0VmFsdWU/IiI6dC5kZWZhdWx0VmFsdWUsbj1udWxsIT10LmNoZWNrZWQ/dC5jaGVja2VkOnQuZGVmYXVsdENoZWNrZWQ7cj1rZShudWxsIT10LnZhbHVlP3QudmFsdWU6ciksZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpuLGluaXRpYWxWYWx1ZTpyLGNvbnRyb2xsZWQ6ImNoZWNrYm94Ij09PXQudHlwZXx8InJhZGlvIj09PXQudHlwZT9udWxsIT10LmNoZWNrZWQ6bnVsbCE9dC52YWx1ZX19ZnVuY3Rpb24gRWUoZSx0KXtudWxsIT0odD10LmNoZWNrZWQpJiZTZShlLCJjaGVja2VkIix0LCExKX1mdW5jdGlvbiBUZShlLHQpe0VlKGUsdCk7dmFyIHI9a2UodC52YWx1ZSksbj10LnR5cGU7aWYobnVsbCE9cikibnVtYmVyIj09PW4/KDA9PT1yJiYiIj09PWUudmFsdWV8fGUudmFsdWUhPXIpJiYoZS52YWx1ZT0iIityKTplLnZhbHVlIT09IiIrciYmKGUudmFsdWU9IiIrcik7ZWxzZSBpZigic3VibWl0Ij09PW58fCJyZXNldCI9PT1uKXJldHVybiB2b2lkIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3QuaGFzT3duUHJvcGVydHkoInZhbHVlIik/T2UoZSx0LnR5cGUscik6dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikmJk9lKGUsdC50eXBlLGtlKHQuZGVmYXVsdFZhbHVlKSksbnVsbD09dC5jaGVja2VkJiZudWxsIT10LmRlZmF1bHRDaGVja2VkJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIXQuZGVmYXVsdENoZWNrZWQpfWZ1bmN0aW9uIFJlKGUsdCxyKXtpZih0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfHx0Lmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSl7dmFyIG49dC50eXBlO2lmKCEoInN1Ym1pdCIhPT1uJiYicmVzZXQiIT09bnx8dm9pZCAwIT09dC52YWx1ZSYmbnVsbCE9PXQudmFsdWUpKXJldHVybjt0PSIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUscnx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9IiIhPT0ocj1lLm5hbWUpJiYoZS5uYW1lPSIiKSxlLmRlZmF1bHRDaGVja2VkPSFlLmRlZmF1bHRDaGVja2VkLGUuZGVmYXVsdENoZWNrZWQ9ISFlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsIiIhPT1yJiYoZS5uYW1lPXIpfWZ1bmN0aW9uIE9lKGUsdCxyKXsibnVtYmVyIj09PXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZXx8KG51bGw9PXI/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK3ImJihlLmRlZmF1bHRWYWx1ZT0iIityKSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gZT1hKHtjaGlsZHJlbjp2b2lkIDB9LHQpLCh0PWZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiBuLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7bnVsbCE9ZSYmKHQrPWUpfSkpLHR9KHQuY2hpbGRyZW4pKSYmKGUuY2hpbGRyZW49dCksZX1mdW5jdGlvbiBGZShlLHQscixuKXtpZihlPWUub3B0aW9ucyx0KXt0PXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRbIiQiK3JbYV1dPSEwO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspYT10Lmhhc093blByb3BlcnR5KCIkIitlW3JdLnZhbHVlKSxlW3JdLnNlbGVjdGVkIT09YSYmKGVbcl0uc2VsZWN0ZWQ9YSksYSYmbiYmKGVbcl0uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2ZvcihyPSIiK2tlKHIpLHQ9bnVsbCxhPTA7YTxlLmxlbmd0aDthKyspe2lmKGVbYV0udmFsdWU9PT1yKXJldHVybiBlW2FdLnNlbGVjdGVkPSEwLHZvaWQobiYmKGVbYV0uZGVmYXVsdFNlbGVjdGVkPSEwKSk7bnVsbCE9PXR8fGVbYV0uZGlzYWJsZWR8fCh0PWVbYV0pfW51bGwhPT10JiYodC5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIExlKGUsdCl7aWYobnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCl0aHJvdyBFcnJvcihvKDkxKSk7cmV0dXJuIGEoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIERlKGUsdCl7dmFyIHI9dC52YWx1ZTtpZihudWxsPT1yKXtpZihyPXQuZGVmYXVsdFZhbHVlLG51bGwhPSh0PXQuY2hpbGRyZW4pKXtpZihudWxsIT1yKXRocm93IEVycm9yKG8oOTIpKTtpZihBcnJheS5pc0FycmF5KHQpKXtpZighKDE+PXQubGVuZ3RoKSl0aHJvdyBFcnJvcihvKDkzKSk7dD10WzBdfXI9dH1udWxsPT1yJiYocj0iIil9ZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6a2Uocil9fWZ1bmN0aW9uIE1lKGUsdCl7dmFyIHI9a2UodC52YWx1ZSksbj1rZSh0LmRlZmF1bHRWYWx1ZSk7bnVsbCE9ciYmKChyPSIiK3IpIT09ZS52YWx1ZSYmKGUudmFsdWU9ciksbnVsbD09dC5kZWZhdWx0VmFsdWUmJmUuZGVmYXVsdFZhbHVlIT09ciYmKGUuZGVmYXVsdFZhbHVlPXIpKSxudWxsIT1uJiYoZS5kZWZhdWx0VmFsdWU9IiIrbil9ZnVuY3Rpb24gTmUoZSl7dmFyIHQ9ZS50ZXh0Q29udGVudDt0PT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmIiIhPT10JiZudWxsIT09dCYmKGUudmFsdWU9dCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShiZSx3ZSk7eWVbdF09bmV3IHZlKHQsMSwhMSxlLG51bGwsITEpfSkpLCJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGJlLHdlKTt5ZVt0XT1uZXcgdmUodCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExKX0pKSxbInhtbDpiYXNlIiwieG1sOmxhbmciLCJ4bWw6c3BhY2UiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoYmUsd2UpO3llW3RdPW5ldyB2ZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwhMSl9KSksWyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSkseWUueGxpbmtIcmVmPW5ldyB2ZSgieGxpbmtIcmVmIiwxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITApLFsic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt5ZVtlXT1uZXcgdmUoZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCEwKX0pKTt2YXIgamU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEJlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZnVuY3Rpb24gVWUoZSl7c3dpdGNoKGUpe2Nhc2Uic3ZnIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Nhc2UibWF0aCI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiO2RlZmF1bHQ6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwifX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBudWxsPT1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lP1VlKHQpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1lJiYiZm9yZWlnbk9iamVjdCI9PT10PyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjplfXZhciB6ZSxXZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbih0LHIsbixhKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LHIpfSkpfTplfSgoZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PUJlfHwiaW5uZXJIVE1MImluIGUpZS5pbm5lckhUTUw9dDtlbHNle2ZvcigoemU9emV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9emUuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pKTtmdW5jdGlvbiBIZShlLHQpe2lmKHQpe3ZhciByPWUuZmlyc3RDaGlsZDtpZihyJiZyPT09ZS5sYXN0Q2hpbGQmJjM9PT1yLm5vZGVUeXBlKXJldHVybiB2b2lkKHIubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH1mdW5jdGlvbiBHZShlLHQpe3ZhciByPXt9O3JldHVybiByW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLHJbIldlYmtpdCIrZV09IndlYmtpdCIrdCxyWyJNb3oiK2VdPSJtb3oiK3Qscn12YXIgVmU9e2FuaW1hdGlvbmVuZDpHZSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uRW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOkdlKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDpHZSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOkdlKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxYZT17fSxZZT17fTtmdW5jdGlvbiBLZShlKXtpZihYZVtlXSlyZXR1cm4gWGVbZV07aWYoIVZlW2VdKXJldHVybiBlO3ZhciB0LHI9VmVbZV07Zm9yKHQgaW4gcilpZihyLmhhc093blByb3BlcnR5KHQpJiZ0IGluIFllKXJldHVybiBYZVtlXT1yW3RdO3JldHVybiBlfSQmJihZZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIFZlLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIFZlLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIFZlLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBWZS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO3ZhciBKZT1LZSgiYW5pbWF0aW9uZW5kIiksUWU9S2UoImFuaW1hdGlvbml0ZXJhdGlvbiIpLFplPUtlKCJhbmltYXRpb25zdGFydCIpLCRlPUtlKCJ0cmFuc2l0aW9uZW5kIiksZXQ9ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIik7ZnVuY3Rpb24gdHQoZSl7dmFyIHQ9ZSxyPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkb3swIT0oMTAyNiYodD1lKS5lZmZlY3RUYWcpJiYocj10LnJldHVybiksZT10LnJldHVybn13aGlsZShlKX1yZXR1cm4gMz09PXQudGFnP3I6bnVsbH1mdW5jdGlvbiBydChlKXtpZigxMz09PWUudGFnKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PXQmJihudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYodD1lLm1lbW9pemVkU3RhdGUpKSxudWxsIT09dClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIG50KGUpe2lmKHR0KGUpIT09ZSl0aHJvdyBFcnJvcihvKDE4OCkpfWZ1bmN0aW9uIGF0KGUpe2lmKCEoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZighdCl7aWYobnVsbD09PSh0PXR0KGUpKSl0aHJvdyBFcnJvcihvKDE4OCkpO3JldHVybiB0IT09ZT9udWxsOmV9Zm9yKHZhciByPWUsbj10Ozspe3ZhciBhPXIucmV0dXJuO2lmKG51bGw9PT1hKWJyZWFrO3ZhciBpPWEuYWx0ZXJuYXRlO2lmKG51bGw9PT1pKXtpZihudWxsIT09KG49YS5yZXR1cm4pKXtyPW47Y29udGludWV9YnJlYWt9aWYoYS5jaGlsZD09PWkuY2hpbGQpe2ZvcihpPWEuY2hpbGQ7aTspe2lmKGk9PT1yKXJldHVybiBudChhKSxlO2lmKGk9PT1uKXJldHVybiBudChhKSx0O2k9aS5zaWJsaW5nfXRocm93IEVycm9yKG8oMTg4KSl9aWYoci5yZXR1cm4hPT1uLnJldHVybilyPWEsbj1pO2Vsc2V7Zm9yKHZhciBzPSExLGw9YS5jaGlsZDtsOyl7aWYobD09PXIpe3M9ITAscj1hLG49aTticmVha31pZihsPT09bil7cz0hMCxuPWEscj1pO2JyZWFrfWw9bC5zaWJsaW5nfWlmKCFzKXtmb3IobD1pLmNoaWxkO2w7KXtpZihsPT09cil7cz0hMCxyPWksbj1hO2JyZWFrfWlmKGw9PT1uKXtzPSEwLG49aSxyPWE7YnJlYWt9bD1sLnNpYmxpbmd9aWYoIXMpdGhyb3cgRXJyb3IobygxODkpKX19aWYoci5hbHRlcm5hdGUhPT1uKXRocm93IEVycm9yKG8oMTkwKSl9aWYoMyE9PXIudGFnKXRocm93IEVycm9yKG8oMTg4KSk7cmV0dXJuIHIuc3RhdGVOb2RlLmN1cnJlbnQ9PT1yP2U6dH0oZSkpKXJldHVybiBudWxsO2Zvcih2YXIgdD1lOzspe2lmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXJldHVybiB0O2lmKHQuY2hpbGQpdC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7ZWxzZXtpZih0PT09ZSlicmVhaztmb3IoOyF0LnNpYmxpbmc7KXtpZighdC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiBudWxsfXZhciBpdCxvdCxzdCxsdD0hMSxjdD1bXSx1dD1udWxsLGZ0PW51bGwsaHQ9bnVsbCxkdD1uZXcgTWFwLHB0PW5ldyBNYXAsbXQ9W10sZ3Q9Im1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNsb3NlIGNhbmNlbCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0Ii5zcGxpdCgiICIpLHZ0PSJmb2N1cyBibHVyIGRyYWdlbnRlciBkcmFnbGVhdmUgbW91c2VvdmVyIG1vdXNlb3V0IHBvaW50ZXJvdmVyIHBvaW50ZXJvdXQgZ290cG9pbnRlcmNhcHR1cmUgbG9zdHBvaW50ZXJjYXB0dXJlIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHl0KGUsdCxyLG4pe3JldHVybntibG9ja2VkT246ZSx0b3BMZXZlbFR5cGU6dCxldmVudFN5c3RlbUZsYWdzOjMyfHIsbmF0aXZlRXZlbnQ6bn19ZnVuY3Rpb24gYnQoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjp1dD1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6ZnQ9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6aHQ9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOmR0LmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOnB0LmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHd0KGUsdCxyLG4sYSl7cmV0dXJuIG51bGw9PT1lfHxlLm5hdGl2ZUV2ZW50IT09YT8oZT15dCh0LHIsbixhKSxudWxsIT09dCYmKG51bGwhPT0odD1jbih0KSkmJm90KHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1uLGUpfWZ1bmN0aW9uIGt0KGUpe3ZhciB0PWxuKGUudGFyZ2V0KTtpZihudWxsIT09dCl7dmFyIHI9dHQodCk7aWYobnVsbCE9PXIpaWYoMTM9PT0odD1yLnRhZykpe2lmKG51bGwhPT0odD1ydChyKSkpcmV0dXJuIGUuYmxvY2tlZE9uPXQsdm9pZCBpLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShlLnByaW9yaXR5LChmdW5jdGlvbigpe3N0KHIpfSkpfWVsc2UgaWYoMz09PXQmJnIuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIHZvaWQoZS5ibG9ja2VkT249Mz09PXIudGFnP3Iuc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbCl9ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBTdChlKXtpZihudWxsIT09ZS5ibG9ja2VkT24pcmV0dXJuITE7dmFyIHQ9UnIoZS50b3BMZXZlbFR5cGUsZS5ldmVudFN5c3RlbUZsYWdzLGUubmF0aXZlRXZlbnQpO2lmKG51bGwhPT10KXt2YXIgcj1jbih0KTtyZXR1cm4gbnVsbCE9PXImJm90KHIpLGUuYmxvY2tlZE9uPXQsITF9cmV0dXJuITB9ZnVuY3Rpb24gX3QoZSx0LHIpe1N0KGUpJiZyLmRlbGV0ZSh0KX1mdW5jdGlvbiB4dCgpe2ZvcihsdD0hMTswPGN0Lmxlbmd0aDspe3ZhciBlPWN0WzBdO2lmKG51bGwhPT1lLmJsb2NrZWRPbil7bnVsbCE9PShlPWNuKGUuYmxvY2tlZE9uKSkmJml0KGUpO2JyZWFrfXZhciB0PVJyKGUudG9wTGV2ZWxUeXBlLGUuZXZlbnRTeXN0ZW1GbGFncyxlLm5hdGl2ZUV2ZW50KTtudWxsIT09dD9lLmJsb2NrZWRPbj10OmN0LnNoaWZ0KCl9bnVsbCE9PXV0JiZTdCh1dCkmJih1dD1udWxsKSxudWxsIT09ZnQmJlN0KGZ0KSYmKGZ0PW51bGwpLG51bGwhPT1odCYmU3QoaHQpJiYoaHQ9bnVsbCksZHQuZm9yRWFjaChfdCkscHQuZm9yRWFjaChfdCl9ZnVuY3Rpb24gQXQoZSx0KXtlLmJsb2NrZWRPbj09PXQmJihlLmJsb2NrZWRPbj1udWxsLGx0fHwobHQ9ITAsaS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGkudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkseHQpKSl9ZnVuY3Rpb24gQ3QoZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gQXQodCxlKX1pZigwPGN0Lmxlbmd0aCl7QXQoY3RbMF0sZSk7Zm9yKHZhciByPTE7cjxjdC5sZW5ndGg7cisrKXt2YXIgbj1jdFtyXTtuLmJsb2NrZWRPbj09PWUmJihuLmJsb2NrZWRPbj1udWxsKX19Zm9yKG51bGwhPT11dCYmQXQodXQsZSksbnVsbCE9PWZ0JiZBdChmdCxlKSxudWxsIT09aHQmJkF0KGh0LGUpLGR0LmZvckVhY2godCkscHQuZm9yRWFjaCh0KSxyPTA7cjxtdC5sZW5ndGg7cisrKShuPW10W3JdKS5ibG9ja2VkT249PT1lJiYobi5ibG9ja2VkT249bnVsbCk7Zm9yKDswPG10Lmxlbmd0aCYmbnVsbD09PShyPW10WzBdKS5ibG9ja2VkT247KWt0KHIpLG51bGw9PT1yLmJsb2NrZWRPbiYmbXQuc2hpZnQoKX1mdW5jdGlvbiBQdChlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX1mdW5jdGlvbiBFdChlKXtkb3tlPWUucmV0dXJufXdoaWxlKGUmJjUhPT1lLnRhZyk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gVHQoZSx0LHIpeyh0PUkoZSxyLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3RdKSkmJihyLl9kaXNwYXRjaExpc3RlbmVycz1DKHIuX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLHIuX2Rpc3BhdGNoSW5zdGFuY2VzPUMoci5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIFJ0KGUpe2lmKGUmJmUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe2Zvcih2YXIgdD1lLl90YXJnZXRJbnN0LHI9W107dDspci5wdXNoKHQpLHQ9RXQodCk7Zm9yKHQ9ci5sZW5ndGg7MDx0LS07KVR0KHJbdF0sImNhcHR1cmVkIixlKTtmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKVR0KHJbdF0sImJ1YmJsZWQiLGUpfX1mdW5jdGlvbiBPdChlLHQscil7ZSYmciYmci5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiYodD1JKGUsci5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSkmJihyLl9kaXNwYXRjaExpc3RlbmVycz1DKHIuX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLHIuX2Rpc3BhdGNoSW5zdGFuY2VzPUMoci5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIEl0KGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSYmT3QoZS5fdGFyZ2V0SW5zdCxudWxsLGUpfWZ1bmN0aW9uIEZ0KGUpe1AoZSxSdCl9ZnVuY3Rpb24gTHQoKXtyZXR1cm4hMH1mdW5jdGlvbiBEdCgpe3JldHVybiExfWZ1bmN0aW9uIE10KGUsdCxyLG4pe2Zvcih2YXIgYSBpbiB0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZlRXZlbnQ9cixlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlKWUuaGFzT3duUHJvcGVydHkoYSkmJigodD1lW2FdKT90aGlzW2FdPXQocik6InRhcmdldCI9PT1hP3RoaXMudGFyZ2V0PW46dGhpc1thXT1yW2FdKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPXIuZGVmYXVsdFByZXZlbnRlZD9yLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1yLnJldHVyblZhbHVlKT9MdDpEdCx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUR0LHRoaXN9ZnVuY3Rpb24gTnQoZSx0LHIsbil7aWYodGhpcy5ldmVudFBvb2wubGVuZ3RoKXt2YXIgYT10aGlzLmV2ZW50UG9vbC5wb3AoKTtyZXR1cm4gdGhpcy5jYWxsKGEsZSx0LHIsbiksYX1yZXR1cm4gbmV3IHRoaXMoZSx0LHIsbil9ZnVuY3Rpb24ganQoZSl7aWYoIShlIGluc3RhbmNlb2YgdGhpcykpdGhyb3cgRXJyb3IobygyNzkpKTtlLmRlc3RydWN0b3IoKSwxMD50aGlzLmV2ZW50UG9vbC5sZW5ndGgmJnRoaXMuZXZlbnRQb29sLnB1c2goZSl9ZnVuY3Rpb24gQnQoZSl7ZS5ldmVudFBvb2w9W10sZS5nZXRQb29sZWQ9TnQsZS5yZWxlYXNlPWp0fWEoTXQucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9THQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9THQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNpc3RlbnQ9THR9LGlzUGVyc2lzdGVudDpEdCxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtmb3IoZSBpbiB0KXRoaXNbZV09bnVsbDt0aGlzLm5hdGl2ZUV2ZW50PXRoaXMuX3RhcmdldEluc3Q9dGhpcy5kaXNwYXRjaENvbmZpZz1udWxsLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9RHQsdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXM9dGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbH19KSxNdC5JbnRlcmZhY2U9e3R5cGU6bnVsbCx0YXJnZXQ6bnVsbCxjdXJyZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGV2ZW50UGhhc2U6bnVsbCxidWJibGVzOm51bGwsY2FuY2VsYWJsZTpudWxsLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6bnVsbCxpc1RydXN0ZWQ6bnVsbH0sTXQuZXh0ZW5kPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgbj10aGlzO3QucHJvdG90eXBlPW4ucHJvdG90eXBlO3ZhciBpPW5ldyB0O3JldHVybiBhKGksci5wcm90b3R5cGUpLHIucHJvdG90eXBlPWksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLkludGVyZmFjZT1hKHt9LG4uSW50ZXJmYWNlLGUpLHIuZXh0ZW5kPW4uZXh0ZW5kLEJ0KHIpLHJ9LEJ0KE10KTt2YXIgVXQ9TXQuZXh0ZW5kKHthbmltYXRpb25OYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxxdD1NdC5leHRlbmQoe2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaXBib2FyZERhdGEiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSksenQ9TXQuZXh0ZW5kKHt2aWV3Om51bGwsZGV0YWlsOm51bGx9KSxXdD16dC5leHRlbmQoe3JlbGF0ZWRUYXJnZXQ6bnVsbH0pO2Z1bmN0aW9uIEh0KGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8wPT09KGU9ZS5jaGFyQ29kZSkmJjEzPT09dCYmKGU9MTMpOmU9dCwxMD09PWUmJihlPTEzKSwzMjw9ZXx8MTM9PT1lP2U6MH12YXIgR3Q9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LFZ0PXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sWHQ9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTtmdW5jdGlvbiBZdChlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9WHRbZV0pJiYhIXRbZV19ZnVuY3Rpb24gS3QoKXtyZXR1cm4gWXR9Zm9yKHZhciBKdD16dC5leHRlbmQoe2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9R3RbZS5rZXldfHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9cmV0dXJuImtleXByZXNzIj09PWUudHlwZT8xMz09PShlPUh0KGUpKT8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP1Z0W2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmllclN0YXRlOkt0LGNoYXJDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SHQoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SHQoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfX0pLFF0PTAsWnQ9MCwkdD0hMSxlcj0hMSx0cj16dC5leHRlbmQoe3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxwYWdlWDpudWxsLHBhZ2VZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6S3QsYnV0dG9uOm51bGwsYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9LG1vdmVtZW50WDpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRYImluIGUpcmV0dXJuIGUubW92ZW1lbnRYO3ZhciB0PVF0O3JldHVybiBRdD1lLnNjcmVlblgsJHQ/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5YLXQ6MDooJHQ9ITAsMCl9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRZImluIGUpcmV0dXJuIGUubW92ZW1lbnRZO3ZhciB0PVp0O3JldHVybiBadD1lLnNjcmVlblksZXI/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5ZLXQ6MDooZXI9ITAsMCl9fSkscnI9dHIuZXh0ZW5kKHtwb2ludGVySWQ6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHByZXNzdXJlOm51bGwsdGFuZ2VudGlhbFByZXNzdXJlOm51bGwsdGlsdFg6bnVsbCx0aWx0WTpudWxsLHR3aXN0Om51bGwscG9pbnRlclR5cGU6bnVsbCxpc1ByaW1hcnk6bnVsbH0pLG5yPXRyLmV4dGVuZCh7ZGF0YVRyYW5zZmVyOm51bGx9KSxhcj16dC5leHRlbmQoe3RvdWNoZXM6bnVsbCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpLdH0pLGlyPU10LmV4dGVuZCh7cHJvcGVydHlOYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxvcj10ci5leHRlbmQoe2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9KSxzcj1bWyJibHVyIiwiYmx1ciIsMF0sWyJjYW5jZWwiLCJjYW5jZWwiLDBdLFsiY2xpY2siLCJjbGljayIsMF0sWyJjbG9zZSIsImNsb3NlIiwwXSxbImNvbnRleHRtZW51IiwiY29udGV4dE1lbnUiLDBdLFsiY29weSIsImNvcHkiLDBdLFsiY3V0IiwiY3V0IiwwXSxbImF1eGNsaWNrIiwiYXV4Q2xpY2siLDBdLFsiZGJsY2xpY2siLCJkb3VibGVDbGljayIsMF0sWyJkcmFnZW5kIiwiZHJhZ0VuZCIsMF0sWyJkcmFnc3RhcnQiLCJkcmFnU3RhcnQiLDBdLFsiZHJvcCIsImRyb3AiLDBdLFsiZm9jdXMiLCJmb2N1cyIsMF0sWyJpbnB1dCIsImlucHV0IiwwXSxbImludmFsaWQiLCJpbnZhbGlkIiwwXSxbImtleWRvd24iLCJrZXlEb3duIiwwXSxbImtleXByZXNzIiwia2V5UHJlc3MiLDBdLFsia2V5dXAiLCJrZXlVcCIsMF0sWyJtb3VzZWRvd24iLCJtb3VzZURvd24iLDBdLFsibW91c2V1cCIsIm1vdXNlVXAiLDBdLFsicGFzdGUiLCJwYXN0ZSIsMF0sWyJwYXVzZSIsInBhdXNlIiwwXSxbInBsYXkiLCJwbGF5IiwwXSxbInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyQ2FuY2VsIiwwXSxbInBvaW50ZXJkb3duIiwicG9pbnRlckRvd24iLDBdLFsicG9pbnRlcnVwIiwicG9pbnRlclVwIiwwXSxbInJhdGVjaGFuZ2UiLCJyYXRlQ2hhbmdlIiwwXSxbInJlc2V0IiwicmVzZXQiLDBdLFsic2Vla2VkIiwic2Vla2VkIiwwXSxbInN1Ym1pdCIsInN1Ym1pdCIsMF0sWyJ0b3VjaGNhbmNlbCIsInRvdWNoQ2FuY2VsIiwwXSxbInRvdWNoZW5kIiwidG91Y2hFbmQiLDBdLFsidG91Y2hzdGFydCIsInRvdWNoU3RhcnQiLDBdLFsidm9sdW1lY2hhbmdlIiwidm9sdW1lQ2hhbmdlIiwwXSxbImRyYWciLCJkcmFnIiwxXSxbImRyYWdlbnRlciIsImRyYWdFbnRlciIsMV0sWyJkcmFnZXhpdCIsImRyYWdFeGl0IiwxXSxbImRyYWdsZWF2ZSIsImRyYWdMZWF2ZSIsMV0sWyJkcmFnb3ZlciIsImRyYWdPdmVyIiwxXSxbIm1vdXNlbW92ZSIsIm1vdXNlTW92ZSIsMV0sWyJtb3VzZW91dCIsIm1vdXNlT3V0IiwxXSxbIm1vdXNlb3ZlciIsIm1vdXNlT3ZlciIsMV0sWyJwb2ludGVybW92ZSIsInBvaW50ZXJNb3ZlIiwxXSxbInBvaW50ZXJvdXQiLCJwb2ludGVyT3V0IiwxXSxbInBvaW50ZXJvdmVyIiwicG9pbnRlck92ZXIiLDFdLFsic2Nyb2xsIiwic2Nyb2xsIiwxXSxbInRvZ2dsZSIsInRvZ2dsZSIsMV0sWyJ0b3VjaG1vdmUiLCJ0b3VjaE1vdmUiLDFdLFsid2hlZWwiLCJ3aGVlbCIsMV0sWyJhYm9ydCIsImFib3J0IiwyXSxbSmUsImFuaW1hdGlvbkVuZCIsMl0sW1FlLCJhbmltYXRpb25JdGVyYXRpb24iLDJdLFtaZSwiYW5pbWF0aW9uU3RhcnQiLDJdLFsiY2FucGxheSIsImNhblBsYXkiLDJdLFsiY2FucGxheXRocm91Z2giLCJjYW5QbGF5VGhyb3VnaCIsMl0sWyJkdXJhdGlvbmNoYW5nZSIsImR1cmF0aW9uQ2hhbmdlIiwyXSxbImVtcHRpZWQiLCJlbXB0aWVkIiwyXSxbImVuY3J5cHRlZCIsImVuY3J5cHRlZCIsMl0sWyJlbmRlZCIsImVuZGVkIiwyXSxbImVycm9yIiwiZXJyb3IiLDJdLFsiZ290cG9pbnRlcmNhcHR1cmUiLCJnb3RQb2ludGVyQ2FwdHVyZSIsMl0sWyJsb2FkIiwibG9hZCIsMl0sWyJsb2FkZWRkYXRhIiwibG9hZGVkRGF0YSIsMl0sWyJsb2FkZWRtZXRhZGF0YSIsImxvYWRlZE1ldGFkYXRhIiwyXSxbImxvYWRzdGFydCIsImxvYWRTdGFydCIsMl0sWyJsb3N0cG9pbnRlcmNhcHR1cmUiLCJsb3N0UG9pbnRlckNhcHR1cmUiLDJdLFsicGxheWluZyIsInBsYXlpbmciLDJdLFsicHJvZ3Jlc3MiLCJwcm9ncmVzcyIsMl0sWyJzZWVraW5nIiwic2Vla2luZyIsMl0sWyJzdGFsbGVkIiwic3RhbGxlZCIsMl0sWyJzdXNwZW5kIiwic3VzcGVuZCIsMl0sWyJ0aW1ldXBkYXRlIiwidGltZVVwZGF0ZSIsMl0sWyRlLCJ0cmFuc2l0aW9uRW5kIiwyXSxbIndhaXRpbmciLCJ3YWl0aW5nIiwyXV0sbHI9e30sY3I9e30sdXI9MDt1cjxzci5sZW5ndGg7dXIrKyl7dmFyIGZyPXNyW3VyXSxocj1mclswXSxkcj1mclsxXSxwcj1mclsyXSxtcj0ib24iKyhkclswXS50b1VwcGVyQ2FzZSgpK2RyLnNsaWNlKDEpKSxncj17cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6bXIsY2FwdHVyZWQ6bXIrIkNhcHR1cmUifSxkZXBlbmRlbmNpZXM6W2hyXSxldmVudFByaW9yaXR5OnByfTtscltkcl09Z3IsY3JbaHJdPWdyfXZhciB2cj17ZXZlbnRUeXBlczpscixnZXRFdmVudFByaW9yaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT0oZT1jcltlXSk/ZS5ldmVudFByaW9yaXR5OjJ9LGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9Y3JbZV07aWYoIWEpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2Uia2V5cHJlc3MiOmlmKDA9PT1IdChyKSlyZXR1cm4gbnVsbDtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOmU9SnQ7YnJlYWs7Y2FzZSJibHVyIjpjYXNlImZvY3VzIjplPVd0O2JyZWFrO2Nhc2UiY2xpY2siOmlmKDI9PT1yLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOmU9dHI7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6ZT1ucjticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjplPWFyO2JyZWFrO2Nhc2UgSmU6Y2FzZSBRZTpjYXNlIFplOmU9VXQ7YnJlYWs7Y2FzZSAkZTplPWlyO2JyZWFrO2Nhc2Uic2Nyb2xsIjplPXp0O2JyZWFrO2Nhc2Uid2hlZWwiOmU9b3I7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6ZT1xdDticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjplPXJyO2JyZWFrO2RlZmF1bHQ6ZT1NdH1yZXR1cm4gRnQodD1lLmdldFBvb2xlZChhLHQscixuKSksdH19LHlyPWkudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksYnI9aS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksd3I9dnIuZ2V0RXZlbnRQcmlvcml0eSxrcj1bXTtmdW5jdGlvbiBTcihlKXt2YXIgdD1lLnRhcmdldEluc3Qscj10O2Rve2lmKCFyKXtlLmFuY2VzdG9ycy5wdXNoKHIpO2JyZWFrfXZhciBuPXI7aWYoMz09PW4udGFnKW49bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztlbHNle2Zvcig7bi5yZXR1cm47KW49bi5yZXR1cm47bj0zIT09bi50YWc/bnVsbDpuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvfWlmKCFuKWJyZWFrOzUhPT0odD1yLnRhZykmJjYhPT10fHxlLmFuY2VzdG9ycy5wdXNoKHIpLHI9bG4obil9d2hpbGUocik7Zm9yKHI9MDtyPGUuYW5jZXN0b3JzLmxlbmd0aDtyKyspe3Q9ZS5hbmNlc3RvcnNbcl07dmFyIGE9UHQoZS5uYXRpdmVFdmVudCk7bj1lLnRvcExldmVsVHlwZTtmb3IodmFyIGk9ZS5uYXRpdmVFdmVudCxvPWUuZXZlbnRTeXN0ZW1GbGFncyxzPW51bGwsbD0wO2w8Zi5sZW5ndGg7bCsrKXt2YXIgYz1mW2xdO2MmJihjPWMuZXh0cmFjdEV2ZW50cyhuLHQsaSxhLG8pKSYmKHM9QyhzLGMpKX1SKHMpfX12YXIgX3I9ITA7ZnVuY3Rpb24geHIoZSx0KXtBcih0LGUsITEpfWZ1bmN0aW9uIEFyKGUsdCxyKXtzd2l0Y2god3IodCkpe2Nhc2UgMDp2YXIgbj1Dci5iaW5kKG51bGwsdCwxKTticmVhaztjYXNlIDE6bj1Qci5iaW5kKG51bGwsdCwxKTticmVhaztkZWZhdWx0Om49VHIuYmluZChudWxsLHQsMSl9cj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBDcihlLHQscil7dWV8fGxlKCk7dmFyIG49VHIsYT11ZTt1ZT0hMDt0cnl7c2UobixlLHQscil9ZmluYWxseXsodWU9YSl8fGhlKCl9fWZ1bmN0aW9uIFByKGUsdCxyKXticih5cixUci5iaW5kKG51bGwsZSx0LHIpKX1mdW5jdGlvbiBFcihlLHQscixuKXtpZihrci5sZW5ndGgpe3ZhciBhPWtyLnBvcCgpO2EudG9wTGV2ZWxUeXBlPWUsYS5ldmVudFN5c3RlbUZsYWdzPXQsYS5uYXRpdmVFdmVudD1yLGEudGFyZ2V0SW5zdD1uLGU9YX1lbHNlIGU9e3RvcExldmVsVHlwZTplLGV2ZW50U3lzdGVtRmxhZ3M6dCxuYXRpdmVFdmVudDpyLHRhcmdldEluc3Q6bixhbmNlc3RvcnM6W119O3RyeXtpZih0PVNyLHI9ZSxmZSl0KHIsdm9pZCAwKTtlbHNle2ZlPSEwO3RyeXtjZSh0LHIsdm9pZCAwKX1maW5hbGx5e2ZlPSExLGhlKCl9fX1maW5hbGx5e2UudG9wTGV2ZWxUeXBlPW51bGwsZS5uYXRpdmVFdmVudD1udWxsLGUudGFyZ2V0SW5zdD1udWxsLGUuYW5jZXN0b3JzLmxlbmd0aD0wLGtyLmxlbmd0aDwxMCYma3IucHVzaChlKX19ZnVuY3Rpb24gVHIoZSx0LHIpe2lmKF9yKWlmKDA8Y3QubGVuZ3RoJiYtMTxndC5pbmRleE9mKGUpKWU9eXQobnVsbCxlLHQsciksY3QucHVzaChlKTtlbHNle3ZhciBuPVJyKGUsdCxyKTtudWxsPT09bj9idChlLHIpOi0xPGd0LmluZGV4T2YoZSk/KGU9eXQobixlLHQsciksY3QucHVzaChlKSk6ZnVuY3Rpb24oZSx0LHIsbil7c3dpdGNoKHQpe2Nhc2UiZm9jdXMiOnJldHVybiB1dD13dCh1dCxlLHQscixuKSwhMDtjYXNlImRyYWdlbnRlciI6cmV0dXJuIGZ0PXd0KGZ0LGUsdCxyLG4pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gaHQ9d3QoaHQsZSx0LHIsbiksITA7Y2FzZSJwb2ludGVyb3ZlciI6dmFyIGE9bi5wb2ludGVySWQ7cmV0dXJuIGR0LnNldChhLHd0KGR0LmdldChhKXx8bnVsbCxlLHQscixuKSksITA7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6cmV0dXJuIGE9bi5wb2ludGVySWQscHQuc2V0KGEsd3QocHQuZ2V0KGEpfHxudWxsLGUsdCxyLG4pKSwhMH1yZXR1cm4hMX0obixlLHQscil8fChidChlLHIpLEVyKGUsdCxyLG51bGwpKX19ZnVuY3Rpb24gUnIoZSx0LHIpe3ZhciBuPVB0KHIpO2lmKG51bGwhPT0obj1sbihuKSkpe3ZhciBhPXR0KG4pO2lmKG51bGw9PT1hKW49bnVsbDtlbHNle3ZhciBpPWEudGFnO2lmKDEzPT09aSl7aWYobnVsbCE9PShuPXJ0KGEpKSlyZXR1cm4gbjtuPW51bGx9ZWxzZSBpZigzPT09aSl7aWYoYS5zdGF0ZU5vZGUuaHlkcmF0ZSlyZXR1cm4gMz09PWEudGFnP2Euc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtuPW51bGx9ZWxzZSBhIT09biYmKG49bnVsbCl9fXJldHVybiBFcihlLHQscixuKSxudWxsfWZ1bmN0aW9uIE9yKGUpe2lmKCEkKXJldHVybiExO3ZhciB0PShlPSJvbiIrZSlpbiBkb2N1bWVudDtyZXR1cm4gdHx8KCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zZXRBdHRyaWJ1dGUoZSwicmV0dXJuOyIpLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0pLHR9dmFyIElyPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCk7ZnVuY3Rpb24gRnIoZSl7dmFyIHQ9SXIuZ2V0KGUpO3JldHVybiB2b2lkIDA9PT10JiYodD1uZXcgU2V0LElyLnNldChlLHQpKSx0fWZ1bmN0aW9uIExyKGUsdCxyKXtpZighci5oYXMoZSkpe3N3aXRjaChlKXtjYXNlInNjcm9sbCI6QXIodCwic2Nyb2xsIiwhMCk7YnJlYWs7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjpBcih0LCJmb2N1cyIsITApLEFyKHQsImJsdXIiLCEwKSxyLmFkZCgiYmx1ciIpLHIuYWRkKCJmb2N1cyIpO2JyZWFrO2Nhc2UiY2FuY2VsIjpjYXNlImNsb3NlIjpPcihlKSYmQXIodCxlLCEwKTticmVhaztjYXNlImludmFsaWQiOmNhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztkZWZhdWx0Oi0xPT09ZXQuaW5kZXhPZihlKSYmeHIoZSx0KX1yLmFkZChlKX19dmFyIERyPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxNcj1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO2Z1bmN0aW9uIE5yKGUsdCxyKXtyZXR1cm4gbnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8IiI9PT10PyIiOnJ8fCJudW1iZXIiIT10eXBlb2YgdHx8MD09PXR8fERyLmhhc093blByb3BlcnR5KGUpJiZEcltlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBqcihlLHQpe2Zvcih2YXIgciBpbiBlPWUuc3R5bGUsdClpZih0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbj0wPT09ci5pbmRleE9mKCItLSIpLGE9TnIocix0W3JdLG4pOyJmbG9hdCI9PT1yJiYocj0iY3NzRmxvYXQiKSxuP2Uuc2V0UHJvcGVydHkocixhKTplW3JdPWF9fU9iamVjdC5rZXlzKERyKS5mb3JFYWNoKChmdW5jdGlvbihlKXtNci5mb3JFYWNoKChmdW5jdGlvbih0KXt0PXQrZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKSxEclt0XT1EcltlXX0pKX0pKTt2YXIgQnI9YSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBVcihlLHQpe2lmKHQpe2lmKEJyW2VdJiYobnVsbCE9dC5jaGlsZHJlbnx8bnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3IobygxMzcsZSwiIikpO2lmKG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpe2lmKG51bGwhPXQuY2hpbGRyZW4pdGhyb3cgRXJyb3Iobyg2MCkpO2lmKCEoIm9iamVjdCI9PXR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKG8oNjEpKX1pZihudWxsIT10LnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIHQuc3R5bGUpdGhyb3cgRXJyb3Iobyg2MiwiIikpfX1mdW5jdGlvbiBxcihlLHQpe2lmKC0xPT09ZS5pbmRleE9mKCItIikpcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0LmlzO3N3aXRjaChlKXtjYXNlImFubm90YXRpb24teG1sIjpjYXNlImNvbG9yLXByb2ZpbGUiOmNhc2UiZm9udC1mYWNlIjpjYXNlImZvbnQtZmFjZS1zcmMiOmNhc2UiZm9udC1mYWNlLXVyaSI6Y2FzZSJmb250LWZhY2UtZm9ybWF0IjpjYXNlImZvbnQtZmFjZS1uYW1lIjpjYXNlIm1pc3NpbmctZ2x5cGgiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWZ1bmN0aW9uIHpyKGUsdCl7dmFyIHI9RnIoZT05PT09ZS5ub2RlVHlwZXx8MTE9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50KTt0PXBbdF07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspTHIodFtuXSxlLHIpfWZ1bmN0aW9uIFdyKCl7fWZ1bmN0aW9uIEhyKGUpe2lmKHZvaWQgMD09PShlPWV8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19ZnVuY3Rpb24gR3IoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFZyKGUsdCl7dmFyIHIsbj1HcihlKTtmb3IoZT0wO247KXtpZigzPT09bi5ub2RlVHlwZSl7aWYocj1lK24udGV4dENvbnRlbnQubGVuZ3RoLGU8PXQmJnI+PXQpcmV0dXJue25vZGU6bixvZmZzZXQ6dC1lfTtlPXJ9ZTp7Zm9yKDtuOyl7aWYobi5uZXh0U2libGluZyl7bj1uLm5leHRTaWJsaW5nO2JyZWFrIGV9bj1uLnBhcmVudE5vZGV9bj12b2lkIDB9bj1HcihuKX19ZnVuY3Rpb24gWHIoKXtmb3IodmFyIGU9d2luZG93LHQ9SHIoKTt0IGluc3RhbmNlb2YgZS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgcj0ic3RyaW5nIj09dHlwZW9mIHQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmfWNhdGNoKGUpe3I9ITF9aWYoIXIpYnJlYWs7dD1IcigoZT10LmNvbnRlbnRXaW5kb3cpLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBZcihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJigiaW5wdXQiPT09dCYmKCJ0ZXh0Ij09PWUudHlwZXx8InNlYXJjaCI9PT1lLnR5cGV8fCJ0ZWwiPT09ZS50eXBlfHwidXJsIj09PWUudHlwZXx8InBhc3N3b3JkIj09PWUudHlwZSl8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9dmFyIEtyPW51bGwsSnI9bnVsbDtmdW5jdGlvbiBRcihlLHQpe3N3aXRjaChlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnJldHVybiEhdC5hdXRvRm9jdXN9cmV0dXJuITF9ZnVuY3Rpb24gWnIoZSx0KXtyZXR1cm4idGV4dGFyZWEiPT09ZXx8Im9wdGlvbiI9PT1lfHwibm9zY3JpcHQiPT09ZXx8InN0cmluZyI9PXR5cGVvZiB0LmNoaWxkcmVufHwibnVtYmVyIj09dHlwZW9mIHQuY2hpbGRyZW58fCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciAkcj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxlbj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gdG4oZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZigxPT09dHx8Mz09PXQpYnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoOD09PWUubm9kZVR5cGUpe3ZhciByPWUuZGF0YTtpZigiJCI9PT1yfHwiJCEiPT09cnx8IiQ/Ij09PXIpe2lmKDA9PT10KXJldHVybiBlO3QtLX1lbHNlIi8kIj09PXImJnQrK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfXZhciBubj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxhbj0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitubixvbj0iX19yZWFjdEV2ZW50SGFuZGxlcnMkIitubixzbj0iX19yZWFjdENvbnRhaW5lcmUkIitubjtmdW5jdGlvbiBsbihlKXt2YXIgdD1lW2FuXTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj1lLnBhcmVudE5vZGU7cjspe2lmKHQ9cltzbl18fHJbYW5dKXtpZihyPXQuYWx0ZXJuYXRlLG51bGwhPT10LmNoaWxkfHxudWxsIT09ciYmbnVsbCE9PXIuY2hpbGQpZm9yKGU9cm4oZSk7bnVsbCE9PWU7KXtpZihyPWVbYW5dKXJldHVybiByO2U9cm4oZSl9cmV0dXJuIHR9cj0oZT1yKS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGNuKGUpe3JldHVybiEoZT1lW2FuXXx8ZVtzbl0pfHw1IT09ZS50YWcmJjYhPT1lLnRhZyYmMTMhPT1lLnRhZyYmMyE9PWUudGFnP251bGw6ZX1mdW5jdGlvbiB1bihlKXtpZig1PT09ZS50YWd8fDY9PT1lLnRhZylyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IobygzMykpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlW29uXXx8bnVsbH12YXIgaG49bnVsbCxkbj1udWxsLHBuPW51bGw7ZnVuY3Rpb24gbW4oKXtpZihwbilyZXR1cm4gcG47dmFyIGUsdCxyPWRuLG49ci5sZW5ndGgsYT0idmFsdWUiaW4gaG4/aG4udmFsdWU6aG4udGV4dENvbnRlbnQsaT1hLmxlbmd0aDtmb3IoZT0wO2U8biYmcltlXT09PWFbZV07ZSsrKTt2YXIgbz1uLWU7Zm9yKHQ9MTt0PD1vJiZyW24tdF09PT1hW2ktdF07dCsrKTtyZXR1cm4gcG49YS5zbGljZShlLDE8dD8xLXQ6dm9pZCAwKX12YXIgZ249TXQuZXh0ZW5kKHtkYXRhOm51bGx9KSx2bj1NdC5leHRlbmQoe2RhdGE6bnVsbH0pLHluPVs5LDEzLDI3LDMyXSxibj0kJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csd249bnVsbDskJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYod249ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIga249JCYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiF3bixTbj0kJiYoIWJufHx3biYmODx3biYmMTE+PXduKSxfbj1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSx4bj17YmVmb3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkJlZm9yZUlucHV0IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXX0sY29tcG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb25lbmQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uU3RhcnQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uVXBkYXRlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblVwZGF0ZSIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9udXBkYXRlIGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpfX0sQW49ITE7ZnVuY3Rpb24gQ24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJrZXl1cCI6cmV0dXJuLTEhPT15bi5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJrZXlkb3duIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImJsdXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFBuKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YoZT1lLmRldGFpbCkmJiJkYXRhImluIGU/ZS5kYXRhOm51bGx9dmFyIEVuPSExO3ZhciBUbj17ZXZlbnRUeXBlczp4bixleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhO2lmKGJuKWU6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciBpPXhuLmNvbXBvc2l0aW9uU3RhcnQ7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjppPXhuLmNvbXBvc2l0aW9uRW5kO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6aT14bi5jb21wb3NpdGlvblVwZGF0ZTticmVhayBlfWk9dm9pZCAwfWVsc2UgRW4/Q24oZSxyKSYmKGk9eG4uY29tcG9zaXRpb25FbmQpOiJrZXlkb3duIj09PWUmJjIyOT09PXIua2V5Q29kZSYmKGk9eG4uY29tcG9zaXRpb25TdGFydCk7cmV0dXJuIGk/KFNuJiYia28iIT09ci5sb2NhbGUmJihFbnx8aSE9PXhuLmNvbXBvc2l0aW9uU3RhcnQ/aT09PXhuLmNvbXBvc2l0aW9uRW5kJiZFbiYmKGE9bW4oKSk6KGRuPSJ2YWx1ZSJpbihobj1uKT9obi52YWx1ZTpobi50ZXh0Q29udGVudCxFbj0hMCkpLGk9Z24uZ2V0UG9vbGVkKGksdCxyLG4pLGE/aS5kYXRhPWE6bnVsbCE9PShhPVBuKHIpKSYmKGkuZGF0YT1hKSxGdChpKSxhPWkpOmE9bnVsbCwoZT1rbj9mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uZW5kIjpyZXR1cm4gUG4odCk7Y2FzZSJrZXlwcmVzcyI6cmV0dXJuIDMyIT09dC53aGljaD9udWxsOihBbj0hMCxfbik7Y2FzZSJ0ZXh0SW5wdXQiOnJldHVybihlPXQuZGF0YSk9PT1fbiYmQW4/bnVsbDplO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShlLHIpOmZ1bmN0aW9uKGUsdCl7aWYoRW4pcmV0dXJuImNvbXBvc2l0aW9uZW5kIj09PWV8fCFibiYmQ24oZSx0KT8oZT1tbigpLHBuPWRuPWhuPW51bGwsRW49ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFNuJiYia28iIT09dC5sb2NhbGU/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUscikpPygodD12bi5nZXRQb29sZWQoeG4uYmVmb3JlSW5wdXQsdCxyLG4pKS5kYXRhPWUsRnQodCkpOnQ9bnVsbCxudWxsPT09YT90Om51bGw9PT10P2E6W2EsdF19fSxSbj17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gT24oZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhUm5bZS50eXBlXToidGV4dGFyZWEiPT09dH12YXIgSW49e2NoYW5nZTp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ2hhbmdlIixjYXB0dXJlZDoib25DaGFuZ2VDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNoYW5nZSBjbGljayBmb2N1cyBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19O2Z1bmN0aW9uIEZuKGUsdCxyKXtyZXR1cm4oZT1NdC5nZXRQb29sZWQoSW4uY2hhbmdlLGUsdCxyKSkudHlwZT0iY2hhbmdlIixhZShyKSxGdChlKSxlfXZhciBMbj1udWxsLERuPW51bGw7ZnVuY3Rpb24gTW4oZSl7UihlKX1mdW5jdGlvbiBObihlKXtpZihBZSh1bihlKSkpcmV0dXJuIGV9ZnVuY3Rpb24gam4oZSx0KXtpZigiY2hhbmdlIj09PWUpcmV0dXJuIHR9dmFyIEJuPSExO2Z1bmN0aW9uIFVuKCl7TG4mJihMbi5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIscW4pLERuPUxuPW51bGwpfWZ1bmN0aW9uIHFuKGUpe2lmKCJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSYmTm4oRG4pKWlmKGU9Rm4oRG4sZSxQdChlKSksdWUpUihlKTtlbHNle3VlPSEwO3RyeXtvZShNbixlKX1maW5hbGx5e3VlPSExLGhlKCl9fX1mdW5jdGlvbiB6bihlLHQscil7ImZvY3VzIj09PWU/KFVuKCksRG49ciwoTG49dCkuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHFuKSk6ImJsdXIiPT09ZSYmVW4oKX1mdW5jdGlvbiBXbihlKXtpZigic2VsZWN0aW9uY2hhbmdlIj09PWV8fCJrZXl1cCI9PT1lfHwia2V5ZG93biI9PT1lKXJldHVybiBObihEbil9ZnVuY3Rpb24gSG4oZSx0KXtpZigiY2xpY2siPT09ZSlyZXR1cm4gTm4odCl9ZnVuY3Rpb24gR24oZSx0KXtpZigiaW5wdXQiPT09ZXx8ImNoYW5nZSI9PT1lKXJldHVybiBObih0KX0kJiYoQm49T3IoImlucHV0IikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciBWbixYbj17ZXZlbnRUeXBlczpJbixfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOkJuLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dD91bih0KTp3aW5kb3csaT1hLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoInNlbGVjdCI9PT1pfHwiaW5wdXQiPT09aSYmImZpbGUiPT09YS50eXBlKXZhciBvPWpuO2Vsc2UgaWYoT24oYSkpaWYoQm4pbz1HbjtlbHNle289V247dmFyIHM9em59ZWxzZShpPWEubm9kZU5hbWUpJiYiaW5wdXQiPT09aS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZSkmJihvPUhuKTtpZihvJiYobz1vKGUsdCkpKXJldHVybiBGbihvLHIsbik7cyYmcyhlLGEsdCksImJsdXIiPT09ZSYmKGU9YS5fd3JhcHBlclN0YXRlKSYmZS5jb250cm9sbGVkJiYibnVtYmVyIj09PWEudHlwZSYmT2UoYSwibnVtYmVyIixhLnZhbHVlKX19LFluPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlRW50ZXIiLGRlcGVuZGVuY2llczpbIm1vdXNlb3V0IiwibW91c2VvdmVyIl19LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VMZWF2ZSIsZGVwZW5kZW5jaWVzOlsibW91c2VvdXQiLCJtb3VzZW92ZXIiXX0scG9pbnRlckVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvblBvaW50ZXJFbnRlciIsZGVwZW5kZW5jaWVzOlsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl19LHBvaW50ZXJMZWF2ZTp7cmVnaXN0cmF0aW9uTmFtZToib25Qb2ludGVyTGVhdmUiLGRlcGVuZGVuY2llczpbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdfX0sS249e2V2ZW50VHlwZXM6WW4sZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPSJtb3VzZW92ZXIiPT09ZXx8InBvaW50ZXJvdmVyIj09PWUsbz0ibW91c2VvdXQiPT09ZXx8InBvaW50ZXJvdXQiPT09ZTtpZihpJiYwPT0oMzImYSkmJihyLnJlbGF0ZWRUYXJnZXR8fHIuZnJvbUVsZW1lbnQpfHwhbyYmIWkpcmV0dXJuIG51bGw7aWYoYT1uLndpbmRvdz09PW4/bjooYT1uLm93bmVyRG9jdW1lbnQpP2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OndpbmRvdyxvPyhvPXQsbnVsbCE9PSh0PSh0PXIucmVsYXRlZFRhcmdldHx8ci50b0VsZW1lbnQpP2xuKHQpOm51bGwpJiYodCE9PShpPXR0KHQpKXx8NSE9PXQudGFnJiY2IT09dC50YWcpJiYodD1udWxsKSk6bz1udWxsLG89PT10KXJldHVybiBudWxsO2lmKCJtb3VzZW91dCI9PT1lfHwibW91c2VvdmVyIj09PWUpdmFyIHM9dHIsbD1Zbi5tb3VzZUxlYXZlLGM9WW4ubW91c2VFbnRlcix1PSJtb3VzZSI7ZWxzZSJwb2ludGVyb3V0IiE9PWUmJiJwb2ludGVyb3ZlciIhPT1lfHwocz1ycixsPVluLnBvaW50ZXJMZWF2ZSxjPVluLnBvaW50ZXJFbnRlcix1PSJwb2ludGVyIik7aWYoZT1udWxsPT1vP2E6dW4obyksYT1udWxsPT10P2E6dW4odCksKGw9cy5nZXRQb29sZWQobCxvLHIsbikpLnR5cGU9dSsibGVhdmUiLGwudGFyZ2V0PWUsbC5yZWxhdGVkVGFyZ2V0PWEsKG49cy5nZXRQb29sZWQoYyx0LHIsbikpLnR5cGU9dSsiZW50ZXIiLG4udGFyZ2V0PWEsbi5yZWxhdGVkVGFyZ2V0PWUsdT10LChzPW8pJiZ1KWU6e2ZvcihlPXUsbz0wLHQ9Yz1zO3Q7dD1FdCh0KSlvKys7Zm9yKHQ9MCxhPWU7YTthPUV0KGEpKXQrKztmb3IoOzA8by10OyljPUV0KGMpLG8tLTtmb3IoOzA8dC1vOyllPUV0KGUpLHQtLTtmb3IoO28tLTspe2lmKGM9PT1lfHxjPT09ZS5hbHRlcm5hdGUpYnJlYWsgZTtjPUV0KGMpLGU9RXQoZSl9Yz1udWxsfWVsc2UgYz1udWxsO2ZvcihlPWMsYz1bXTtzJiZzIT09ZSYmKG51bGw9PT0obz1zLmFsdGVybmF0ZSl8fG8hPT1lKTspYy5wdXNoKHMpLHM9RXQocyk7Zm9yKHM9W107dSYmdSE9PWUmJihudWxsPT09KG89dS5hbHRlcm5hdGUpfHxvIT09ZSk7KXMucHVzaCh1KSx1PUV0KHUpO2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspT3QoY1t1XSwiYnViYmxlZCIsbCk7Zm9yKHU9cy5sZW5ndGg7MDx1LS07KU90KHNbdV0sImNhcHR1cmVkIixuKTtyZXR1cm4gcj09PVZuPyhWbj1udWxsLFtsXSk6KFZuPXIsW2wsbl0pfX07dmFyIEpuPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoMCE9PWV8fDEvZT09MS90KXx8ZSE9ZSYmdCE9dH0sUW49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBabihlLHQpe2lmKEpuKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgcj1PYmplY3Qua2V5cyhlKSxuPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylpZighUW4uY2FsbCh0LHJbbl0pfHwhSm4oZVtyW25dXSx0W3Jbbl1dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgJG49JCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxlYT17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19LHRhPW51bGwscmE9bnVsbCxuYT1udWxsLGFhPSExO2Z1bmN0aW9uIGlhKGUsdCl7dmFyIHI9dC53aW5kb3c9PT10P3QuZG9jdW1lbnQ6OT09PXQubm9kZVR5cGU/dDp0Lm93bmVyRG9jdW1lbnQ7cmV0dXJuIGFhfHxudWxsPT10YXx8dGEhPT1IcihyKT9udWxsOigic2VsZWN0aW9uU3RhcnQiaW4ocj10YSkmJllyKHIpP3I9e3N0YXJ0OnIuc2VsZWN0aW9uU3RhcnQsZW5kOnIuc2VsZWN0aW9uRW5kfTpyPXthbmNob3JOb2RlOihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9LG5hJiZabihuYSxyKT9udWxsOihuYT1yLChlPU10LmdldFBvb2xlZChlYS5zZWxlY3QscmEsZSx0KSkudHlwZT0ic2VsZWN0IixlLnRhcmdldD10YSxGdChlKSxlKSl9dmFyIG9hPXtldmVudFR5cGVzOmVhLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaT1uLndpbmRvdz09PW4/bi5kb2N1bWVudDo5PT09bi5ub2RlVHlwZT9uOm4ub3duZXJEb2N1bWVudDtpZighKGE9IWkpKXtlOntpPUZyKGkpLGE9cC5vblNlbGVjdDtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZighaS5oYXMoYVtvXSkpe2k9ITE7YnJlYWsgZX1pPSEwfWE9IWl9aWYoYSlyZXR1cm4gbnVsbDtzd2l0Y2goaT10P3VuKHQpOndpbmRvdyxlKXtjYXNlImZvY3VzIjooT24oaSl8fCJ0cnVlIj09PWkuY29udGVudEVkaXRhYmxlKSYmKHRhPWkscmE9dCxuYT1udWxsKTticmVhaztjYXNlImJsdXIiOm5hPXJhPXRhPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmFhPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpyZXR1cm4gYWE9ITEsaWEocixuKTtjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYoJG4pYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpyZXR1cm4gaWEocixuKX1yZXR1cm4gbnVsbH19O08uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcigiUmVzcG9uZGVyRXZlbnRQbHVnaW4gU2ltcGxlRXZlbnRQbHVnaW4gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIENoYW5nZUV2ZW50UGx1Z2luIFNlbGVjdEV2ZW50UGx1Z2luIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4iLnNwbGl0KCIgIikpLFM9Zm4sXz1jbix4PXVuLE8uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjp2cixFbnRlckxlYXZlRXZlbnRQbHVnaW46S24sQ2hhbmdlRXZlbnRQbHVnaW46WG4sU2VsZWN0RXZlbnRQbHVnaW46b2EsQmVmb3JlSW5wdXRFdmVudFBsdWdpbjpUbn0pLG5ldyBTZXQ7dmFyIHNhPVtdLGxhPS0xO2Z1bmN0aW9uIGNhKGUpezA+bGF8fChlLmN1cnJlbnQ9c2FbbGFdLHNhW2xhXT1udWxsLGxhLS0pfWZ1bmN0aW9uIHVhKGUsdCl7bGErKyxzYVtsYV09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBmYT17fSxoYT17Y3VycmVudDpmYX0sZGE9e2N1cnJlbnQ6ITF9LHBhPWZhO2Z1bmN0aW9uIG1hKGUsdCl7dmFyIHI9ZS50eXBlLmNvbnRleHRUeXBlcztpZighcilyZXR1cm4gZmE7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobiYmbi5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gbi5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgYSxpPXt9O2ZvcihhIGluIHIpaVthXT10W2FdO3JldHVybiBuJiYoKGU9ZS5zdGF0ZU5vZGUpLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLGl9ZnVuY3Rpb24gZ2EoZSl7cmV0dXJuIG51bGwhPShlPWUuY2hpbGRDb250ZXh0VHlwZXMpfWZ1bmN0aW9uIHZhKGUpe2NhKGRhKSxjYShoYSl9ZnVuY3Rpb24geWEoZSl7Y2EoZGEpLGNhKGhhKX1mdW5jdGlvbiBiYShlLHQscil7aWYoaGEuY3VycmVudCE9PWZhKXRocm93IEVycm9yKG8oMTY4KSk7dWEoaGEsdCksdWEoZGEscil9ZnVuY3Rpb24gd2EoZSx0LHIpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKGU9dC5jaGlsZENvbnRleHRUeXBlcywiZnVuY3Rpb24iIT10eXBlb2Ygbi5nZXRDaGlsZENvbnRleHQpcmV0dXJuIHI7Zm9yKHZhciBpIGluIG49bi5nZXRDaGlsZENvbnRleHQoKSlpZighKGkgaW4gZSkpdGhyb3cgRXJyb3IobygxMDgsUSh0KXx8IlVua25vd24iLGkpKTtyZXR1cm4gYSh7fSxyLHt9LG4pfWZ1bmN0aW9uIGthKGUpe3ZhciB0PWUuc3RhdGVOb2RlO3JldHVybiB0PXQmJnQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fGZhLHBhPWhhLmN1cnJlbnQsdWEoaGEsdCksdWEoZGEsZGEuY3VycmVudCksITB9ZnVuY3Rpb24gU2EoZSx0LHIpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKCFuKXRocm93IEVycm9yKG8oMTY5KSk7cj8odD13YShlLHQscGEpLG4uX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9dCxjYShkYSksY2EoaGEpLHVhKGhhLHQpKTpjYShkYSksdWEoZGEscil9dmFyIF9hPWkudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LHhhPWkudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxBYT1pLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLENhPWkudW5zdGFibGVfc2hvdWxkWWllbGQsUGE9aS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsRWE9aS51bnN0YWJsZV9ub3csVGE9aS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxSYT1pLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LE9hPWkudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksSWE9aS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxGYT1pLnVuc3RhYmxlX0xvd1ByaW9yaXR5LExhPWkudW5zdGFibGVfSWRsZVByaW9yaXR5LERhPXt9LE1hPXZvaWQgMCE9PVBhP1BhOmZ1bmN0aW9uKCl7fSxOYT1udWxsLGphPW51bGwsQmE9ITEsVWE9RWEoKSxxYT0xZTQ+VWE/RWE6ZnVuY3Rpb24oKXtyZXR1cm4gRWEoKS1VYX07ZnVuY3Rpb24gemEoKXtzd2l0Y2goVGEoKSl7Y2FzZSBSYTpyZXR1cm4gOTk7Y2FzZSBPYTpyZXR1cm4gOTg7Y2FzZSBJYTpyZXR1cm4gOTc7Y2FzZSBGYTpyZXR1cm4gOTY7Y2FzZSBMYTpyZXR1cm4gOTU7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMzMikpfX1mdW5jdGlvbiBXYShlKXtzd2l0Y2goZSl7Y2FzZSA5OTpyZXR1cm4gUmE7Y2FzZSA5ODpyZXR1cm4gT2E7Y2FzZSA5NzpyZXR1cm4gSWE7Y2FzZSA5NjpyZXR1cm4gRmE7Y2FzZSA5NTpyZXR1cm4gTGE7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMzMikpfX1mdW5jdGlvbiBIYShlLHQpe3JldHVybiBlPVdhKGUpLF9hKGUsdCl9ZnVuY3Rpb24gR2EoZSx0LHIpe3JldHVybiBlPVdhKGUpLHhhKGUsdCxyKX1mdW5jdGlvbiBWYShlKXtyZXR1cm4gbnVsbD09PU5hPyhOYT1bZV0samE9eGEoUmEsWWEpKTpOYS5wdXNoKGUpLERhfWZ1bmN0aW9uIFhhKCl7aWYobnVsbCE9PWphKXt2YXIgZT1qYTtqYT1udWxsLEFhKGUpfVlhKCl9ZnVuY3Rpb24gWWEoKXtpZighQmEmJm51bGwhPT1OYSl7QmE9ITA7dmFyIGU9MDt0cnl7dmFyIHQ9TmE7SGEoOTksKGZ1bmN0aW9uKCl7Zm9yKDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtkb3tyPXIoITApfXdoaWxlKG51bGwhPT1yKX19KSksTmE9bnVsbH1jYXRjaCh0KXt0aHJvdyBudWxsIT09TmEmJihOYT1OYS5zbGljZShlKzEpKSx4YShSYSxYYSksdH1maW5hbGx5e0JhPSExfX19dmFyIEthPTM7ZnVuY3Rpb24gSmEoZSx0LHIpe3JldHVybiAxMDczNzQxODIxLSgxKygoMTA3Mzc0MTgyMS1lK3QvMTApLyhyLz0xMCl8MCkpKnJ9ZnVuY3Rpb24gUWEoZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IodmFyIHIgaW4gdD1hKHt9LHQpLGU9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09dFtyXSYmKHRbcl09ZVtyXSk7cmV0dXJuIHR9dmFyIFphPXtjdXJyZW50Om51bGx9LCRhPW51bGwsZWk9bnVsbCx0aT1udWxsO2Z1bmN0aW9uIHJpKCl7dGk9ZWk9JGE9bnVsbH1mdW5jdGlvbiBuaShlLHQpe3ZhciByPWUudHlwZS5fY29udGV4dDt1YShaYSxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIGFpKGUpe3ZhciB0PVphLmN1cnJlbnQ7Y2EoWmEpLGUudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gaWkoZSx0KXtmb3IoO251bGwhPT1lOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoZS5jaGlsZEV4cGlyYXRpb25UaW1lPHQpZS5jaGlsZEV4cGlyYXRpb25UaW1lPXQsbnVsbCE9PXImJnIuY2hpbGRFeHBpcmF0aW9uVGltZTx0JiYoci5jaGlsZEV4cGlyYXRpb25UaW1lPXQpO2Vsc2V7aWYoIShudWxsIT09ciYmci5jaGlsZEV4cGlyYXRpb25UaW1lPHQpKWJyZWFrO3IuY2hpbGRFeHBpcmF0aW9uVGltZT10fWU9ZS5yZXR1cm59fWZ1bmN0aW9uIG9pKGUsdCl7JGE9ZSx0aT1laT1udWxsLG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJm51bGwhPT1lLmZpcnN0Q29udGV4dCYmKGUuZXhwaXJhdGlvblRpbWU+PXQmJihxbz0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gc2koZSx0KXtpZih0aSE9PWUmJiExIT09dCYmMCE9PXQpaWYoIm51bWJlciI9PXR5cGVvZiB0JiYxMDczNzQxODIzIT09dHx8KHRpPWUsdD0xMDczNzQxODIzKSx0PXtjb250ZXh0OmUsb2JzZXJ2ZWRCaXRzOnQsbmV4dDpudWxsfSxudWxsPT09ZWkpe2lmKG51bGw9PT0kYSl0aHJvdyBFcnJvcihvKDMwOCkpO2VpPXQsJGEuZGVwZW5kZW5jaWVzPXtleHBpcmF0aW9uVGltZTowLGZpcnN0Q29udGV4dDp0LHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBlaT1laS5uZXh0PXQ7cmV0dXJuIGUuX2N1cnJlbnRWYWx1ZX12YXIgbGk9ITE7ZnVuY3Rpb24gY2koZSl7cmV0dXJue2Jhc2VTdGF0ZTplLGZpcnN0VXBkYXRlOm51bGwsbGFzdFVwZGF0ZTpudWxsLGZpcnN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxsYXN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxmaXJzdEVmZmVjdDpudWxsLGxhc3RFZmZlY3Q6bnVsbCxmaXJzdENhcHR1cmVkRWZmZWN0Om51bGwsbGFzdENhcHR1cmVkRWZmZWN0Om51bGx9fWZ1bmN0aW9uIHVpKGUpe3JldHVybntiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RVcGRhdGU6ZS5maXJzdFVwZGF0ZSxsYXN0VXBkYXRlOmUubGFzdFVwZGF0ZSxmaXJzdENhcHR1cmVkVXBkYXRlOm51bGwsbGFzdENhcHR1cmVkVXBkYXRlOm51bGwsZmlyc3RFZmZlY3Q6bnVsbCxsYXN0RWZmZWN0Om51bGwsZmlyc3RDYXB0dXJlZEVmZmVjdDpudWxsLGxhc3RDYXB0dXJlZEVmZmVjdDpudWxsfX1mdW5jdGlvbiBmaShlLHQpe3JldHVybntleHBpcmF0aW9uVGltZTplLHN1c3BlbnNlQ29uZmlnOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsLG5leHRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gaGkoZSx0KXtudWxsPT09ZS5sYXN0VXBkYXRlP2UuZmlyc3RVcGRhdGU9ZS5sYXN0VXBkYXRlPXQ6KGUubGFzdFVwZGF0ZS5uZXh0PXQsZS5sYXN0VXBkYXRlPXQpfWZ1bmN0aW9uIGRpKGUsdCl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYobnVsbD09PXIpe3ZhciBuPWUudXBkYXRlUXVldWUsYT1udWxsO251bGw9PT1uJiYobj1lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSkpfWVsc2Ugbj1lLnVwZGF0ZVF1ZXVlLGE9ci51cGRhdGVRdWV1ZSxudWxsPT09bj9udWxsPT09YT8obj1lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSksYT1yLnVwZGF0ZVF1ZXVlPWNpKHIubWVtb2l6ZWRTdGF0ZSkpOm49ZS51cGRhdGVRdWV1ZT11aShhKTpudWxsPT09YSYmKGE9ci51cGRhdGVRdWV1ZT11aShuKSk7bnVsbD09PWF8fG49PT1hP2hpKG4sdCk6bnVsbD09PW4ubGFzdFVwZGF0ZXx8bnVsbD09PWEubGFzdFVwZGF0ZT8oaGkobix0KSxoaShhLHQpKTooaGkobix0KSxhLmxhc3RVcGRhdGU9dCl9ZnVuY3Rpb24gcGkoZSx0KXt2YXIgcj1lLnVwZGF0ZVF1ZXVlO251bGw9PT0ocj1udWxsPT09cj9lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSk6bWkoZSxyKSkubGFzdENhcHR1cmVkVXBkYXRlP3IuZmlyc3RDYXB0dXJlZFVwZGF0ZT1yLmxhc3RDYXB0dXJlZFVwZGF0ZT10OihyLmxhc3RDYXB0dXJlZFVwZGF0ZS5uZXh0PXQsci5sYXN0Q2FwdHVyZWRVcGRhdGU9dCl9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbCE9PXImJnQ9PT1yLnVwZGF0ZVF1ZXVlJiYodD1lLnVwZGF0ZVF1ZXVlPXVpKHQpKSx0fWZ1bmN0aW9uIGdpKGUsdCxyLG4saSxvKXtzd2l0Y2goci50YWcpe2Nhc2UgMTpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YoZT1yLnBheWxvYWQpP2UuY2FsbChvLG4saSk6ZTtjYXNlIDM6ZS5lZmZlY3RUYWc9LTQwOTcmZS5lZmZlY3RUYWd8NjQ7Y2FzZSAwOmlmKG51bGw9PShpPSJmdW5jdGlvbiI9PXR5cGVvZihlPXIucGF5bG9hZCk/ZS5jYWxsKG8sbixpKTplKSlicmVhaztyZXR1cm4gYSh7fSxuLGkpO2Nhc2UgMjpsaT0hMH1yZXR1cm4gbn1mdW5jdGlvbiB2aShlLHQscixuLGEpe2xpPSExO2Zvcih2YXIgaT0odD1taShlLHQpKS5iYXNlU3RhdGUsbz1udWxsLHM9MCxsPXQuZmlyc3RVcGRhdGUsYz1pO251bGwhPT1sOyl7dmFyIHU9bC5leHBpcmF0aW9uVGltZTt1PGE/KG51bGw9PT1vJiYobz1sLGk9Yyksczx1JiYocz11KSk6KGZsKHUsbC5zdXNwZW5zZUNvbmZpZyksYz1naShlLDAsbCxjLHIsbiksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdEVmZmVjdD90LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1sOih0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdD1sLHQubGFzdEVmZmVjdD1sKSkpLGw9bC5uZXh0fWZvcih1PW51bGwsbD10LmZpcnN0Q2FwdHVyZWRVcGRhdGU7bnVsbCE9PWw7KXt2YXIgZj1sLmV4cGlyYXRpb25UaW1lO2Y8YT8obnVsbD09PXUmJih1PWwsbnVsbD09PW8mJihpPWMpKSxzPGYmJihzPWYpKTooYz1naShlLDAsbCxjLHIsbiksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdENhcHR1cmVkRWZmZWN0P3QuZmlyc3RDYXB0dXJlZEVmZmVjdD10Lmxhc3RDYXB0dXJlZEVmZmVjdD1sOih0Lmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0PWwsdC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bCkpKSxsPWwubmV4dH1udWxsPT09byYmKHQubGFzdFVwZGF0ZT1udWxsKSxudWxsPT09dT90Lmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsOmUuZWZmZWN0VGFnfD0zMixudWxsPT09byYmbnVsbD09PXUmJihpPWMpLHQuYmFzZVN0YXRlPWksdC5maXJzdFVwZGF0ZT1vLHQuZmlyc3RDYXB0dXJlZFVwZGF0ZT11LGhsKHMpLGUuZXhwaXJhdGlvblRpbWU9cyxlLm1lbW9pemVkU3RhdGU9Y31mdW5jdGlvbiB5aShlLHQscil7bnVsbCE9PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZSYmKG51bGwhPT10Lmxhc3RVcGRhdGUmJih0Lmxhc3RVcGRhdGUubmV4dD10LmZpcnN0Q2FwdHVyZWRVcGRhdGUsdC5sYXN0VXBkYXRlPXQubGFzdENhcHR1cmVkVXBkYXRlKSx0LmZpcnN0Q2FwdHVyZWRVcGRhdGU9dC5sYXN0Q2FwdHVyZWRVcGRhdGU9bnVsbCksYmkodC5maXJzdEVmZmVjdCxyKSx0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1udWxsLGJpKHQuZmlyc3RDYXB0dXJlZEVmZmVjdCxyKSx0LmZpcnN0Q2FwdHVyZWRFZmZlY3Q9dC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bnVsbH1mdW5jdGlvbiBiaShlLHQpe2Zvcig7bnVsbCE9PWU7KXt2YXIgcj1lLmNhbGxiYWNrO2lmKG51bGwhPT1yKXtlLmNhbGxiYWNrPW51bGw7dmFyIG49dDtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBFcnJvcihvKDE5MSxyKSk7ci5jYWxsKG4pfWU9ZS5uZXh0RWZmZWN0fX12YXIgd2k9Ri5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxraT0obmV3IG4uQ29tcG9uZW50KS5yZWZzO2Z1bmN0aW9uIFNpKGUsdCxyLG4pe3I9bnVsbD09KHI9cihuLHQ9ZS5tZW1vaXplZFN0YXRlKSk/dDphKHt9LHQsciksZS5tZW1vaXplZFN0YXRlPXIsbnVsbCE9PShuPWUudXBkYXRlUXVldWUpJiYwPT09ZS5leHBpcmF0aW9uVGltZSYmKG4uYmFzZVN0YXRlPXIpfXZhciBfaT17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybiEhKGU9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyKSYmdHQoZSk9PT1lfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0LHIpe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciBuPVpzKCksYT13aS5zdXNwZW5zZTsoYT1maShuPSRzKG4sZSxhKSxhKSkucGF5bG9hZD10LG51bGwhPXImJihhLmNhbGxiYWNrPXIpLGRpKGUsYSksZWwoZSxuKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQscil7ZT1lLl9yZWFjdEludGVybmFsRmliZXI7dmFyIG49WnMoKSxhPXdpLnN1c3BlbnNlOyhhPWZpKG49JHMobixlLGEpLGEpKS50YWc9MSxhLnBheWxvYWQ9dCxudWxsIT1yJiYoYS5jYWxsYmFjaz1yKSxkaShlLGEpLGVsKGUsbil9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciByPVpzKCksbj13aS5zdXNwZW5zZTsobj1maShyPSRzKHIsZSxuKSxuKSkudGFnPTIsbnVsbCE9dCYmKG4uY2FsbGJhY2s9dCksZGkoZSxuKSxlbChlLHIpfX07ZnVuY3Rpb24geGkoZSx0LHIsbixhLGksbyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mKGU9ZS5zdGF0ZU5vZGUpLnNob3VsZENvbXBvbmVudFVwZGF0ZT9lLnNob3VsZENvbXBvbmVudFVwZGF0ZShuLGksbyk6IXQucHJvdG90eXBlfHwhdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnR8fCghWm4ocixuKXx8IVpuKGEsaSkpfWZ1bmN0aW9uIEFpKGUsdCxyKXt2YXIgbj0hMSxhPWZhLGk9dC5jb250ZXh0VHlwZTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pP2k9c2koaSk6KGE9Z2EodCk/cGE6aGEuY3VycmVudCxpPShuPW51bGwhPShuPXQuY29udGV4dFR5cGVzKSk/bWEoZSxhKTpmYSksdD1uZXcgdChyLGkpLGUubWVtb2l6ZWRTdGF0ZT1udWxsIT09dC5zdGF0ZSYmdm9pZCAwIT09dC5zdGF0ZT90LnN0YXRlOm51bGwsdC51cGRhdGVyPV9pLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbEZpYmVyPWUsbiYmKChlPWUuc3RhdGVOb2RlKS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWEsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1pKSx0fWZ1bmN0aW9uIENpKGUsdCxyLG4pe2U9dC5zdGF0ZSwiZnVuY3Rpb24iPT10eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocixuKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhyLG4pLHQuc3RhdGUhPT1lJiZfaS5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBQaShlLHQscixuKXt2YXIgYT1lLnN0YXRlTm9kZTthLnByb3BzPXIsYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsYS5yZWZzPWtpO3ZhciBpPXQuY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aT9hLmNvbnRleHQ9c2koaSk6KGk9Z2EodCk/cGE6aGEuY3VycmVudCxhLmNvbnRleHQ9bWEoZSxpKSksbnVsbCE9PShpPWUudXBkYXRlUXVldWUpJiYodmkoZSxpLHIsYSxuKSxhLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksImZ1bmN0aW9uIj09dHlwZW9mKGk9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpJiYoU2koZSx0LGksciksYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJiJmdW5jdGlvbiIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudHx8KHQ9YS5zdGF0ZSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PWEuc3RhdGUmJl9pLmVucXVldWVSZXBsYWNlU3RhdGUoYSxhLnN0YXRlLG51bGwpLG51bGwhPT0oaT1lLnVwZGF0ZVF1ZXVlKSYmKHZpKGUsaSxyLGEsbiksYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKGUuZWZmZWN0VGFnfD00KX12YXIgRWk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBUaShlLHQscil7aWYobnVsbCE9PShlPXIucmVmKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJiJvYmplY3QiIT10eXBlb2YgZSl7aWYoci5fb3duZXIpe2lmKHI9ci5fb3duZXIpe2lmKDEhPT1yLnRhZyl0aHJvdyBFcnJvcihvKDMwOSkpO3ZhciBuPXIuc3RhdGVOb2RlfWlmKCFuKXRocm93IEVycm9yKG8oMTQ3LGUpKTt2YXIgYT0iIitlO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1hP3QucmVmOigodD1mdW5jdGlvbihlKXt2YXIgdD1uLnJlZnM7dD09PWtpJiYodD1uLnJlZnM9e30pLG51bGw9PT1lP2RlbGV0ZSB0W2FdOnRbYV09ZX0pLl9zdHJpbmdSZWY9YSx0KX1pZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IobygyODQpKTtpZighci5fb3duZXIpdGhyb3cgRXJyb3IobygyOTAsZSkpfXJldHVybiBlfWZ1bmN0aW9uIFJpKGUsdCl7aWYoInRleHRhcmVhIiE9PWUudHlwZSl0aHJvdyBFcnJvcihvKDMxLCJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOnQsIiIpKX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiB0KHQscil7aWYoZSl7dmFyIG49dC5sYXN0RWZmZWN0O251bGwhPT1uPyhuLm5leHRFZmZlY3Q9cix0Lmxhc3RFZmZlY3Q9cik6dC5maXJzdEVmZmVjdD10Lmxhc3RFZmZlY3Q9cixyLm5leHRFZmZlY3Q9bnVsbCxyLmVmZmVjdFRhZz04fX1mdW5jdGlvbiByKHIsbil7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09bjspdChyLG4pLG49bi5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIG4oZSx0KXtmb3IoZT1uZXcgTWFwO251bGwhPT10OyludWxsIT09dC5rZXk/ZS5zZXQodC5rZXksdCk6ZS5zZXQodC5pbmRleCx0KSx0PXQuc2libGluZztyZXR1cm4gZX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4oZT1JbChlLHQpKS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gaSh0LHIsbil7cmV0dXJuIHQuaW5kZXg9bixlP251bGwhPT0obj10LmFsdGVybmF0ZSk/KG49bi5pbmRleCk8cj8odC5lZmZlY3RUYWc9MixyKTpuOih0LmVmZmVjdFRhZz0yLHIpOnJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZSYmbnVsbD09PXQuYWx0ZXJuYXRlJiYodC5lZmZlY3RUYWc9MiksdH1mdW5jdGlvbiBsKGUsdCxyLG4pe3JldHVybiBudWxsPT09dHx8NiE9PXQudGFnPygodD1EbChyLGUubW9kZSxuKSkucmV0dXJuPWUsdCk6KCh0PWEodCxyKSkucmV0dXJuPWUsdCl9ZnVuY3Rpb24gYyhlLHQscixuKXtyZXR1cm4gbnVsbCE9PXQmJnQuZWxlbWVudFR5cGU9PT1yLnR5cGU/KChuPWEodCxyLnByb3BzKSkucmVmPVRpKGUsdCxyKSxuLnJldHVybj1lLG4pOigobj1GbChyLnR5cGUsci5rZXksci5wcm9wcyxudWxsLGUubW9kZSxuKSkucmVmPVRpKGUsdCxyKSxuLnJldHVybj1lLG4pfWZ1bmN0aW9uIHUoZSx0LHIsbil7cmV0dXJuIG51bGw9PT10fHw0IT09dC50YWd8fHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1yLmNvbnRhaW5lckluZm98fHQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09ci5pbXBsZW1lbnRhdGlvbj8oKHQ9TWwocixlLm1vZGUsbikpLnJldHVybj1lLHQpOigodD1hKHQsci5jaGlsZHJlbnx8W10pKS5yZXR1cm49ZSx0KX1mdW5jdGlvbiBmKGUsdCxyLG4saSl7cmV0dXJuIG51bGw9PT10fHw3IT09dC50YWc/KCh0PUxsKHIsZS5tb2RlLG4saSkpLnJldHVybj1lLHQpOigodD1hKHQscikpLnJldHVybj1lLHQpfWZ1bmN0aW9uIGgoZSx0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0KXJldHVybih0PURsKCIiK3QsZS5tb2RlLHIpKS5yZXR1cm49ZSx0O2lmKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpe3N3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIE06cmV0dXJuKHI9RmwodC50eXBlLHQua2V5LHQucHJvcHMsbnVsbCxlLm1vZGUscikpLnJlZj1UaShlLG51bGwsdCksci5yZXR1cm49ZSxyO2Nhc2UgTjpyZXR1cm4odD1NbCh0LGUubW9kZSxyKSkucmV0dXJuPWUsdH1pZihFaSh0KXx8Sih0KSlyZXR1cm4odD1MbCh0LGUubW9kZSxyLG51bGwpKS5yZXR1cm49ZSx0O1JpKGUsdCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChlLHQscixuKXt2YXIgYT1udWxsIT09dD90LmtleTpudWxsO2lmKCJzdHJpbmciPT10eXBlb2Ygcnx8Im51bWJlciI9PXR5cGVvZiByKXJldHVybiBudWxsIT09YT9udWxsOmwoZSx0LCIiK3Isbik7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgTTpyZXR1cm4gci5rZXk9PT1hP3IudHlwZT09PWo/ZihlLHQsci5wcm9wcy5jaGlsZHJlbixuLGEpOmMoZSx0LHIsbik6bnVsbDtjYXNlIE46cmV0dXJuIHIua2V5PT09YT91KGUsdCxyLG4pOm51bGx9aWYoRWkocil8fEoocikpcmV0dXJuIG51bGwhPT1hP251bGw6ZihlLHQscixuLG51bGwpO1JpKGUscil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlLHQscixuLGEpe2lmKCJzdHJpbmciPT10eXBlb2Ygbnx8Im51bWJlciI9PXR5cGVvZiBuKXJldHVybiBsKHQsZT1lLmdldChyKXx8bnVsbCwiIituLGEpO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4pe3N3aXRjaChuLiQkdHlwZW9mKXtjYXNlIE06cmV0dXJuIGU9ZS5nZXQobnVsbD09PW4ua2V5P3I6bi5rZXkpfHxudWxsLG4udHlwZT09PWo/Zih0LGUsbi5wcm9wcy5jaGlsZHJlbixhLG4ua2V5KTpjKHQsZSxuLGEpO2Nhc2UgTjpyZXR1cm4gdSh0LGU9ZS5nZXQobnVsbD09PW4ua2V5P3I6bi5rZXkpfHxudWxsLG4sYSl9aWYoRWkobil8fEoobikpcmV0dXJuIGYodCxlPWUuZ2V0KHIpfHxudWxsLG4sYSxudWxsKTtSaSh0LG4pfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oYSxvLHMsbCl7Zm9yKHZhciBjPW51bGwsdT1udWxsLGY9byxtPW89MCxnPW51bGw7bnVsbCE9PWYmJm08cy5sZW5ndGg7bSsrKXtmLmluZGV4Pm0/KGc9ZixmPW51bGwpOmc9Zi5zaWJsaW5nO3ZhciB2PWQoYSxmLHNbbV0sbCk7aWYobnVsbD09PXYpe251bGw9PT1mJiYoZj1nKTticmVha31lJiZmJiZudWxsPT09di5hbHRlcm5hdGUmJnQoYSxmKSxvPWkodixvLG0pLG51bGw9PT11P2M9djp1LnNpYmxpbmc9dix1PXYsZj1nfWlmKG09PT1zLmxlbmd0aClyZXR1cm4gcihhLGYpLGM7aWYobnVsbD09PWYpe2Zvcig7bTxzLmxlbmd0aDttKyspbnVsbCE9PShmPWgoYSxzW21dLGwpKSYmKG89aShmLG8sbSksbnVsbD09PXU/Yz1mOnUuc2libGluZz1mLHU9Zik7cmV0dXJuIGN9Zm9yKGY9bihhLGYpO208cy5sZW5ndGg7bSsrKW51bGwhPT0oZz1wKGYsYSxtLHNbbV0sbCkpJiYoZSYmbnVsbCE9PWcuYWx0ZXJuYXRlJiZmLmRlbGV0ZShudWxsPT09Zy5rZXk/bTpnLmtleSksbz1pKGcsbyxtKSxudWxsPT09dT9jPWc6dS5zaWJsaW5nPWcsdT1nKTtyZXR1cm4gZSYmZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChhLGUpfSkpLGN9ZnVuY3Rpb24gZyhhLHMsbCxjKXt2YXIgdT1KKGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB1KXRocm93IEVycm9yKG8oMTUwKSk7aWYobnVsbD09KGw9dS5jYWxsKGwpKSl0aHJvdyBFcnJvcihvKDE1MSkpO2Zvcih2YXIgZj11PW51bGwsbT1zLGc9cz0wLHY9bnVsbCx5PWwubmV4dCgpO251bGwhPT1tJiYheS5kb25lO2crKyx5PWwubmV4dCgpKXttLmluZGV4Pmc/KHY9bSxtPW51bGwpOnY9bS5zaWJsaW5nO3ZhciBiPWQoYSxtLHkudmFsdWUsYyk7aWYobnVsbD09PWIpe251bGw9PT1tJiYobT12KTticmVha31lJiZtJiZudWxsPT09Yi5hbHRlcm5hdGUmJnQoYSxtKSxzPWkoYixzLGcpLG51bGw9PT1mP3U9YjpmLnNpYmxpbmc9YixmPWIsbT12fWlmKHkuZG9uZSlyZXR1cm4gcihhLG0pLHU7aWYobnVsbD09PW0pe2Zvcig7IXkuZG9uZTtnKysseT1sLm5leHQoKSludWxsIT09KHk9aChhLHkudmFsdWUsYykpJiYocz1pKHkscyxnKSxudWxsPT09Zj91PXk6Zi5zaWJsaW5nPXksZj15KTtyZXR1cm4gdX1mb3IobT1uKGEsbSk7IXkuZG9uZTtnKysseT1sLm5leHQoKSludWxsIT09KHk9cChtLGEsZyx5LnZhbHVlLGMpKSYmKGUmJm51bGwhPT15LmFsdGVybmF0ZSYmbS5kZWxldGUobnVsbD09PXkua2V5P2c6eS5rZXkpLHM9aSh5LHMsZyksbnVsbD09PWY/dT15OmYuc2libGluZz15LGY9eSk7cmV0dXJuIGUmJm0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoYSxlKX0pKSx1fXJldHVybiBmdW5jdGlvbihlLG4saSxsKXt2YXIgYz0ib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pJiZpLnR5cGU9PT1qJiZudWxsPT09aS5rZXk7YyYmKGk9aS5wcm9wcy5jaGlsZHJlbik7dmFyIHU9Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aTtpZih1KXN3aXRjaChpLiQkdHlwZW9mKXtjYXNlIE06ZTp7Zm9yKHU9aS5rZXksYz1uO251bGwhPT1jOyl7aWYoYy5rZXk9PT11KXtpZig3PT09Yy50YWc/aS50eXBlPT09ajpjLmVsZW1lbnRUeXBlPT09aS50eXBlKXtyKGUsYy5zaWJsaW5nKSwobj1hKGMsaS50eXBlPT09aj9pLnByb3BzLmNoaWxkcmVuOmkucHJvcHMpKS5yZWY9VGkoZSxjLGkpLG4ucmV0dXJuPWUsZT1uO2JyZWFrIGV9cihlLGMpO2JyZWFrfXQoZSxjKSxjPWMuc2libGluZ31pLnR5cGU9PT1qPygobj1MbChpLnByb3BzLmNoaWxkcmVuLGUubW9kZSxsLGkua2V5KSkucmV0dXJuPWUsZT1uKTooKGw9RmwoaS50eXBlLGkua2V5LGkucHJvcHMsbnVsbCxlLm1vZGUsbCkpLnJlZj1UaShlLG4saSksbC5yZXR1cm49ZSxlPWwpfXJldHVybiBzKGUpO2Nhc2UgTjplOntmb3IoYz1pLmtleTtudWxsIT09bjspe2lmKG4ua2V5PT09Yyl7aWYoND09PW4udGFnJiZuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09aS5jb250YWluZXJJbmZvJiZuLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWkuaW1wbGVtZW50YXRpb24pe3IoZSxuLnNpYmxpbmcpLChuPWEobixpLmNoaWxkcmVufHxbXSkpLnJldHVybj1lLGU9bjticmVhayBlfXIoZSxuKTticmVha310KGUsbiksbj1uLnNpYmxpbmd9KG49TWwoaSxlLm1vZGUsbCkpLnJldHVybj1lLGU9bn1yZXR1cm4gcyhlKX1pZigic3RyaW5nIj09dHlwZW9mIGl8fCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4gaT0iIitpLG51bGwhPT1uJiY2PT09bi50YWc/KHIoZSxuLnNpYmxpbmcpLChuPWEobixpKSkucmV0dXJuPWUsZT1uKToocihlLG4pLChuPURsKGksZS5tb2RlLGwpKS5yZXR1cm49ZSxlPW4pLHMoZSk7aWYoRWkoaSkpcmV0dXJuIG0oZSxuLGksbCk7aWYoSihpKSlyZXR1cm4gZyhlLG4saSxsKTtpZih1JiZSaShlLGkpLHZvaWQgMD09PWkmJiFjKXN3aXRjaChlLnRhZyl7Y2FzZSAxOmNhc2UgMDp0aHJvdyBlPWUudHlwZSxFcnJvcihvKDE1MixlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCJDb21wb25lbnQiKSl9cmV0dXJuIHIoZSxuKX19dmFyIElpPU9pKCEwKSxGaT1PaSghMSksTGk9e30sRGk9e2N1cnJlbnQ6TGl9LE1pPXtjdXJyZW50OkxpfSxOaT17Y3VycmVudDpMaX07ZnVuY3Rpb24gamkoZSl7aWYoZT09PUxpKXRocm93IEVycm9yKG8oMTc0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gQmkoZSx0KXt1YShOaSx0KSx1YShNaSxlKSx1YShEaSxMaSk7dmFyIHI9dC5ub2RlVHlwZTtzd2l0Y2gocil7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6cWUobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDp0PXFlKHQ9KHI9OD09PXI/dC5wYXJlbnROb2RlOnQpLm5hbWVzcGFjZVVSSXx8bnVsbCxyPXIudGFnTmFtZSl9Y2EoRGkpLHVhKERpLHQpfWZ1bmN0aW9uIFVpKGUpe2NhKERpKSxjYShNaSksY2EoTmkpfWZ1bmN0aW9uIHFpKGUpe2ppKE5pLmN1cnJlbnQpO3ZhciB0PWppKERpLmN1cnJlbnQpLHI9cWUodCxlLnR5cGUpO3QhPT1yJiYodWEoTWksZSksdWEoRGkscikpfWZ1bmN0aW9uIHppKGUpe01pLmN1cnJlbnQ9PT1lJiYoY2EoRGkpLGNhKE1pKSl9dmFyIFdpPXtjdXJyZW50OjB9O2Z1bmN0aW9uIEhpKGUpe2Zvcih2YXIgdD1lO251bGwhPT10Oyl7aWYoMTM9PT10LnRhZyl7dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1yJiYobnVsbD09PShyPXIuZGVoeWRyYXRlZCl8fCIkPyI9PT1yLmRhdGF8fCIkISI9PT1yLmRhdGEpKXJldHVybiB0fWVsc2UgaWYoMTk9PT10LnRhZyYmdm9pZCAwIT09dC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT0oNjQmdC5lZmZlY3RUYWcpKXJldHVybiB0fWVsc2UgaWYobnVsbCE9PXQuY2hpbGQpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXQuc2libGluZzspe2lmKG51bGw9PT10LnJldHVybnx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBHaShlLHQpe3JldHVybntyZXNwb25kZXI6ZSxwcm9wczp0fX12YXIgVmk9Ri5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFhpPUYuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsWWk9MCxLaT1udWxsLEppPW51bGwsUWk9bnVsbCxaaT1udWxsLCRpPW51bGwsZW89bnVsbCx0bz0wLHJvPW51bGwsbm89MCxhbz0hMSxpbz1udWxsLG9vPTA7ZnVuY3Rpb24gc28oKXt0aHJvdyBFcnJvcihvKDMyMSkpfWZ1bmN0aW9uIGxvKGUsdCl7aWYobnVsbD09PXQpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aCYmcjxlLmxlbmd0aDtyKyspaWYoIUpuKGVbcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gY28oZSx0LHIsbixhLGkpe2lmKFlpPWksS2k9dCxRaT1udWxsIT09ZT9lLm1lbW9pemVkU3RhdGU6bnVsbCxWaS5jdXJyZW50PW51bGw9PT1RaT9UbzpSbyx0PXIobixhKSxhbyl7ZG97YW89ITEsb28rPTEsUWk9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGwsZW89Wmkscm89JGk9Smk9bnVsbCxWaS5jdXJyZW50PVJvLHQ9cihuLGEpfXdoaWxlKGFvKTtpbz1udWxsLG9vPTB9aWYoVmkuY3VycmVudD1FbywoZT1LaSkubWVtb2l6ZWRTdGF0ZT1aaSxlLmV4cGlyYXRpb25UaW1lPXRvLGUudXBkYXRlUXVldWU9cm8sZS5lZmZlY3RUYWd8PW5vLGU9bnVsbCE9PUppJiZudWxsIT09SmkubmV4dCxZaT0wLGVvPSRpPVppPVFpPUppPUtpPW51bGwsdG89MCxybz1udWxsLG5vPTAsZSl0aHJvdyBFcnJvcihvKDMwMCkpO3JldHVybiB0fWZ1bmN0aW9uIHVvKCl7VmkuY3VycmVudD1FbyxZaT0wLGVvPSRpPVppPVFpPUppPUtpPW51bGwsdG89MCxybz1udWxsLG5vPTAsYW89ITEsaW89bnVsbCxvbz0wfWZ1bmN0aW9uIGZvKCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxxdWV1ZTpudWxsLGJhc2VVcGRhdGU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09JGk/Wmk9JGk9ZTokaT0kaS5uZXh0PWUsJGl9ZnVuY3Rpb24gaG8oKXtpZihudWxsIT09ZW8pZW89KCRpPWVvKS5uZXh0LFFpPW51bGwhPT0oSmk9UWkpP0ppLm5leHQ6bnVsbDtlbHNle2lmKG51bGw9PT1RaSl0aHJvdyBFcnJvcihvKDMxMCkpO3ZhciBlPXttZW1vaXplZFN0YXRlOihKaT1RaSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6SmkuYmFzZVN0YXRlLHF1ZXVlOkppLnF1ZXVlLGJhc2VVcGRhdGU6SmkuYmFzZVVwZGF0ZSxuZXh0Om51bGx9OyRpPW51bGw9PT0kaT9aaT1lOiRpLm5leHQ9ZSxRaT1KaS5uZXh0fXJldHVybiAkaX1mdW5jdGlvbiBwbyhlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZSk6dH1mdW5jdGlvbiBtbyhlKXt2YXIgdD1obygpLHI9dC5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihvKDMxMSkpO2lmKHIubGFzdFJlbmRlcmVkUmVkdWNlcj1lLDA8b28pe3ZhciBuPXIuZGlzcGF0Y2g7aWYobnVsbCE9PWlvKXt2YXIgYT1pby5nZXQocik7aWYodm9pZCAwIT09YSl7aW8uZGVsZXRlKHIpO3ZhciBpPXQubWVtb2l6ZWRTdGF0ZTtkb3tpPWUoaSxhLmFjdGlvbiksYT1hLm5leHR9d2hpbGUobnVsbCE9PWEpO3JldHVybiBKbihpLHQubWVtb2l6ZWRTdGF0ZSl8fChxbz0hMCksdC5tZW1vaXplZFN0YXRlPWksdC5iYXNlVXBkYXRlPT09ci5sYXN0JiYodC5iYXNlU3RhdGU9aSksci5sYXN0UmVuZGVyZWRTdGF0ZT1pLFtpLG5dfX1yZXR1cm5bdC5tZW1vaXplZFN0YXRlLG5dfW49ci5sYXN0O3ZhciBzPXQuYmFzZVVwZGF0ZTtpZihpPXQuYmFzZVN0YXRlLG51bGwhPT1zPyhudWxsIT09biYmKG4ubmV4dD1udWxsKSxuPXMubmV4dCk6bj1udWxsIT09bj9uLm5leHQ6bnVsbCxudWxsIT09bil7dmFyIGw9YT1udWxsLGM9bix1PSExO2Rve3ZhciBmPWMuZXhwaXJhdGlvblRpbWU7ZjxZaT8odXx8KHU9ITAsbD1zLGE9aSksZj50byYmaGwodG89ZikpOihmbChmLGMuc3VzcGVuc2VDb25maWcpLGk9Yy5lYWdlclJlZHVjZXI9PT1lP2MuZWFnZXJTdGF0ZTplKGksYy5hY3Rpb24pKSxzPWMsYz1jLm5leHR9d2hpbGUobnVsbCE9PWMmJmMhPT1uKTt1fHwobD1zLGE9aSksSm4oaSx0Lm1lbW9pemVkU3RhdGUpfHwocW89ITApLHQubWVtb2l6ZWRTdGF0ZT1pLHQuYmFzZVVwZGF0ZT1sLHQuYmFzZVN0YXRlPWEsci5sYXN0UmVuZGVyZWRTdGF0ZT1pfXJldHVyblt0Lm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gZ28oZSl7dmFyIHQ9Zm8oKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZSgpKSx0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9ZSxlPShlPXQucXVldWU9e2xhc3Q6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6cG8sbGFzdFJlbmRlcmVkU3RhdGU6ZX0pLmRpc3BhdGNoPVBvLmJpbmQobnVsbCxLaSxlKSxbdC5tZW1vaXplZFN0YXRlLGVdfWZ1bmN0aW9uIHZvKGUpe3JldHVybiBtbyhwbyl9ZnVuY3Rpb24geW8oZSx0LHIsbil7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTp0LGRlc3Ryb3k6cixkZXBzOm4sbmV4dDpudWxsfSxudWxsPT09cm8/KHJvPXtsYXN0RWZmZWN0Om51bGx9KS5sYXN0RWZmZWN0PWUubmV4dD1lOm51bGw9PT0odD1yby5sYXN0RWZmZWN0KT9yby5sYXN0RWZmZWN0PWUubmV4dD1lOihyPXQubmV4dCx0Lm5leHQ9ZSxlLm5leHQ9cixyby5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gYm8oZSx0LHIsbil7dmFyIGE9Zm8oKTtub3w9ZSxhLm1lbW9pemVkU3RhdGU9eW8odCxyLHZvaWQgMCx2b2lkIDA9PT1uP251bGw6bil9ZnVuY3Rpb24gd28oZSx0LHIsbil7dmFyIGE9aG8oKTtuPXZvaWQgMD09PW4/bnVsbDpuO3ZhciBpPXZvaWQgMDtpZihudWxsIT09Smkpe3ZhciBvPUppLm1lbW9pemVkU3RhdGU7aWYoaT1vLmRlc3Ryb3ksbnVsbCE9PW4mJmxvKG4sby5kZXBzKSlyZXR1cm4gdm9pZCB5bygwLHIsaSxuKX1ub3w9ZSxhLm1lbW9pemVkU3RhdGU9eW8odCxyLGksbil9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gYm8oNTE2LDE5MixlLHQpfWZ1bmN0aW9uIFNvKGUsdCl7cmV0dXJuIHdvKDUxNiwxOTIsZSx0KX1mdW5jdGlvbiBfbyhlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX0pOm51bGwhPXQ/KGU9ZSgpLHQuY3VycmVudD1lLGZ1bmN0aW9uKCl7dC5jdXJyZW50PW51bGx9KTp2b2lkIDB9ZnVuY3Rpb24geG8oKXt9ZnVuY3Rpb24gQW8oZSx0KXtyZXR1cm4gZm8oKS5tZW1vaXplZFN0YXRlPVtlLHZvaWQgMD09PXQ/bnVsbDp0XSxlfWZ1bmN0aW9uIENvKGUsdCl7dmFyIHI9aG8oKTt0PXZvaWQgMD09PXQ/bnVsbDp0O3ZhciBuPXIubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbnVsbCE9PW4mJm51bGwhPT10JiZsbyh0LG5bMV0pP25bMF06KHIubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlKX1mdW5jdGlvbiBQbyhlLHQscil7aWYoISgyNT5vbykpdGhyb3cgRXJyb3IobygzMDEpKTt2YXIgbj1lLmFsdGVybmF0ZTtpZihlPT09S2l8fG51bGwhPT1uJiZuPT09S2kpaWYoYW89ITAsZT17ZXhwaXJhdGlvblRpbWU6WWksc3VzcGVuc2VDb25maWc6bnVsbCxhY3Rpb246cixlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxudWxsPT09aW8mJihpbz1uZXcgTWFwKSx2b2lkIDA9PT0ocj1pby5nZXQodCkpKWlvLnNldCh0LGUpO2Vsc2V7Zm9yKHQ9cjtudWxsIT09dC5uZXh0Oyl0PXQubmV4dDt0Lm5leHQ9ZX1lbHNle3ZhciBhPVpzKCksaT13aS5zdXNwZW5zZTtpPXtleHBpcmF0aW9uVGltZTphPSRzKGEsZSxpKSxzdXNwZW5zZUNvbmZpZzppLGFjdGlvbjpyLGVhZ2VyUmVkdWNlcjpudWxsLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O3ZhciBzPXQubGFzdDtpZihudWxsPT09cylpLm5leHQ9aTtlbHNle3ZhciBsPXMubmV4dDtudWxsIT09bCYmKGkubmV4dD1sKSxzLm5leHQ9aX1pZih0Lmxhc3Q9aSwwPT09ZS5leHBpcmF0aW9uVGltZSYmKG51bGw9PT1ufHwwPT09bi5leHBpcmF0aW9uVGltZSkmJm51bGwhPT0obj10Lmxhc3RSZW5kZXJlZFJlZHVjZXIpKXRyeXt2YXIgYz10Lmxhc3RSZW5kZXJlZFN0YXRlLHU9bihjLHIpO2lmKGkuZWFnZXJSZWR1Y2VyPW4saS5lYWdlclN0YXRlPXUsSm4odSxjKSlyZXR1cm59Y2F0Y2goZSl7fWVsKGUsYSl9fXZhciBFbz17cmVhZENvbnRleHQ6c2ksdXNlQ2FsbGJhY2s6c28sdXNlQ29udGV4dDpzbyx1c2VFZmZlY3Q6c28sdXNlSW1wZXJhdGl2ZUhhbmRsZTpzbyx1c2VMYXlvdXRFZmZlY3Q6c28sdXNlTWVtbzpzbyx1c2VSZWR1Y2VyOnNvLHVzZVJlZjpzbyx1c2VTdGF0ZTpzbyx1c2VEZWJ1Z1ZhbHVlOnNvLHVzZVJlc3BvbmRlcjpzbyx1c2VEZWZlcnJlZFZhbHVlOnNvLHVzZVRyYW5zaXRpb246c299LFRvPXtyZWFkQ29udGV4dDpzaSx1c2VDYWxsYmFjazpBbyx1c2VDb250ZXh0OnNpLHVzZUVmZmVjdDprbyx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcj1udWxsIT1yP3IuY29uY2F0KFtlXSk6bnVsbCxibyg0LDM2LF9vLmJpbmQobnVsbCx0LGUpLHIpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYm8oNCwzNixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIHI9Zm8oKTtyZXR1cm4gdD12b2lkIDA9PT10P251bGw6dCxlPWUoKSxyLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQscil7dmFyIG49Zm8oKTtyZXR1cm4gdD12b2lkIDAhPT1yP3IodCk6dCxuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9dCxlPShlPW4ucXVldWU9e2xhc3Q6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZSxsYXN0UmVuZGVyZWRTdGF0ZTp0fSkuZGlzcGF0Y2g9UG8uYmluZChudWxsLEtpLGUpLFtuLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZT17Y3VycmVudDplfSxmbygpLm1lbW9pemVkU3RhdGU9ZX0sdXNlU3RhdGU6Z28sdXNlRGVidWdWYWx1ZTp4byx1c2VSZXNwb25kZXI6R2ksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWdvKGUpLG49clswXSxhPXJbMV07cmV0dXJuIGtvKChmdW5jdGlvbigpe2kudW5zdGFibGVfbmV4dCgoZnVuY3Rpb24oKXt2YXIgcj1YaS5zdXNwZW5zZTtYaS5zdXNwZW5zZT12b2lkIDA9PT10P251bGw6dDt0cnl7YShlKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2UsdF0pLG59LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9Z28oITEpLHI9dFswXSxuPXRbMV07cmV0dXJuW0FvKChmdW5jdGlvbih0KXtuKCEwKSxpLnVuc3RhYmxlX25leHQoKGZ1bmN0aW9uKCl7dmFyIHI9WGkuc3VzcGVuc2U7WGkuc3VzcGVuc2U9dm9pZCAwPT09ZT9udWxsOmU7dHJ5e24oITEpLHQoKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2Uscl0pLHJdfX0sUm89e3JlYWRDb250ZXh0OnNpLHVzZUNhbGxiYWNrOkNvLHVzZUNvbnRleHQ6c2ksdXNlRWZmZWN0OlNvLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiByPW51bGwhPXI/ci5jb25jYXQoW2VdKTpudWxsLHdvKDQsMzYsX28uYmluZChudWxsLHQsZSkscil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiB3byg0LDM2LGUsdCl9LHVzZU1lbW86ZnVuY3Rpb24oZSx0KXt2YXIgcj1obygpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIG49ci5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09biYmbnVsbCE9PXQmJmxvKHQsblsxXSk/blswXTooZT1lKCksci5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfSx1c2VSZWR1Y2VyOm1vLHVzZVJlZjpmdW5jdGlvbigpe3JldHVybiBobygpLm1lbW9pemVkU3RhdGV9LHVzZVN0YXRlOnZvLHVzZURlYnVnVmFsdWU6eG8sdXNlUmVzcG9uZGVyOkdpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj12bygpLG49clswXSxhPXJbMV07cmV0dXJuIFNvKChmdW5jdGlvbigpe2kudW5zdGFibGVfbmV4dCgoZnVuY3Rpb24oKXt2YXIgcj1YaS5zdXNwZW5zZTtYaS5zdXNwZW5zZT12b2lkIDA9PT10P251bGw6dDt0cnl7YShlKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2UsdF0pLG59LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dm8oKSxyPXRbMF0sbj10WzFdO3JldHVybltDbygoZnVuY3Rpb24odCl7bighMCksaS51bnN0YWJsZV9uZXh0KChmdW5jdGlvbigpe3ZhciByPVhpLnN1c3BlbnNlO1hpLnN1c3BlbnNlPXZvaWQgMD09PWU/bnVsbDplO3RyeXtuKCExKSx0KCl9ZmluYWxseXtYaS5zdXNwZW5zZT1yfX0pKX0pLFtlLHJdKSxyXX19LE9vPW51bGwsSW89bnVsbCxGbz0hMTtmdW5jdGlvbiBMbyhlLHQpe3ZhciByPVJsKDUsbnVsbCxudWxsLDApO3IuZWxlbWVudFR5cGU9IkRFTEVURUQiLHIudHlwZT0iREVMRVRFRCIsci5zdGF0ZU5vZGU9dCxyLnJldHVybj1lLHIuZWZmZWN0VGFnPTgsbnVsbCE9PWUubGFzdEVmZmVjdD8oZS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9cixlLmxhc3RFZmZlY3Q9cik6ZS5maXJzdEVmZmVjdD1lLmxhc3RFZmZlY3Q9cn1mdW5jdGlvbiBEbyhlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnZhciByPWUudHlwZTtyZXR1cm4gbnVsbCE9PSh0PTEhPT10Lm5vZGVUeXBlfHxyLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0KSYmKGUuc3RhdGVOb2RlPXQsITApO2Nhc2UgNjpyZXR1cm4gbnVsbCE9PSh0PSIiPT09ZS5wZW5kaW5nUHJvcHN8fDMhPT10Lm5vZGVUeXBlP251bGw6dCkmJihlLnN0YXRlTm9kZT10LCEwKTtjYXNlIDEzOmRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE1vKGUpe2lmKEZvKXt2YXIgdD1JbztpZih0KXt2YXIgcj10O2lmKCFEbyhlLHQpKXtpZighKHQ9dG4oci5uZXh0U2libGluZykpfHwhRG8oZSx0KSlyZXR1cm4gZS5lZmZlY3RUYWc9LTEwMjUmZS5lZmZlY3RUYWd8MixGbz0hMSx2b2lkKE9vPWUpO0xvKE9vLHIpfU9vPWUsSW89dG4odC5maXJzdENoaWxkKX1lbHNlIGUuZWZmZWN0VGFnPS0xMDI1JmUuZWZmZWN0VGFnfDIsRm89ITEsT289ZX19ZnVuY3Rpb24gTm8oZSl7Zm9yKGU9ZS5yZXR1cm47bnVsbCE9PWUmJjUhPT1lLnRhZyYmMyE9PWUudGFnJiYxMyE9PWUudGFnOyllPWUucmV0dXJuO09vPWV9ZnVuY3Rpb24gam8oZSl7aWYoZSE9PU9vKXJldHVybiExO2lmKCFGbylyZXR1cm4gTm8oZSksRm89ITAsITE7dmFyIHQ9ZS50eXBlO2lmKDUhPT1lLnRhZ3x8ImhlYWQiIT09dCYmImJvZHkiIT09dCYmIVpyKHQsZS5tZW1vaXplZFByb3BzKSlmb3IodD1Jbzt0OylMbyhlLHQpLHQ9dG4odC5uZXh0U2libGluZyk7aWYoTm8oZSksMTM9PT1lLnRhZyl7aWYoIShlPW51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpP2UuZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihvKDMxNykpO2U6e2ZvcihlPWUubmV4dFNpYmxpbmcsdD0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIHI9ZS5kYXRhO2lmKCIvJCI9PT1yKXtpZigwPT09dCl7SW89dG4oZS5uZXh0U2libGluZyk7YnJlYWsgZX10LS19ZWxzZSIkIiE9PXImJiIkISIhPT1yJiYiJD8iIT09cnx8dCsrfWU9ZS5uZXh0U2libGluZ31Jbz1udWxsfX1lbHNlIElvPU9vP3RuKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIEJvKCl7SW89T289bnVsbCxGbz0hMX12YXIgVW89Ri5SZWFjdEN1cnJlbnRPd25lcixxbz0hMTtmdW5jdGlvbiB6byhlLHQscixuKXt0LmNoaWxkPW51bGw9PT1lP0ZpKHQsbnVsbCxyLG4pOklpKHQsZS5jaGlsZCxyLG4pfWZ1bmN0aW9uIFdvKGUsdCxyLG4sYSl7cj1yLnJlbmRlcjt2YXIgaT10LnJlZjtyZXR1cm4gb2kodCxhKSxuPWNvKGUsdCxyLG4saSxhKSxudWxsPT09ZXx8cW8/KHQuZWZmZWN0VGFnfD0xLHpvKGUsdCxuLGEpLHQuY2hpbGQpOih0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5lZmZlY3RUYWcmPS01MTcsZS5leHBpcmF0aW9uVGltZTw9YSYmKGUuZXhwaXJhdGlvblRpbWU9MCksaXMoZSx0LGEpKX1mdW5jdGlvbiBIbyhlLHQscixuLGEsaSl7aWYobnVsbD09PWUpe3ZhciBvPXIudHlwZTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Ygb3x8T2wobyl8fHZvaWQgMCE9PW8uZGVmYXVsdFByb3BzfHxudWxsIT09ci5jb21wYXJlfHx2b2lkIDAhPT1yLmRlZmF1bHRQcm9wcz8oKGU9Rmwoci50eXBlLG51bGwsbixudWxsLHQubW9kZSxpKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKToodC50YWc9MTUsdC50eXBlPW8sR28oZSx0LG8sbixhLGkpKX1yZXR1cm4gbz1lLmNoaWxkLGE8aSYmKGE9by5tZW1vaXplZFByb3BzLChyPW51bGwhPT0ocj1yLmNvbXBhcmUpP3I6Wm4pKGEsbikmJmUucmVmPT09dC5yZWYpP2lzKGUsdCxpKToodC5lZmZlY3RUYWd8PTEsKGU9SWwobyxuKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKX1mdW5jdGlvbiBHbyhlLHQscixuLGEsaSl7cmV0dXJuIG51bGwhPT1lJiZabihlLm1lbW9pemVkUHJvcHMsbikmJmUucmVmPT09dC5yZWYmJihxbz0hMSxhPGkpP2lzKGUsdCxpKTpYbyhlLHQscixuLGkpfWZ1bmN0aW9uIFZvKGUsdCl7dmFyIHI9dC5yZWY7KG51bGw9PT1lJiZudWxsIT09cnx8bnVsbCE9PWUmJmUucmVmIT09cikmJih0LmVmZmVjdFRhZ3w9MTI4KX1mdW5jdGlvbiBYbyhlLHQscixuLGEpe3ZhciBpPWdhKHIpP3BhOmhhLmN1cnJlbnQ7cmV0dXJuIGk9bWEodCxpKSxvaSh0LGEpLHI9Y28oZSx0LHIsbixpLGEpLG51bGw9PT1lfHxxbz8odC5lZmZlY3RUYWd8PTEsem8oZSx0LHIsYSksdC5jaGlsZCk6KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmVmZmVjdFRhZyY9LTUxNyxlLmV4cGlyYXRpb25UaW1lPD1hJiYoZS5leHBpcmF0aW9uVGltZT0wKSxpcyhlLHQsYSkpfWZ1bmN0aW9uIFlvKGUsdCxyLG4sYSl7aWYoZ2Eocikpe3ZhciBpPSEwO2thKHQpfWVsc2UgaT0hMTtpZihvaSh0LGEpLG51bGw9PT10LnN0YXRlTm9kZSludWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksQWkodCxyLG4pLFBpKHQscixuLGEpLG49ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIG89dC5zdGF0ZU5vZGUscz10Lm1lbW9pemVkUHJvcHM7by5wcm9wcz1zO3ZhciBsPW8uY29udGV4dCxjPXIuY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09Yz9jPXNpKGMpOmM9bWEodCxjPWdhKHIpP3BhOmhhLmN1cnJlbnQpO3ZhciB1PXIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGY9ImZ1bmN0aW9uIj09dHlwZW9mIHV8fCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO2Z8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwocyE9PW58fGwhPT1jKSYmQ2kodCxvLG4sYyksbGk9ITE7dmFyIGg9dC5tZW1vaXplZFN0YXRlO2w9by5zdGF0ZT1oO3ZhciBkPXQudXBkYXRlUXVldWU7bnVsbCE9PWQmJih2aSh0LGQsbixvLGEpLGw9dC5tZW1vaXplZFN0YXRlKSxzIT09bnx8aCE9PWx8fGRhLmN1cnJlbnR8fGxpPygiZnVuY3Rpb24iPT10eXBlb2YgdSYmKFNpKHQscix1LG4pLGw9dC5tZW1vaXplZFN0YXRlKSwocz1saXx8eGkodCxyLHMsbixoLGwsYykpPyhmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnR8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQmJm8uY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5lZmZlY3RUYWd8PTQpKTooImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksdC5tZW1vaXplZFByb3BzPW4sdC5tZW1vaXplZFN0YXRlPWwpLG8ucHJvcHM9bixvLnN0YXRlPWwsby5jb250ZXh0PWMsbj1zKTooImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksbj0hMSl9ZWxzZSBvPXQuc3RhdGVOb2RlLHM9dC5tZW1vaXplZFByb3BzLG8ucHJvcHM9dC50eXBlPT09dC5lbGVtZW50VHlwZT9zOlFhKHQudHlwZSxzKSxsPW8uY29udGV4dCwib2JqZWN0Ij09dHlwZW9mKGM9ci5jb250ZXh0VHlwZSkmJm51bGwhPT1jP2M9c2koYyk6Yz1tYSh0LGM9Z2Eocik/cGE6aGEuY3VycmVudCksKGY9ImZ1bmN0aW9uIj09dHlwZW9mKHU9ci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwocyE9PW58fGwhPT1jKSYmQ2kodCxvLG4sYyksbGk9ITEsbD10Lm1lbW9pemVkU3RhdGUsaD1vLnN0YXRlPWwsbnVsbCE9PShkPXQudXBkYXRlUXVldWUpJiYodmkodCxkLG4sbyxhKSxoPXQubWVtb2l6ZWRTdGF0ZSkscyE9PW58fGwhPT1ofHxkYS5jdXJyZW50fHxsaT8oImZ1bmN0aW9uIj09dHlwZW9mIHUmJihTaSh0LHIsdSxuKSxoPXQubWVtb2l6ZWRTdGF0ZSksKHU9bGl8fHhpKHQscixzLG4sbCxoLGMpKT8oZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudFdpbGxVcGRhdGV8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsVXBkYXRlJiZvLmNvbXBvbmVudFdpbGxVcGRhdGUobixoLGMpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG4saCxjKSksImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkVXBkYXRlJiYodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5lZmZlY3RUYWd8PTI1NikpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSx0Lm1lbW9pemVkUHJvcHM9bix0Lm1lbW9pemVkU3RhdGU9aCksby5wcm9wcz1uLG8uc3RhdGU9aCxvLmNvbnRleHQ9YyxuPXUpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSxuPSExKTtyZXR1cm4gS28oZSx0LHIsbixpLGEpfWZ1bmN0aW9uIEtvKGUsdCxyLG4sYSxpKXtWbyhlLHQpO3ZhciBvPTAhPSg2NCZ0LmVmZmVjdFRhZyk7aWYoIW4mJiFvKXJldHVybiBhJiZTYSh0LHIsITEpLGlzKGUsdCxpKTtuPXQuc3RhdGVOb2RlLFVvLmN1cnJlbnQ9dDt2YXIgcz1vJiYiZnVuY3Rpb24iIT10eXBlb2Ygci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpuLnJlbmRlcigpO3JldHVybiB0LmVmZmVjdFRhZ3w9MSxudWxsIT09ZSYmbz8odC5jaGlsZD1JaSh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPUlpKHQsbnVsbCxzLGkpKTp6byhlLHQscyxpKSx0Lm1lbW9pemVkU3RhdGU9bi5zdGF0ZSxhJiZTYSh0LHIsITApLHQuY2hpbGR9ZnVuY3Rpb24gSm8oZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9iYSgwLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZiYSgwLHQuY29udGV4dCwhMSksQmkoZSx0LmNvbnRhaW5lckluZm8pfXZhciBRbyxabywkbyxlcz17ZGVoeWRyYXRlZDpudWxsLHJldHJ5VGltZTowfTtmdW5jdGlvbiB0cyhlLHQscil7dmFyIG4sYT10Lm1vZGUsaT10LnBlbmRpbmdQcm9wcyxvPVdpLmN1cnJlbnQscz0hMTtpZigobj0wIT0oNjQmdC5lZmZlY3RUYWcpKXx8KG49MCE9KDImbykmJihudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkpLG4/KHM9ITAsdC5lZmZlY3RUYWcmPS02NSk6bnVsbCE9PWUmJm51bGw9PT1lLm1lbW9pemVkU3RhdGV8fHZvaWQgMD09PWkuZmFsbGJhY2t8fCEwPT09aS51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8KG98PTEpLHVhKFdpLDEmbyksbnVsbD09PWUpe2lmKHZvaWQgMCE9PWkuZmFsbGJhY2smJk1vKHQpLHMpe2lmKHM9aS5mYWxsYmFjaywoaT1MbChudWxsLGEsMCxudWxsKSkucmV0dXJuPXQsMD09KDImdC5tb2RlKSlmb3IoZT1udWxsIT09dC5tZW1vaXplZFN0YXRlP3QuY2hpbGQuY2hpbGQ6dC5jaGlsZCxpLmNoaWxkPWU7bnVsbCE9PWU7KWUucmV0dXJuPWksZT1lLnNpYmxpbmc7cmV0dXJuKHI9TGwocyxhLHIsbnVsbCkpLnJldHVybj10LGkuc2libGluZz1yLHQubWVtb2l6ZWRTdGF0ZT1lcyx0LmNoaWxkPWkscn1yZXR1cm4gYT1pLmNoaWxkcmVuLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQuY2hpbGQ9RmkodCxudWxsLGEscil9aWYobnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSl7aWYoYT0oZT1lLmNoaWxkKS5zaWJsaW5nLHMpe2lmKGk9aS5mYWxsYmFjaywocj1JbChlLGUucGVuZGluZ1Byb3BzKSkucmV0dXJuPXQsMD09KDImdC5tb2RlKSYmKHM9bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZT90LmNoaWxkLmNoaWxkOnQuY2hpbGQpIT09ZS5jaGlsZClmb3Ioci5jaGlsZD1zO251bGwhPT1zOylzLnJldHVybj1yLHM9cy5zaWJsaW5nO3JldHVybihhPUlsKGEsaSxhLmV4cGlyYXRpb25UaW1lKSkucmV0dXJuPXQsci5zaWJsaW5nPWEsci5jaGlsZEV4cGlyYXRpb25UaW1lPTAsdC5tZW1vaXplZFN0YXRlPWVzLHQuY2hpbGQ9cixhfXJldHVybiByPUlpKHQsZS5jaGlsZCxpLmNoaWxkcmVuLHIpLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQuY2hpbGQ9cn1pZihlPWUuY2hpbGQscyl7aWYocz1pLmZhbGxiYWNrLChpPUxsKG51bGwsYSwwLG51bGwpKS5yZXR1cm49dCxpLmNoaWxkPWUsbnVsbCE9PWUmJihlLnJldHVybj1pKSwwPT0oMiZ0Lm1vZGUpKWZvcihlPW51bGwhPT10Lm1lbW9pemVkU3RhdGU/dC5jaGlsZC5jaGlsZDp0LmNoaWxkLGkuY2hpbGQ9ZTtudWxsIT09ZTspZS5yZXR1cm49aSxlPWUuc2libGluZztyZXR1cm4ocj1MbChzLGEscixudWxsKSkucmV0dXJuPXQsaS5zaWJsaW5nPXIsci5lZmZlY3RUYWd8PTIsaS5jaGlsZEV4cGlyYXRpb25UaW1lPTAsdC5tZW1vaXplZFN0YXRlPWVzLHQuY2hpbGQ9aSxyfXJldHVybiB0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LmNoaWxkPUlpKHQsZSxpLmNoaWxkcmVuLHIpfWZ1bmN0aW9uIHJzKGUsdCl7ZS5leHBpcmF0aW9uVGltZTx0JiYoZS5leHBpcmF0aW9uVGltZT10KTt2YXIgcj1lLmFsdGVybmF0ZTtudWxsIT09ciYmci5leHBpcmF0aW9uVGltZTx0JiYoci5leHBpcmF0aW9uVGltZT10KSxpaShlLnJldHVybix0KX1mdW5jdGlvbiBucyhlLHQscixuLGEsaSl7dmFyIG89ZS5tZW1vaXplZFN0YXRlO251bGw9PT1vP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxsYXN0Om4sdGFpbDpyLHRhaWxFeHBpcmF0aW9uOjAsdGFpbE1vZGU6YSxsYXN0RWZmZWN0Oml9OihvLmlzQmFja3dhcmRzPXQsby5yZW5kZXJpbmc9bnVsbCxvLmxhc3Q9bixvLnRhaWw9cixvLnRhaWxFeHBpcmF0aW9uPTAsby50YWlsTW9kZT1hLG8ubGFzdEVmZmVjdD1pKX1mdW5jdGlvbiBhcyhlLHQscil7dmFyIG49dC5wZW5kaW5nUHJvcHMsYT1uLnJldmVhbE9yZGVyLGk9bi50YWlsO2lmKHpvKGUsdCxuLmNoaWxkcmVuLHIpLDAhPSgyJihuPVdpLmN1cnJlbnQpKSluPTEmbnwyLHQuZWZmZWN0VGFnfD02NDtlbHNle2lmKG51bGwhPT1lJiYwIT0oNjQmZS5lZmZlY3RUYWcpKWU6Zm9yKGU9dC5jaGlsZDtudWxsIT09ZTspe2lmKDEzPT09ZS50YWcpbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmcnMoZSxyKTtlbHNlIGlmKDE5PT09ZS50YWcpcnMoZSxyKTtlbHNlIGlmKG51bGwhPT1lLmNoaWxkKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhayBlO2Zvcig7bnVsbD09PWUuc2libGluZzspe2lmKG51bGw9PT1lLnJldHVybnx8ZS5yZXR1cm49PT10KWJyZWFrIGU7ZT1lLnJldHVybn1lLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nfW4mPTF9aWYodWEoV2ksbiksMD09KDImdC5tb2RlKSl0Lm1lbW9pemVkU3RhdGU9bnVsbDtlbHNlIHN3aXRjaChhKXtjYXNlImZvcndhcmRzIjpmb3Iocj10LmNoaWxkLGE9bnVsbDtudWxsIT09cjspbnVsbCE9PShlPXIuYWx0ZXJuYXRlKSYmbnVsbD09PUhpKGUpJiYoYT1yKSxyPXIuc2libGluZztudWxsPT09KHI9YSk/KGE9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihhPXIuc2libGluZyxyLnNpYmxpbmc9bnVsbCksbnModCwhMSxhLHIsaSx0Lmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpmb3Iocj1udWxsLGE9dC5jaGlsZCx0LmNoaWxkPW51bGw7bnVsbCE9PWE7KXtpZihudWxsIT09KGU9YS5hbHRlcm5hdGUpJiZudWxsPT09SGkoZSkpe3QuY2hpbGQ9YTticmVha31lPWEuc2libGluZyxhLnNpYmxpbmc9cixyPWEsYT1lfW5zKHQsITAscixudWxsLGksdC5sYXN0RWZmZWN0KTticmVhaztjYXNlInRvZ2V0aGVyIjpucyh0LCExLG51bGwsbnVsbCx2b2lkIDAsdC5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OnQubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIGlzKGUsdCxyKXtudWxsIT09ZSYmKHQuZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKTt2YXIgbj10LmV4cGlyYXRpb25UaW1lO2lmKDAhPT1uJiZobChuKSx0LmNoaWxkRXhwaXJhdGlvblRpbWU8cilyZXR1cm4gbnVsbDtpZihudWxsIT09ZSYmdC5jaGlsZCE9PWUuY2hpbGQpdGhyb3cgRXJyb3IobygxNTMpKTtpZihudWxsIT09dC5jaGlsZCl7Zm9yKHI9SWwoZT10LmNoaWxkLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpLHQuY2hpbGQ9cixyLnJldHVybj10O251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLChyPXIuc2libGluZz1JbChlLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpKS5yZXR1cm49dDtyLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBvcyhlKXtlLmVmZmVjdFRhZ3w9NH1mdW5jdGlvbiBzcyhlLHQpe3N3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciByPW51bGw7bnVsbCE9PXQ7KW51bGwhPT10LmFsdGVybmF0ZSYmKHI9dCksdD10LnNpYmxpbmc7bnVsbD09PXI/ZS50YWlsPW51bGw6ci5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOnI9ZS50YWlsO2Zvcih2YXIgbj1udWxsO251bGwhPT1yOyludWxsIT09ci5hbHRlcm5hdGUmJihuPXIpLHI9ci5zaWJsaW5nO251bGw9PT1uP3R8fG51bGw9PT1lLnRhaWw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpuLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gbHMoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDE6Z2EoZS50eXBlKSYmdmEoKTt2YXIgdD1lLmVmZmVjdFRhZztyZXR1cm4gNDA5NiZ0PyhlLmVmZmVjdFRhZz0tNDA5NyZ0fDY0LGUpOm51bGw7Y2FzZSAzOmlmKFVpKCkseWEoKSwwIT0oNjQmKHQ9ZS5lZmZlY3RUYWcpKSl0aHJvdyBFcnJvcihvKDI4NSkpO3JldHVybiBlLmVmZmVjdFRhZz0tNDA5NyZ0fDY0LGU7Y2FzZSA1OnJldHVybiB6aShlKSxudWxsO2Nhc2UgMTM6cmV0dXJuIGNhKFdpKSw0MDk2Jih0PWUuZWZmZWN0VGFnKT8oZS5lZmZlY3RUYWc9LTQwOTcmdHw2NCxlKTpudWxsO2Nhc2UgMTk6cmV0dXJuIGNhKFdpKSxudWxsO2Nhc2UgNDpyZXR1cm4gVWkoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIGFpKGUpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gY3MoZSx0KXtyZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpaKHQpfX1Rbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LmNoaWxkO251bGwhPT1yOyl7aWYoNT09PXIudGFnfHw2PT09ci50YWcpZS5hcHBlbmRDaGlsZChyLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09ci50YWcmJm51bGwhPT1yLmNoaWxkKXtyLmNoaWxkLnJldHVybj1yLHI9ci5jaGlsZDtjb250aW51ZX1pZihyPT09dClicmVhaztmb3IoO251bGw9PT1yLnNpYmxpbmc7KXtpZihudWxsPT09ci5yZXR1cm58fHIucmV0dXJuPT09dClyZXR1cm47cj1yLnJldHVybn1yLnNpYmxpbmcucmV0dXJuPXIucmV0dXJuLHI9ci5zaWJsaW5nfX0sWm89ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1lLm1lbW9pemVkUHJvcHM7aWYobyE9PW4pe3ZhciBzLGwsYz10LnN0YXRlTm9kZTtzd2l0Y2goamkoRGkuY3VycmVudCksZT1udWxsLHIpe2Nhc2UiaW5wdXQiOm89Q2UoYyxvKSxuPUNlKGMsbiksZT1bXTticmVhaztjYXNlIm9wdGlvbiI6bz1JZShjLG8pLG49SWUoYyxuKSxlPVtdO2JyZWFrO2Nhc2Uic2VsZWN0IjpvPWEoe30sbyx7dmFsdWU6dm9pZCAwfSksbj1hKHt9LG4se3ZhbHVlOnZvaWQgMH0pLGU9W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bz1MZShjLG8pLG49TGUoYyxuKSxlPVtdO2JyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIiE9dHlwZW9mIG8ub25DbGljayYmImZ1bmN0aW9uIj09dHlwZW9mIG4ub25DbGljayYmKGMub25jbGljaz1Xcil9Zm9yKHMgaW4gVXIocixuKSxyPW51bGwsbylpZighbi5oYXNPd25Qcm9wZXJ0eShzKSYmby5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9b1tzXSlpZigic3R5bGUiPT09cylmb3IobCBpbiBjPW9bc10pYy5oYXNPd25Qcm9wZXJ0eShsKSYmKHJ8fChyPXt9KSxyW2xdPSIiKTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiE9PXMmJiJjaGlsZHJlbiIhPT1zJiYic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiE9PXMmJiJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciIT09cyYmImF1dG9Gb2N1cyIhPT1zJiYoZC5oYXNPd25Qcm9wZXJ0eShzKT9lfHwoZT1bXSk6KGU9ZXx8W10pLnB1c2gocyxudWxsKSk7Zm9yKHMgaW4gbil7dmFyIHU9bltzXTtpZihjPW51bGwhPW8/b1tzXTp2b2lkIDAsbi5oYXNPd25Qcm9wZXJ0eShzKSYmdSE9PWMmJihudWxsIT11fHxudWxsIT1jKSlpZigic3R5bGUiPT09cylpZihjKXtmb3IobCBpbiBjKSFjLmhhc093blByb3BlcnR5KGwpfHx1JiZ1Lmhhc093blByb3BlcnR5KGwpfHwocnx8KHI9e30pLHJbbF09IiIpO2ZvcihsIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShsKSYmY1tsXSE9PXVbbF0mJihyfHwocj17fSkscltsXT11W2xdKX1lbHNlIHJ8fChlfHwoZT1bXSksZS5wdXNoKHMscikpLHI9dTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PXM/KHU9dT91Ll9faHRtbDp2b2lkIDAsYz1jP2MuX19odG1sOnZvaWQgMCxudWxsIT11JiZjIT09dSYmKGU9ZXx8W10pLnB1c2gocywiIit1KSk6ImNoaWxkcmVuIj09PXM/Yz09PXV8fCJzdHJpbmciIT10eXBlb2YgdSYmIm51bWJlciIhPXR5cGVvZiB1fHwoZT1lfHxbXSkucHVzaChzLCIiK3UpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09cyYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1zJiYoZC5oYXNPd25Qcm9wZXJ0eShzKT8obnVsbCE9dSYmenIoaSxzKSxlfHxjPT09dXx8KGU9W10pKTooZT1lfHxbXSkucHVzaChzLHUpKX1yJiYoZT1lfHxbXSkucHVzaCgic3R5bGUiLHIpLGk9ZSwodC51cGRhdGVRdWV1ZT1pKSYmb3ModCl9fSwkbz1mdW5jdGlvbihlLHQscixuKXtyIT09biYmb3ModCl9O3ZhciB1cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtmdW5jdGlvbiBmcyhlLHQpe3ZhciByPXQuc291cmNlLG49dC5zdGFjaztudWxsPT09biYmbnVsbCE9PXImJihuPVoocikpLG51bGwhPT1yJiZRKHIudHlwZSksdD10LnZhbHVlLG51bGwhPT1lJiYxPT09ZS50YWcmJlEoZS50eXBlKTt0cnl7Y29uc29sZS5lcnJvcih0KX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9fWZ1bmN0aW9uIGhzKGUpe3ZhciB0PWUucmVmO2lmKG51bGwhPT10KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXRyeXt0KG51bGwpfWNhdGNoKHQpe3hsKGUsdCl9ZWxzZSB0LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBkcyhlLHQpe3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpwcygyLDAsdCk7YnJlYWs7Y2FzZSAxOmlmKDI1NiZ0LmVmZmVjdFRhZyYmbnVsbCE9PWUpe3ZhciByPWUubWVtb2l6ZWRQcm9wcyxuPWUubWVtb2l6ZWRTdGF0ZTt0PShlPXQuc3RhdGVOb2RlKS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh0LmVsZW1lbnRUeXBlPT09dC50eXBlP3I6UWEodC50eXBlLHIpLG4pLGUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9dH1icmVhaztjYXNlIDM6Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWZ1bmN0aW9uIHBzKGUsdCxyKXtpZihudWxsIT09KHI9bnVsbCE9PShyPXIudXBkYXRlUXVldWUpP3IubGFzdEVmZmVjdDpudWxsKSl7dmFyIG49cj1yLm5leHQ7ZG97aWYoMCE9KG4udGFnJmUpKXt2YXIgYT1uLmRlc3Ryb3k7bi5kZXN0cm95PXZvaWQgMCx2b2lkIDAhPT1hJiZhKCl9MCE9KG4udGFnJnQpJiYoYT1uLmNyZWF0ZSxuLmRlc3Ryb3k9YSgpKSxuPW4ubmV4dH13aGlsZShuIT09cil9fWZ1bmN0aW9uIG1zKGUsdCxyKXtzd2l0Y2goImZ1bmN0aW9uIj09dHlwZW9mIEVsJiZFbCh0KSx0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKG51bGwhPT0oZT10LnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PShlPWUubGFzdEVmZmVjdCkpe3ZhciBuPWUubmV4dDtIYSg5NzxyPzk3OnIsKGZ1bmN0aW9uKCl7dmFyIGU9bjtkb3t2YXIgcj1lLmRlc3Ryb3k7aWYodm9pZCAwIT09cil7dmFyIGE9dDt0cnl7cigpfWNhdGNoKGUpe3hsKGEsZSl9fWU9ZS5uZXh0fXdoaWxlKGUhPT1uKX0pKX1icmVhaztjYXNlIDE6aHModCksImZ1bmN0aW9uIj09dHlwZW9mKHI9dC5zdGF0ZU5vZGUpLmNvbXBvbmVudFdpbGxVbm1vdW50JiZmdW5jdGlvbihlLHQpe3RyeXt0LnByb3BzPWUubWVtb2l6ZWRQcm9wcyx0LnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSx0LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godCl7eGwoZSx0KX19KHQscik7YnJlYWs7Y2FzZSA1OmhzKHQpO2JyZWFrO2Nhc2UgNDpicyhlLHQscil9fWZ1bmN0aW9uIGdzKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2UucmV0dXJuPW51bGwsZS5jaGlsZD1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUuYWx0ZXJuYXRlPW51bGwsZS5maXJzdEVmZmVjdD1udWxsLGUubGFzdEVmZmVjdD1udWxsLGUucGVuZGluZ1Byb3BzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsbnVsbCE9PXQmJmdzKHQpfWZ1bmN0aW9uIHZzKGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8ND09PWUudGFnfWZ1bmN0aW9uIHlzKGUpe2U6e2Zvcih2YXIgdD1lLnJldHVybjtudWxsIT09dDspe2lmKHZzKHQpKXt2YXIgcj10O2JyZWFrIGV9dD10LnJldHVybn10aHJvdyBFcnJvcihvKDE2MCkpfXN3aXRjaCh0PXIuc3RhdGVOb2RlLHIudGFnKXtjYXNlIDU6dmFyIG49ITE7YnJlYWs7Y2FzZSAzOmNhc2UgNDp0PXQuY29udGFpbmVySW5mbyxuPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygxNjEpKX0xNiZyLmVmZmVjdFRhZyYmKEhlKHQsIiIpLHIuZWZmZWN0VGFnJj0tMTcpO2U6dDpmb3Iocj1lOzspe2Zvcig7bnVsbD09PXIuc2libGluZzspe2lmKG51bGw9PT1yLnJldHVybnx8dnMoci5yZXR1cm4pKXtyPW51bGw7YnJlYWsgZX1yPXIucmV0dXJufWZvcihyLnNpYmxpbmcucmV0dXJuPXIucmV0dXJuLHI9ci5zaWJsaW5nOzUhPT1yLnRhZyYmNiE9PXIudGFnJiYxOCE9PXIudGFnOyl7aWYoMiZyLmVmZmVjdFRhZyljb250aW51ZSB0O2lmKG51bGw9PT1yLmNoaWxkfHw0PT09ci50YWcpY29udGludWUgdDtyLmNoaWxkLnJldHVybj1yLHI9ci5jaGlsZH1pZighKDImci5lZmZlY3RUYWcpKXtyPXIuc3RhdGVOb2RlO2JyZWFrIGV9fWZvcih2YXIgYT1lOzspe3ZhciBpPTU9PT1hLnRhZ3x8Nj09PWEudGFnO2lmKGkpe3ZhciBzPWk/YS5zdGF0ZU5vZGU6YS5zdGF0ZU5vZGUuaW5zdGFuY2U7aWYocilpZihuKXt2YXIgbD1zO3M9ciw4PT09KGk9dCkubm9kZVR5cGU/aS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLHMpOmkuaW5zZXJ0QmVmb3JlKGwscyl9ZWxzZSB0Lmluc2VydEJlZm9yZShzLHIpO2Vsc2Ugbj8oOD09PShsPXQpLm5vZGVUeXBlPyhpPWwucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHMsbCk6KGk9bCkuYXBwZW5kQ2hpbGQocyksbnVsbCE9KGw9bC5fcmVhY3RSb290Q29udGFpbmVyKXx8bnVsbCE9PWkub25jbGlja3x8KGkub25jbGljaz1XcikpOnQuYXBwZW5kQ2hpbGQocyl9ZWxzZSBpZig0IT09YS50YWcmJm51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hLGE9YS5jaGlsZDtjb250aW51ZX1pZihhPT09ZSlicmVhaztmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09ZSlyZXR1cm47YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuLGE9YS5zaWJsaW5nfX1mdW5jdGlvbiBicyhlLHQscil7Zm9yKHZhciBuLGEsaT10LHM9ITE7Oyl7aWYoIXMpe3M9aS5yZXR1cm47ZTpmb3IoOzspe2lmKG51bGw9PT1zKXRocm93IEVycm9yKG8oMTYwKSk7c3dpdGNoKG49cy5zdGF0ZU5vZGUscy50YWcpe2Nhc2UgNTphPSExO2JyZWFrIGU7Y2FzZSAzOmNhc2UgNDpuPW4uY29udGFpbmVySW5mbyxhPSEwO2JyZWFrIGV9cz1zLnJldHVybn1zPSEwfWlmKDU9PT1pLnRhZ3x8Nj09PWkudGFnKXtlOmZvcih2YXIgbD1lLGM9aSx1PXIsZj1jOzspaWYobXMobCxmLHUpLG51bGwhPT1mLmNoaWxkJiY0IT09Zi50YWcpZi5jaGlsZC5yZXR1cm49ZixmPWYuY2hpbGQ7ZWxzZXtpZihmPT09YylicmVhaztmb3IoO251bGw9PT1mLnNpYmxpbmc7KXtpZihudWxsPT09Zi5yZXR1cm58fGYucmV0dXJuPT09YylicmVhayBlO2Y9Zi5yZXR1cm59Zi5zaWJsaW5nLnJldHVybj1mLnJldHVybixmPWYuc2libGluZ31hPyhsPW4sYz1pLnN0YXRlTm9kZSw4PT09bC5ub2RlVHlwZT9sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk6bC5yZW1vdmVDaGlsZChjKSk6bi5yZW1vdmVDaGlsZChpLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09aS50YWcpe2lmKG51bGwhPT1pLmNoaWxkKXtuPWkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYT0hMCxpLmNoaWxkLnJldHVybj1pLGk9aS5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihtcyhlLGksciksbnVsbCE9PWkuY2hpbGQpe2kuY2hpbGQucmV0dXJuPWksaT1pLmNoaWxkO2NvbnRpbnVlfWlmKGk9PT10KWJyZWFrO2Zvcig7bnVsbD09PWkuc2libGluZzspe2lmKG51bGw9PT1pLnJldHVybnx8aS5yZXR1cm49PT10KXJldHVybjs0PT09KGk9aS5yZXR1cm4pLnRhZyYmKHM9ITEpfWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9fWZ1bmN0aW9uIHdzKGUsdCl7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6cHMoNCw4LHQpO2JyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDU6dmFyIHI9dC5zdGF0ZU5vZGU7aWYobnVsbCE9cil7dmFyIG49dC5tZW1vaXplZFByb3BzLGE9bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOm47ZT10LnR5cGU7dmFyIGk9dC51cGRhdGVRdWV1ZTtpZih0LnVwZGF0ZVF1ZXVlPW51bGwsbnVsbCE9PWkpe2ZvcihyW29uXT1uLCJpbnB1dCI9PT1lJiYicmFkaW8iPT09bi50eXBlJiZudWxsIT1uLm5hbWUmJkVlKHIsbikscXIoZSxhKSx0PXFyKGUsbiksYT0wO2E8aS5sZW5ndGg7YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTsic3R5bGUiPT09cz9qcihyLGwpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT1zP1dlKHIsbCk6ImNoaWxkcmVuIj09PXM/SGUocixsKTpTZShyLHMsbCx0KX1zd2l0Y2goZSl7Y2FzZSJpbnB1dCI6VGUocixuKTticmVhaztjYXNlInRleHRhcmVhIjpNZShyLG4pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0PXIuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxyLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFuLm11bHRpcGxlLG51bGwhPShlPW4udmFsdWUpP0ZlKHIsISFuLm11bHRpcGxlLGUsITEpOnQhPT0hIW4ubXVsdGlwbGUmJihudWxsIT1uLmRlZmF1bHRWYWx1ZT9GZShyLCEhbi5tdWx0aXBsZSxuLmRlZmF1bHRWYWx1ZSwhMCk6RmUociwhIW4ubXVsdGlwbGUsbi5tdWx0aXBsZT9bXToiIiwhMSkpfX19YnJlYWs7Y2FzZSA2OmlmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihvKDE2MikpO3Quc3RhdGVOb2RlLm5vZGVWYWx1ZT10Lm1lbW9pemVkUHJvcHM7YnJlYWs7Y2FzZSAzOih0PXQuc3RhdGVOb2RlKS5oeWRyYXRlJiYodC5oeWRyYXRlPSExLEN0KHQuY29udGFpbmVySW5mbykpO2JyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihyPXQsbnVsbD09PXQubWVtb2l6ZWRTdGF0ZT9uPSExOihuPSEwLHI9dC5jaGlsZCxVcz1xYSgpKSxudWxsIT09cillOmZvcihlPXI7Oyl7aWYoNT09PWUudGFnKWk9ZS5zdGF0ZU5vZGUsbj8iZnVuY3Rpb24iPT10eXBlb2YoaT1pLnN0eWxlKS5zZXRQcm9wZXJ0eT9pLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmkuZGlzcGxheT0ibm9uZSI6KGk9ZS5zdGF0ZU5vZGUsYT1udWxsIT0oYT1lLm1lbW9pemVkUHJvcHMuc3R5bGUpJiZhLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/YS5kaXNwbGF5Om51bGwsaS5zdHlsZS5kaXNwbGF5PU5yKCJkaXNwbGF5IixhKSk7ZWxzZSBpZig2PT09ZS50YWcpZS5zdGF0ZU5vZGUubm9kZVZhbHVlPW4/IiI6ZS5tZW1vaXplZFByb3BzO2Vsc2V7aWYoMTM9PT1lLnRhZyYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbD09PWUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXsoaT1lLmNoaWxkLnNpYmxpbmcpLnJldHVybj1lLGU9aTtjb250aW51ZX1pZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9fWlmKGU9PT1yKWJyZWFrIGU7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PXIpYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9a3ModCk7YnJlYWs7Y2FzZSAxOTprcyh0KTticmVhaztjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWZ1bmN0aW9uIGtzKGUpe3ZhciB0PWUudXBkYXRlUXVldWU7aWYobnVsbCE9PXQpe2UudXBkYXRlUXVldWU9bnVsbDt2YXIgcj1lLnN0YXRlTm9kZTtudWxsPT09ciYmKHI9ZS5zdGF0ZU5vZGU9bmV3IHVzKSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPUNsLmJpbmQobnVsbCxlLHQpO3IuaGFzKHQpfHwoci5hZGQodCksdC50aGVuKG4sbikpfSkpfX12YXIgU3M9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXA7ZnVuY3Rpb24gX3MoZSx0LHIpeyhyPWZpKHIsbnVsbCkpLnRhZz0zLHIucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgbj10LnZhbHVlO3JldHVybiByLmNhbGxiYWNrPWZ1bmN0aW9uKCl7enN8fCh6cz0hMCxXcz1uKSxmcyhlLHQpfSxyfWZ1bmN0aW9uIHhzKGUsdCxyKXsocj1maShyLG51bGwpKS50YWc9Mzt2YXIgbj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgYT10LnZhbHVlO3IucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiBmcyhlLHQpLG4oYSl9fXZhciBpPWUuc3RhdGVOb2RlO3JldHVybiBudWxsIT09aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuY29tcG9uZW50RGlkQ2F0Y2gmJihyLmNhbGxiYWNrPWZ1bmN0aW9uKCl7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihudWxsPT09SHM/SHM9bmV3IFNldChbdGhpc10pOkhzLmFkZCh0aGlzKSxmcyhlLHQpKTt2YXIgcj10LnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2godC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PXI/cjoiIn0pfSkscn12YXIgQXMsQ3M9TWF0aC5jZWlsLFBzPUYuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixFcz1GLlJlYWN0Q3VycmVudE93bmVyLFRzPTAsUnM9bnVsbCxPcz1udWxsLElzPTAsRnM9MCxMcz1udWxsLERzPTEwNzM3NDE4MjMsTXM9MTA3Mzc0MTgyMyxOcz1udWxsLGpzPTAsQnM9ITEsVXM9MCxxcz1udWxsLHpzPSExLFdzPW51bGwsSHM9bnVsbCxHcz0hMSxWcz1udWxsLFhzPTkwLFlzPW51bGwsS3M9MCxKcz1udWxsLFFzPTA7ZnVuY3Rpb24gWnMoKXtyZXR1cm4gMCE9KDQ4JlRzKT8xMDczNzQxODIxLShxYSgpLzEwfDApOjAhPT1Rcz9RczpRcz0xMDczNzQxODIxLShxYSgpLzEwfDApfWZ1bmN0aW9uICRzKGUsdCxyKXtpZigwPT0oMiYodD10Lm1vZGUpKSlyZXR1cm4gMTA3Mzc0MTgyMzt2YXIgbj16YSgpO2lmKDA9PSg0JnQpKXJldHVybiA5OT09PW4/MTA3Mzc0MTgyMzoxMDczNzQxODIyO2lmKDAhPSgxNiZUcykpcmV0dXJuIElzO2lmKG51bGwhPT1yKWU9SmEoZSwwfHIudGltZW91dE1zfHw1ZTMsMjUwKTtlbHNlIHN3aXRjaChuKXtjYXNlIDk5OmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDk4OmU9SmEoZSwxNTAsMTAwKTticmVhaztjYXNlIDk3OmNhc2UgOTY6ZT1KYShlLDVlMywyNTApO2JyZWFrO2Nhc2UgOTU6ZT0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygzMjYpKX1yZXR1cm4gbnVsbCE9PVJzJiZlPT09SXMmJi0tZSxlfWZ1bmN0aW9uIGVsKGUsdCl7aWYoNTA8S3MpdGhyb3cgS3M9MCxKcz1udWxsLEVycm9yKG8oMTg1KSk7aWYobnVsbCE9PShlPXRsKGUsdCkpKXt2YXIgcj16YSgpOzEwNzM3NDE4MjM9PT10PzAhPSg4JlRzKSYmMD09KDQ4JlRzKT9pbChlKToobmwoZSksMD09PVRzJiZYYSgpKTpubChlKSwwPT0oNCZUcyl8fDk4IT09ciYmOTkhPT1yfHwobnVsbD09PVlzP1lzPW5ldyBNYXAoW1tlLHRdXSk6KHZvaWQgMD09PShyPVlzLmdldChlKSl8fHI+dCkmJllzLnNldChlLHQpKX19ZnVuY3Rpb24gdGwoZSx0KXtlLmV4cGlyYXRpb25UaW1lPHQmJihlLmV4cGlyYXRpb25UaW1lPXQpO3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiZyLmV4cGlyYXRpb25UaW1lPHQmJihyLmV4cGlyYXRpb25UaW1lPXQpO3ZhciBuPWUucmV0dXJuLGE9bnVsbDtpZihudWxsPT09biYmMz09PWUudGFnKWE9ZS5zdGF0ZU5vZGU7ZWxzZSBmb3IoO251bGwhPT1uOyl7aWYocj1uLmFsdGVybmF0ZSxuLmNoaWxkRXhwaXJhdGlvblRpbWU8dCYmKG4uY2hpbGRFeHBpcmF0aW9uVGltZT10KSxudWxsIT09ciYmci5jaGlsZEV4cGlyYXRpb25UaW1lPHQmJihyLmNoaWxkRXhwaXJhdGlvblRpbWU9dCksbnVsbD09PW4ucmV0dXJuJiYzPT09bi50YWcpe2E9bi5zdGF0ZU5vZGU7YnJlYWt9bj1uLnJldHVybn1yZXR1cm4gbnVsbCE9PWEmJihScz09PWEmJihobCh0KSw0PT09RnMmJkJsKGEsSXMpKSxVbChhLHQpKSxhfWZ1bmN0aW9uIHJsKGUpe3ZhciB0PWUubGFzdEV4cGlyZWRUaW1lO3JldHVybiAwIT09dD90OmpsKGUsdD1lLmZpcnN0UGVuZGluZ1RpbWUpPyh0PWUubGFzdFBpbmdlZFRpbWUpPihlPWUubmV4dEtub3duUGVuZGluZ0xldmVsKT90OmU6dH1mdW5jdGlvbiBubChlKXtpZigwIT09ZS5sYXN0RXhwaXJlZFRpbWUpZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjMsZS5jYWxsYmFja1ByaW9yaXR5PTk5LGUuY2FsbGJhY2tOb2RlPVZhKGlsLmJpbmQobnVsbCxlKSk7ZWxzZXt2YXIgdD1ybChlKSxyPWUuY2FsbGJhY2tOb2RlO2lmKDA9PT10KW51bGwhPT1yJiYoZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrRXhwaXJhdGlvblRpbWU9MCxlLmNhbGxiYWNrUHJpb3JpdHk9OTApO2Vsc2V7dmFyIG49WnMoKTtpZigxMDczNzQxODIzPT09dD9uPTk5OjE9PT10fHwyPT09dD9uPTk1Om49MD49KG49MTAqKDEwNzM3NDE4MjEtdCktMTAqKDEwNzM3NDE4MjEtbikpPzk5OjI1MD49bj85ODo1MjUwPj1uPzk3Ojk1LG51bGwhPT1yKXt2YXIgYT1lLmNhbGxiYWNrUHJpb3JpdHk7aWYoZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPT09dCYmYT49bilyZXR1cm47ciE9PURhJiZBYShyKX1lLmNhbGxiYWNrRXhwaXJhdGlvblRpbWU9dCxlLmNhbGxiYWNrUHJpb3JpdHk9bix0PTEwNzM3NDE4MjM9PT10P1ZhKGlsLmJpbmQobnVsbCxlKSk6R2EobixhbC5iaW5kKG51bGwsZSkse3RpbWVvdXQ6MTAqKDEwNzM3NDE4MjEtdCktcWEoKX0pLGUuY2FsbGJhY2tOb2RlPXR9fX1mdW5jdGlvbiBhbChlLHQpe2lmKFFzPTAsdClyZXR1cm4gcWwoZSx0PVpzKCkpLG5sKGUpLG51bGw7dmFyIHI9cmwoZSk7aWYoMCE9PXIpe2lmKHQ9ZS5jYWxsYmFja05vZGUsMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO2lmKGtsKCksZT09PVJzJiZyPT09SXN8fGxsKGUsciksbnVsbCE9PU9zKXt2YXIgbj1UcztUc3w9MTY7Zm9yKHZhciBhPXVsKCk7Oyl0cnl7cGwoKTticmVha31jYXRjaCh0KXtjbChlLHQpfWlmKHJpKCksVHM9bixQcy5jdXJyZW50PWEsMT09PUZzKXRocm93IHQ9THMsbGwoZSxyKSxCbChlLHIpLG5sKGUpLHQ7aWYobnVsbD09PU9zKXN3aXRjaChhPWUuZmluaXNoZWRXb3JrPWUuY3VycmVudC5hbHRlcm5hdGUsZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lPXIsbj1GcyxScz1udWxsLG4pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IobygzNDUpKTtjYXNlIDI6cWwoZSwyPHI/MjpyKTticmVhaztjYXNlIDM6aWYoQmwoZSxyKSxyPT09KG49ZS5sYXN0U3VzcGVuZGVkVGltZSkmJihlLm5leHRLbm93blBlbmRpbmdMZXZlbD12bChhKSksMTA3Mzc0MTgyMz09PURzJiYxMDwoYT1Vcys1MDAtcWEoKSkpe2lmKEJzKXt2YXIgaT1lLmxhc3RQaW5nZWRUaW1lO2lmKDA9PT1pfHxpPj1yKXtlLmxhc3RQaW5nZWRUaW1lPXIsbGwoZSxyKTticmVha319aWYoMCE9PShpPXJsKGUpKSYmaSE9PXIpYnJlYWs7aWYoMCE9PW4mJm4hPT1yKXtlLmxhc3RQaW5nZWRUaW1lPW47YnJlYWt9ZS50aW1lb3V0SGFuZGxlPSRyKHlsLmJpbmQobnVsbCxlKSxhKTticmVha315bChlKTticmVhaztjYXNlIDQ6aWYoQmwoZSxyKSxyPT09KG49ZS5sYXN0U3VzcGVuZGVkVGltZSkmJihlLm5leHRLbm93blBlbmRpbmdMZXZlbD12bChhKSksQnMmJigwPT09KGE9ZS5sYXN0UGluZ2VkVGltZSl8fGE+PXIpKXtlLmxhc3RQaW5nZWRUaW1lPXIsbGwoZSxyKTticmVha31pZigwIT09KGE9cmwoZSkpJiZhIT09cilicmVhaztpZigwIT09biYmbiE9PXIpe2UubGFzdFBpbmdlZFRpbWU9bjticmVha31pZigxMDczNzQxODIzIT09TXM/bj0xMCooMTA3Mzc0MTgyMS1NcyktcWEoKToxMDczNzQxODIzPT09RHM/bj0wOihuPTEwKigxMDczNzQxODIxLURzKS01ZTMsMD4obj0oYT1xYSgpKS1uKSYmKG49MCksKHI9MTAqKDEwNzM3NDE4MjEtciktYSk8KG49KDEyMD5uPzEyMDo0ODA+bj80ODA6MTA4MD5uPzEwODA6MTkyMD5uPzE5MjA6M2UzPm4/M2UzOjQzMjA+bj80MzIwOjE5NjAqQ3Mobi8xOTYwKSktbikmJihuPXIpKSwxMDxuKXtlLnRpbWVvdXRIYW5kbGU9JHIoeWwuYmluZChudWxsLGUpLG4pO2JyZWFrfXlsKGUpO2JyZWFrO2Nhc2UgNTppZigxMDczNzQxODIzIT09RHMmJm51bGwhPT1Ocyl7aT1Eczt2YXIgcz1OcztpZigwPj0obj0wfHMuYnVzeU1pbkR1cmF0aW9uTXMpP249MDooYT0wfHMuYnVzeURlbGF5TXMsbj0oaT1xYSgpLSgxMCooMTA3Mzc0MTgyMS1pKS0oMHxzLnRpbWVvdXRNc3x8NWUzKSkpPD1hPzA6YStuLWkpLDEwPG4pe0JsKGUsciksZS50aW1lb3V0SGFuZGxlPSRyKHlsLmJpbmQobnVsbCxlKSxuKTticmVha319eWwoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMyOSkpfWlmKG5sKGUpLGUuY2FsbGJhY2tOb2RlPT09dClyZXR1cm4gYWwuYmluZChudWxsLGUpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmxhc3RFeHBpcmVkVGltZTtpZih0PTAhPT10P3Q6MTA3Mzc0MTgyMyxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9PT10KXlsKGUpO2Vsc2V7aWYoMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO2lmKGtsKCksZT09PVJzJiZ0PT09SXN8fGxsKGUsdCksbnVsbCE9PU9zKXt2YXIgcj1UcztUc3w9MTY7Zm9yKHZhciBuPXVsKCk7Oyl0cnl7ZGwoKTticmVha31jYXRjaCh0KXtjbChlLHQpfWlmKHJpKCksVHM9cixQcy5jdXJyZW50PW4sMT09PUZzKXRocm93IHI9THMsbGwoZSx0KSxCbChlLHQpLG5sKGUpLHI7aWYobnVsbCE9PU9zKXRocm93IEVycm9yKG8oMjYxKSk7ZS5maW5pc2hlZFdvcms9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9dCxScz1udWxsLHlsKGUpLG5sKGUpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBvbChlLHQpe3ZhciByPVRzO1RzfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5ezA9PT0oVHM9cikmJlhhKCl9fWZ1bmN0aW9uIHNsKGUsdCl7dmFyIHI9VHM7VHMmPS0yLFRzfD04O3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5ezA9PT0oVHM9cikmJlhhKCl9fWZ1bmN0aW9uIGxsKGUsdCl7ZS5maW5pc2hlZFdvcms9bnVsbCxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9MDt2YXIgcj1lLnRpbWVvdXRIYW5kbGU7aWYoLTEhPT1yJiYoZS50aW1lb3V0SGFuZGxlPS0xLGVuKHIpKSxudWxsIT09T3MpZm9yKHI9T3MucmV0dXJuO251bGwhPT1yOyl7dmFyIG49cjtzd2l0Y2gobi50YWcpe2Nhc2UgMTp2YXIgYT1uLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7bnVsbCE9YSYmdmEoKTticmVhaztjYXNlIDM6VWkoKSx5YSgpO2JyZWFrO2Nhc2UgNTp6aShuKTticmVhaztjYXNlIDQ6VWkoKTticmVhaztjYXNlIDEzOmNhc2UgMTk6Y2EoV2kpO2JyZWFrO2Nhc2UgMTA6YWkobil9cj1yLnJldHVybn1Scz1lLE9zPUlsKGUuY3VycmVudCxudWxsKSxJcz10LEZzPTAsTHM9bnVsbCxNcz1Ecz0xMDczNzQxODIzLE5zPW51bGwsanM9MCxCcz0hMX1mdW5jdGlvbiBjbChlLHQpe2Zvcig7Oyl7dHJ5e2lmKHJpKCksdW8oKSxudWxsPT09T3N8fG51bGw9PT1Pcy5yZXR1cm4pcmV0dXJuIEZzPTEsTHM9dCxudWxsO2U6e3ZhciByPWUsbj1Pcy5yZXR1cm4sYT1PcyxpPXQ7aWYodD1JcyxhLmVmZmVjdFRhZ3w9MjA0OCxhLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1udWxsLG51bGwhPT1pJiYib2JqZWN0Ij09dHlwZW9mIGkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnRoZW4pe3ZhciBvPWkscz0wIT0oMSZXaS5jdXJyZW50KSxsPW47ZG97dmFyIGM7aWYoYz0xMz09PWwudGFnKXt2YXIgdT1sLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXUpYz1udWxsIT09dS5kZWh5ZHJhdGVkO2Vsc2V7dmFyIGY9bC5tZW1vaXplZFByb3BzO2M9dm9pZCAwIT09Zi5mYWxsYmFjayYmKCEwIT09Zi51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8IXMpfX1pZihjKXt2YXIgaD1sLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1oKXt2YXIgZD1uZXcgU2V0O2QuYWRkKG8pLGwudXBkYXRlUXVldWU9ZH1lbHNlIGguYWRkKG8pO2lmKDA9PSgyJmwubW9kZSkpe2lmKGwuZWZmZWN0VGFnfD02NCxhLmVmZmVjdFRhZyY9LTI5ODEsMT09PWEudGFnKWlmKG51bGw9PT1hLmFsdGVybmF0ZSlhLnRhZz0xNztlbHNle3ZhciBwPWZpKDEwNzM3NDE4MjMsbnVsbCk7cC50YWc9MixkaShhLHApfWEuZXhwaXJhdGlvblRpbWU9MTA3Mzc0MTgyMzticmVhayBlfWk9dm9pZCAwLGE9dDt2YXIgbT1yLnBpbmdDYWNoZTtpZihudWxsPT09bT8obT1yLnBpbmdDYWNoZT1uZXcgU3MsaT1uZXcgU2V0LG0uc2V0KG8saSkpOnZvaWQgMD09PShpPW0uZ2V0KG8pKSYmKGk9bmV3IFNldCxtLnNldChvLGkpKSwhaS5oYXMoYSkpe2kuYWRkKGEpO3ZhciBnPUFsLmJpbmQobnVsbCxyLG8sYSk7by50aGVuKGcsZyl9bC5lZmZlY3RUYWd8PTQwOTYsbC5leHBpcmF0aW9uVGltZT10O2JyZWFrIGV9bD1sLnJldHVybn13aGlsZShudWxsIT09bCk7aT1FcnJvcigoUShhLnR5cGUpfHwiQSBSZWFjdCBjb21wb25lbnQiKSsiIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxuXG5BZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvIHByb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LiIrWihhKSl9NSE9PUZzJiYoRnM9MiksaT1jcyhpLGEpLGw9bjtkb3tzd2l0Y2gobC50YWcpe2Nhc2UgMzpvPWksbC5lZmZlY3RUYWd8PTQwOTYsbC5leHBpcmF0aW9uVGltZT10LHBpKGwsX3MobCxvLHQpKTticmVhayBlO2Nhc2UgMTpvPWk7dmFyIHY9bC50eXBlLHk9bC5zdGF0ZU5vZGU7aWYoMD09KDY0JmwuZWZmZWN0VGFnKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PXkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PUhzfHwhSHMuaGFzKHkpKSkpe2wuZWZmZWN0VGFnfD00MDk2LGwuZXhwaXJhdGlvblRpbWU9dCxwaShsLHhzKGwsbyx0KSk7YnJlYWsgZX19bD1sLnJldHVybn13aGlsZShudWxsIT09bCl9T3M9Z2woT3MpfWNhdGNoKGUpe3Q9ZTtjb250aW51ZX1icmVha319ZnVuY3Rpb24gdWwoKXt2YXIgZT1Qcy5jdXJyZW50O3JldHVybiBQcy5jdXJyZW50PUVvLG51bGw9PT1lP0VvOmV9ZnVuY3Rpb24gZmwoZSx0KXtlPERzJiYyPGUmJihEcz1lKSxudWxsIT09dCYmZTxNcyYmMjxlJiYoTXM9ZSxOcz10KX1mdW5jdGlvbiBobChlKXtlPmpzJiYoanM9ZSl9ZnVuY3Rpb24gZGwoKXtmb3IoO251bGwhPT1PczspT3M9bWwoT3MpfWZ1bmN0aW9uIHBsKCl7Zm9yKDtudWxsIT09T3MmJiFDYSgpOylPcz1tbChPcyl9ZnVuY3Rpb24gbWwoZSl7dmFyIHQ9QXMoZS5hbHRlcm5hdGUsZSxJcyk7cmV0dXJuIGUubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09dCYmKHQ9Z2woZSkpLEVzLmN1cnJlbnQ9bnVsbCx0fWZ1bmN0aW9uIGdsKGUpe09zPWU7ZG97dmFyIHQ9T3MuYWx0ZXJuYXRlO2lmKGU9T3MucmV0dXJuLDA9PSgyMDQ4Jk9zLmVmZmVjdFRhZykpe2U6e3ZhciByPXQsbj1JcyxpPSh0PU9zKS5wZW5kaW5nUHJvcHM7c3dpdGNoKHQudGFnKXtjYXNlIDI6Y2FzZSAxNjpicmVhaztjYXNlIDE1OmNhc2UgMDpicmVhaztjYXNlIDE6Z2EodC50eXBlKSYmdmEoKTticmVhaztjYXNlIDM6VWkoKSx5YSgpLChpPXQuc3RhdGVOb2RlKS5wZW5kaW5nQ29udGV4dCYmKGkuY29udGV4dD1pLnBlbmRpbmdDb250ZXh0LGkucGVuZGluZ0NvbnRleHQ9bnVsbCksKG51bGw9PT1yfHxudWxsPT09ci5jaGlsZCkmJmpvKHQpJiZvcyh0KTticmVhaztjYXNlIDU6emkodCksbj1qaShOaS5jdXJyZW50KTt2YXIgcz10LnR5cGU7aWYobnVsbCE9PXImJm51bGwhPXQuc3RhdGVOb2RlKVpvKHIsdCxzLGksbiksci5yZWYhPT10LnJlZiYmKHQuZWZmZWN0VGFnfD0xMjgpO2Vsc2UgaWYoaSl7dmFyIGw9amkoRGkuY3VycmVudCk7aWYoam8odCkpe3ZhciBjPShpPXQpLnN0YXRlTm9kZTtyPWkudHlwZTt2YXIgdT1pLm1lbW9pemVkUHJvcHMsZj1uO3N3aXRjaChjW2FuXT1pLGNbb25dPXUscz12b2lkIDAsbj1jLHIpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6eHIoImxvYWQiLG4pO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihjPTA7YzxldC5sZW5ndGg7YysrKXhyKGV0W2NdLG4pO2JyZWFrO2Nhc2Uic291cmNlIjp4cigiZXJyb3IiLG4pO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOnhyKCJlcnJvciIsbikseHIoImxvYWQiLG4pO2JyZWFrO2Nhc2UiZm9ybSI6eHIoInJlc2V0IixuKSx4cigic3VibWl0IixuKTticmVhaztjYXNlImRldGFpbHMiOnhyKCJ0b2dnbGUiLG4pO2JyZWFrO2Nhc2UiaW5wdXQiOlBlKG4sdSkseHIoImludmFsaWQiLG4pLHpyKGYsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJzZWxlY3QiOm4uX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISF1Lm11bHRpcGxlfSx4cigiaW52YWxpZCIsbiksenIoZiwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpEZShuLHUpLHhyKCJpbnZhbGlkIixuKSx6cihmLCJvbkNoYW5nZSIpfWZvcihzIGluIFVyKHIsdSksYz1udWxsLHUpdS5oYXNPd25Qcm9wZXJ0eShzKSYmKGw9dVtzXSwiY2hpbGRyZW4iPT09cz8ic3RyaW5nIj09dHlwZW9mIGw/bi50ZXh0Q29udGVudCE9PWwmJihjPVsiY2hpbGRyZW4iLGxdKToibnVtYmVyIj09dHlwZW9mIGwmJm4udGV4dENvbnRlbnQhPT0iIitsJiYoYz1bImNoaWxkcmVuIiwiIitsXSk6ZC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9bCYmenIoZixzKSk7c3dpdGNoKHIpe2Nhc2UiaW5wdXQiOnhlKG4pLFJlKG4sdSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6eGUobiksTmUobik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiB1Lm9uQ2xpY2smJihuLm9uY2xpY2s9V3IpfXM9YyxpLnVwZGF0ZVF1ZXVlPXMsKGk9bnVsbCE9PXMpJiZvcyh0KX1lbHNle3I9dCxmPXMsdT1pLGM9OT09PW4ubm9kZVR5cGU/bjpuLm93bmVyRG9jdW1lbnQsbD09PWplJiYobD1VZShmKSksbD09PWplPyJzY3JpcHQiPT09Zj8oKHU9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSI8c2NyaXB0PjxcL3NjcmlwdD4iLGM9dS5yZW1vdmVDaGlsZCh1LmZpcnN0Q2hpbGQpKToic3RyaW5nIj09dHlwZW9mIHUuaXM/Yz1jLmNyZWF0ZUVsZW1lbnQoZix7aXM6dS5pc30pOihjPWMuY3JlYXRlRWxlbWVudChmKSwic2VsZWN0Ij09PWYmJihmPWMsdS5tdWx0aXBsZT9mLm11bHRpcGxlPSEwOnUuc2l6ZSYmKGYuc2l6ZT11LnNpemUpKSk6Yz1jLmNyZWF0ZUVsZW1lbnROUyhsLGYpLCh1PWMpW2FuXT1yLHVbb25dPWksUW8odSx0KSx0LnN0YXRlTm9kZT11O3ZhciBoPW4scD1xcihmPXMscj1pKTtzd2l0Y2goZil7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjp4cigibG9hZCIsdSksbj1yO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihuPTA7bjxldC5sZW5ndGg7bisrKXhyKGV0W25dLHUpO249cjticmVhaztjYXNlInNvdXJjZSI6eHIoImVycm9yIix1KSxuPXI7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6eHIoImVycm9yIix1KSx4cigibG9hZCIsdSksbj1yO2JyZWFrO2Nhc2UiZm9ybSI6eHIoInJlc2V0Iix1KSx4cigic3VibWl0Iix1KSxuPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjp4cigidG9nZ2xlIix1KSxuPXI7YnJlYWs7Y2FzZSJpbnB1dCI6UGUodSxyKSxuPUNlKHUscikseHIoImludmFsaWQiLHUpLHpyKGgsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJvcHRpb24iOm49SWUodSxyKTticmVhaztjYXNlInNlbGVjdCI6dS5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIXIubXVsdGlwbGV9LG49YSh7fSxyLHt2YWx1ZTp2b2lkIDB9KSx4cigiaW52YWxpZCIsdSksenIoaCwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpEZSh1LHIpLG49TGUodSxyKSx4cigiaW52YWxpZCIsdSksenIoaCwib25DaGFuZ2UiKTticmVhaztkZWZhdWx0Om49cn1VcihmLG4pLGM9dm9pZCAwLGw9Zjt2YXIgbT11LGc9bjtmb3IoYyBpbiBnKWlmKGcuaGFzT3duUHJvcGVydHkoYykpe3ZhciB2PWdbY107InN0eWxlIj09PWM/anIobSx2KToiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPT09Yz9udWxsIT0odj12P3YuX19odG1sOnZvaWQgMCkmJldlKG0sdik6ImNoaWxkcmVuIj09PWM/InN0cmluZyI9PXR5cGVvZiB2PygidGV4dGFyZWEiIT09bHx8IiIhPT12KSYmSGUobSx2KToibnVtYmVyIj09dHlwZW9mIHYmJkhlKG0sIiIrdik6InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIhPT1jJiYic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiE9PWMmJiJhdXRvRm9jdXMiIT09YyYmKGQuaGFzT3duUHJvcGVydHkoYyk/bnVsbCE9diYmenIoaCxjKTpudWxsIT12JiZTZShtLGMsdixwKSl9c3dpdGNoKGYpe2Nhc2UiaW5wdXQiOnhlKHUpLFJlKHUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6eGUodSksTmUodSk7YnJlYWs7Y2FzZSJvcHRpb24iOm51bGwhPXIudmFsdWUmJnUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIra2Uoci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijoobj11KS5tdWx0aXBsZT0hIXIubXVsdGlwbGUsbnVsbCE9KHU9ci52YWx1ZSk/RmUobiwhIXIubXVsdGlwbGUsdSwhMSk6bnVsbCE9ci5kZWZhdWx0VmFsdWUmJkZlKG4sISFyLm11bHRpcGxlLHIuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiBuLm9uQ2xpY2smJih1Lm9uY2xpY2s9V3IpfShpPVFyKHMsaSkpJiZvcyh0KX1udWxsIT09dC5yZWYmJih0LmVmZmVjdFRhZ3w9MTI4KX1lbHNlIGlmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihvKDE2NikpO2JyZWFrO2Nhc2UgNjppZihyJiZudWxsIT10LnN0YXRlTm9kZSkkbygwLHQsci5tZW1vaXplZFByb3BzLGkpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBpJiZudWxsPT09dC5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobygxNjYpKTtuPWppKE5pLmN1cnJlbnQpLGppKERpLmN1cnJlbnQpLGpvKHQpPyhzPShpPXQpLnN0YXRlTm9kZSxuPWkubWVtb2l6ZWRQcm9wcyxzW2FuXT1pLChpPXMubm9kZVZhbHVlIT09bikmJm9zKHQpKToocz10LChpPSg5PT09bi5ub2RlVHlwZT9uOm4ub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoaSkpW2FuXT1zLHQuc3RhdGVOb2RlPWkpfWJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMzppZihjYShXaSksaT10Lm1lbW9pemVkU3RhdGUsMCE9KDY0JnQuZWZmZWN0VGFnKSl7dC5leHBpcmF0aW9uVGltZT1uO2JyZWFrIGV9aT1udWxsIT09aSxzPSExLG51bGw9PT1yP3ZvaWQgMCE9PXQubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayYmam8odCk6KHM9bnVsbCE9PShuPXIubWVtb2l6ZWRTdGF0ZSksaXx8bnVsbD09PW58fG51bGwhPT0obj1yLmNoaWxkLnNpYmxpbmcpJiYobnVsbCE9PSh1PXQuZmlyc3RFZmZlY3QpPyh0LmZpcnN0RWZmZWN0PW4sbi5uZXh0RWZmZWN0PXUpOih0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1uLG4ubmV4dEVmZmVjdD1udWxsKSxuLmVmZmVjdFRhZz04KSksaSYmIXMmJjAhPSgyJnQubW9kZSkmJihudWxsPT09ciYmITAhPT10Lm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fDAhPSgxJldpLmN1cnJlbnQpPzA9PT1GcyYmKEZzPTMpOigwIT09RnMmJjMhPT1Gc3x8KEZzPTQpLDAhPT1qcyYmbnVsbCE9PVJzJiYoQmwoUnMsSXMpLFVsKFJzLGpzKSkpKSwoaXx8cykmJih0LmVmZmVjdFRhZ3w9NCk7YnJlYWs7Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmJyZWFrO2Nhc2UgNDpVaSgpO2JyZWFrO2Nhc2UgMTA6YWkodCk7YnJlYWs7Y2FzZSA5OmNhc2UgMTQ6YnJlYWs7Y2FzZSAxNzpnYSh0LnR5cGUpJiZ2YSgpO2JyZWFrO2Nhc2UgMTk6aWYoY2EoV2kpLG51bGw9PT0oaT10Lm1lbW9pemVkU3RhdGUpKWJyZWFrO2lmKHM9MCE9KDY0JnQuZWZmZWN0VGFnKSxudWxsPT09KHU9aS5yZW5kZXJpbmcpKXtpZihzKXNzKGksITEpO2Vsc2UgaWYoMCE9PUZzfHxudWxsIT09ciYmMCE9KDY0JnIuZWZmZWN0VGFnKSlmb3Iocj10LmNoaWxkO251bGwhPT1yOyl7aWYobnVsbCE9PSh1PUhpKHIpKSl7Zm9yKHQuZWZmZWN0VGFnfD02NCxzcyhpLCExKSxudWxsIT09KHM9dS51cGRhdGVRdWV1ZSkmJih0LnVwZGF0ZVF1ZXVlPXMsdC5lZmZlY3RUYWd8PTQpLG51bGw9PT1pLmxhc3RFZmZlY3QmJih0LmZpcnN0RWZmZWN0PW51bGwpLHQubGFzdEVmZmVjdD1pLmxhc3RFZmZlY3QsaT1uLHM9dC5jaGlsZDtudWxsIT09czspcj1pLChuPXMpLmVmZmVjdFRhZyY9MixuLm5leHRFZmZlY3Q9bnVsbCxuLmZpcnN0RWZmZWN0PW51bGwsbi5sYXN0RWZmZWN0PW51bGwsbnVsbD09PSh1PW4uYWx0ZXJuYXRlKT8obi5jaGlsZEV4cGlyYXRpb25UaW1lPTAsbi5leHBpcmF0aW9uVGltZT1yLG4uY2hpbGQ9bnVsbCxuLm1lbW9pemVkUHJvcHM9bnVsbCxuLm1lbW9pemVkU3RhdGU9bnVsbCxuLnVwZGF0ZVF1ZXVlPW51bGwsbi5kZXBlbmRlbmNpZXM9bnVsbCk6KG4uY2hpbGRFeHBpcmF0aW9uVGltZT11LmNoaWxkRXhwaXJhdGlvblRpbWUsbi5leHBpcmF0aW9uVGltZT11LmV4cGlyYXRpb25UaW1lLG4uY2hpbGQ9dS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9dS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT11Lm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT11LnVwZGF0ZVF1ZXVlLHI9dS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9bnVsbD09PXI/bnVsbDp7ZXhwaXJhdGlvblRpbWU6ci5leHBpcmF0aW9uVGltZSxmaXJzdENvbnRleHQ6ci5maXJzdENvbnRleHQscmVzcG9uZGVyczpyLnJlc3BvbmRlcnN9KSxzPXMuc2libGluZzt1YShXaSwxJldpLmN1cnJlbnR8MiksdD10LmNoaWxkO2JyZWFrIGV9cj1yLnNpYmxpbmd9fWVsc2V7aWYoIXMpaWYobnVsbCE9PShyPUhpKHUpKSl7aWYodC5lZmZlY3RUYWd8PTY0LHM9ITAsbnVsbCE9PShuPXIudXBkYXRlUXVldWUpJiYodC51cGRhdGVRdWV1ZT1uLHQuZWZmZWN0VGFnfD00KSxzcyhpLCEwKSxudWxsPT09aS50YWlsJiYiaGlkZGVuIj09PWkudGFpbE1vZGUmJiF1LmFsdGVybmF0ZSl7bnVsbCE9PSh0PXQubGFzdEVmZmVjdD1pLmxhc3RFZmZlY3QpJiYodC5uZXh0RWZmZWN0PW51bGwpO2JyZWFrfX1lbHNlIHFhKCk+aS50YWlsRXhwaXJhdGlvbiYmMTxuJiYodC5lZmZlY3RUYWd8PTY0LHM9ITAsc3MoaSwhMSksdC5leHBpcmF0aW9uVGltZT10LmNoaWxkRXhwaXJhdGlvblRpbWU9bi0xKTtpLmlzQmFja3dhcmRzPyh1LnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPXUpOihudWxsIT09KG49aS5sYXN0KT9uLnNpYmxpbmc9dTp0LmNoaWxkPXUsaS5sYXN0PXUpfWlmKG51bGwhPT1pLnRhaWwpezA9PT1pLnRhaWxFeHBpcmF0aW9uJiYoaS50YWlsRXhwaXJhdGlvbj1xYSgpKzUwMCksbj1pLnRhaWwsaS5yZW5kZXJpbmc9bixpLnRhaWw9bi5zaWJsaW5nLGkubGFzdEVmZmVjdD10Lmxhc3RFZmZlY3Qsbi5zaWJsaW5nPW51bGwsaT1XaS5jdXJyZW50LHVhKFdpLGk9cz8xJml8MjoxJmkpLHQ9bjticmVhayBlfWJyZWFrO2Nhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTU2LHQudGFnKSl9dD1udWxsfWlmKGk9T3MsMT09PUlzfHwxIT09aS5jaGlsZEV4cGlyYXRpb25UaW1lKXtmb3Iocz0wLG49aS5jaGlsZDtudWxsIT09bjspKHI9bi5leHBpcmF0aW9uVGltZSk+cyYmKHM9ciksKHU9bi5jaGlsZEV4cGlyYXRpb25UaW1lKT5zJiYocz11KSxuPW4uc2libGluZztpLmNoaWxkRXhwaXJhdGlvblRpbWU9c31pZihudWxsIT09dClyZXR1cm4gdDtudWxsIT09ZSYmMD09KDIwNDgmZS5lZmZlY3RUYWcpJiYobnVsbD09PWUuZmlyc3RFZmZlY3QmJihlLmZpcnN0RWZmZWN0PU9zLmZpcnN0RWZmZWN0KSxudWxsIT09T3MubGFzdEVmZmVjdCYmKG51bGwhPT1lLmxhc3RFZmZlY3QmJihlLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1Pcy5maXJzdEVmZmVjdCksZS5sYXN0RWZmZWN0PU9zLmxhc3RFZmZlY3QpLDE8T3MuZWZmZWN0VGFnJiYobnVsbCE9PWUubGFzdEVmZmVjdD9lLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1PczplLmZpcnN0RWZmZWN0PU9zLGUubGFzdEVmZmVjdD1PcykpfWVsc2V7aWYobnVsbCE9PSh0PWxzKE9zKSkpcmV0dXJuIHQuZWZmZWN0VGFnJj0yMDQ3LHQ7bnVsbCE9PWUmJihlLmZpcnN0RWZmZWN0PWUubGFzdEVmZmVjdD1udWxsLGUuZWZmZWN0VGFnfD0yMDQ4KX1pZihudWxsIT09KHQ9T3Muc2libGluZykpcmV0dXJuIHQ7T3M9ZX13aGlsZShudWxsIT09T3MpO3JldHVybiAwPT09RnMmJihGcz01KSxudWxsfWZ1bmN0aW9uIHZsKGUpe3ZhciB0PWUuZXhwaXJhdGlvblRpbWU7cmV0dXJuIHQ+KGU9ZS5jaGlsZEV4cGlyYXRpb25UaW1lKT90OmV9ZnVuY3Rpb24geWwoZSl7dmFyIHQ9emEoKTtyZXR1cm4gSGEoOTksYmwuYmluZChudWxsLGUsdCkpLG51bGx9ZnVuY3Rpb24gYmwoZSx0KXtkb3trbCgpfXdoaWxlKG51bGwhPT1Wcyk7aWYoMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO3ZhciByPWUuZmluaXNoZWRXb3JrLG49ZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lO2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKGUuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lPTAscj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihvKDE3NykpO2UuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPTAsZS5jYWxsYmFja1ByaW9yaXR5PTkwLGUubmV4dEtub3duUGVuZGluZ0xldmVsPTA7dmFyIGE9dmwocik7aWYoZS5maXJzdFBlbmRpbmdUaW1lPWEsbjw9ZS5sYXN0U3VzcGVuZGVkVGltZT9lLmZpcnN0U3VzcGVuZGVkVGltZT1lLmxhc3RTdXNwZW5kZWRUaW1lPWUubmV4dEtub3duUGVuZGluZ0xldmVsPTA6bjw9ZS5maXJzdFN1c3BlbmRlZFRpbWUmJihlLmZpcnN0U3VzcGVuZGVkVGltZT1uLTEpLG48PWUubGFzdFBpbmdlZFRpbWUmJihlLmxhc3RQaW5nZWRUaW1lPTApLG48PWUubGFzdEV4cGlyZWRUaW1lJiYoZS5sYXN0RXhwaXJlZFRpbWU9MCksZT09PVJzJiYoT3M9UnM9bnVsbCxJcz0wKSwxPHIuZWZmZWN0VGFnP251bGwhPT1yLmxhc3RFZmZlY3Q/KHIubGFzdEVmZmVjdC5uZXh0RWZmZWN0PXIsYT1yLmZpcnN0RWZmZWN0KTphPXI6YT1yLmZpcnN0RWZmZWN0LG51bGwhPT1hKXt2YXIgaT1UcztUc3w9MzIsRXMuY3VycmVudD1udWxsLEtyPV9yO3ZhciBzPVhyKCk7aWYoWXIocykpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBzKXZhciBsPXtzdGFydDpzLnNlbGVjdGlvblN0YXJ0LGVuZDpzLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgYz0obD0obD1zLm93bmVyRG9jdW1lbnQpJiZsLmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbiYmbC5nZXRTZWxlY3Rpb24oKTtpZihjJiYwIT09Yy5yYW5nZUNvdW50KXtsPWMuYW5jaG9yTm9kZTt2YXIgdT1jLmFuY2hvck9mZnNldCxmPWMuZm9jdXNOb2RlO2M9Yy5mb2N1c09mZnNldDt0cnl7bC5ub2RlVHlwZSxmLm5vZGVUeXBlfWNhdGNoKGUpe2w9bnVsbDticmVhayBlfXZhciBoPTAsZD0tMSxwPS0xLG09MCxnPTAsdj1zLHk9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBiO3YhPT1sfHwwIT09dSYmMyE9PXYubm9kZVR5cGV8fChkPWgrdSksdiE9PWZ8fDAhPT1jJiYzIT09di5ub2RlVHlwZXx8KHA9aCtjKSwzPT09di5ub2RlVHlwZSYmKGgrPXYubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShiPXYuZmlyc3RDaGlsZCk7KXk9dix2PWI7Zm9yKDs7KXtpZih2PT09cylicmVhayB0O2lmKHk9PT1sJiYrK209PT11JiYoZD1oKSx5PT09ZiYmKytnPT09YyYmKHA9aCksbnVsbCE9PShiPXYubmV4dFNpYmxpbmcpKWJyZWFrO3k9KHY9eSkucGFyZW50Tm9kZX12PWJ9bD0tMT09PWR8fC0xPT09cD9udWxsOntzdGFydDpkLGVuZDpwfX1lbHNlIGw9bnVsbH1sPWx8fHtzdGFydDowLGVuZDowfX1lbHNlIGw9bnVsbDtKcj17Zm9jdXNlZEVsZW06cyxzZWxlY3Rpb25SYW5nZTpsfSxfcj0hMSxxcz1hO2Rve3RyeXt3bCgpfWNhdGNoKGUpe2lmKG51bGw9PT1xcyl0aHJvdyBFcnJvcihvKDMzMCkpO3hsKHFzLGUpLHFzPXFzLm5leHRFZmZlY3R9fXdoaWxlKG51bGwhPT1xcyk7cXM9YTtkb3t0cnl7Zm9yKHM9ZSxsPXQ7bnVsbCE9PXFzOyl7dmFyIHc9cXMuZWZmZWN0VGFnO2lmKDE2JncmJkhlKHFzLnN0YXRlTm9kZSwiIiksMTI4Jncpe3ZhciBrPXFzLmFsdGVybmF0ZTtpZihudWxsIT09ayl7dmFyIFM9ay5yZWY7bnVsbCE9PVMmJigiZnVuY3Rpb24iPT10eXBlb2YgUz9TKG51bGwpOlMuY3VycmVudD1udWxsKX19c3dpdGNoKDEwMzgmdyl7Y2FzZSAyOnlzKHFzKSxxcy5lZmZlY3RUYWcmPS0zO2JyZWFrO2Nhc2UgNjp5cyhxcykscXMuZWZmZWN0VGFnJj0tMyx3cyhxcy5hbHRlcm5hdGUscXMpO2JyZWFrO2Nhc2UgMTAyNDpxcy5lZmZlY3RUYWcmPS0xMDI1O2JyZWFrO2Nhc2UgMTAyODpxcy5lZmZlY3RUYWcmPS0xMDI1LHdzKHFzLmFsdGVybmF0ZSxxcyk7YnJlYWs7Y2FzZSA0OndzKHFzLmFsdGVybmF0ZSxxcyk7YnJlYWs7Y2FzZSA4OmJzKHMsdT1xcyxsKSxncyh1KX1xcz1xcy5uZXh0RWZmZWN0fX1jYXRjaChlKXtpZihudWxsPT09cXMpdGhyb3cgRXJyb3IobygzMzApKTt4bChxcyxlKSxxcz1xcy5uZXh0RWZmZWN0fX13aGlsZShudWxsIT09cXMpO2lmKFM9SnIsaz1YcigpLHc9Uy5mb2N1c2VkRWxlbSxsPVMuc2VsZWN0aW9uUmFuZ2UsayE9PXcmJncmJncub3duZXJEb2N1bWVudCYmZnVuY3Rpb24gZSh0LHIpe3JldHVybiEoIXR8fCFyKSYmKHQ9PT1yfHwoIXR8fDMhPT10Lm5vZGVUeXBlKSYmKHImJjM9PT1yLm5vZGVUeXBlP2UodCxyLnBhcmVudE5vZGUpOiJjb250YWlucyJpbiB0P3QuY29udGFpbnMocik6ISF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSkpfSh3Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHcpKXtudWxsIT09bCYmWXIodykmJihrPWwuc3RhcnQsdm9pZCAwPT09KFM9bC5lbmQpJiYoUz1rKSwic2VsZWN0aW9uU3RhcnQiaW4gdz8ody5zZWxlY3Rpb25TdGFydD1rLHcuc2VsZWN0aW9uRW5kPU1hdGgubWluKFMsdy52YWx1ZS5sZW5ndGgpKTooUz0oaz13Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmay5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24mJihTPVMuZ2V0U2VsZWN0aW9uKCksdT13LnRleHRDb250ZW50Lmxlbmd0aCxzPU1hdGgubWluKGwuc3RhcnQsdSksbD12b2lkIDA9PT1sLmVuZD9zOk1hdGgubWluKGwuZW5kLHUpLCFTLmV4dGVuZCYmcz5sJiYodT1sLGw9cyxzPXUpLHU9VnIodyxzKSxmPVZyKHcsbCksdSYmZiYmKDEhPT1TLnJhbmdlQ291bnR8fFMuYW5jaG9yTm9kZSE9PXUubm9kZXx8Uy5hbmNob3JPZmZzZXQhPT11Lm9mZnNldHx8Uy5mb2N1c05vZGUhPT1mLm5vZGV8fFMuZm9jdXNPZmZzZXQhPT1mLm9mZnNldCkmJigoaz1rLmNyZWF0ZVJhbmdlKCkpLnNldFN0YXJ0KHUubm9kZSx1Lm9mZnNldCksUy5yZW1vdmVBbGxSYW5nZXMoKSxzPmw/KFMuYWRkUmFuZ2UoayksUy5leHRlbmQoZi5ub2RlLGYub2Zmc2V0KSk6KGsuc2V0RW5kKGYubm9kZSxmLm9mZnNldCksUy5hZGRSYW5nZShrKSkpKSksaz1bXTtmb3IoUz13O1M9Uy5wYXJlbnROb2RlOykxPT09Uy5ub2RlVHlwZSYmay5wdXNoKHtlbGVtZW50OlMsbGVmdDpTLnNjcm9sbExlZnQsdG9wOlMuc2Nyb2xsVG9wfSk7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZvY3VzJiZ3LmZvY3VzKCksdz0wO3c8ay5sZW5ndGg7dysrKShTPWtbd10pLmVsZW1lbnQuc2Nyb2xsTGVmdD1TLmxlZnQsUy5lbGVtZW50LnNjcm9sbFRvcD1TLnRvcH1Kcj1udWxsLF9yPSEhS3IsS3I9bnVsbCxlLmN1cnJlbnQ9cixxcz1hO2Rve3RyeXtmb3Iodz1uO251bGwhPT1xczspe3ZhciBfPXFzLmVmZmVjdFRhZztpZigzNiZfKXt2YXIgeD1xcy5hbHRlcm5hdGU7c3dpdGNoKFM9dywoaz1xcykudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnBzKDE2LDMyLGspO2JyZWFrO2Nhc2UgMTp2YXIgQT1rLnN0YXRlTm9kZTtpZig0JmsuZWZmZWN0VGFnKWlmKG51bGw9PT14KUEuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBDPWsuZWxlbWVudFR5cGU9PT1rLnR5cGU/eC5tZW1vaXplZFByb3BzOlFhKGsudHlwZSx4Lm1lbW9pemVkUHJvcHMpO0EuY29tcG9uZW50RGlkVXBkYXRlKEMseC5tZW1vaXplZFN0YXRlLEEuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBQPWsudXBkYXRlUXVldWU7bnVsbCE9PVAmJnlpKDAsUCxBKTticmVhaztjYXNlIDM6dmFyIEU9ay51cGRhdGVRdWV1ZTtpZihudWxsIT09RSl7aWYocz1udWxsLG51bGwhPT1rLmNoaWxkKXN3aXRjaChrLmNoaWxkLnRhZyl7Y2FzZSA1OnM9ay5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOnM9ay5jaGlsZC5zdGF0ZU5vZGV9eWkoMCxFLHMpfWJyZWFrO2Nhc2UgNTp2YXIgVD1rLnN0YXRlTm9kZTtudWxsPT09eCYmNCZrLmVmZmVjdFRhZyYmUXIoay50eXBlLGsubWVtb2l6ZWRQcm9wcykmJlQuZm9jdXMoKTticmVhaztjYXNlIDY6Y2FzZSA0OmNhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihudWxsPT09ay5tZW1vaXplZFN0YXRlKXt2YXIgUj1rLmFsdGVybmF0ZTtpZihudWxsIT09Uil7dmFyIE89Ui5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1PKXt2YXIgST1PLmRlaHlkcmF0ZWQ7bnVsbCE9PUkmJkN0KEkpfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWlmKDEyOCZfKXtrPXZvaWQgMDt2YXIgRj1xcy5yZWY7aWYobnVsbCE9PUYpe3ZhciBMPXFzLnN0YXRlTm9kZTtzd2l0Y2gocXMudGFnKXtjYXNlIDU6az1MO2JyZWFrO2RlZmF1bHQ6az1MfSJmdW5jdGlvbiI9PXR5cGVvZiBGP0Yoayk6Ri5jdXJyZW50PWt9fXFzPXFzLm5leHRFZmZlY3R9fWNhdGNoKGUpe2lmKG51bGw9PT1xcyl0aHJvdyBFcnJvcihvKDMzMCkpO3hsKHFzLGUpLHFzPXFzLm5leHRFZmZlY3R9fXdoaWxlKG51bGwhPT1xcyk7cXM9bnVsbCxNYSgpLFRzPWl9ZWxzZSBlLmN1cnJlbnQ9cjtpZihHcylHcz0hMSxWcz1lLFhzPXQ7ZWxzZSBmb3IocXM9YTtudWxsIT09cXM7KXQ9cXMubmV4dEVmZmVjdCxxcy5uZXh0RWZmZWN0PW51bGwscXM9dDtpZigwPT09KHQ9ZS5maXJzdFBlbmRpbmdUaW1lKSYmKEhzPW51bGwpLDEwNzM3NDE4MjM9PT10P2U9PT1Kcz9LcysrOihLcz0wLEpzPWUpOktzPTAsImZ1bmN0aW9uIj09dHlwZW9mIFBsJiZQbChyLnN0YXRlTm9kZSxuKSxubChlKSx6cyl0aHJvdyB6cz0hMSxlPVdzLFdzPW51bGwsZTtyZXR1cm4gMCE9KDgmVHMpP251bGw6KFhhKCksbnVsbCl9ZnVuY3Rpb24gd2woKXtmb3IoO251bGwhPT1xczspe3ZhciBlPXFzLmVmZmVjdFRhZzswIT0oMjU2JmUpJiZkcyhxcy5hbHRlcm5hdGUscXMpLDA9PSg1MTImZSl8fEdzfHwoR3M9ITAsR2EoOTcsKGZ1bmN0aW9uKCl7cmV0dXJuIGtsKCksbnVsbH0pKSkscXM9cXMubmV4dEVmZmVjdH19ZnVuY3Rpb24ga2woKXtpZig5MCE9PVhzKXt2YXIgZT05NzxYcz85NzpYcztyZXR1cm4gWHM9OTAsSGEoZSxTbCl9fWZ1bmN0aW9uIFNsKCl7aWYobnVsbD09PVZzKXJldHVybiExO3ZhciBlPVZzO2lmKFZzPW51bGwsMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMzMSkpO3ZhciB0PVRzO2ZvcihUc3w9MzIsZT1lLmN1cnJlbnQuZmlyc3RFZmZlY3Q7bnVsbCE9PWU7KXt0cnl7dmFyIHI9ZTtpZigwIT0oNTEyJnIuZWZmZWN0VGFnKSlzd2l0Y2goci50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6cHMoMTI4LDAscikscHMoMCw2NCxyKX19Y2F0Y2godCl7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IobygzMzApKTt4bChlLHQpfXI9ZS5uZXh0RWZmZWN0LGUubmV4dEVmZmVjdD1udWxsLGU9cn1yZXR1cm4gVHM9dCxYYSgpLCEwfWZ1bmN0aW9uIF9sKGUsdCxyKXtkaShlLHQ9X3MoZSx0PWNzKHIsdCksMTA3Mzc0MTgyMykpLG51bGwhPT0oZT10bChlLDEwNzM3NDE4MjMpKSYmbmwoZSl9ZnVuY3Rpb24geGwoZSx0KXtpZigzPT09ZS50YWcpX2woZSxlLHQpO2Vsc2UgZm9yKHZhciByPWUucmV0dXJuO251bGwhPT1yOyl7aWYoMz09PXIudGFnKXtfbChyLGUsdCk7YnJlYWt9aWYoMT09PXIudGFnKXt2YXIgbj1yLnN0YXRlTm9kZTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09SHN8fCFIcy5oYXMobikpKXtkaShyLGU9eHMocixlPWNzKHQsZSksMTA3Mzc0MTgyMykpLG51bGwhPT0ocj10bChyLDEwNzM3NDE4MjMpKSYmbmwocik7YnJlYWt9fXI9ci5yZXR1cm59fWZ1bmN0aW9uIEFsKGUsdCxyKXt2YXIgbj1lLnBpbmdDYWNoZTtudWxsIT09biYmbi5kZWxldGUodCksUnM9PT1lJiZJcz09PXI/ND09PUZzfHwzPT09RnMmJjEwNzM3NDE4MjM9PT1EcyYmcWEoKS1Vczw1MDA/bGwoZSxJcyk6QnM9ITA6amwoZSxyKSYmKDAhPT0odD1lLmxhc3RQaW5nZWRUaW1lKSYmdDxyfHwoZS5sYXN0UGluZ2VkVGltZT1yLGUuZmluaXNoZWRFeHBpcmF0aW9uVGltZT09PXImJihlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9MCxlLmZpbmlzaGVkV29yaz1udWxsKSxubChlKSkpfWZ1bmN0aW9uIENsKGUsdCl7dmFyIHI9ZS5zdGF0ZU5vZGU7bnVsbCE9PXImJnIuZGVsZXRlKHQpLDA9PT0odD0wKSYmKHQ9JHModD1acygpLGUsbnVsbCkpLG51bGwhPT0oZT10bChlLHQpKSYmbmwoZSl9QXM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQuZXhwaXJhdGlvblRpbWU7aWYobnVsbCE9PWUpe3ZhciBhPXQucGVuZGluZ1Byb3BzO2lmKGUubWVtb2l6ZWRQcm9wcyE9PWF8fGRhLmN1cnJlbnQpcW89ITA7ZWxzZXtpZihuPHIpe3N3aXRjaChxbz0hMSx0LnRhZyl7Y2FzZSAzOkpvKHQpLEJvKCk7YnJlYWs7Y2FzZSA1OmlmKHFpKHQpLDQmdC5tb2RlJiYxIT09ciYmYS5oaWRkZW4pcmV0dXJuIHQuZXhwaXJhdGlvblRpbWU9dC5jaGlsZEV4cGlyYXRpb25UaW1lPTEsbnVsbDticmVhaztjYXNlIDE6Z2EodC50eXBlKSYma2EodCk7YnJlYWs7Y2FzZSA0OkJpKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpuaSh0LHQubWVtb2l6ZWRQcm9wcy52YWx1ZSk7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09dC5tZW1vaXplZFN0YXRlKXJldHVybiAwIT09KG49dC5jaGlsZC5jaGlsZEV4cGlyYXRpb25UaW1lKSYmbj49cj90cyhlLHQscik6KHVhKFdpLDEmV2kuY3VycmVudCksbnVsbCE9PSh0PWlzKGUsdCxyKSk/dC5zaWJsaW5nOm51bGwpO3VhKFdpLDEmV2kuY3VycmVudCk7YnJlYWs7Y2FzZSAxOTppZihuPXQuY2hpbGRFeHBpcmF0aW9uVGltZT49ciwwIT0oNjQmZS5lZmZlY3RUYWcpKXtpZihuKXJldHVybiBhcyhlLHQscik7dC5lZmZlY3RUYWd8PTY0fWlmKG51bGwhPT0oYT10Lm1lbW9pemVkU3RhdGUpJiYoYS5yZW5kZXJpbmc9bnVsbCxhLnRhaWw9bnVsbCksdWEoV2ksV2kuY3VycmVudCksIW4pcmV0dXJuIG51bGx9cmV0dXJuIGlzKGUsdCxyKX1xbz0hMX19ZWxzZSBxbz0hMTtzd2l0Y2godC5leHBpcmF0aW9uVGltZT0wLHQudGFnKXtjYXNlIDI6aWYobj10LnR5cGUsbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLGU9dC5wZW5kaW5nUHJvcHMsYT1tYSh0LGhhLmN1cnJlbnQpLG9pKHQsciksYT1jbyhudWxsLHQsbixlLGEsciksdC5lZmZlY3RUYWd8PTEsIm9iamVjdCI9PXR5cGVvZiBhJiZudWxsIT09YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEucmVuZGVyJiZ2b2lkIDA9PT1hLiQkdHlwZW9mKXtpZih0LnRhZz0xLHVvKCksZ2Eobikpe3ZhciBpPSEwO2thKHQpfWVsc2UgaT0hMTt0Lm1lbW9pemVkU3RhdGU9bnVsbCE9PWEuc3RhdGUmJnZvaWQgMCE9PWEuc3RhdGU/YS5zdGF0ZTpudWxsO3ZhciBzPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyJmdW5jdGlvbiI9PXR5cGVvZiBzJiZTaSh0LG4scyxlKSxhLnVwZGF0ZXI9X2ksdC5zdGF0ZU5vZGU9YSxhLl9yZWFjdEludGVybmFsRmliZXI9dCxQaSh0LG4sZSxyKSx0PUtvKG51bGwsdCxuLCEwLGkscil9ZWxzZSB0LnRhZz0wLHpvKG51bGwsdCxhLHIpLHQ9dC5jaGlsZDtyZXR1cm4gdDtjYXNlIDE2OmlmKGE9dC5lbGVtZW50VHlwZSxudWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksZT10LnBlbmRpbmdQcm9wcyxmdW5jdGlvbihlKXtpZigtMT09PWUuX3N0YXR1cyl7ZS5fc3RhdHVzPTA7dmFyIHQ9ZS5fY3Rvcjt0PXQoKSxlLl9yZXN1bHQ9dCx0LnRoZW4oKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJih0PXQuZGVmYXVsdCxlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9dCl9KSwoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pKX19KGEpLDEhPT1hLl9zdGF0dXMpdGhyb3cgYS5fcmVzdWx0O3N3aXRjaChhPWEuX3Jlc3VsdCx0LnR5cGU9YSxpPXQudGFnPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBPbChlKT8xOjA7aWYobnVsbCE9ZSl7aWYoKGU9ZS4kJHR5cGVvZik9PT1IKXJldHVybiAxMTtpZihlPT09WClyZXR1cm4gMTR9cmV0dXJuIDJ9KGEpLGU9UWEoYSxlKSxpKXtjYXNlIDA6dD1YbyhudWxsLHQsYSxlLHIpO2JyZWFrO2Nhc2UgMTp0PVlvKG51bGwsdCxhLGUscik7YnJlYWs7Y2FzZSAxMTp0PVdvKG51bGwsdCxhLGUscik7YnJlYWs7Y2FzZSAxNDp0PUhvKG51bGwsdCxhLFFhKGEudHlwZSxlKSxuLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygzMDYsYSwiIikpfXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gbj10LnR5cGUsYT10LnBlbmRpbmdQcm9wcyxYbyhlLHQsbixhPXQuZWxlbWVudFR5cGU9PT1uP2E6UWEobixhKSxyKTtjYXNlIDE6cmV0dXJuIG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsWW8oZSx0LG4sYT10LmVsZW1lbnRUeXBlPT09bj9hOlFhKG4sYSkscik7Y2FzZSAzOmlmKEpvKHQpLG51bGw9PT0obj10LnVwZGF0ZVF1ZXVlKSl0aHJvdyBFcnJvcihvKDI4MikpO2lmKGE9bnVsbCE9PShhPXQubWVtb2l6ZWRTdGF0ZSk/YS5lbGVtZW50Om51bGwsdmkodCxuLHQucGVuZGluZ1Byb3BzLG51bGwsciksKG49dC5tZW1vaXplZFN0YXRlLmVsZW1lbnQpPT09YSlCbygpLHQ9aXMoZSx0LHIpO2Vsc2V7aWYoKGE9dC5zdGF0ZU5vZGUuaHlkcmF0ZSkmJihJbz10bih0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLE9vPXQsYT1Gbz0hMCksYSlmb3Iocj1GaSh0LG51bGwsbixyKSx0LmNoaWxkPXI7cjspci5lZmZlY3RUYWc9LTMmci5lZmZlY3RUYWd8MTAyNCxyPXIuc2libGluZztlbHNlIHpvKGUsdCxuLHIpLEJvKCk7dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gcWkodCksbnVsbD09PWUmJk1vKHQpLG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsaT1udWxsIT09ZT9lLm1lbW9pemVkUHJvcHM6bnVsbCxzPWEuY2hpbGRyZW4sWnIobixhKT9zPW51bGw6bnVsbCE9PWkmJlpyKG4saSkmJih0LmVmZmVjdFRhZ3w9MTYpLFZvKGUsdCksNCZ0Lm1vZGUmJjEhPT1yJiZhLmhpZGRlbj8odC5leHBpcmF0aW9uVGltZT10LmNoaWxkRXhwaXJhdGlvblRpbWU9MSx0PW51bGwpOih6byhlLHQscyxyKSx0PXQuY2hpbGQpLHQ7Y2FzZSA2OnJldHVybiBudWxsPT09ZSYmTW8odCksbnVsbDtjYXNlIDEzOnJldHVybiB0cyhlLHQscik7Y2FzZSA0OnJldHVybiBCaSh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLG49dC5wZW5kaW5nUHJvcHMsbnVsbD09PWU/dC5jaGlsZD1JaSh0LG51bGwsbixyKTp6byhlLHQsbixyKSx0LmNoaWxkO2Nhc2UgMTE6cmV0dXJuIG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsV28oZSx0LG4sYT10LmVsZW1lbnRUeXBlPT09bj9hOlFhKG4sYSkscik7Y2FzZSA3OnJldHVybiB6byhlLHQsdC5wZW5kaW5nUHJvcHMsciksdC5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gem8oZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHIpLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihuPXQudHlwZS5fY29udGV4dCxhPXQucGVuZGluZ1Byb3BzLHM9dC5tZW1vaXplZFByb3BzLG5pKHQsaT1hLnZhbHVlKSxudWxsIT09cyl7dmFyIGw9cy52YWx1ZTtpZigwPT09KGk9Sm4obCxpKT8wOjB8KCJmdW5jdGlvbiI9PXR5cGVvZiBuLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9uLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhsLGkpOjEwNzM3NDE4MjMpKSl7aWYocy5jaGlsZHJlbj09PWEuY2hpbGRyZW4mJiFkYS5jdXJyZW50KXt0PWlzKGUsdCxyKTticmVhayBlfX1lbHNlIGZvcihudWxsIT09KGw9dC5jaGlsZCkmJihsLnJldHVybj10KTtudWxsIT09bDspe3ZhciBjPWwuZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1jKXtzPWwuY2hpbGQ7Zm9yKHZhciB1PWMuZmlyc3RDb250ZXh0O251bGwhPT11Oyl7aWYodS5jb250ZXh0PT09biYmMCE9KHUub2JzZXJ2ZWRCaXRzJmkpKXsxPT09bC50YWcmJigodT1maShyLG51bGwpKS50YWc9MixkaShsLHUpKSxsLmV4cGlyYXRpb25UaW1lPHImJihsLmV4cGlyYXRpb25UaW1lPXIpLG51bGwhPT0odT1sLmFsdGVybmF0ZSkmJnUuZXhwaXJhdGlvblRpbWU8ciYmKHUuZXhwaXJhdGlvblRpbWU9ciksaWkobC5yZXR1cm4sciksYy5leHBpcmF0aW9uVGltZTxyJiYoYy5leHBpcmF0aW9uVGltZT1yKTticmVha311PXUubmV4dH19ZWxzZSBzPTEwPT09bC50YWcmJmwudHlwZT09PXQudHlwZT9udWxsOmwuY2hpbGQ7aWYobnVsbCE9PXMpcy5yZXR1cm49bDtlbHNlIGZvcihzPWw7bnVsbCE9PXM7KXtpZihzPT09dCl7cz1udWxsO2JyZWFrfWlmKG51bGwhPT0obD1zLnNpYmxpbmcpKXtsLnJldHVybj1zLnJldHVybixzPWw7YnJlYWt9cz1zLnJldHVybn1sPXN9fXpvKGUsdCxhLmNoaWxkcmVuLHIpLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIGE9dC50eXBlLG49KGk9dC5wZW5kaW5nUHJvcHMpLmNoaWxkcmVuLG9pKHQsciksbj1uKGE9c2koYSxpLnVuc3RhYmxlX29ic2VydmVkQml0cykpLHQuZWZmZWN0VGFnfD0xLHpvKGUsdCxuLHIpLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gaT1RYShhPXQudHlwZSx0LnBlbmRpbmdQcm9wcyksSG8oZSx0LGEsaT1RYShhLnR5cGUsaSksbixyKTtjYXNlIDE1OnJldHVybiBHbyhlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4scik7Y2FzZSAxNzpyZXR1cm4gbj10LnR5cGUsYT10LnBlbmRpbmdQcm9wcyxhPXQuZWxlbWVudFR5cGU9PT1uP2E6UWEobixhKSxudWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksdC50YWc9MSxnYShuKT8oZT0hMCxrYSh0KSk6ZT0hMSxvaSh0LHIpLEFpKHQsbixhKSxQaSh0LG4sYSxyKSxLbyhudWxsLHQsbiwhMCxlLHIpO2Nhc2UgMTk6cmV0dXJuIGFzKGUsdCxyKX10aHJvdyBFcnJvcihvKDE1Nix0LnRhZykpfTt2YXIgUGw9bnVsbCxFbD1udWxsO2Z1bmN0aW9uIFRsKGUsdCxyLG4pe3RoaXMudGFnPWUsdGhpcy5rZXk9cix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPXQsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPW4sdGhpcy5lZmZlY3RUYWc9MCx0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbCx0aGlzLmNoaWxkRXhwaXJhdGlvblRpbWU9dGhpcy5leHBpcmF0aW9uVGltZT0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gUmwoZSx0LHIsbil7cmV0dXJuIG5ldyBUbChlLHQscixuKX1mdW5jdGlvbiBPbChlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIElsKGUsdCl7dmFyIHI9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT1yPygocj1SbChlLnRhZyx0LGUua2V5LGUubW9kZSkpLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsci50eXBlPWUudHlwZSxyLnN0YXRlTm9kZT1lLnN0YXRlTm9kZSxyLmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPXIpOihyLnBlbmRpbmdQcm9wcz10LHIuZWZmZWN0VGFnPTAsci5uZXh0RWZmZWN0PW51bGwsci5maXJzdEVmZmVjdD1udWxsLHIubGFzdEVmZmVjdD1udWxsKSxyLmNoaWxkRXhwaXJhdGlvblRpbWU9ZS5jaGlsZEV4cGlyYXRpb25UaW1lLHIuZXhwaXJhdGlvblRpbWU9ZS5leHBpcmF0aW9uVGltZSxyLmNoaWxkPWUuY2hpbGQsci5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxyLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLHIudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0PWUuZGVwZW5kZW5jaWVzLHIuZGVwZW5kZW5jaWVzPW51bGw9PT10P251bGw6e2V4cGlyYXRpb25UaW1lOnQuZXhwaXJhdGlvblRpbWUsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0LHJlc3BvbmRlcnM6dC5yZXNwb25kZXJzfSxyLnNpYmxpbmc9ZS5zaWJsaW5nLHIuaW5kZXg9ZS5pbmRleCxyLnJlZj1lLnJlZixyfWZ1bmN0aW9uIEZsKGUsdCxyLG4sYSxpKXt2YXIgcz0yO2lmKG49ZSwiZnVuY3Rpb24iPT10eXBlb2YgZSlPbChlKSYmKHM9MSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpcz01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBqOnJldHVybiBMbChyLmNoaWxkcmVuLGEsaSx0KTtjYXNlIFc6cz04LGF8PTc7YnJlYWs7Y2FzZSBCOnM9OCxhfD0xO2JyZWFrO2Nhc2UgVTpyZXR1cm4oZT1SbCgxMixyLHQsOHxhKSkuZWxlbWVudFR5cGU9VSxlLnR5cGU9VSxlLmV4cGlyYXRpb25UaW1lPWksZTtjYXNlIEc6cmV0dXJuKGU9UmwoMTMscix0LGEpKS50eXBlPUcsZS5lbGVtZW50VHlwZT1HLGUuZXhwaXJhdGlvblRpbWU9aSxlO2Nhc2UgVjpyZXR1cm4oZT1SbCgxOSxyLHQsYSkpLmVsZW1lbnRUeXBlPVYsZS5leHBpcmF0aW9uVGltZT1pLGU7ZGVmYXVsdDppZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHE6cz0xMDticmVhayBlO2Nhc2UgejpzPTk7YnJlYWsgZTtjYXNlIEg6cz0xMTticmVhayBlO2Nhc2UgWDpzPTE0O2JyZWFrIGU7Y2FzZSBZOnM9MTYsbj1udWxsO2JyZWFrIGV9dGhyb3cgRXJyb3IobygxMzAsbnVsbD09ZT9lOnR5cGVvZiBlLCIiKSl9cmV0dXJuKHQ9UmwocyxyLHQsYSkpLmVsZW1lbnRUeXBlPWUsdC50eXBlPW4sdC5leHBpcmF0aW9uVGltZT1pLHR9ZnVuY3Rpb24gTGwoZSx0LHIsbil7cmV0dXJuKGU9UmwoNyxlLG4sdCkpLmV4cGlyYXRpb25UaW1lPXIsZX1mdW5jdGlvbiBEbChlLHQscil7cmV0dXJuKGU9UmwoNixlLG51bGwsdCkpLmV4cGlyYXRpb25UaW1lPXIsZX1mdW5jdGlvbiBNbChlLHQscil7cmV0dXJuKHQ9UmwoNCxudWxsIT09ZS5jaGlsZHJlbj9lLmNoaWxkcmVuOltdLGUua2V5LHQpKS5leHBpcmF0aW9uVGltZT1yLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIE5sKGUsdCxyKXt0aGlzLnRhZz10LHRoaXMuY3VycmVudD1udWxsLHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMucGluZ0NhY2hlPXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy5maW5pc2hlZEV4cGlyYXRpb25UaW1lPTAsdGhpcy5maW5pc2hlZFdvcms9bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmh5ZHJhdGU9cix0aGlzLmNhbGxiYWNrTm9kZT1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT05MCx0aGlzLmxhc3RFeHBpcmVkVGltZT10aGlzLmxhc3RQaW5nZWRUaW1lPXRoaXMubmV4dEtub3duUGVuZGluZ0xldmVsPXRoaXMubGFzdFN1c3BlbmRlZFRpbWU9dGhpcy5maXJzdFN1c3BlbmRlZFRpbWU9dGhpcy5maXJzdFBlbmRpbmdUaW1lPTB9ZnVuY3Rpb24gamwoZSx0KXt2YXIgcj1lLmZpcnN0U3VzcGVuZGVkVGltZTtyZXR1cm4gZT1lLmxhc3RTdXNwZW5kZWRUaW1lLDAhPT1yJiZyPj10JiZlPD10fWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5maXJzdFN1c3BlbmRlZFRpbWUsbj1lLmxhc3RTdXNwZW5kZWRUaW1lO3I8dCYmKGUuZmlyc3RTdXNwZW5kZWRUaW1lPXQpLChuPnR8fDA9PT1yKSYmKGUubGFzdFN1c3BlbmRlZFRpbWU9dCksdDw9ZS5sYXN0UGluZ2VkVGltZSYmKGUubGFzdFBpbmdlZFRpbWU9MCksdDw9ZS5sYXN0RXhwaXJlZFRpbWUmJihlLmxhc3RFeHBpcmVkVGltZT0wKX1mdW5jdGlvbiBVbChlLHQpe3Q+ZS5maXJzdFBlbmRpbmdUaW1lJiYoZS5maXJzdFBlbmRpbmdUaW1lPXQpO3ZhciByPWUuZmlyc3RTdXNwZW5kZWRUaW1lOzAhPT1yJiYodD49cj9lLmZpcnN0U3VzcGVuZGVkVGltZT1lLmxhc3RTdXNwZW5kZWRUaW1lPWUubmV4dEtub3duUGVuZGluZ0xldmVsPTA6dD49ZS5sYXN0U3VzcGVuZGVkVGltZSYmKGUubGFzdFN1c3BlbmRlZFRpbWU9dCsxKSx0PmUubmV4dEtub3duUGVuZGluZ0xldmVsJiYoZS5uZXh0S25vd25QZW5kaW5nTGV2ZWw9dCkpfWZ1bmN0aW9uIHFsKGUsdCl7dmFyIHI9ZS5sYXN0RXhwaXJlZFRpbWU7KDA9PT1yfHxyPnQpJiYoZS5sYXN0RXhwaXJlZFRpbWU9dCl9ZnVuY3Rpb24gemwoZSx0LHIsbil7dmFyIGE9dC5jdXJyZW50LGk9WnMoKSxzPXdpLnN1c3BlbnNlO2k9JHMoaSxhLHMpO2U6aWYocil7dDp7aWYodHQocj1yLl9yZWFjdEludGVybmFsRmliZXIpIT09cnx8MSE9PXIudGFnKXRocm93IEVycm9yKG8oMTcwKSk7dmFyIGw9cjtkb3tzd2l0Y2gobC50YWcpe2Nhc2UgMzpsPWwuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgdDtjYXNlIDE6aWYoZ2EobC50eXBlKSl7bD1sLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayB0fX1sPWwucmV0dXJufXdoaWxlKG51bGwhPT1sKTt0aHJvdyBFcnJvcihvKDE3MSkpfWlmKDE9PT1yLnRhZyl7dmFyIGM9ci50eXBlO2lmKGdhKGMpKXtyPXdhKHIsYyxsKTticmVhayBlfX1yPWx9ZWxzZSByPWZhO3JldHVybiBudWxsPT09dC5jb250ZXh0P3QuY29udGV4dD1yOnQucGVuZGluZ0NvbnRleHQ9ciwodD1maShpLHMpKS5wYXlsb2FkPXtlbGVtZW50OmV9LG51bGwhPT0obj12b2lkIDA9PT1uP251bGw6bikmJih0LmNhbGxiYWNrPW4pLGRpKGEsdCksZWwoYSxpKSxpfWZ1bmN0aW9uIFdsKGUpe2lmKCEoZT1lLmN1cnJlbnQpLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OmRlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBIbChlLHQpe251bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkJiZlLnJldHJ5VGltZTx0JiYoZS5yZXRyeVRpbWU9dCl9ZnVuY3Rpb24gR2woZSx0KXtIbChlLHQpLChlPWUuYWx0ZXJuYXRlKSYmSGwoZSx0KX1mdW5jdGlvbiBWbChlLHQscil7dmFyIG49bmV3IE5sKGUsdCxyPW51bGwhPXImJiEwPT09ci5oeWRyYXRlKSxhPVJsKDMsbnVsbCxudWxsLDI9PT10Pzc6MT09PXQ/MzowKTtuLmN1cnJlbnQ9YSxhLnN0YXRlTm9kZT1uLGVbc25dPW4uY3VycmVudCxyJiYwIT09dCYmZnVuY3Rpb24oZSl7dmFyIHQ9RnIoZSk7Z3QuZm9yRWFjaCgoZnVuY3Rpb24ocil7THIocixlLHQpfSkpLHZ0LmZvckVhY2goKGZ1bmN0aW9uKHIpe0xyKHIsZSx0KX0pKX0oOT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQpLHRoaXMuX2ludGVybmFsUm9vdD1ufWZ1bmN0aW9uIFhsKGUpe3JldHVybiEoIWV8fDEhPT1lLm5vZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlJiYoOCE9PWUubm9kZVR5cGV8fCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIiE9PWUubm9kZVZhbHVlKSl9ZnVuY3Rpb24gWWwoZSx0LHIsbixhKXt2YXIgaT1yLl9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7dmFyIG89aS5faW50ZXJuYWxSb290O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXt2YXIgcz1hO2E9ZnVuY3Rpb24oKXt2YXIgZT1XbChvKTtzLmNhbGwoZSl9fXpsKHQsbyxlLGEpfWVsc2V7aWYoaT1yLl9yZWFjdFJvb3RDb250YWluZXI9ZnVuY3Rpb24oZSx0KXtpZih0fHwodD0hKCEodD1lPzk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsKXx8MSE9PXQubm9kZVR5cGV8fCF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpLCF0KWZvcih2YXIgcjtyPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKHIpO3JldHVybiBuZXcgVmwoZSwwLHQ/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9KHIsbiksbz1pLl9pbnRlcm5hbFJvb3QsImZ1bmN0aW9uIj09dHlwZW9mIGEpe3ZhciBsPWE7YT1mdW5jdGlvbigpe3ZhciBlPVdsKG8pO2wuY2FsbChlKX19c2woKGZ1bmN0aW9uKCl7emwodCxvLGUsYSl9KSl9cmV0dXJuIFdsKG8pfWZ1bmN0aW9uIEtsKGUsdCxyKXt2YXIgbj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6TixrZXk6bnVsbD09bj9udWxsOiIiK24sY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOnQsaW1wbGVtZW50YXRpb246cn19ZnVuY3Rpb24gSmwoZSx0KXt2YXIgcj0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighWGwodCkpdGhyb3cgRXJyb3IobygyMDApKTtyZXR1cm4gS2woZSx0LG51bGwscil9VmwucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHQpe3psKGUsdGhpcy5faW50ZXJuYWxSb290LG51bGwsdm9pZCAwPT09dD9udWxsOnQpfSxWbC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcm5hbFJvb3Qscj12b2lkIDA9PT1lP251bGw6ZSxuPXQuY29udGFpbmVySW5mbzt6bChudWxsLHQsbnVsbCwoZnVuY3Rpb24oKXtuW3NuXT1udWxsLG51bGwhPT1yJiZyKCl9KSl9LGl0PWZ1bmN0aW9uKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PUphKFpzKCksMTUwLDEwMCk7ZWwoZSx0KSxHbChlLHQpfX0sb3Q9ZnVuY3Rpb24oZSl7aWYoMTM9PT1lLnRhZyl7WnMoKTt2YXIgdD1LYSsrO2VsKGUsdCksR2woZSx0KX19LHN0PWZ1bmN0aW9uKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PVpzKCk7ZWwoZSx0PSRzKHQsZSxudWxsKSksR2woZSx0KX19LGVlPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2godCl7Y2FzZSJpbnB1dCI6aWYoVGUoZSxyKSx0PXIubmFtZSwicmFkaW8iPT09ci50eXBlJiZudWxsIT10KXtmb3Iocj1lO3IucGFyZW50Tm9kZTspcj1yLnBhcmVudE5vZGU7Zm9yKHI9ci5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrdCkrJ11bdHlwZT0icmFkaW8iXScpLHQ9MDt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtpZihuIT09ZSYmbi5mb3JtPT09ZS5mb3JtKXt2YXIgYT1mbihuKTtpZighYSl0aHJvdyBFcnJvcihvKDkwKSk7QWUobiksVGUobixhKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOk1lKGUscik7YnJlYWs7Y2FzZSJzZWxlY3QiOm51bGwhPSh0PXIudmFsdWUpJiZGZShlLCEhci5tdWx0aXBsZSx0LCExKX19LG9lPW9sLHNlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPVRzO1RzfD00O3RyeXtyZXR1cm4gSGEoOTgsZS5iaW5kKG51bGwsdCxyLG4pKX1maW5hbGx5ezA9PT0oVHM9YSkmJlhhKCl9fSxsZT1mdW5jdGlvbigpezA9PSg0OSZUcykmJihmdW5jdGlvbigpe2lmKG51bGwhPT1Zcyl7dmFyIGU9WXM7WXM9bnVsbCxlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cWwodCxlKSxubCh0KX0pKSxYYSgpfX0oKSxrbCgpKX0sY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1UcztUc3w9Mjt0cnl7cmV0dXJuIGUodCl9ZmluYWxseXswPT09KFRzPXIpJiZYYSgpfX07dmFyIFFsLFpsLCRsPXtjcmVhdGVQb3J0YWw6SmwsZmluZERPTU5vZGU6ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZigxPT09ZS5ub2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFsRmliZXI7aWYodm9pZCAwPT09dCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUucmVuZGVyKXRocm93IEVycm9yKG8oMTg4KSk7dGhyb3cgRXJyb3IobygyNjgsT2JqZWN0LmtleXMoZSkpKX1yZXR1cm4gZT1udWxsPT09KGU9YXQodCkpP251bGw6ZS5zdGF0ZU5vZGV9LGh5ZHJhdGU6ZnVuY3Rpb24oZSx0LHIpe2lmKCFYbCh0KSl0aHJvdyBFcnJvcihvKDIwMCkpO3JldHVybiBZbChudWxsLGUsdCwhMCxyKX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxyKXtpZighWGwodCkpdGhyb3cgRXJyb3IobygyMDApKTtyZXR1cm4gWWwobnVsbCxlLHQsITEscil9LHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKCFYbChyKSl0aHJvdyBFcnJvcihvKDIwMCkpO2lmKG51bGw9PWV8fHZvaWQgMD09PWUuX3JlYWN0SW50ZXJuYWxGaWJlcil0aHJvdyBFcnJvcihvKDM4KSk7cmV0dXJuIFlsKGUsdCxyLCExLG4pfSx1bm1vdW50Q29tcG9uZW50QXROb2RlOmZ1bmN0aW9uKGUpe2lmKCFYbChlKSl0aHJvdyBFcnJvcihvKDQwKSk7cmV0dXJuISFlLl9yZWFjdFJvb3RDb250YWluZXImJihzbCgoZnVuY3Rpb24oKXtZbChudWxsLG51bGwsZSwhMSwoZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW3NuXT1udWxsfSkpfSkpLCEwKX0sdW5zdGFibGVfY3JlYXRlUG9ydGFsOmZ1bmN0aW9uKCl7cmV0dXJuIEpsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpvbCxmbHVzaFN5bmM6ZnVuY3Rpb24oZSx0KXtpZigwIT0oNDgmVHMpKXRocm93IEVycm9yKG8oMTg3KSk7dmFyIHI9VHM7VHN8PTE7dHJ5e3JldHVybiBIYSg5OSxlLmJpbmQobnVsbCx0KSl9ZmluYWxseXtUcz1yLFhhKCl9fSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7RXZlbnRzOltjbix1bixmbixPLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSxoLEZ0LGZ1bmN0aW9uKGUpe1AoZSxJdCl9LGFlLGllLFRyLFIsa2wse2N1cnJlbnQ6ITF9XX19O1psPShRbD17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6bG4sYnVuZGxlVHlwZTowLHZlcnNpb246IjE2LjEyLjAiLHJlbmRlcmVyUGFja2FnZU5hbWU6InJlYWN0LWRvbSJ9KS5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXylyZXR1cm4hMTt2YXIgdD1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYodC5pc0Rpc2FibGVkfHwhdC5zdXBwb3J0c0ZpYmVyKXJldHVybiEwO3RyeXt2YXIgcj10LmluamVjdChlKTtQbD1mdW5jdGlvbihlKXt0cnl7dC5vbkNvbW1pdEZpYmVyUm9vdChyLGUsdm9pZCAwLDY0PT0oNjQmZS5jdXJyZW50LmVmZmVjdFRhZykpfWNhdGNoKGUpe319LEVsPWZ1bmN0aW9uKGUpe3RyeXt0Lm9uQ29tbWl0RmliZXJVbm1vdW50KHIsZSl9Y2F0Y2goZSl7fX19Y2F0Y2goZSl7fX0oYSh7fSxRbCx7b3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpGLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT0oZT1hdChlKSk/bnVsbDplLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIFpsP1psKGUpOm51bGx9LGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGx9KSk7dmFyIGVjPXtkZWZhdWx0OiRsfSx0Yz1lYyYmJGx8fGVjO2UuZXhwb3J0cz10Yy5kZWZhdWx0fHx0Y30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cig0MCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MC4xOC4wCiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIG4sYSxpLG8scztpZihPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIGw9bnVsbCxjPW51bGwsdT1mdW5jdGlvbigpe2lmKG51bGwhPT1sKXRyeXt2YXIgZT10LnVuc3RhYmxlX25vdygpO2woITAsZSksbD1udWxsfWNhdGNoKGUpe3Rocm93IHNldFRpbWVvdXQodSwwKSxlfX0sZj1EYXRlLm5vdygpO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktZn0sbj1mdW5jdGlvbihlKXtudWxsIT09bD9zZXRUaW1lb3V0KG4sMCxlKToobD1lLHNldFRpbWVvdXQodSwwKSl9LGE9ZnVuY3Rpb24oZSx0KXtjPXNldFRpbWVvdXQoZSx0KX0saT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChjKX0sbz1mdW5jdGlvbigpe3JldHVybiExfSxzPXQudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oKXt9fWVsc2V7dmFyIGg9d2luZG93LnBlcmZvcm1hbmNlLGQ9d2luZG93LkRhdGUscD13aW5kb3cuc2V0VGltZW91dCxtPXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlKXt2YXIgZz13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL2ZiLm1lL3JlYWN0LXBvbHlmaWxscyIpLCJmdW5jdGlvbiIhPXR5cGVvZiBnJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL2ZiLm1lL3JlYWN0LXBvbHlmaWxscyIpfWlmKCJvYmplY3QiPT10eXBlb2YgaCYmImZ1bmN0aW9uIj09dHlwZW9mIGgubm93KXQudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGgubm93KCl9O2Vsc2V7dmFyIHY9ZC5ub3coKTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBkLm5vdygpLXZ9fXZhciB5PSExLGI9bnVsbCx3PS0xLGs9NSxTPTA7bz1mdW5jdGlvbigpe3JldHVybiB0LnVuc3RhYmxlX25vdygpPj1TfSxzPWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGUpezA+ZXx8MTI1PGU/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWVyYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCB1bnN1cHBvcnRlZCIpOms9MDxlP01hdGguZmxvb3IoMWUzL2UpOjV9O3ZhciBfPW5ldyBNZXNzYWdlQ2hhbm5lbCx4PV8ucG9ydDI7Xy5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtpZihudWxsIT09Yil7dmFyIGU9dC51bnN0YWJsZV9ub3coKTtTPWUrazt0cnl7YighMCxlKT94LnBvc3RNZXNzYWdlKG51bGwpOih5PSExLGI9bnVsbCl9Y2F0Y2goZSl7dGhyb3cgeC5wb3N0TWVzc2FnZShudWxsKSxlfX1lbHNlIHk9ITF9LG49ZnVuY3Rpb24oZSl7Yj1lLHl8fCh5PSEwLHgucG9zdE1lc3NhZ2UobnVsbCkpfSxhPWZ1bmN0aW9uKGUscil7dz1wKChmdW5jdGlvbigpe2UodC51bnN0YWJsZV9ub3coKSl9KSxyKX0saT1mdW5jdGlvbigpe20odyksdz0tMX19ZnVuY3Rpb24gQShlLHQpe3ZhciByPWUubGVuZ3RoO2UucHVzaCh0KTtlOmZvcig7Oyl7dmFyIG49TWF0aC5mbG9vcigoci0xKS8yKSxhPWVbbl07aWYoISh2b2lkIDAhPT1hJiYwPEUoYSx0KSkpYnJlYWsgZTtlW25dPXQsZVtyXT1hLHI9bn19ZnVuY3Rpb24gQyhlKXtyZXR1cm4gdm9pZCAwPT09KGU9ZVswXSk/bnVsbDplfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ZVswXTtpZih2b2lkIDAhPT10KXt2YXIgcj1lLnBvcCgpO2lmKHIhPT10KXtlWzBdPXI7ZTpmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTspe3ZhciBpPTIqKG4rMSktMSxvPWVbaV0scz1pKzEsbD1lW3NdO2lmKHZvaWQgMCE9PW8mJjA+RShvLHIpKXZvaWQgMCE9PWwmJjA+RShsLG8pPyhlW25dPWwsZVtzXT1yLG49cyk6KGVbbl09byxlW2ldPXIsbj1pKTtlbHNle2lmKCEodm9pZCAwIT09bCYmMD5FKGwscikpKWJyZWFrIGU7ZVtuXT1sLGVbc109cixuPXN9fX1yZXR1cm4gdH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFKGUsdCl7dmFyIHI9ZS5zb3J0SW5kZXgtdC5zb3J0SW5kZXg7cmV0dXJuIDAhPT1yP3I6ZS5pZC10LmlkfXZhciBUPVtdLFI9W10sTz0xLEk9bnVsbCxGPTMsTD0hMSxEPSExLE09ITE7ZnVuY3Rpb24gTihlKXtmb3IodmFyIHQ9QyhSKTtudWxsIT09dDspe2lmKG51bGw9PT10LmNhbGxiYWNrKVAoUik7ZWxzZXtpZighKHQuc3RhcnRUaW1lPD1lKSlicmVhaztQKFIpLHQuc29ydEluZGV4PXQuZXhwaXJhdGlvblRpbWUsQShULHQpfXQ9QyhSKX19ZnVuY3Rpb24gaihlKXtpZihNPSExLE4oZSksIUQpaWYobnVsbCE9PUMoVCkpRD0hMCxuKEIpO2Vsc2V7dmFyIHQ9QyhSKTtudWxsIT09dCYmYShqLHQuc3RhcnRUaW1lLWUpfX1mdW5jdGlvbiBCKGUscil7RD0hMSxNJiYoTT0hMSxpKCkpLEw9ITA7dmFyIG49Rjt0cnl7Zm9yKE4ociksST1DKFQpO251bGwhPT1JJiYoIShJLmV4cGlyYXRpb25UaW1lPnIpfHxlJiYhbygpKTspe3ZhciBzPUkuY2FsbGJhY2s7aWYobnVsbCE9PXMpe0kuY2FsbGJhY2s9bnVsbCxGPUkucHJpb3JpdHlMZXZlbDt2YXIgbD1zKEkuZXhwaXJhdGlvblRpbWU8PXIpO3I9dC51bnN0YWJsZV9ub3coKSwiZnVuY3Rpb24iPT10eXBlb2YgbD9JLmNhbGxiYWNrPWw6ST09PUMoVCkmJlAoVCksTihyKX1lbHNlIFAoVCk7ST1DKFQpfWlmKG51bGwhPT1JKXZhciBjPSEwO2Vsc2V7dmFyIHU9QyhSKTtudWxsIT09dSYmYShqLHUuc3RhcnRUaW1lLXIpLGM9ITF9cmV0dXJuIGN9ZmluYWxseXtJPW51bGwsRj1uLEw9ITF9fWZ1bmN0aW9uIFUoZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4tMTtjYXNlIDI6cmV0dXJuIDI1MDtjYXNlIDU6cmV0dXJuIDEwNzM3NDE4MjM7Y2FzZSA0OnJldHVybiAxZTQ7ZGVmYXVsdDpyZXR1cm4gNWUzfX12YXIgcT1zO3QudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSx0LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsdC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLHQudW5zdGFibGVfSWRsZVByaW9yaXR5PTUsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIHI9RjtGPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtGPXJ9fSx0LnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oZSl7c3dpdGNoKEYpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PUZ9dmFyIHI9RjtGPXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtGPXJ9fSx0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxyLG8pe3ZhciBzPXQudW5zdGFibGVfbm93KCk7aWYoIm9iamVjdCI9PXR5cGVvZiBvJiZudWxsIT09byl7dmFyIGw9by5kZWxheTtsPSJudW1iZXIiPT10eXBlb2YgbCYmMDxsP3MrbDpzLG89Im51bWJlciI9PXR5cGVvZiBvLnRpbWVvdXQ/by50aW1lb3V0OlUoZSl9ZWxzZSBvPVUoZSksbD1zO3JldHVybiBlPXtpZDpPKyssY2FsbGJhY2s6cixwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOmwsZXhwaXJhdGlvblRpbWU6bz1sK28sc29ydEluZGV4Oi0xfSxsPnM/KGUuc29ydEluZGV4PWwsQShSLGUpLG51bGw9PT1DKFQpJiZlPT09QyhSKSYmKE0/aSgpOk09ITAsYShqLGwtcykpKTooZS5zb3J0SW5kZXg9byxBKFQsZSksRHx8THx8KEQ9ITAsbihCKSkpLGV9LHQudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7ZS5jYWxsYmFjaz1udWxsfSx0LnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1GO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUY7Rj10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtGPXJ9fX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBGfSx0LnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7dmFyIGU9dC51bnN0YWJsZV9ub3coKTtOKGUpO3ZhciByPUMoVCk7cmV0dXJuIHIhPT1JJiZudWxsIT09SSYmbnVsbCE9PXImJm51bGwhPT1yLmNhbGxiYWNrJiZyLnN0YXJ0VGltZTw9ZSYmci5leHBpcmF0aW9uVGltZTxJLmV4cGlyYXRpb25UaW1lfHxvKCl9LHQudW5zdGFibGVfcmVxdWVzdFBhaW50PXEsdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe0R8fEx8fChEPSEwLG4oQikpfSx0LnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEMoVCl9LHQudW5zdGFibGVfUHJvZmlsaW5nPW51bGx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5ieXRlTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0PWMoZSkscj10WzBdLG49dFsxXTtyZXR1cm4gMyoocituKS80LW59LHQudG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9YyhlKSxuPXJbMF0sbz1yWzFdLHM9bmV3IGkoZnVuY3Rpb24oZSx0LHIpe3JldHVybiAzKih0K3IpLzQtcn0oMCxuLG8pKSxsPTAsdT1vPjA/bi00Om4sZj0wO2Y8dTtmKz00KXQ9YVtlLmNoYXJDb2RlQXQoZildPDwxOHxhW2UuY2hhckNvZGVBdChmKzEpXTw8MTJ8YVtlLmNoYXJDb2RlQXQoZisyKV08PDZ8YVtlLmNoYXJDb2RlQXQoZiszKV0sc1tsKytdPXQ+PjE2JjI1NSxzW2wrK109dD4+OCYyNTUsc1tsKytdPTI1NSZ0OzI9PT1vJiYodD1hW2UuY2hhckNvZGVBdChmKV08PDJ8YVtlLmNoYXJDb2RlQXQoZisxKV0+PjQsc1tsKytdPTI1NSZ0KTsxPT09byYmKHQ9YVtlLmNoYXJDb2RlQXQoZildPDwxMHxhW2UuY2hhckNvZGVBdChmKzEpXTw8NHxhW2UuY2hhckNvZGVBdChmKzIpXT4+MixzW2wrK109dD4+OCYyNTUsc1tsKytdPTI1NSZ0KTtyZXR1cm4gc30sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLGE9ciUzLGk9W10sbz0wLHM9ci1hO288cztvKz0xNjM4MylpLnB1c2godShlLG8sbysxNjM4Mz5zP3M6bysxNjM4MykpOzE9PT1hPyh0PWVbci0xXSxpLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdKyI9PSIpKToyPT09YSYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLGkucHVzaChuW3Q+PjEwXStuW3Q+PjQmNjNdK25bdDw8MiY2M10rIj0iKSk7cmV0dXJuIGkuam9pbigiIil9O2Zvcih2YXIgbj1bXSxhPVtdLGk9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10sYVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLmxlbmd0aDtpZih0JTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgcj1lLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXImJihyPXQpLFtyLHI9PT10PzA6NC1yJTRdfWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgYSxpLG89W10scz10O3M8cjtzKz0zKWE9KGVbc108PDE2JjE2NzExNjgwKSsoZVtzKzFdPDw4JjY1MjgwKSsoMjU1JmVbcysyXSksby5wdXNoKG5bKGk9YSk+PjE4JjYzXStuW2k+PjEyJjYzXStuW2k+PjYmNjNdK25bNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWFbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGFbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbihlLHQpe3QucmVhZD1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpLG8scz04KmEtbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2EtMTowLGg9cj8tMToxLGQ9ZVt0K2ZdO2ZvcihmKz1oLGk9ZCYoMTw8LXUpLTEsZD4+PS11LHUrPXM7dT4wO2k9MjU2KmkrZVt0K2ZdLGYrPWgsdS09OCk7Zm9yKG89aSYoMTw8LXUpLTEsaT4+PS11LHUrPW47dT4wO289MjU2Km8rZVt0K2ZdLGYrPWgsdS09OCk7aWYoMD09PWkpaT0xLWM7ZWxzZXtpZihpPT09bClyZXR1cm4gbz9OYU46MS8wKihkPy0xOjEpO28rPU1hdGgucG93KDIsbiksaS09Y31yZXR1cm4oZD8tMToxKSpvKk1hdGgucG93KDIsaS1uKX0sdC53cml0ZT1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG8scyxsLGM9OCppLWEtMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09YT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1uPzA6aS0xLHA9bj8xOi0xLG09dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKHQrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KHQqbC0xKSpNYXRoLnBvdygyLGEpLG8rPWYpOihzPXQqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsYSksbz0wKSk7YT49ODtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYS09OCk7Zm9yKG89bzw8YXxzLGMrPWE7Yz4wO2VbcitkXT0yNTUmbyxkKz1wLG8vPTI1NixjLT04KTtlW3IrZC1wXXw9MTI4Km19fSxmdW5jdGlvbihlLHQpe3ZhciByPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1yLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQ5KSxhPXIoNTEpO2Z1bmN0aW9uIGkoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH10LnBhcnNlPWIsdC5yZXNvbHZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZSwhMSwhMCkucmVzb2x2ZSh0KX0sdC5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/YihlLCExLCEwKS5yZXNvbHZlT2JqZWN0KHQpOnR9LHQuZm9ybWF0PWZ1bmN0aW9uKGUpe2EuaXNTdHJpbmcoZSkmJihlPWIoZSkpO3JldHVybiBlIGluc3RhbmNlb2YgaT9lLmZvcm1hdCgpOmkucHJvdG90eXBlLmZvcm1hdC5jYWxsKGUpfSx0LlVybD1pO3ZhciBvPS9eKFthLXowLTkuKy1dKzopL2kscz0vOlswLTldKiQvLGw9L14oXC9cLz8oPyFcLylbXlw/XHNdKikoXD9bXlxzXSopPyQvLGM9WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KFsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSksdT1bIiciXS5jb25jYXQoYyksZj1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KHUpLGg9WyIvIiwiPyIsIiMiXSxkPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxwPS9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxtPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LGc9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sdj17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9LHk9cig1Mik7ZnVuY3Rpb24gYihlLHQscil7aWYoZSYmYS5pc09iamVjdChlKSYmZSBpbnN0YW5jZW9mIGkpcmV0dXJuIGU7dmFyIG49bmV3IGk7cmV0dXJuIG4ucGFyc2UoZSx0LHIpLG59aS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LHIpe2lmKCFhLmlzU3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgZSk7dmFyIGk9ZS5pbmRleE9mKCI/Iikscz0tMSE9PWkmJmk8ZS5pbmRleE9mKCIjIik/Ij8iOiIjIixjPWUuc3BsaXQocyk7Y1swXT1jWzBdLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgYj1lPWMuam9pbihzKTtpZihiPWIudHJpbSgpLCFyJiYxPT09ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIHc9bC5leGVjKGIpO2lmKHcpcmV0dXJuIHRoaXMucGF0aD1iLHRoaXMuaHJlZj1iLHRoaXMucGF0aG5hbWU9d1sxXSx3WzJdPyh0aGlzLnNlYXJjaD13WzJdLHRoaXMucXVlcnk9dD95LnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0JiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgaz1vLmV4ZWMoYik7aWYoayl7dmFyIFM9KGs9a1swXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPVMsYj1iLnN1YnN0cihrLmxlbmd0aCl9aWYocnx8a3x8Yi5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIF89Ii8vIj09PWIuc3Vic3RyKDAsMik7IV98fGsmJmdba118fChiPWIuc3Vic3RyKDIpLHRoaXMuc2xhc2hlcz0hMCl9aWYoIWdba10mJihffHxrJiYhdltrXSkpe2Zvcih2YXIgeCxBLEM9LTEsUD0wO1A8aC5sZW5ndGg7UCsrKXstMSE9PShFPWIuaW5kZXhPZihoW1BdKSkmJigtMT09PUN8fEU8QykmJihDPUUpfS0xIT09KEE9LTE9PT1DP2IubGFzdEluZGV4T2YoIkAiKTpiLmxhc3RJbmRleE9mKCJAIixDKSkmJih4PWIuc2xpY2UoMCxBKSxiPWIuc2xpY2UoQSsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KHgpKSxDPS0xO2ZvcihQPTA7UDxmLmxlbmd0aDtQKyspe3ZhciBFOy0xIT09KEU9Yi5pbmRleE9mKGZbUF0pKSYmKC0xPT09Q3x8RTxDKSYmKEM9RSl9LTE9PT1DJiYoQz1iLmxlbmd0aCksdGhpcy5ob3N0PWIuc2xpY2UoMCxDKSxiPWIuc2xpY2UoQyksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBUPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIVQpZm9yKHZhciBSPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksTz0oUD0wLFIubGVuZ3RoKTtQPE87UCsrKXt2YXIgST1SW1BdO2lmKEkmJiFJLm1hdGNoKGQpKXtmb3IodmFyIEY9IiIsTD0wLEQ9SS5sZW5ndGg7TDxEO0wrKylJLmNoYXJDb2RlQXQoTCk+MTI3P0YrPSJ4IjpGKz1JW0xdO2lmKCFGLm1hdGNoKGQpKXt2YXIgTT1SLnNsaWNlKDAsUCksTj1SLnNsaWNlKFArMSksaj1JLm1hdGNoKHApO2omJihNLnB1c2goalsxXSksTi51bnNoaWZ0KGpbMl0pKSxOLmxlbmd0aCYmKGI9Ii8iK04uam9pbigiLiIpK2IpLHRoaXMuaG9zdG5hbWU9TS5qb2luKCIuIik7YnJlYWt9fX10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxUfHwodGhpcy5ob3N0bmFtZT1uLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBCPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLFU9dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PVUrQix0aGlzLmhyZWYrPXRoaXMuaG9zdCxUJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWJbMF0mJihiPSIvIitiKSl9aWYoIW1bU10pZm9yKFA9MCxPPXUubGVuZ3RoO1A8TztQKyspe3ZhciBxPXVbUF07aWYoLTEhPT1iLmluZGV4T2YocSkpe3ZhciB6PWVuY29kZVVSSUNvbXBvbmVudChxKTt6PT09cSYmKHo9ZXNjYXBlKHEpKSxiPWIuc3BsaXQocSkuam9pbih6KX19dmFyIFc9Yi5pbmRleE9mKCIjIik7LTEhPT1XJiYodGhpcy5oYXNoPWIuc3Vic3RyKFcpLGI9Yi5zbGljZSgwLFcpKTt2YXIgSD1iLmluZGV4T2YoIj8iKTtpZigtMSE9PUg/KHRoaXMuc2VhcmNoPWIuc3Vic3RyKEgpLHRoaXMucXVlcnk9Yi5zdWJzdHIoSCsxKSx0JiYodGhpcy5xdWVyeT15LnBhcnNlKHRoaXMucXVlcnkpKSxiPWIuc2xpY2UoMCxIKSk6dCYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLGImJih0aGlzLnBhdGhuYW1lPWIpLHZbU10mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtCPXRoaXMucGF0aG5hbWV8fCIiO3ZhciBHPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9QitHfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxpLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1dGh8fCIiO2UmJihlPShlPWVuY29kZVVSSUNvbXBvbmVudChlKSkucmVwbGFjZSgvJTNBL2ksIjoiKSxlKz0iQCIpO3ZhciB0PXRoaXMucHJvdG9jb2x8fCIiLHI9dGhpcy5wYXRobmFtZXx8IiIsbj10aGlzLmhhc2h8fCIiLGk9ITEsbz0iIjt0aGlzLmhvc3Q/aT1lK3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYoaT1lKygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihpKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmYS5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz15LnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIHM9dGhpcy5zZWFyY2h8fG8mJiI/IitvfHwiIjtyZXR1cm4gdCYmIjoiIT09dC5zdWJzdHIoLTEpJiYodCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghdHx8dlt0XSkmJiExIT09aT8oaT0iLy8iKyhpfHwiIiksciYmIi8iIT09ci5jaGFyQXQoMCkmJihyPSIvIityKSk6aXx8KGk9IiIpLG4mJiIjIiE9PW4uY2hhckF0KDApJiYobj0iIyIrbikscyYmIj8iIT09cy5jaGFyQXQoMCkmJihzPSI/IitzKSx0K2krKHI9ci5yZXBsYWNlKC9bPyNdL2csKGZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSl9KSkpKyhzPXMucmVwbGFjZSgiIyIsIiUyMyIpKStufSxpLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlc29sdmVPYmplY3QoYihlLCExLCEwKSkuZm9ybWF0KCl9LGkucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24oZSl7aWYoYS5pc1N0cmluZyhlKSl7dmFyIHQ9bmV3IGk7dC5wYXJzZShlLCExLCEwKSxlPXR9Zm9yKHZhciByPW5ldyBpLG49T2JqZWN0LmtleXModGhpcyksbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO3Jbc109dGhpc1tzXX1pZihyLmhhc2g9ZS5oYXNoLCIiPT09ZS5ocmVmKXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyO2lmKGUuc2xhc2hlcyYmIWUucHJvdG9jb2wpe2Zvcih2YXIgbD1PYmplY3Qua2V5cyhlKSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107InByb3RvY29sIiE9PXUmJihyW3VdPWVbdV0pfXJldHVybiB2W3IucHJvdG9jb2xdJiZyLmhvc3RuYW1lJiYhci5wYXRobmFtZSYmKHIucGF0aD1yLnBhdGhuYW1lPSIvIiksci5ocmVmPXIuZm9ybWF0KCkscn1pZihlLnByb3RvY29sJiZlLnByb3RvY29sIT09ci5wcm90b2NvbCl7aWYoIXZbZS5wcm90b2NvbF0pe2Zvcih2YXIgZj1PYmplY3Qua2V5cyhlKSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07cltkXT1lW2RdfXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHIucHJvdG9jb2w9ZS5wcm90b2NvbCxlLmhvc3R8fGdbZS5wcm90b2NvbF0pci5wYXRobmFtZT1lLnBhdGhuYW1lO2Vsc2V7Zm9yKHZhciBwPShlLnBhdGhuYW1lfHwiIikuc3BsaXQoIi8iKTtwLmxlbmd0aCYmIShlLmhvc3Q9cC5zaGlmdCgpKTspO2UuaG9zdHx8KGUuaG9zdD0iIiksZS5ob3N0bmFtZXx8KGUuaG9zdG5hbWU9IiIpLCIiIT09cFswXSYmcC51bnNoaWZ0KCIiKSxwLmxlbmd0aDwyJiZwLnVuc2hpZnQoIiIpLHIucGF0aG5hbWU9cC5qb2luKCIvIil9aWYoci5zZWFyY2g9ZS5zZWFyY2gsci5xdWVyeT1lLnF1ZXJ5LHIuaG9zdD1lLmhvc3R8fCIiLHIuYXV0aD1lLmF1dGgsci5ob3N0bmFtZT1lLmhvc3RuYW1lfHxlLmhvc3Qsci5wb3J0PWUucG9ydCxyLnBhdGhuYW1lfHxyLnNlYXJjaCl7dmFyIG09ci5wYXRobmFtZXx8IiIseT1yLnNlYXJjaHx8IiI7ci5wYXRoPW0reX1yZXR1cm4gci5zbGFzaGVzPXIuc2xhc2hlc3x8ZS5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9dmFyIGI9ci5wYXRobmFtZSYmIi8iPT09ci5wYXRobmFtZS5jaGFyQXQoMCksdz1lLmhvc3R8fGUucGF0aG5hbWUmJiIvIj09PWUucGF0aG5hbWUuY2hhckF0KDApLGs9d3x8Ynx8ci5ob3N0JiZlLnBhdGhuYW1lLFM9ayxfPXIucGF0aG5hbWUmJnIucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10seD0ocD1lLnBhdGhuYW1lJiZlLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLHIucHJvdG9jb2wmJiF2W3IucHJvdG9jb2xdKTtpZih4JiYoci5ob3N0bmFtZT0iIixyLnBvcnQ9bnVsbCxyLmhvc3QmJigiIj09PV9bMF0/X1swXT1yLmhvc3Q6Xy51bnNoaWZ0KHIuaG9zdCkpLHIuaG9zdD0iIixlLnByb3RvY29sJiYoZS5ob3N0bmFtZT1udWxsLGUucG9ydD1udWxsLGUuaG9zdCYmKCIiPT09cFswXT9wWzBdPWUuaG9zdDpwLnVuc2hpZnQoZS5ob3N0KSksZS5ob3N0PW51bGwpLGs9ayYmKCIiPT09cFswXXx8IiI9PT1fWzBdKSksdylyLmhvc3Q9ZS5ob3N0fHwiIj09PWUuaG9zdD9lLmhvc3Q6ci5ob3N0LHIuaG9zdG5hbWU9ZS5ob3N0bmFtZXx8IiI9PT1lLmhvc3RuYW1lP2UuaG9zdG5hbWU6ci5ob3N0bmFtZSxyLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnksXz1wO2Vsc2UgaWYocC5sZW5ndGgpX3x8KF89W10pLF8ucG9wKCksXz1fLmNvbmNhdChwKSxyLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnk7ZWxzZSBpZighYS5pc051bGxPclVuZGVmaW5lZChlLnNlYXJjaCkpe2lmKHgpci5ob3N0bmFtZT1yLmhvc3Q9Xy5zaGlmdCgpLChUPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wKSYmci5ob3N0LnNwbGl0KCJAIikpJiYoci5hdXRoPVQuc2hpZnQoKSxyLmhvc3Q9ci5ob3N0bmFtZT1ULnNoaWZ0KCkpO3JldHVybiByLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnksYS5pc051bGwoci5wYXRobmFtZSkmJmEuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmhyZWY9ci5mb3JtYXQoKSxyfWlmKCFfLmxlbmd0aClyZXR1cm4gci5wYXRobmFtZT1udWxsLHIuc2VhcmNoP3IucGF0aD0iLyIrci5zZWFyY2g6ci5wYXRoPW51bGwsci5ocmVmPXIuZm9ybWF0KCkscjtmb3IodmFyIEE9Xy5zbGljZSgtMSlbMF0sQz0oci5ob3N0fHxlLmhvc3R8fF8ubGVuZ3RoPjEpJiYoIi4iPT09QXx8Ii4uIj09PUEpfHwiIj09PUEsUD0wLEU9Xy5sZW5ndGg7RT49MDtFLS0pIi4iPT09KEE9X1tFXSk/Xy5zcGxpY2UoRSwxKToiLi4iPT09QT8oXy5zcGxpY2UoRSwxKSxQKyspOlAmJihfLnNwbGljZShFLDEpLFAtLSk7aWYoIWsmJiFTKWZvcig7UC0tO1ApXy51bnNoaWZ0KCIuLiIpOyFrfHwiIj09PV9bMF18fF9bMF0mJiIvIj09PV9bMF0uY2hhckF0KDApfHxfLnVuc2hpZnQoIiIpLEMmJiIvIiE9PV8uam9pbigiLyIpLnN1YnN0cigtMSkmJl8ucHVzaCgiIik7dmFyIFQsUj0iIj09PV9bMF18fF9bMF0mJiIvIj09PV9bMF0uY2hhckF0KDApO3gmJihyLmhvc3RuYW1lPXIuaG9zdD1SPyIiOl8ubGVuZ3RoP18uc2hpZnQoKToiIiwoVD0hIShyLmhvc3QmJnIuaG9zdC5pbmRleE9mKCJAIik+MCkmJnIuaG9zdC5zcGxpdCgiQCIpKSYmKHIuYXV0aD1ULnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9VC5zaGlmdCgpKSk7cmV0dXJuKGs9a3x8ci5ob3N0JiZfLmxlbmd0aCkmJiFSJiZfLnVuc2hpZnQoIiIpLF8ubGVuZ3RoP3IucGF0aG5hbWU9Xy5qb2luKCIvIik6KHIucGF0aG5hbWU9bnVsbCxyLnBhdGg9bnVsbCksYS5pc051bGwoci5wYXRobmFtZSkmJmEuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmF1dGg9ZS5hdXRofHxyLmF1dGgsci5zbGFzaGVzPXIuc2xhc2hlc3x8ZS5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9LGkucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaG9zdCx0PXMuZXhlYyhlKTt0JiYoIjoiIT09KHQ9dFswXSkmJih0aGlzLnBvcnQ9dC5zdWJzdHIoMSkpLGU9ZS5zdWJzdHIoMCxlLmxlbmd0aC10Lmxlbmd0aCkpLGUmJih0aGlzLmhvc3RuYW1lPWUpfX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlLG4pe3ZhciBhOy8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovIWZ1bmN0aW9uKGkpe3QmJnQubm9kZVR5cGUsZSYmZS5ub2RlVHlwZTt2YXIgbz0ib2JqZWN0Ij09dHlwZW9mIG4mJm47by5nbG9iYWwhPT1vJiZvLndpbmRvdyE9PW8mJm8uc2VsZjt2YXIgcyxsPTIxNDc0ODM2NDcsYz0vXnhuLS0vLHU9L1teXHgyMC1ceDdFXS8sZj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csaD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sZD1NYXRoLmZsb29yLHA9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBtKGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKGhbZV0pfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1bXTtyLS07KW5bcl09dChlW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiB2KGUsdCl7dmFyIHI9ZS5zcGxpdCgiQCIpLG49IiI7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMF0rIkAiLGU9clsxXSksbitnKChlPWUucmVwbGFjZShmLCIuIikpLnNwbGl0KCIuIiksdCkuam9pbigiLiIpfWZ1bmN0aW9uIHkoZSl7Zm9yKHZhciB0LHIsbj1bXSxhPTAsaT1lLmxlbmd0aDthPGk7KSh0PWUuY2hhckNvZGVBdChhKyspKT49NTUyOTYmJnQ8PTU2MzE5JiZhPGk/NTYzMjA9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQoYSsrKSkpP24ucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZyKSs2NTUzNik6KG4ucHVzaCh0KSxhLS0pOm4ucHVzaCh0KTtyZXR1cm4gbn1mdW5jdGlvbiBiKGUpe3JldHVybiBnKGUsKGZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiBlPjY1NTM1JiYodCs9cCgoZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksZT01NjMyMHwxMDIzJmUpLHQrPXAoZSl9KSkuam9pbigiIil9ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBlKzIyKzc1KihlPDI2KS0oKDAhPXQpPDw1KX1mdW5jdGlvbiBrKGUsdCxyKXt2YXIgbj0wO2ZvcihlPXI/ZChlLzcwMCk6ZT4+MSxlKz1kKGUvdCk7ZT40NTU7bis9MzYpZT1kKGUvMzUpO3JldHVybiBkKG4rMzYqZS8oZSszOCkpfWZ1bmN0aW9uIFMoZSl7dmFyIHQscixuLGEsaSxvLHMsYyx1LGYsaCxwPVtdLGc9ZS5sZW5ndGgsdj0wLHk9MTI4LHc9NzI7Zm9yKChyPWUubGFzdEluZGV4T2YoIi0iKSk8MCYmKHI9MCksbj0wO248cjsrK24pZS5jaGFyQ29kZUF0KG4pPj0xMjgmJm0oIm5vdC1iYXNpYyIpLHAucHVzaChlLmNoYXJDb2RlQXQobikpO2ZvcihhPXI+MD9yKzE6MDthPGc7KXtmb3IoaT12LG89MSxzPTM2O2E+PWcmJm0oImludmFsaWQtaW5wdXQiKSwoKGM9KGg9ZS5jaGFyQ29kZUF0KGErKykpLTQ4PDEwP2gtMjI6aC02NTwyNj9oLTY1OmgtOTc8MjY/aC05NzozNik+PTM2fHxjPmQoKGwtdikvbykpJiZtKCJvdmVyZmxvdyIpLHYrPWMqbywhKGM8KHU9czw9dz8xOnM+PXcrMjY/MjY6cy13KSk7cys9MzYpbz5kKGwvKGY9MzYtdSkpJiZtKCJvdmVyZmxvdyIpLG8qPWY7dz1rKHYtaSx0PXAubGVuZ3RoKzEsMD09aSksZCh2L3QpPmwteSYmbSgib3ZlcmZsb3ciKSx5Kz1kKHYvdCksdiU9dCxwLnNwbGljZSh2KyssMCx5KX1yZXR1cm4gYihwKX1mdW5jdGlvbiBfKGUpe3ZhciB0LHIsbixhLGksbyxzLGMsdSxmLGgsZyx2LGIsUyxfPVtdO2ZvcihnPShlPXkoZSkpLmxlbmd0aCx0PTEyOCxyPTAsaT03MixvPTA7bzxnOysrbykoaD1lW29dKTwxMjgmJl8ucHVzaChwKGgpKTtmb3Iobj1hPV8ubGVuZ3RoLGEmJl8ucHVzaCgiLSIpO248Zzspe2ZvcihzPWwsbz0wO288ZzsrK28pKGg9ZVtvXSk+PXQmJmg8cyYmKHM9aCk7Zm9yKHMtdD5kKChsLXIpLyh2PW4rMSkpJiZtKCJvdmVyZmxvdyIpLHIrPShzLXQpKnYsdD1zLG89MDtvPGc7KytvKWlmKChoPWVbb10pPHQmJisrcj5sJiZtKCJvdmVyZmxvdyIpLGg9PXQpe2ZvcihjPXIsdT0zNjshKGM8KGY9dTw9aT8xOnU+PWkrMjY/MjY6dS1pKSk7dSs9MzYpUz1jLWYsYj0zNi1mLF8ucHVzaChwKHcoZitTJWIsMCkpKSxjPWQoUy9iKTtfLnB1c2gocCh3KGMsMCkpKSxpPWsocix2LG49PWEpLHI9MCwrK259KytyLCsrdH1yZXR1cm4gXy5qb2luKCIiKX1zPXt2ZXJzaW9uOiIxLjQuMSIsdWNzMjp7ZGVjb2RlOnksZW5jb2RlOmJ9LGRlY29kZTpTLGVuY29kZTpfLHRvQVNDSUk6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHUudGVzdChlKT8ieG4tLSIrXyhlKTplfSkpfSx0b1VuaWNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGMudGVzdChlKT9TKGUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6ZX0pKX19LHZvaWQgMD09PShhPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LmNhbGwodCxyLHQsZSkpfHwoZS5leHBvcnRzPWEpfSgpfSkuY2FsbCh0aGlzLHIoNTApKGUpLHIoMTgpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUud2VicGFja1BvbHlmaWxsfHwoZS5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pfX0pLGUud2VicGFja1BvbHlmaWxsPTEpLGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfSxpc051bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZGVjb2RlPXQucGFyc2U9cig1MyksdC5lbmNvZGU9dC5zdHJpbmdpZnk9cig1NCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7dD10fHwiJiIscj1yfHwiPSI7dmFyIG89e307aWYoInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpcmV0dXJuIG87dmFyIHM9L1wrL2c7ZT1lLnNwbGl0KHQpO3ZhciBsPTFlMztpJiYibnVtYmVyIj09dHlwZW9mIGkubWF4S2V5cyYmKGw9aS5tYXhLZXlzKTt2YXIgYz1lLmxlbmd0aDtsPjAmJmM+bCYmKGM9bCk7Zm9yKHZhciB1PTA7dTxjOysrdSl7dmFyIGYsaCxkLHAsbT1lW3VdLnJlcGxhY2UocywiJTIwIiksZz1tLmluZGV4T2Yocik7Zz49MD8oZj1tLnN1YnN0cigwLGcpLGg9bS5zdWJzdHIoZysxKSk6KGY9bSxoPSIiKSxkPWRlY29kZVVSSUNvbXBvbmVudChmKSxwPWRlY29kZVVSSUNvbXBvbmVudChoKSxuKG8sZCk/YShvW2RdKT9vW2RdLnB1c2gocCk6b1tkXT1bb1tkXSxwXTpvW2RdPXB9cmV0dXJuIG99O3ZhciBhPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBlO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShlKT9lOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7cmV0dXJuIHQ9dHx8IiYiLHI9cnx8Ij0iLG51bGw9PT1lJiYoZT12b2lkIDApLCJvYmplY3QiPT10eXBlb2YgZT9pKG8oZSksKGZ1bmN0aW9uKG8pe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChuKG8pKStyO3JldHVybiBhKGVbb10pP2koZVtvXSwoZnVuY3Rpb24oZSl7cmV0dXJuIHMrZW5jb2RlVVJJQ29tcG9uZW50KG4oZSkpfSkpLmpvaW4odCk6cytlbmNvZGVVUklDb21wb25lbnQobihlW29dKSl9KSkuam9pbih0KTpzP2VuY29kZVVSSUNvbXBvbmVudChuKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChuKGUpKToiIn07dmFyIGE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX07ZnVuY3Rpb24gaShlLHQpe2lmKGUubWFwKXJldHVybiBlLm1hcCh0KTtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXIucHVzaCh0KGVbbl0sbikpO3JldHVybiByfXZhciBvPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5wdXNoKHIpO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIGk9YShyKDEyKSksbz1hKHIoMzApKSxzPWEocigyMSkpLGw9YShyKDE0KSksYz1hKHIoMjUpKSx1PWEocigxNSkpLGY9YShyKDIpKSxoPWEocig2KSksZD1hKHIoNykpLHA9YShyKDMpKSxtPWEocig5KSksZz1hKHIoOCkpLHY9YShyKDUpKSx5PW4ocigwKSksYj1hKHIoNCkpLHc9YShyKDIyKSksaz1hKHIoMjcpKSxTPW4ocigyMCkpLF89YShyKDE5KSkseD1hKHIoMzEpKSxBPWEocigzMikpLEM9YShyKDYyKSksUD1yKDEwKSxFPXIoMTMpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKWFbaV09YXJndW1lbnRzW2ldO3JldHVybiByPSgwLGQuZGVmYXVsdCkodGhpcywoZT0oMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChhKSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwic3RhdGUiLHtwZGY6bnVsbH0pLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwidmlld2VyIix7c2Nyb2xsUGFnZUludG9WaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZU51bWJlcixuPXIucHJvcHMub25JdGVtQ2xpY2s7aWYobiluKHtwYWdlTnVtYmVyOnR9KTtlbHNle3ZhciBhPXIucGFnZXNbdC0xXTthP2Euc2Nyb2xsSW50b1ZpZXcoKTooMCxQLndhcm5PbkRldikoIldhcm5pbmc6IEFuIGludGVybmFsIGxpbmsgbGVhZGluZyB0byBwYWdlICIuY29uY2F0KHQsIiB3YXMgY2xpY2tlZCwgYnV0IG5laXRoZXIgPERvY3VtZW50PiB3YXMgcHJvdmlkZWQgd2l0aCBvbkl0ZW1DbGljayBub3IgaXQgd2FzIGFibGUgdG8gZmluZCB0aGUgcGFnZSB3aXRoaW4gaXRzZWxmLiBFaXRoZXIgcHJvdmlkZSBvbkl0ZW1DbGljayB0byA8RG9jdW1lbnQ+IGFuZCBoYW5kbGUgbmF2aWdhdGluZyBieSB5b3Vyc2VsZiBvciBlbnN1cmUgdGhhdCBhbGwgcGFnZXMgYXJlIHJlbmRlcmVkIHdpdGhpbiA8RG9jdW1lbnQ+LiIpKX19fSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJsaW5rU2VydmljZSIsbmV3IEEuZGVmYXVsdCksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJsb2FkRG9jdW1lbnQiLCgwLHUuZGVmYXVsdCkobC5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGEsaSxvLHMsdSxmO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9bnVsbCxlLnByZXY9MSxlLm5leHQ9NCxyLmZpbmREb2N1bWVudFNvdXJjZSgpO2Nhc2UgNDp0PWUuc2VudCxyLm9uU291cmNlU3VjY2VzcygpLGUubmV4dD0xMTticmVhaztjYXNlIDg6ZS5wcmV2PTgsZS50MD1lLmNhdGNoKDEpLHIub25Tb3VyY2VFcnJvcihlLnQwKTtjYXNlIDExOmlmKHQpe2UubmV4dD0xMzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6cmV0dXJuIHIuc2V0U3RhdGUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBkZj97cGRmOm51bGx9Om51bGx9KSksbj1yLnByb3BzLGE9bi5vcHRpb25zLGk9bi5vbkxvYWRQcm9ncmVzcyxvPW4ub25QYXNzd29yZCxlLnByZXY9MTUsKDAsUC5jYW5jZWxSdW5uaW5nVGFzaykoci5ydW5uaW5nVGFzayksKHM9Uy5kZWZhdWx0LmdldERvY3VtZW50KCgwLGMuZGVmYXVsdCkoe30sdCxhKSkpLm9uUGFzc3dvcmQ9byxpJiYocy5vblByb2dyZXNzPWkpLHU9KDAsUC5tYWtlQ2FuY2VsbGFibGUpKHMucHJvbWlzZSksci5ydW5uaW5nVGFzaz11LGUubmV4dD0yNCx1LnByb21pc2U7Y2FzZSAyNDpmPWUuc2VudCxyLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wZGYmJmUucGRmLmZpbmdlcnByaW50PT09Zi5maW5nZXJwcmludD9udWxsOntwZGY6Zn19KSxyLm9uTG9hZFN1Y2Nlc3MpLGUubmV4dD0zMTticmVhaztjYXNlIDI4OmUucHJldj0yOCxlLnQxPWUuY2F0Y2goMTUpLHIub25Mb2FkRXJyb3IoZS50MSk7Y2FzZSAzMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzEsOF0sWzE1LDI4XV0pfSkpKSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJzZXR1cExpbmtTZXJ2aWNlIiwoZnVuY3Rpb24oKXtyLmxpbmtTZXJ2aWNlLnNldFZpZXdlcihyLnZpZXdlcik7dmFyIGU9KDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoci5saW5rU2VydmljZSwiZXh0ZXJuYWxMaW5rVGFyZ2V0Iix7Z2V0OmZ1bmN0aW9uKCl7c3dpdGNoKGUucHJvcHMuZXh0ZXJuYWxMaW5rVGFyZ2V0KXtjYXNlIl9zZWxmIjpyZXR1cm4gMTtjYXNlIl9ibGFuayI6cmV0dXJuIDI7Y2FzZSJfcGFyZW50IjpyZXR1cm4gMztjYXNlIl90b3AiOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDB9fX0pfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Tb3VyY2VTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLm9uU291cmNlU3VjY2VzczsoMCxQLmNhbGxJZkRlZmluZWQpKGUpfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Tb3VyY2VFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCxQLmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsUC5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uU291cmNlRXJyb3I7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCx2LmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25Mb2FkU3VjY2Vzcyx0PXIuc3RhdGUucGRmOygwLFAuY2FsbElmRGVmaW5lZCkoZSx0KSxyLnBhZ2VzPW5ldyBBcnJheSh0Lm51bVBhZ2VzKSxyLmxpbmtTZXJ2aWNlLnNldERvY3VtZW50KHQpfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Mb2FkRXJyb3IiLChmdW5jdGlvbihlKXtpZighKDAsUC5pc0NhbmNlbEV4Y2VwdGlvbikoZSkpe3Iuc2V0U3RhdGUoe3BkZjohMX0pLCgwLFAuZXJyb3JPbkRldikoZSk7dmFyIHQ9ci5wcm9wcy5vbkxvYWRFcnJvcjsoMCxQLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwiZmluZERvY3VtZW50U291cmNlIiwoMCx1LmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhLGksdTtyZXR1cm4gbC5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHQ9ci5wcm9wcy5maWxlKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKCJzdHJpbmciIT10eXBlb2YgdCl7ZS5uZXh0PTk7YnJlYWt9aWYoISgwLFAuaXNEYXRhVVJJKSh0KSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIG49KDAsUC5kYXRhVVJJdG9VaW50OEFycmF5KSh0KSxlLmFicnVwdCgicmV0dXJuIix7ZGF0YTpufSk7Y2FzZSA3OnJldHVybigwLFAuZGlzcGxheUNPUlNXYXJuaW5nKSgpLGUuYWJydXB0KCJyZXR1cm4iLHt1cmw6dH0pO2Nhc2UgOTppZighKHQgaW5zdGFuY2VvZiBTLlBERkRhdGFSYW5nZVRyYW5zcG9ydCkpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3JhbmdlOnR9KTtjYXNlIDExOmlmKCEoMCxQLmlzQXJyYXlCdWZmZXIpKHQpKXtlLm5leHQ9MTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtkYXRhOnR9KTtjYXNlIDEzOmlmKCFQLmlzQnJvd3Nlcil7ZS5uZXh0PTE5O2JyZWFrfWlmKCEoMCxQLmlzQmxvYikodCkmJiEoMCxQLmlzRmlsZSkodCkpe2UubmV4dD0xOTticmVha31yZXR1cm4gZS5uZXh0PTE3LCgwLFAubG9hZEZyb21GaWxlKSh0KTtjYXNlIDE3OnJldHVybiBlLnQwPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7ZGF0YTplLnQwfSk7Y2FzZSAxOTppZigib2JqZWN0Ij09PSgwLHMuZGVmYXVsdCkodCkpe2UubmV4dD0yMTticmVha310aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIGluIGZpbGUsIG5lZWQgZWl0aGVyIFVpbnQ4QXJyYXksIHN0cmluZyBvciBhIHBhcmFtZXRlciBvYmplY3QiKTtjYXNlIDIxOmlmKHQudXJsfHx0LmRhdGF8fHQucmFuZ2Upe2UubmV4dD0yMzticmVha310aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIG9iamVjdDogbmVlZCBlaXRoZXIgLmRhdGEsIC5yYW5nZSBvciAudXJsIik7Y2FzZSAyMzppZigic3RyaW5nIiE9dHlwZW9mIHQudXJsKXtlLm5leHQ9Mjk7YnJlYWt9aWYoISgwLFAuaXNEYXRhVVJJKSh0LnVybCkpe2UubmV4dD0yODticmVha31yZXR1cm4gYT10LnVybCxpPSgwLG8uZGVmYXVsdCkodCxbInVybCJdKSx1PSgwLFAuZGF0YVVSSXRvVWludDhBcnJheSkoYSksZS5hYnJ1cHQoInJldHVybiIsKDAsYy5kZWZhdWx0KSh7ZGF0YTp1fSxpKSk7Y2FzZSAyODooMCxQLmRpc3BsYXlDT1JTV2FybmluZykoKTtjYXNlIDI5OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwicmVnaXN0ZXJQYWdlIiwoZnVuY3Rpb24oZSx0KXtyLnBhZ2VzW2VdPXR9KSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJ1bnJlZ2lzdGVyUGFnZSIsKGZ1bmN0aW9uKGUpe2RlbGV0ZSByLnBhZ2VzW2VdfSkpLHJ9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGguZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5sb2FkRG9jdW1lbnQoKSx0aGlzLnNldHVwTGlua1NlcnZpY2UoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5maWxlIT09ZS5maWxlJiZ0aGlzLmxvYWREb2N1bWVudCgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsUC5jYW5jZWxSdW5uaW5nVGFzaykodGhpcy5ydW5uaW5nVGFzayl9fSx7a2V5OiJyZW5kZXJDaGlsZHJlbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNoaWxkcmVuO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLmRlZmF1bHQuUHJvdmlkZXIse3ZhbHVlOnRoaXMuY2hpbGRDb250ZXh0fSxlKX19LHtrZXk6InJlbmRlckNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5maWxlLHQ9dGhpcy5zdGF0ZS5wZGY7aWYoIWUpe3ZhciByPXRoaXMucHJvcHMubm9EYXRhO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LmRlZmF1bHQse3R5cGU6Im5vLWRhdGEifSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cil9aWYobnVsbD09PXQpe3ZhciBuPXRoaXMucHJvcHMubG9hZGluZztyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHt0eXBlOiJsb2FkaW5nIn0sImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pfWlmKCExPT09dCl7dmFyIGE9dGhpcy5wcm9wcy5lcnJvcjtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHt0eXBlOiJlcnJvciJ9LCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoKTphKX1yZXR1cm4gdGhpcy5yZW5kZXJDaGlsZHJlbigpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuaW5wdXRSZWY7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLCgwLGkuZGVmYXVsdCkoe2NsYXNzTmFtZTooMCxrLmRlZmF1bHQpKCJyZWFjdC1wZGZfX0RvY3VtZW50Iix0KSxyZWY6cn0sdGhpcy5ldmVudFByb3BzKSx0aGlzLnJlbmRlckNvbnRlbnQoKSl9fSx7a2V5OiJjaGlsZENvbnRleHQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGlua1NlcnZpY2UsdD10aGlzLnJlZ2lzdGVyUGFnZSxyPXRoaXMudW5yZWdpc3RlclBhZ2Usbj10aGlzLnByb3BzLGE9bi5yZW5kZXJNb2RlLGk9bi5yb3RhdGU7cmV0dXJue2xpbmtTZXJ2aWNlOmUscGRmOnRoaXMuc3RhdGUucGRmLHJlZ2lzdGVyUGFnZTp0LHJlbmRlck1vZGU6YSxyb3RhdGU6aSx1bnJlZ2lzdGVyUGFnZTpyfX19LHtrZXk6ImV2ZW50UHJvcHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuKDAsdy5kZWZhdWx0KSh0aGlzLnByb3BzLChmdW5jdGlvbigpe3JldHVybiBlLnN0YXRlLnBkZn0pKX19XSksdH0oeS5QdXJlQ29tcG9uZW50KTt0LmRlZmF1bHQ9VCxULmRlZmF1bHRQcm9wcz17ZXJyb3I6IkZhaWxlZCB0byBsb2FkIFBERiBmaWxlLiIsbG9hZGluZzoiTG9hZGluZyBQREbigKYiLG5vRGF0YToiTm8gUERGIGZpbGUgc3BlY2lmaWVkLiIsb25QYXNzd29yZDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIEMuZGVmYXVsdC5ORUVEX1BBU1NXT1JEOmUocHJvbXB0KCJFbnRlciB0aGUgcGFzc3dvcmQgdG8gb3BlbiB0aGlzIFBERiBmaWxlLiIpKTticmVhaztjYXNlIEMuZGVmYXVsdC5JTkNPUlJFQ1RfUEFTU1dPUkQ6ZShwcm9tcHQoIkludmFsaWQgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4uIikpfX19LFQucHJvcFR5cGVzPSgwLGMuZGVmYXVsdCkoe2NoaWxkcmVuOmIuZGVmYXVsdC5ub2RlLGNsYXNzTmFtZTpFLmlzQ2xhc3NOYW1lLGVycm9yOmIuZGVmYXVsdC5ub2RlLGZpbGU6UC5pc0ZpbGUsaW5wdXRSZWY6Yi5kZWZhdWx0LmZ1bmMsbG9hZGluZzpiLmRlZmF1bHQubm9kZSxub0RhdGE6Yi5kZWZhdWx0Lm5vZGUsb25JdGVtQ2xpY2s6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkRXJyb3I6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkUHJvZ3Jlc3M6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkU3VjY2VzczpiLmRlZmF1bHQuZnVuYyxvblBhc3N3b3JkOmIuZGVmYXVsdC5mdW5jLG9uU291cmNlRXJyb3I6Yi5kZWZhdWx0LmZ1bmMsb25Tb3VyY2VTdWNjZXNzOmIuZGVmYXVsdC5mdW5jLHJvdGF0ZTpiLmRlZmF1bHQubnVtYmVyfSwoMCxFLmV2ZW50c1Byb3BzKSgpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4sYT17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspcj1pW25dLHQuaW5kZXhPZihyKT49MHx8KGFbcl09ZVtyXSk7cmV0dXJuIGF9fSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYT1uLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsaT1uLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLG89bi50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHMoZSx0LHIsbil7dmFyIGE9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiB1P3Q6dSxpPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLG89bmV3IFMobnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm4geCgpfWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1iKG8scik7aWYocyl7aWYocz09PWMpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgdT1sKGUsdCxyKTtpZigibm9ybWFsIj09PXUudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIix1LmFyZz09PWMpY29udGludWU7cmV0dXJue3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09dS50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPXUuYXJnKX19fShlLHIsbyksaX1mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXM7dmFyIGM9e307ZnVuY3Rpb24gdSgpe31mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGgoKXt9dmFyIGQ9e307ZFthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgcD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT1wJiZwKHAoXyhbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sYSkmJihkPW0pO3ZhciBnPWgucHJvdG90eXBlPXUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gdihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfX0pKX1mdW5jdGlvbiB5KGUpe3ZhciB0O3RoaXMuX2ludm9rZT1mdW5jdGlvbihuLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsaSl7IWZ1bmN0aW9uIHQobixhLGksbyl7dmFyIHM9bChlW25dLGUsYSk7aWYoInRocm93IiE9PXMudHlwZSl7dmFyIGM9cy5hcmcsdT1jLnZhbHVlO3JldHVybiB1JiYib2JqZWN0Ij09dHlwZW9mIHUmJnIuY2FsbCh1LCJfX2F3YWl0Iik/UHJvbWlzZS5yZXNvbHZlKHUuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7dCgibmV4dCIsZSxpLG8pfSksKGZ1bmN0aW9uKGUpe3QoInRocm93IixlLGksbyl9KSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxpKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiB0KCJ0aHJvdyIsZSxpLG8pfSkpfW8ocy5hcmcpfShuLGEsdCxpKX0pKX1yZXR1cm4gdD10P3QudGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gYihlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLGIoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBjO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBjfXZhciBuPWwocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxjO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGMpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsYyl9ZnVuY3Rpb24gdyhlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBTKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2godyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBfKGUpe2lmKGUpe3ZhciB0PWVbYV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0Onh9fWZ1bmN0aW9uIHgoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBmLnByb3RvdHlwZT1nLmNvbnN0cnVjdG9yPWgsaC5jb25zdHJ1Y3Rvcj1mLGhbb109Zi5kaXNwbGF5TmFtZT0iR2VuZXJhdG9yRnVuY3Rpb24iLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Znx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsaCk6KGUuX19wcm90b19fPWgsbyBpbiBlfHwoZVtvXT0iR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx2KHkucHJvdG90eXBlKSx5LnByb3RvdHlwZVtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLkFzeW5jSXRlcmF0b3I9eSxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEpe3ZhciBpPW5ldyB5KHModCxyLG4sYSkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/aTppLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6aS5uZXh0KCl9KSl9LHYoZyksZ1tvXT0iR2VuZXJhdG9yIixnW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0sZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LGUudmFsdWVzPV8sUy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChrKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksbD1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxjKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGN9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksayhyKSxjfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO2socil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpfKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxjfX0sZX0oZS5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPW59Y2F0Y2goZSl7RnVuY3Rpb24oInIiLCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByIikobil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTkpO2Z1bmN0aW9uIGEoKXt9ZnVuY3Rpb24gaSgpe31pLnJlc2V0V2FybmluZ0NhY2hlPWEsZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixhLGksbyl7aWYobyE9PW4pe3ZhciBzPW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO3Rocm93IHMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsc319ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciByPXthcnJheTplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczppLHJlc2V0V2FybmluZ0NhY2hlOmF9O3JldHVybiByLlByb3BUeXBlcz1yLHJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNpbXBsZUxpbmtTZXJ2aWNlPXQuUERGTGlua1NlcnZpY2U9dm9pZCAwO3ZhciBuPXIoNjEpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuKGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxlfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZXZlbnRCdXMsYT10LmV4dGVybmFsTGlua1RhcmdldCxvPXZvaWQgMD09PWE/bnVsbDphLHM9dC5leHRlcm5hbExpbmtSZWwsbD12b2lkIDA9PT1zP251bGw6cztpKHRoaXMsZSksdGhpcy5ldmVudEJ1cz1yfHwoMCxuLmdldEdsb2JhbEV2ZW50QnVzKSgpLHRoaXMuZXh0ZXJuYWxMaW5rVGFyZ2V0PW8sdGhpcy5leHRlcm5hbExpbmtSZWw9bCx0aGlzLmJhc2VVcmw9bnVsbCx0aGlzLnBkZkRvY3VtZW50PW51bGwsdGhpcy5wZGZWaWV3ZXI9bnVsbCx0aGlzLnBkZkhpc3Rvcnk9bnVsbCx0aGlzLl9wYWdlc1JlZkNhY2hlPW51bGx9cmV0dXJuIHMoZSxbe2tleToic2V0RG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMuYmFzZVVybD10LHRoaXMucGRmRG9jdW1lbnQ9ZSx0aGlzLl9wYWdlc1JlZkNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCl9fSx7a2V5OiJzZXRWaWV3ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGRmVmlld2VyPWV9fSx7a2V5OiJzZXRIaXN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBkZkhpc3Rvcnk9ZX19LHtrZXk6Im5hdmlnYXRlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7InN0cmluZyIhPXR5cGVvZiBlP3Ioe25hbWVkRGVzdDoiIixleHBsaWNpdERlc3Q6ZX0pOnQucGRmRG9jdW1lbnQuZ2V0RGVzdGluYXRpb24oZSkudGhlbigoZnVuY3Rpb24odCl7cih7bmFtZWREZXN0OmUsZXhwbGljaXREZXN0OnR9KX0pKX0pKS50aGVuKChmdW5jdGlvbihyKXtBcnJheS5pc0FycmF5KHIuZXhwbGljaXREZXN0KT9mdW5jdGlvbiByKG4pe3ZhciBhLGk9bi5uYW1lZERlc3Qsbz1uLmV4cGxpY2l0RGVzdCxzPW9bMF07aWYocyBpbnN0YW5jZW9mIE9iamVjdCl7aWYobnVsbD09PShhPXQuX2NhY2hlZFBhZ2VOdW1iZXIocykpKXJldHVybiB2b2lkIHQucGRmRG9jdW1lbnQuZ2V0UGFnZUluZGV4KHMpLnRoZW4oKGZ1bmN0aW9uKGUpe3QuY2FjaGVQYWdlUmVmKGUrMSxzKSxyKHtuYW1lZERlc3Q6aSxleHBsaWNpdERlc3Q6b30pfSkpLmNhdGNoKChmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChzLCciIGlzIG5vdCAnKSsnYSB2YWxpZCBwYWdlIHJlZmVyZW5jZSwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpfSkpfWVsc2V7aWYoIU51bWJlci5pc0ludGVnZXIocykpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcignUERGTGlua1NlcnZpY2UubmF2aWdhdGVUbzogIicuY29uY2F0KHMsJyIgaXMgbm90ICcpKydhIHZhbGlkIGRlc3RpbmF0aW9uIHJlZmVyZW5jZSwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpO2E9cysxfSFhfHxhPDF8fGE+dC5wYWdlc0NvdW50P2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChhLCciIGlzIG5vdCAnKSsnYSB2YWxpZCBwYWdlIG51bWJlciwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpOih0LnBkZkhpc3RvcnkmJih0LnBkZkhpc3RvcnkucHVzaEN1cnJlbnRQb3NpdGlvbigpLHQucGRmSGlzdG9yeS5wdXNoKHtuYW1lZERlc3Q6aSxleHBsaWNpdERlc3Q6byxwYWdlTnVtYmVyOmF9KSksdC5wZGZWaWV3ZXIuc2Nyb2xsUGFnZUludG9WaWV3KHtwYWdlTnVtYmVyOmEsZGVzdEFycmF5Om99KSl9KHIpOmNvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChyLmV4cGxpY2l0RGVzdCwnIiBpcycpKycgbm90IGEgdmFsaWQgZGVzdGluYXRpb24gYXJyYXksIGZvciBkZXN0PSInLmNvbmNhdChlLCciLicpKX0pKX19LHtrZXk6ImdldERlc3RpbmF0aW9uSGFzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB0aGlzLmdldEFuY2hvclVybCgiIyIrZXNjYXBlKGUpKTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5nZXRBbmNob3JVcmwoIiMiK2VzY2FwZSh0KSl9cmV0dXJuIHRoaXMuZ2V0QW5jaG9yVXJsKCIiKX19LHtrZXk6ImdldEFuY2hvclVybCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuYmFzZVVybHx8IiIpK2V9fSx7a2V5OiJzZXRIYXNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyO2lmKGUuaW5jbHVkZXMoIj0iKSl7dmFyIGk9KDAsbi5wYXJzZVF1ZXJ5U3RyaW5nKShlKTtpZigic2VhcmNoImluIGkmJnRoaXMuZXZlbnRCdXMuZGlzcGF0Y2goImZpbmRmcm9tdXJsaGFzaCIse3NvdXJjZTp0aGlzLHF1ZXJ5Omkuc2VhcmNoLnJlcGxhY2UoLyIvZywiIikscGhyYXNlU2VhcmNoOiJ0cnVlIj09PWkucGhyYXNlfSksIm5hbWVkZGVzdCJpbiBpKXJldHVybiB2b2lkIHRoaXMubmF2aWdhdGVUbyhpLm5hbWVkZGVzdCk7aWYoInBhZ2UiaW4gaSYmKHQ9MHxpLnBhZ2V8fDEpLCJ6b29tImluIGkpe3ZhciBvPWkuem9vbS5zcGxpdCgiLCIpLHM9b1swXSxsPXBhcnNlRmxvYXQocyk7cy5pbmNsdWRlcygiRml0Iik/IkZpdCI9PT1zfHwiRml0QiI9PT1zP3I9W251bGwse25hbWU6c31dOiJGaXRIIj09PXN8fCJGaXRCSCI9PT1zfHwiRml0ViI9PT1zfHwiRml0QlYiPT09cz9yPVtudWxsLHtuYW1lOnN9LG8ubGVuZ3RoPjE/MHxvWzFdOm51bGxdOiJGaXRSIj09PXM/NSE9PW8ubGVuZ3RoP2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLnNldEhhc2g6IE5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIkZpdFIiLicpOnI9W251bGwse25hbWU6c30sMHxvWzFdLDB8b1syXSwwfG9bM10sMHxvWzRdXTpjb25zb2xlLmVycm9yKCdQREZMaW5rU2VydmljZS5zZXRIYXNoOiAiJy5jb25jYXQocywnIiBpcyBub3QgJykrImEgdmFsaWQgem9vbSB2YWx1ZS4iKTpyPVtudWxsLHtuYW1lOiJYWVoifSxvLmxlbmd0aD4xPzB8b1sxXTpudWxsLG8ubGVuZ3RoPjI/MHxvWzJdOm51bGwsbD9sLzEwMDpzXX1yP3RoaXMucGRmVmlld2VyLnNjcm9sbFBhZ2VJbnRvVmlldyh7cGFnZU51bWJlcjp0fHx0aGlzLnBhZ2UsZGVzdEFycmF5OnIsYWxsb3dOZWdhdGl2ZU9mZnNldDohMH0pOnQmJih0aGlzLnBhZ2U9dCksInBhZ2Vtb2RlImluIGkmJnRoaXMuZXZlbnRCdXMuZGlzcGF0Y2goInBhZ2Vtb2RlIix7c291cmNlOnRoaXMsbW9kZTppLnBhZ2Vtb2RlfSl9ZWxzZXtyPXVuZXNjYXBlKGUpO3RyeXtyPUpTT04ucGFyc2UociksQXJyYXkuaXNBcnJheShyKXx8KHI9ci50b1N0cmluZygpKX1jYXRjaChlKXt9aWYoInN0cmluZyI9PXR5cGVvZiByfHxmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTt2YXIgdD1lLmxlbmd0aCxyPSEwO2lmKHQ8MilyZXR1cm4hMTt2YXIgbj1lWzBdO2lmKCEoIm9iamVjdCI9PT1hKG4pJiZOdW1iZXIuaXNJbnRlZ2VyKG4ubnVtKSYmTnVtYmVyLmlzSW50ZWdlcihuLmdlbil8fE51bWJlci5pc0ludGVnZXIobikmJm4+PTApKXJldHVybiExO3ZhciBpPWVbMV07aWYoIm9iamVjdCIhPT1hKGkpfHwic3RyaW5nIiE9dHlwZW9mIGkubmFtZSlyZXR1cm4hMTtzd2l0Y2goaS5uYW1lKXtjYXNlIlhZWiI6aWYoNSE9PXQpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXQiOmNhc2UiRml0QiI6cmV0dXJuIDI9PT10O2Nhc2UiRml0SCI6Y2FzZSJGaXRCSCI6Y2FzZSJGaXRWIjpjYXNlIkZpdEJWIjppZigzIT09dClyZXR1cm4hMTticmVhaztjYXNlIkZpdFIiOmlmKDYhPT10KXJldHVybiExO3I9ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1mb3IodmFyIG89MjtvPHQ7bysrKXt2YXIgcz1lW29dO2lmKCEoIm51bWJlciI9PXR5cGVvZiBzfHxyJiZudWxsPT09cykpcmV0dXJuITF9cmV0dXJuITB9KHIpKXJldHVybiB2b2lkIHRoaXMubmF2aWdhdGVUbyhyKTtjb25zb2xlLmVycm9yKCdQREZMaW5rU2VydmljZS5zZXRIYXNoOiAiJy5jb25jYXQodW5lc2NhcGUoZSksJyIgaXMgbm90ICcpKyJhIHZhbGlkIGRlc3RpbmF0aW9uLiIpfX19LHtrZXk6ImV4ZWN1dGVOYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiR29CYWNrIjp0aGlzLnBkZkhpc3RvcnkmJnRoaXMucGRmSGlzdG9yeS5iYWNrKCk7YnJlYWs7Y2FzZSJHb0ZvcndhcmQiOnRoaXMucGRmSGlzdG9yeSYmdGhpcy5wZGZIaXN0b3J5LmZvcndhcmQoKTticmVhaztjYXNlIk5leHRQYWdlIjp0aGlzLnBhZ2U8dGhpcy5wYWdlc0NvdW50JiZ0aGlzLnBhZ2UrKzticmVhaztjYXNlIlByZXZQYWdlIjp0aGlzLnBhZ2U+MSYmdGhpcy5wYWdlLS07YnJlYWs7Y2FzZSJMYXN0UGFnZSI6dGhpcy5wYWdlPXRoaXMucGFnZXNDb3VudDticmVhaztjYXNlIkZpcnN0UGFnZSI6dGhpcy5wYWdlPTF9dGhpcy5ldmVudEJ1cy5kaXNwYXRjaCgibmFtZWRhY3Rpb24iLHtzb3VyY2U6dGhpcyxhY3Rpb246ZX0pfX0se2tleToiY2FjaGVQYWdlUmVmIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciByPXQubnVtKyIgIit0LmdlbisiIFIiO3RoaXMuX3BhZ2VzUmVmQ2FjaGVbcl09ZX19fSx7a2V5OiJfY2FjaGVkUGFnZU51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5udW0rIiAiK2UuZ2VuKyIgUiI7cmV0dXJuIHRoaXMuX3BhZ2VzUmVmQ2FjaGUmJnRoaXMuX3BhZ2VzUmVmQ2FjaGVbdF18fG51bGx9fSx7a2V5OiJpc1BhZ2VWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZGZWaWV3ZXIuaXNQYWdlVmlzaWJsZShlKX19LHtrZXk6InBhZ2VzQ291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50P3RoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM6MH19LHtrZXk6InBhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZlZpZXdlci5jdXJyZW50UGFnZU51bWJlcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyPWV9fSx7a2V5OiJyb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGRmVmlld2VyLnBhZ2VzUm90YXRpb259LHNldDpmdW5jdGlvbihlKXt0aGlzLnBkZlZpZXdlci5wYWdlc1JvdGF0aW9uPWV9fV0pLGV9KCk7dC5QREZMaW5rU2VydmljZT1sO3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2kodGhpcyxlKSx0aGlzLmV4dGVybmFsTGlua1RhcmdldD1udWxsLHRoaXMuZXh0ZXJuYWxMaW5rUmVsPW51bGx9cmV0dXJuIHMoZSxbe2tleToibmF2aWdhdGVUbyIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToiZ2V0RGVzdGluYXRpb25IYXNoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iIyJ9fSx7a2V5OiJnZXRBbmNob3JVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiIjIn19LHtrZXk6InNldEhhc2giLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6ImV4ZWN1dGVOYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToiY2FjaGVQYWdlUmVmIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6ImlzUGFnZVZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0se2tleToicGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7a2V5OiJwYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sc2V0OmZ1bmN0aW9uKGUpe319LHtrZXk6InJvdGF0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sc2V0OmZ1bmN0aW9uKGUpe319XSksZX0oKTt0LlNpbXBsZUxpbmtTZXJ2aWNlPWN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNWYWxpZFJvdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlJTkwPT0wfSx0LmlzVmFsaWRTY3JvbGxNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZPYmplY3QudmFsdWVzKGYpLmluY2x1ZGVzKGUpJiZlIT09Zi5VTktOT1dOfSx0LmlzVmFsaWRTcHJlYWRNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZPYmplY3QudmFsdWVzKGgpLmluY2x1ZGVzKGUpJiZlIT09aC5VTktOT1dOfSx0LmlzUG9ydHJhaXRPcmllbnRhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZS53aWR0aDw9ZS5oZWlnaHR9LHQuZ2V0R2xvYmFsRXZlbnRCdXM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO0F8fChBPW5ldyB4KHtkaXNwYXRjaFRvRE9NOmV9KSk7cmV0dXJuIEF9LHQuZ2V0UERGRmlsZU5hbWVGcm9tVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiZG9jdW1lbnQucGRmIjtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHQ7aWYoayhlKSlyZXR1cm4gY29uc29sZS53YXJuKCdnZXRQREZGaWxlTmFtZUZyb21VUkw6IGlnbm9yaW5nICJkYXRhOiIgVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLHQ7dmFyIHI9L14oPzooPzpbXjpdKzopP1wvXC9bXlwvXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLG49L1teXC8/Iz1dK1wucGRmXGIoPyEuKlwucGRmXGIpL2ksYT1yLmV4ZWMoZSksaT1uLmV4ZWMoYVsxXSl8fG4uZXhlYyhhWzJdKXx8bi5leGVjKGFbM10pO2lmKGkmJihpPWlbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2k9bi5leGVjKGRlY29kZVVSSUNvbXBvbmVudChpKSlbMF19Y2F0Y2goZSl7fXJldHVybiBpfHx0fSx0Lm5vQ29udGV4dE1lbnVIYW5kbGVyPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0sdC5wYXJzZVF1ZXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KCImIikscj1PYmplY3QuY3JlYXRlKG51bGwpLG49MCxhPXQubGVuZ3RoO248YTsrK24pe3ZhciBpPXRbbl0uc3BsaXQoIj0iKSxvPWlbMF0udG9Mb3dlckNhc2UoKSxzPWkubGVuZ3RoPjE/aVsxXTpudWxsO3JbZGVjb2RlVVJJQ29tcG9uZW50KG8pXT1kZWNvZGVVUklDb21wb25lbnQocyl9cmV0dXJuIHJ9LHQuYmFja3RyYWNrQmVmb3JlQWxsVmlzaWJsZUVsZW1lbnRzPXcsdC5nZXRWaXNpYmxlRWxlbWVudHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxhPWUuc2Nyb2xsVG9wLGk9YStlLmNsaWVudEhlaWdodCxvPWUuc2Nyb2xsTGVmdCxzPW8rZS5jbGllbnRXaWR0aDtmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGl2O3JldHVybiB0Lm9mZnNldFRvcCt0LmNsaWVudFRvcCt0LmNsaWVudEhlaWdodD5hfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5kaXY7cmV0dXJuIHQub2Zmc2V0TGVmdCt0LmNsaWVudExlZnQrdC5jbGllbnRXaWR0aD5vfXZhciB1PVtdLGY9dC5sZW5ndGgsaD0wPT09Zj8wOmIodCxuP2M6bCk7aD4wJiZoPGYmJiFuJiYoaD13KGgsdCxhKSk7Zm9yKHZhciBkPW4/czotMSxwPWg7cDxmO3ArKyl7dmFyIG09dFtwXSxnPW0uZGl2LHY9Zy5vZmZzZXRMZWZ0K2cuY2xpZW50TGVmdCx5PWcub2Zmc2V0VG9wK2cuY2xpZW50VG9wLGs9Zy5jbGllbnRXaWR0aCxTPWcuY2xpZW50SGVpZ2h0LF89ditrLHg9eStTO2lmKC0xPT09ZCl4Pj1pJiYoZD14KTtlbHNlIGlmKChuP3Y6eSk+ZClicmVhaztpZighKHg8PWF8fHk+PWl8fF88PW98fHY+PXMpKXt2YXIgQT1NYXRoLm1heCgwLGEteSkrTWF0aC5tYXgoMCx4LWkpLEM9TWF0aC5tYXgoMCxvLXYpK01hdGgubWF4KDAsXy1zKSxQPShTLUEpKihrLUMpKjEwMC9TL2t8MDt1LnB1c2goe2lkOm0uaWQseDp2LHk6eSx2aWV3Om0scGVyY2VudDpQfSl9fXZhciBFPXVbMF0sVD11W3UubGVuZ3RoLTFdO3ImJnUuc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnBlcmNlbnQtdC5wZXJjZW50O3JldHVybiBNYXRoLmFicyhyKT4uMDAxPy1yOmUuaWQtdC5pZH0pKTtyZXR1cm57Zmlyc3Q6RSxsYXN0OlQsdmlld3M6dX19LHQucm91bmRUb0RpdmlkZT1mdW5jdGlvbihlLHQpe3ZhciByPWUldDtyZXR1cm4gMD09PXI/ZTpNYXRoLnJvdW5kKGUtcit0KX0sdC5nZXRQYWdlU2l6ZUluY2hlcz1mdW5jdGlvbihlKXt2YXIgdD1lLnZpZXcscj1lLnVzZXJVbml0LG49ZS5yb3RhdGUsYT0oaD10LGQ9NCxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShoKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oaCxkKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCkpLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9YVszXSxjPW4lMTgwIT0wLHU9KHMtaSkvNzIqcixmPShsLW8pLzcyKnI7dmFyIGgsZDtyZXR1cm57d2lkdGg6Yz9mOnUsaGVpZ2h0OmM/dTpmfX0sdC5hcHByb3hpbWF0ZUZyYWN0aW9uPWZ1bmN0aW9uKGUpe2lmKE1hdGguZmxvb3IoZSk9PT1lKXJldHVybltlLDFdO3ZhciB0PTEvZTtpZih0PjgpcmV0dXJuWzEsOF07aWYoTWF0aC5mbG9vcih0KT09PXQpcmV0dXJuWzEsdF07dmFyIHIsbj1lPjE/dDplLGE9MCxpPTEsbz0xLHM9MTtmb3IoOzspe3ZhciBsPWErbyxjPWkrcztpZihjPjgpYnJlYWs7bjw9bC9jPyhvPWwscz1jKTooYT1sLGk9Yyl9cj1uLWEvaTxvL3Mtbj9uPT09ZT9bYSxpXTpbaSxhXTpuPT09ZT9bbyxzXTpbcyxvXTtyZXR1cm4gcn0sdC5nZXRPdXRwdXRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSxyPWUud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxlLm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxLG49dC9yO3JldHVybntzeDpuLHN5Om4sc2NhbGVkOjEhPT1ufX0sdC5zY3JvbGxJbnRvVmlldz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sbj1lLm9mZnNldFBhcmVudDtpZighbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJvZmZzZXRQYXJlbnQgaXMgbm90IHNldCAtLSBjYW5ub3Qgc2Nyb2xsIik7dmFyIGE9ZS5vZmZzZXRUb3ArZS5jbGllbnRUb3AsaT1lLm9mZnNldExlZnQrZS5jbGllbnRMZWZ0O2Zvcig7bi5jbGllbnRIZWlnaHQ9PT1uLnNjcm9sbEhlaWdodCYmbi5jbGllbnRXaWR0aD09PW4uc2Nyb2xsV2lkdGh8fHImJiJoaWRkZW4iPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS5vdmVyZmxvdzspaWYobi5kYXRhc2V0Ll9zY2FsZVkmJihhLz1uLmRhdGFzZXQuX3NjYWxlWSxpLz1uLmRhdGFzZXQuX3NjYWxlWCksYSs9bi5vZmZzZXRUb3AsaSs9bi5vZmZzZXRMZWZ0LCEobj1uLm9mZnNldFBhcmVudCkpcmV0dXJuO3QmJih2b2lkIDAhPT10LnRvcCYmKGErPXQudG9wKSx2b2lkIDAhPT10LmxlZnQmJihpKz10LmxlZnQsbi5zY3JvbGxMZWZ0PWkpKTtuLnNjcm9sbFRvcD1hfSx0LndhdGNoU2Nyb2xsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZnVuY3Rpb24ocil7YXx8KGE9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXthPW51bGw7dmFyIHI9ZS5zY3JvbGxMZWZ0LGk9bi5sYXN0WDtyIT09aSYmKG4ucmlnaHQ9cj5pKSxuLmxhc3RYPXI7dmFyIG89ZS5zY3JvbGxUb3Ascz1uLmxhc3RZO28hPT1zJiYobi5kb3duPW8+cyksbi5sYXN0WT1vLHQobil9KSkpfSxuPXtyaWdodDohMCxkb3duOiEwLGxhc3RYOmUuc2Nyb2xsTGVmdCxsYXN0WTplLnNjcm9sbFRvcCxfZXZlbnRIYW5kbGVyOnJ9LGE9bnVsbDtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHIsITApLG59LHQuYmluYXJ5U2VhcmNoRmlyc3RJdGVtPWIsdC5ub3JtYWxpemVXaGVlbEV2ZW50RGVsdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUuZGVsdGFYKmUuZGVsdGFYK2UuZGVsdGFZKmUuZGVsdGFZKSxyPU1hdGguYXRhbjIoZS5kZWx0YVksZS5kZWx0YVgpOy0uMjUqTWF0aC5QSTxyJiZyPC43NSpNYXRoLlBJJiYodD0tdCk7MD09PWUuZGVsdGFNb2RlP3QvPTkwMDoxPT09ZS5kZWx0YU1vZGUmJih0Lz0zMCk7cmV0dXJuIHR9LHQud2FpdE9uRXZlbnRPclRpbWVvdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQscj1lLm5hbWUsbj1lLmRlbGF5LGE9dm9pZCAwPT09bj8wOm47cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe2lmKCJvYmplY3QiIT09bCh0KXx8IXJ8fCJzdHJpbmciIT10eXBlb2Ygcnx8IShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wKSl0aHJvdyBuZXcgRXJyb3IoIndhaXRPbkV2ZW50T3JUaW1lb3V0IC0gaW52YWxpZCBwYXJhbWV0ZXJzLiIpO2Z1bmN0aW9uIGkobil7dCBpbnN0YW5jZW9mIHg/dC5vZmYocixvKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixvKSxjJiZjbGVhclRpbWVvdXQoYyksZShuKX12YXIgbz1pLmJpbmQobnVsbCxTLkVWRU5UKTt0IGluc3RhbmNlb2YgeD90Lm9uKHIsbyk6dC5hZGRFdmVudExpc3RlbmVyKHIsbyk7dmFyIHM9aS5iaW5kKG51bGwsUy5USU1FT1VUKSxjPXNldFRpbWVvdXQocyxhKX0pKX0sdC5tb3ZlVG9FbmRPZkFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49ZS5sZW5ndGgsYT0wLGk9MDtpPG47KytpKXQoZVtpXSk/ci5wdXNoKGVbaV0pOihlW2FdPWVbaV0sKythKTtmb3IodmFyIG89MDthPG47KytvLCsrYSllW2FdPXJbb119LHQuV2FpdE9uVHlwZT10LmFuaW1hdGlvblN0YXJ0ZWQ9dC5Qcm9ncmVzc0Jhcj10LkV2ZW50QnVzPXQuTnVsbEwxMG49dC5TcHJlYWRNb2RlPXQuU2Nyb2xsTW9kZT10LlRleHRMYXllck1vZGU9dC5SZW5kZXJlclR5cGU9dC5QcmVzZW50YXRpb25Nb2RlU3RhdGU9dC5WRVJUSUNBTF9QQURESU5HPXQuU0NST0xMQkFSX1BBRERJTkc9dC5NQVhfQVVUT19TQ0FMRT10LlVOS05PV05fU0NBTEU9dC5NQVhfU0NBTEU9dC5NSU5fU0NBTEU9dC5ERUZBVUxUX1NDQUxFPXQuREVGQVVMVF9TQ0FMRV9WQUxVRT10LkNTU19VTklUUz12b2lkIDA7dmFyIG4sYT0obj1yKDE0KSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O2Z1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksciYmbyhlLHIpLGV9ZnVuY3Rpb24gbChlKXtyZXR1cm4obD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGMoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiB1KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2MoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2MoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX10LkNTU19VTklUUz05Ni83Mjt0LkRFRkFVTFRfU0NBTEVfVkFMVUU9ImF1dG8iO3QuREVGQVVMVF9TQ0FMRT0xO3QuTUlOX1NDQUxFPS4xO3QuTUFYX1NDQUxFPTEwO3QuVU5LTk9XTl9TQ0FMRT0wO3QuTUFYX0FVVE9fU0NBTEU9MS4yNTt0LlNDUk9MTEJBUl9QQURESU5HPTQwO3QuVkVSVElDQUxfUEFERElORz01O3QuUHJlc2VudGF0aW9uTW9kZVN0YXRlPXtVTktOT1dOOjAsTk9STUFMOjEsQ0hBTkdJTkc6MixGVUxMU0NSRUVOOjN9O3QuUmVuZGVyZXJUeXBlPXtDQU5WQVM6ImNhbnZhcyIsU1ZHOiJzdmcifTt0LlRleHRMYXllck1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRU5IQU5DRToyfTt2YXIgZj17VU5LTk9XTjotMSxWRVJUSUNBTDowLEhPUklaT05UQUw6MSxXUkFQUEVEOjJ9O3QuU2Nyb2xsTW9kZT1mO3ZhciBoPXtVTktOT1dOOi0xLE5PTkU6MCxPREQ6MSxFVkVOOjJ9O2Z1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1x7XHtccyooXHcrKVxzKlx9XH0vZywoZnVuY3Rpb24oZSxyKXtyZXR1cm4gciBpbiB0P3Rbcl06Int7IityKyJ9fSJ9KSk6ZX10LlNwcmVhZE1vZGU9aDt2YXIgcCxtLGcsdix5PXtnZXRMYW5ndWFnZToodj11KGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGEuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsImVuLXVzIik7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxnZXREaXJlY3Rpb246KGc9dShhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCJsdHIiKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGdldDoobT11KGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQscixuKXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixkKG4scikpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx0cmFuc2xhdGU6KHA9dShhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9O2Z1bmN0aW9uIGIoZSx0KXt2YXIgcj0wLG49ZS5sZW5ndGgtMTtpZigwPT09ZS5sZW5ndGh8fCF0KGVbbl0pKXJldHVybiBlLmxlbmd0aDtpZih0KGVbcl0pKXJldHVybiByO2Zvcig7cjxuOyl7dmFyIGE9cituPj4xO3QoZVthXSk/bj1hOnI9YSsxfXJldHVybiByfWZ1bmN0aW9uIHcoZSx0LHIpe2lmKGU8MilyZXR1cm4gZTt2YXIgbj10W2VdLmRpdixhPW4ub2Zmc2V0VG9wK24uY2xpZW50VG9wO2E+PXImJihhPShuPXRbZS0xXS5kaXYpLm9mZnNldFRvcCtuLmNsaWVudFRvcCk7Zm9yKHZhciBpPWUtMjtpPj0wJiYhKChuPXRbaV0uZGl2KS5vZmZzZXRUb3Arbi5jbGllbnRUb3Arbi5jbGllbnRIZWlnaHQ8PWEpOy0taSllPWk7cmV0dXJuIGV9ZnVuY3Rpb24gayhlKXtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8ciYmIiI9PT1lW3RdLnRyaW0oKTspdCsrO3JldHVybiJkYXRhOiI9PT1lLnN1YnN0cmluZyh0LHQrNSkudG9Mb3dlckNhc2UoKX10Lk51bGxMMTBuPXk7dmFyIFM9e0VWRU5UOiJldmVudCIsVElNRU9VVDoidGltZW91dCJ9O3QuV2FpdE9uVHlwZT1TO3ZhciBfPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSwyMCl9KSk7dC5hbmltYXRpb25TdGFydGVkPV87dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9dC5kaXNwYXRjaFRvRE9NLG49dm9pZCAwIT09ciYmcjtpKHRoaXMsZSksdGhpcy5fbGlzdGVuZXJzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZGlzcGF0Y2hUb0RPTT0hMD09PW59cmV0dXJuIHMoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fbGlzdGVuZXJzW2VdO3J8fChyPVtdLHRoaXMuX2xpc3RlbmVyc1tlXT1yKSxyLnB1c2godCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLl9saXN0ZW5lcnNbZV07IW58fChyPW4uaW5kZXhPZih0KSk8MHx8bi5zcGxpY2UociwxKX19LHtrZXk6ImRpc3BhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9saXN0ZW5lcnNbZV07aWYodCYmMCE9PXQubGVuZ3RoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dC5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmFwcGx5KG51bGwscil9KSksdGhpcy5fZGlzcGF0Y2hUb0RPTSYmdGhpcy5fZGlzcGF0Y2hET01FdmVudChlLHIpfWVsc2UgaWYodGhpcy5fZGlzcGF0Y2hUb0RPTSl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3RoaXMuX2Rpc3BhdGNoRE9NRXZlbnQoZSxuKX19fSx7a2V5OiJfZGlzcGF0Y2hET01FdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHQmJnQubGVuZ3RoPjApe3ZhciBuPXRbMF07Zm9yKHZhciBhIGluIG4pe3ZhciBpPW5bYV07aWYoInNvdXJjZSIhPT1hKXJbYV09aTtlbHNlIGlmKGk9PT13aW5kb3d8fGk9PT1kb2N1bWVudClyZXR1cm59fXZhciBvPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO28uaW5pdEN1c3RvbUV2ZW50KGUsITAsITAsciksZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChvKX19XSksZX0oKTt0LkV2ZW50QnVzPXg7dmFyIEE9bnVsbDt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5oZWlnaHQsYT1yLndpZHRoLG89ci51bml0cztpKHRoaXMsZSksdGhpcy52aXNpYmxlPSEwLHRoaXMuZGl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCsiIC5wcm9ncmVzcyIpLHRoaXMuYmFyPXRoaXMuZGl2LnBhcmVudE5vZGUsdGhpcy5oZWlnaHQ9bnx8MTAwLHRoaXMud2lkdGg9YXx8MTAwLHRoaXMudW5pdHM9b3x8IiUiLHRoaXMuZGl2LnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCt0aGlzLnVuaXRzLHRoaXMucGVyY2VudD0wfXJldHVybiBzKGUsW3trZXk6Il91cGRhdGVCYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5faW5kZXRlcm1pbmF0ZSlyZXR1cm4gdGhpcy5kaXYuY2xhc3NMaXN0LmFkZCgiaW5kZXRlcm1pbmF0ZSIpLHZvaWQodGhpcy5kaXYuc3R5bGUud2lkdGg9dGhpcy53aWR0aCt0aGlzLnVuaXRzKTt0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJpbmRldGVybWluYXRlIik7dmFyIGU9dGhpcy53aWR0aCp0aGlzLl9wZXJjZW50LzEwMDt0aGlzLmRpdi5zdHlsZS53aWR0aD1lK3RoaXMudW5pdHN9fSx7a2V5OiJzZXRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoLWUub2Zmc2V0V2lkdGg7dD4wJiZ0aGlzLmJhci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwid2lkdGg6IGNhbGMoMTAwJSAtICIrdCsicHgpOyIpfX19LHtrZXk6ImhpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlJiYodGhpcy52aXNpYmxlPSExLHRoaXMuYmFyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibG9hZGluZ0luUHJvZ3Jlc3MiKSl9fSx7a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlzaWJsZXx8KHRoaXMudmlzaWJsZT0hMCxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImxvYWRpbmdJblByb2dyZXNzIiksdGhpcy5iYXIuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIikpfX0se2tleToicGVyY2VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlcmNlbnR9LHNldDpmdW5jdGlvbihlKXt2YXIgdCxyLG47dGhpcy5faW5kZXRlcm1pbmF0ZT1pc05hTihlKSx0aGlzLl9wZXJjZW50PSh0PWUscj0wLG49MTAwLE1hdGgubWluKE1hdGgubWF4KHQsciksbikpLHRoaXMuX3VwZGF0ZUJhcigpfX1dKSxlfSgpO3QuUHJvZ3Jlc3NCYXI9Q30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMyksYT1yKDI2KSxpPXIoNjQpLG89cig2NSk7ZnVuY3Rpb24gcyh0KXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBlLmV4cG9ydHM9cz1mdW5jdGlvbihlKXtpZihudWxsPT09ZXx8IWkoZSkpcmV0dXJuIGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT1yKXtpZihyLmhhcyhlKSlyZXR1cm4gci5nZXQoZSk7ci5zZXQoZSx0KX1mdW5jdGlvbiB0KCl7cmV0dXJuIG8oZSxhcmd1bWVudHMsbih0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGEodCxlKX0scyh0KX1lLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKGUpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDI2KTtmdW5jdGlvbiBhKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gaSh0LHIsbyl7cmV0dXJuIGEoKT9lLmV4cG9ydHM9aT1SZWZsZWN0LmNvbnN0cnVjdDplLmV4cG9ydHM9aT1mdW5jdGlvbihlLHQscil7dmFyIGE9W251bGxdO2EucHVzaC5hcHBseShhLHQpO3ZhciBpPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KGUsYSkpO3JldHVybiByJiZuKGksci5wcm90b3R5cGUpLGl9LGkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2NyksYT1yKDY4KSxpPXIoNjkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihlKXx8YShlKXx8aSgpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9L15ccyt8XHMrJC9nLG49L15bLStdMHhbMC05YS1mXSskL2ksYT0vXjBiWzAxXSskL2ksaT0vXjBvWzAtN10rJC9pLG89cGFyc2VJbnQscz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSx0KXt2YXIgbDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7cmV0dXJuIGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIDA9PT1lP2U6MDtpZigoZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX0oZSkmJiJbb2JqZWN0IFN5bWJvbF0iPT1zLmNhbGwoZSl9KGUpKXJldHVybiBOYU47aWYoYyhlKSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9Yyh0KT90KyIiOnR9aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKHIsIiIpO3ZhciBsPWEudGVzdChlKTtyZXR1cm4gbHx8aS50ZXN0KGUpP28oZS5zbGljZSgyKSxsPzI6OCk6bi50ZXN0KGUpP05hTjorZX0oZSkpPT09MS8wfHxlPT09LTEvMCl7cmV0dXJuIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpfXJldHVybiBlPT1lP2U6MH0oZSksbD10JTE7cmV0dXJuIHQ9PXQ/bD90LWw6dDowfShlKSxmdW5jdGlvbigpe3JldHVybi0tZT4wJiYobD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZTw9MSYmKHQ9dm9pZCAwKSxsfX1mdW5jdGlvbiBjKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoMixlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5PdXRsaW5lSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigyNSkpLG89YShyKDEyKSkscz1hKHIoMTQpKSxsPWEocigxNSkpLGM9YShyKDIpKSx1PWEocig2KSksZj1hKHIoNykpLGg9YShyKDMpKSxkPWEocig5KSkscD1hKHIoOCkpLG09YShyKDUpKSxnPW4ocigwKSksdj1hKHIoNCkpLHk9YShyKDIyKSksYj1hKHIoMjcpKSx3PWEocigxOSkpLGs9YShyKDMzKSksUz1hKHIoNzIpKSxfPXIoMTApLHg9cigxMyksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPSgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJzdGF0ZSIse291dGxpbmU6bnVsbH0pLCgwLG0uZGVmYXVsdCkoKDAscC5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKHIpKSwibG9hZE91dGxpbmUiLCgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGE7cmV0dXJuIHMuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1yLnByb3BzLnBkZixyLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5vdXRsaW5lP3tvdXRsaW5lOm51bGx9Om51bGx9KSksZS5wcmV2PTIsbj0oMCxfLm1ha2VDYW5jZWxsYWJsZSkodC5nZXRPdXRsaW5lKCkpLHIucnVubmluZ1Rhc2s9bixlLm5leHQ9NyxuLnByb21pc2U7Y2FzZSA3OmE9ZS5zZW50LHIuc2V0U3RhdGUoe291dGxpbmU6YX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDIpLHIub25Mb2FkRXJyb3IoZS50MCk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTFdXSl9KSkpKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25Mb2FkU3VjY2Vzcyx0PXIuc3RhdGUub3V0bGluZTsoMCxfLmNhbGxJZkRlZmluZWQpKGUsdCl9KSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJvbkxvYWRFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCxfLmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7ci5zZXRTdGF0ZSh7b3V0bGluZTohMX0pLCgwLF8uZXJyb3JPbkRldikoZSk7dmFyIHQ9ci5wcm9wcy5vbkxvYWRFcnJvcjsoMCxfLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLG0uZGVmYXVsdCkoKDAscC5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKHIpKSwib25JdGVtQ2xpY2siLChmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VJbmRleCxuPWUucGFnZU51bWJlcixhPXIucHJvcHMub25JdGVtQ2xpY2s7KDAsXy5jYWxsSWZEZWZpbmVkKShhLHtwYWdlSW5kZXg6dCxwYWdlTnVtYmVyOm59KX0pKSxyfXJldHVybigwLGQuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBkZil0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBsb2FkIGFuIG91dGxpbmUsIGJ1dCBubyBkb2N1bWVudCB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZE91dGxpbmUoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wZGY7ZS5wZGYmJnQhPT1lLnBkZiYmdGhpcy5sb2FkT3V0bGluZSgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsXy5jYW5jZWxSdW5uaW5nVGFzaykodGhpcy5ydW5uaW5nVGFzayl9fSx7a2V5OiJyZW5kZXJPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUub3V0bGluZTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInVsIixudWxsLGUubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLmRlZmF1bHQse2tleToic3RyaW5nIj09dHlwZW9mIGUuZGVzdGluYXRpb24/ZS5kZXN0aW5hdGlvbjp0LGl0ZW06ZX0pfSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnBkZix0PXRoaXMuc3RhdGUub3V0bGluZTtpZighZXx8IXQpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wcm9wcyxuPXIuY2xhc3NOYW1lLGE9ci5pbnB1dFJlZjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsKDAsby5kZWZhdWx0KSh7Y2xhc3NOYW1lOigwLGIuZGVmYXVsdCkoInJlYWN0LXBkZl9fT3V0bGluZSIsbikscmVmOmF9LHRoaXMuZXZlbnRQcm9wcyksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmNoaWxkQ29udGV4dH0sdGhpcy5yZW5kZXJPdXRsaW5lKCkpKX19LHtrZXk6ImNoaWxkQ29udGV4dCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue29uQ2xpY2s6dGhpcy5vbkl0ZW1DbGlja319fSx7a2V5OiJldmVudFByb3BzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybigwLHkuZGVmYXVsdCkodGhpcy5wcm9wcywoZnVuY3Rpb24oKXtyZXR1cm4gZS5zdGF0ZS5vdXRsaW5lfSkpfX1dKSx0fShnLlB1cmVDb21wb25lbnQpO3QuT3V0bGluZUludGVybmFsPUEsQS5wcm9wVHlwZXM9KDAsaS5kZWZhdWx0KSh7Y2xhc3NOYW1lOnguaXNDbGFzc05hbWUsaW5wdXRSZWY6di5kZWZhdWx0LmZ1bmMsb25JdGVtQ2xpY2s6di5kZWZhdWx0LmZ1bmMsb25Mb2FkRXJyb3I6di5kZWZhdWx0LmZ1bmMsb25Mb2FkU3VjY2Vzczp2LmRlZmF1bHQuZnVuYyxwZGY6eC5pc1BkZn0sKDAseC5ldmVudHNQcm9wcykoKSk7dmFyIEM9Zy5kZWZhdWx0LmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbihyKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQSwoMCxvLmRlZmF1bHQpKHtyZWY6dH0scixlKSl9KSl9KSk7dC5kZWZhdWx0PUN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5PdXRsaW5lSXRlbUludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigzMCkpLHM9YShyKDM0KSksbD1hKHIoMTQpKSxjPWEocigxNSkpLHU9YShyKDIpKSxmPWEocig2KSksaD1hKHIoNykpLGQ9YShyKDMpKSxwPWEocig5KSksbT1hKHIoOCkpLGc9YShyKDUpKSx2PW4ocigwKSkseT1hKHIoNCkpLGI9YShyKDE5KSksdz1hKHIoMzMpKSxrPWEocig3NikpLFM9cigxMCksXz1yKDEzKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksImdldERlc3RpbmF0aW9uIiwoMCxjLmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD1yLnByb3BzLG49dC5pdGVtLGE9dC5wZGYsKDAsUy5pc0RlZmluZWQpKHIuZGVzdGluYXRpb24pKXtlLm5leHQ9OTticmVha31pZigic3RyaW5nIiE9dHlwZW9mIG4uZGVzdCl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD01LGEuZ2V0RGVzdGluYXRpb24obi5kZXN0KTtjYXNlIDU6ci5kZXN0aW5hdGlvbj1lLnNlbnQsZS5uZXh0PTk7YnJlYWs7Y2FzZSA4OnIuZGVzdGluYXRpb249bi5kZXN0O2Nhc2UgOTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5kZXN0aW5hdGlvbik7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksImdldFBhZ2VJbmRleCIsKDAsYy5kZWZhdWx0KShsLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LG4sYSxpO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD1yLnByb3BzLnBkZiwoMCxTLmlzRGVmaW5lZCkoci5wYWdlSW5kZXgpKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUubmV4dD00LHIuZ2V0RGVzdGluYXRpb24oKTtjYXNlIDQ6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xMDticmVha31yZXR1cm4gYT0oMCxzLmRlZmF1bHQpKG4sMSksaT1hWzBdLGUubmV4dD05LHQuZ2V0UGFnZUluZGV4KG5ldyBrLmRlZmF1bHQoaSkpO2Nhc2UgOTpyLnBhZ2VJbmRleD1lLnNlbnQ7Y2FzZSAxMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5wYWdlSW5kZXgpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSksKDAsZy5kZWZhdWx0KSgoMCxtLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkocikpLCJnZXRQYWdlTnVtYmVyIiwoMCxjLmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGwuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigoMCxTLmlzRGVmaW5lZCkoci5wYWdlTnVtYmVyKSl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHIuZ2V0UGFnZUluZGV4KCk7Y2FzZSAzOmUudDA9ZS5zZW50LHIucGFnZU51bWJlcj1lLnQwKzE7Y2FzZSA1OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixyLnBhZ2VOdW1iZXIpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksIm9uQ2xpY2siLGZ1bmN0aW9uKCl7dmFyIGU9KDAsYy5kZWZhdWx0KShsLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgbixhLGk7cmV0dXJuIGwuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gbj1yLnByb3BzLm9uQ2xpY2ssdC5wcmV2ZW50RGVmYXVsdCgpLGUubmV4dD00LHIuZ2V0UGFnZUluZGV4KCk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxlLm5leHQ9NyxyLmdldFBhZ2VOdW1iZXIoKTtjYXNlIDc6aT1lLnNlbnQsKDAsUy5jYWxsSWZEZWZpbmVkKShuLHtwYWdlSW5kZXg6YSxwYWdlTnVtYmVyOml9KTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkscn1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXJTdWJpdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHI9ZS5pdGVtLG49KDAsby5kZWZhdWx0KShlLFsiaXRlbSJdKTtpZighci5pdGVtc3x8IXIuaXRlbXMubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXIuaXRlbXM7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1bCIsbnVsbCxhLm1hcCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodCwoMCxpLmRlZmF1bHQpKHtrZXk6InN0cmluZyI9PXR5cGVvZiBlLmRlc3RpbmF0aW9uP2UuZGVzdGluYXRpb246cixpdGVtOmV9LG4pKX0pKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pdGVtO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOiIjIixvbkNsaWNrOnRoaXMub25DbGlja30sZS50aXRsZSksdGhpcy5yZW5kZXJTdWJpdGVtcygpKX19XSksdH0odi5QdXJlQ29tcG9uZW50KTt0Lk91dGxpbmVJdGVtSW50ZXJuYWw9eDt2YXIgQT15LmRlZmF1bHQub25lT2ZUeXBlKFt5LmRlZmF1bHQuc3RyaW5nLHkuZGVmYXVsdC5hcnJheU9mKHkuZGVmYXVsdC5hbnkpXSk7eC5wcm9wVHlwZXM9e2l0ZW06eS5kZWZhdWx0LnNoYXBlKHt0aXRsZTp5LmRlZmF1bHQuc3RyaW5nLGRlc3RpbmF0aW9uOkEsaXRlbXM6eS5kZWZhdWx0LmFycmF5T2YoeS5kZWZhdWx0LnNoYXBlKHt0aXRsZTp5LmRlZmF1bHQuc3RyaW5nLGRlc3RpbmF0aW9uOkF9KSl9KS5pc1JlcXVpcmVkLG9uQ2xpY2s6eS5kZWZhdWx0LmZ1bmMscGRmOl8uaXNQZGYuaXNSZXF1aXJlZH07dmFyIEM9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbih0KXtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHIpe3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LCgwLGkuZGVmYXVsdCkoe30sdCxyLGUpKX0pKX0pKX07dC5kZWZhdWx0PUN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgYT1uKHIoMikpLGk9bihyKDYpKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10Lm51bSxuPXQuZ2VuOygwLGEuZGVmYXVsdCkodGhpcyxlKSx0aGlzLm51bT1yLHRoaXMuZ2VuPW59cmV0dXJuKDAsaS5kZWZhdWx0KShlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0iIi5jb25jYXQodGhpcy5udW0sIlIiKTtyZXR1cm4gMCE9PXRoaXMuZ2VuJiYoZSs9dGhpcy5nZW4pLGV9fV0pLGV9KCk7dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5QYWdlSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigyNSkpLG89YShyKDEyKSkscz1hKHIoMTQpKSxsPWEocigxNSkpLGM9YShyKDIpKSx1PWEocig2KSksZj1hKHIoNykpLGg9YShyKDMpKSxkPWEocig5KSkscD1hKHIoOCkpLG09YShyKDUpKSxnPW4ocigwKSksdj1hKHIoNCkpLHk9YShyKDIyKSksYj1hKHIoMjcpKSx3PWEocigxOSkpLGs9YShyKDE3KSksUz1hKHIoMzEpKSxfPWEocig3OCkpLHg9YShyKDc5KSksQT1hKHIoODApKSxDPWEocig4MikpLFA9cigxMCksRT1yKDEzKSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9KDAsaC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksInN0YXRlIix7cGFnZTpudWxsfSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJvbkxvYWRTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5vbkxvYWRTdWNjZXNzLG49ZS5yZWdpc3RlclBhZ2UsYT1yLnN0YXRlLnBhZ2U7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LCgwLFAubWFrZVBhZ2VDYWxsYmFjaykoYSxyLnNjYWxlKSksKDAsUC5jYWxsSWZEZWZpbmVkKShuLHIucGFnZUluZGV4LHIucmVmKX0pKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksIm9uTG9hZEVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLFAuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXsoMCxQLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25Mb2FkRXJyb3I7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksImxvYWRQYWdlIiwoMCxsLmRlZmF1bHQpKHMuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhLGk7cmV0dXJuIHMuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0PXIucHJvcHMucGRmLG49ci5nZXRQYWdlTnVtYmVyKCkpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnJldHVybiByLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlP3twYWdlOm51bGx9Om51bGx9KSksZS5wcmV2PTUsYT0oMCxQLm1ha2VDYW5jZWxsYWJsZSkodC5nZXRQYWdlKG4pKSxyLnJ1bm5pbmdUYXNrPWEsZS5uZXh0PTEwLGEucHJvbWlzZTtjYXNlIDEwOmk9ZS5zZW50LHIuc2V0U3RhdGUoe3BhZ2U6aX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNDplLnByZXY9MTQsZS50MD1lLmNhdGNoKDUpLHIuc2V0U3RhdGUoe3BhZ2U6ITF9KSxyLm9uTG9hZEVycm9yKGUudDApO2Nhc2UgMTg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1s1LDE0XV0pfSkpKSkscn1yZXR1cm4oMCxkLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5wcm9wcy5wZGYpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBhIHBhZ2UsIGJ1dCBubyBkb2N1bWVudCB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZFBhZ2UoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wZGY7aWYoZS5wZGYmJnQhPT1lLnBkZnx8dGhpcy5nZXRQYWdlTnVtYmVyKCkhPT10aGlzLmdldFBhZ2VOdW1iZXIoZSkpe3ZhciByPXRoaXMucHJvcHMudW5yZWdpc3RlclBhZ2U7KDAsUC5jYWxsSWZEZWZpbmVkKShyLHRoaXMuZ2V0UGFnZUluZGV4KGUpKSx0aGlzLmxvYWRQYWdlKCl9fX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy51bnJlZ2lzdGVyUGFnZTsoMCxQLmNhbGxJZkRlZmluZWQpKGUsdGhpcy5wYWdlSW5kZXgpLCgwLFAuY2FuY2VsUnVubmluZ1Rhc2spKHRoaXMucnVubmluZ1Rhc2spfX0se2tleToiZ2V0UGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnByb3BzO3JldHVybigwLFAuaXNQcm92aWRlZCkoZS5wYWdlTnVtYmVyKT9lLnBhZ2VOdW1iZXItMTooMCxQLmlzUHJvdmlkZWQpKGUucGFnZUluZGV4KT9lLnBhZ2VJbmRleDpudWxsfX0se2tleToiZ2V0UGFnZU51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5wcm9wcztyZXR1cm4oMCxQLmlzUHJvdmlkZWQpKGUucGFnZU51bWJlcik/ZS5wYWdlTnVtYmVyOigwLFAuaXNQcm92aWRlZCkoZS5wYWdlSW5kZXgpP2UucGFnZUluZGV4KzE6bnVsbH19LHtrZXk6InJlbmRlck1haW5MYXllciIsdmFsdWU6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5wcm9wcy5yZW5kZXJNb2RlKXtjYXNlIm5vbmUiOnJldHVybiBudWxsO2Nhc2Uic3ZnIjpyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleU5vU2NhbGUsIl9zdmciKX0pO2Nhc2UiY2FudmFzIjpkZWZhdWx0OnJldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLmRlZmF1bHQse2tleToiIi5jb25jYXQodGhpcy5wYWdlS2V5LCJfY2FudmFzIil9KX19fSx7a2V5OiJyZW5kZXJUZXh0TGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5yZW5kZXJUZXh0TGF5ZXI7cmV0dXJuIGU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQS5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleSwiX3RleHQiKX0pOm51bGx9fSx7a2V5OiJyZW5kZXJBbm5vdGF0aW9uTGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI7cmV0dXJuIGU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleSwiX2Fubm90YXRpb25zIil9KTpudWxsfX0se2tleToicmVuZGVyQ2hpbGRyZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jaGlsZHJlbjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmNoaWxkQ29udGV4dH0sdGhpcy5yZW5kZXJNYWluTGF5ZXIoKSx0aGlzLnJlbmRlclRleHRMYXllcigpLHRoaXMucmVuZGVyQW5ub3RhdGlvbkxheWVyKCksZSl9fSx7a2V5OiJyZW5kZXJDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFnZU51bWJlcix0PXRoaXMucHJvcHMucGRmLHI9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXt2YXIgbj10aGlzLnByb3BzLm5vRGF0YTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUy5kZWZhdWx0LHt0eXBlOiJuby1kYXRhIn0sImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pfWlmKG51bGw9PT10fHxudWxsPT09cil7dmFyIGE9dGhpcy5wcm9wcy5sb2FkaW5nO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLmRlZmF1bHQse3R5cGU6ImxvYWRpbmcifSwiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSl9aWYoITE9PT10fHwhMT09PXIpe3ZhciBpPXRoaXMucHJvcHMuZXJyb3I7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMuZGVmYXVsdCx7dHlwZToiZXJyb3IifSwiZnVuY3Rpb24iPT10eXBlb2YgaT9pKCk6aSl9cmV0dXJuIHRoaXMucmVuZGVyQ2hpbGRyZW4oKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wYWdlTnVtYmVyLHI9dGhpcy5wcm9wcy5jbGFzc05hbWU7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLCgwLG8uZGVmYXVsdCkoe2NsYXNzTmFtZTooMCxiLmRlZmF1bHQpKCJyZWFjdC1wZGZfX1BhZ2UiLHIpLHJlZjpmdW5jdGlvbih0KXt2YXIgcj1lLnByb3BzLmlucHV0UmVmO3ImJnIodCksZS5yZWY9dH0sc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9LCJkYXRhLXBhZ2UtbnVtYmVyIjp0fSx0aGlzLmV2ZW50UHJvcHMpLHRoaXMucmVuZGVyQ29udGVudCgpKX19LHtrZXk6ImNoaWxkQ29udGV4dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXJldHVybnt9O3ZhciB0PXRoaXMucHJvcHM7cmV0dXJue2N1c3RvbVRleHRSZW5kZXJlcjp0LmN1c3RvbVRleHRSZW5kZXJlcixvbkdldEFubm90YXRpb25zRXJyb3I6dC5vbkdldEFubm90YXRpb25zRXJyb3Isb25HZXRBbm5vdGF0aW9uc1N1Y2Nlc3M6dC5vbkdldEFubm90YXRpb25zU3VjY2VzcyxvbkdldFRleHRFcnJvcjp0Lm9uR2V0VGV4dEVycm9yLG9uR2V0VGV4dFN1Y2Nlc3M6dC5vbkdldFRleHRTdWNjZXNzLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I6dC5vblJlbmRlckFubm90YXRpb25MYXllckVycm9yLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2Vzczp0Lm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2VzcyxvblJlbmRlckVycm9yOnQub25SZW5kZXJFcnJvcixvblJlbmRlclN1Y2Nlc3M6dC5vblJlbmRlclN1Y2Nlc3MscGFnZTplLHJlbmRlckludGVyYWN0aXZlRm9ybXM6dC5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zLHJvdGF0ZTp0aGlzLnJvdGF0ZSxzY2FsZTp0aGlzLnNjYWxlfX19LHtrZXk6InBhZ2VJbmRleCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGFnZUluZGV4KCl9fSx7a2V5OiJwYWdlTnVtYmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQYWdlTnVtYmVyKCl9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMucm90YXRlO2lmKCgwLFAuaXNQcm92aWRlZCkoZSkpcmV0dXJuIGU7dmFyIHQ9dGhpcy5zdGF0ZS5wYWdlO3JldHVybiB0P3Qucm90YXRlOm51bGx9fSx7a2V5OiJzY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PXRoaXMucHJvcHMscj10LnNjYWxlLG49dC53aWR0aCxhPXQuaGVpZ2h0LGk9dGhpcy5yb3RhdGUsbz0xLHM9bnVsbD09PXI/MTpyO2lmKG58fGEpe3ZhciBsPWUuZ2V0Vmlld3BvcnQoe3NjYWxlOjEscm90YXRpb246aX0pO289bj9uL2wud2lkdGg6YS9sLmhlaWdodH1yZXR1cm4gcypvfX0se2tleToiZXZlbnRQcm9wcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4oMCx5LmRlZmF1bHQpKHRoaXMucHJvcHMsKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5zdGF0ZS5wYWdlO3JldHVybiB0PygwLFAubWFrZVBhZ2VDYWxsYmFjaykodCxlLnNjYWxlKTp0fSkpfX0se2tleToicGFnZUtleSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO3JldHVybiIiLmNvbmNhdChlLnBhZ2VJbmRleCwiQCIpLmNvbmNhdCh0aGlzLnNjYWxlLCIvIikuY29uY2F0KHRoaXMucm90YXRlKX19LHtrZXk6InBhZ2VLZXlOb1NjYWxlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLnBhZ2U7cmV0dXJuIiIuY29uY2F0KGUucGFnZUluZGV4LCIvIikuY29uY2F0KHRoaXMucm90YXRlKX19XSksdH0oZy5QdXJlQ29tcG9uZW50KTt0LlBhZ2VJbnRlcm5hbD1ULFQuZGVmYXVsdFByb3BzPXtlcnJvcjoiRmFpbGVkIHRvIGxvYWQgdGhlIHBhZ2UuIixsb2FkaW5nOiJMb2FkaW5nIHBhZ2XigKYiLG5vRGF0YToiTm8gcGFnZSBzcGVjaWZpZWQuIixyZW5kZXJBbm5vdGF0aW9uTGF5ZXI6ITAscmVuZGVySW50ZXJhY3RpdmVGb3JtczohMSxyZW5kZXJNb2RlOiJjYW52YXMiLHJlbmRlclRleHRMYXllcjohMCxzY2FsZToxfSxULnByb3BUeXBlcz0oMCxpLmRlZmF1bHQpKHtjaGlsZHJlbjp2LmRlZmF1bHQubm9kZSxjbGFzc05hbWU6RS5pc0NsYXNzTmFtZSxjdXN0b21UZXh0UmVuZGVyZXI6di5kZWZhdWx0LmZ1bmMsZXJyb3I6di5kZWZhdWx0Lm5vZGUsaGVpZ2h0OnYuZGVmYXVsdC5udW1iZXIsaW5wdXRSZWY6di5kZWZhdWx0LmZ1bmMsbG9hZGluZzp2LmRlZmF1bHQubm9kZSxub0RhdGE6di5kZWZhdWx0Lm5vZGUsb25HZXRUZXh0RXJyb3I6di5kZWZhdWx0LmZ1bmMsb25HZXRUZXh0U3VjY2Vzczp2LmRlZmF1bHQuZnVuYyxvbkxvYWRFcnJvcjp2LmRlZmF1bHQuZnVuYyxvbkxvYWRTdWNjZXNzOnYuZGVmYXVsdC5mdW5jLG9uUmVuZGVyRXJyb3I6di5kZWZhdWx0LmZ1bmMsb25SZW5kZXJTdWNjZXNzOnYuZGVmYXVsdC5mdW5jLHBhZ2VJbmRleDpFLmlzUGFnZUluZGV4LHBhZ2VOdW1iZXI6RS5pc1BhZ2VOdW1iZXIscGRmOkUuaXNQZGYscmVnaXN0ZXJQYWdlOnYuZGVmYXVsdC5mdW5jLHJlbmRlckFubm90YXRpb25MYXllcjp2LmRlZmF1bHQuYm9vbCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOnYuZGVmYXVsdC5ib29sLHJlbmRlck1vZGU6RS5pc1JlbmRlck1vZGUscmVuZGVyVGV4dExheWVyOnYuZGVmYXVsdC5ib29sLHJvdGF0ZTpFLmlzUm90YXRlLHNjYWxlOnYuZGVmYXVsdC5udW1iZXIsdW5yZWdpc3RlclBhZ2U6di5kZWZhdWx0LmZ1bmMsd2lkdGg6di5kZWZhdWx0Lm51bWJlcn0sKDAsRS5ldmVudHNQcm9wcykoKSk7dmFyIFI9Zy5kZWZhdWx0LmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbihyKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVCwoMCxvLmRlZmF1bHQpKHtyZWY6dH0scixlLHtyZW5kZXJBbm5vdGF0aW9uTGF5ZXI6dm9pZCAwIT09ZS5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI/ZS5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI6ZS5yZW5kZXJBbm5vdGF0aW9uc30pKX0pKX0pKTt0LmRlZmF1bHQ9Un0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LCgwLGkuZGVmYXVsdCkoe30sdCxlKSl9KSl9LHQuUGFnZUNhbnZhc0ludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigyKSkscz1hKHIoNikpLGw9YShyKDcpKSxjPWEocigzKSksdT1hKHIoOSkpLGY9YShyKDgpKSxoPWEocig1KSksZD1uKHIoMCkpLHA9YShyKDQpKSxtPWEocigxNykpLGc9cigxMCksdj1yKDEzKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLG8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxsLmRlZmF1bHQpKHRoaXMsKGU9KDAsYy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksIm9uUmVuZGVyU3VjY2VzcyIsKGZ1bmN0aW9uKCl7ci5yZW5kZXJlcj1udWxsO3ZhciBlPXIucHJvcHMsdD1lLm9uUmVuZGVyU3VjY2VzcyxuPWUucGFnZSxhPWUuc2NhbGU7KDAsZy5jYWxsSWZEZWZpbmVkKSh0LCgwLGcubWFrZVBhZ2VDYWxsYmFjaykobixhKSl9KSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJvblJlbmRlckVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLGcuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXsoMCxnLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25SZW5kZXJFcnJvcjsoMCxnLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLGguZGVmYXVsdCkoKDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKSwiZHJhd1BhZ2VPbkNhbnZhcyIsKGZ1bmN0aW9uKCl7dmFyIGU9KDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKS5jYW52YXNMYXllcjtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD0oMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLG49dC5yZW5kZXJWaWV3cG9ydCxhPXQudmlld3BvcnQsaT1yLnByb3BzLG89aS5wYWdlLHM9aS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zO2Uud2lkdGg9bi53aWR0aCxlLmhlaWdodD1uLmhlaWdodCxlLnN0eWxlLndpZHRoPSIiLmNvbmNhdChNYXRoLmZsb29yKGEud2lkdGgpLCJweCIpLGUuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChNYXRoLmZsb29yKGEuaGVpZ2h0KSwicHgiKTt2YXIgbD17Z2V0IGNhbnZhc0NvbnRleHQoKXtyZXR1cm4gZS5nZXRDb250ZXh0KCIyZCIpfSx2aWV3cG9ydDpuLHJlbmRlckludGVyYWN0aXZlRm9ybXM6c307cmV0dXJuIHIuY2FuY2VsUmVuZGVyaW5nVGFzaygpLHIucmVuZGVyZXI9by5yZW5kZXIobCksci5yZW5kZXJlci5wcm9taXNlLnRoZW4oci5vblJlbmRlclN1Y2Nlc3MpLmNhdGNoKHIub25SZW5kZXJFcnJvcil9KSkscn1yZXR1cm4oMCx1LmRlZmF1bHQpKHQsZSksKDAscy5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYXdQYWdlT25DYW52YXMoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQucGFnZTt0LnJlbmRlckludGVyYWN0aXZlRm9ybXMhPT1lLnJlbmRlckludGVyYWN0aXZlRm9ybXMmJihyLmNsZWFudXAoKSx0aGlzLmRyYXdQYWdlT25DYW52YXMoKSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbFJlbmRlcmluZ1Rhc2soKSx0aGlzLmNhbnZhc0xheWVyJiYodGhpcy5jYW52YXNMYXllci53aWR0aD0wLHRoaXMuY2FudmFzTGF5ZXIuaGVpZ2h0PTAsdGhpcy5jYW52YXNMYXllcj1udWxsKX19LHtrZXk6ImNhbmNlbFJlbmRlcmluZ1Rhc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5faW50ZXJuYWxSZW5kZXJUYXNrLnJ1bm5pbmcmJnRoaXMucmVuZGVyZXIuX2ludGVybmFsUmVuZGVyVGFzay5jYW5jZWwoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY2FudmFzIix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX1BhZ2VfX2NhbnZhcyIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIn0scmVmOmZ1bmN0aW9uKHQpe2UuY2FudmFzTGF5ZXI9dH19KX19LHtrZXk6InJlbmRlclZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5yb3RhdGUsbj1lLnNjYWxlLGE9KDAsZy5nZXRQaXhlbFJhdGlvKSgpO3JldHVybiB0LmdldFZpZXdwb3J0KHtzY2FsZTpuKmEscm90YXRpb246cn0pfX0se2tleToidmlld3BvcnQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBhZ2Uscj1lLnJvdGF0ZSxuPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOm4scm90YXRpb246cn0pfX1dKSx0fShkLlB1cmVDb21wb25lbnQpO3QuUGFnZUNhbnZhc0ludGVybmFsPXkseS5wcm9wVHlwZXM9e29uUmVuZGVyRXJyb3I6cC5kZWZhdWx0LmZ1bmMsb25SZW5kZXJTdWNjZXNzOnAuZGVmYXVsdC5mdW5jLHBhZ2U6di5pc1BhZ2UuaXNSZXF1aXJlZCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOnAuZGVmYXVsdC5ib29sLHJvdGF0ZTp2LmlzUm90YXRlLHNjYWxlOnAuZGVmYXVsdC5udW1iZXJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChnLmRlZmF1bHQuQ29uc3VtZXIsbnVsbCwoZnVuY3Rpb24odCl7cmV0dXJuIGQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIsKDAsaS5kZWZhdWx0KSh7fSx0LGUpKX0pKX0sdC5QYWdlU1ZHSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigxMikpLG89YShyKDIpKSxzPWEocig2KSksbD1hKHIoNykpLGM9YShyKDMpKSx1PWEocig5KSksZj1hKHIoOCkpLGg9YShyKDUpKSxkPW4ocigwKSkscD1hKHIoNCkpLG09YShyKDIwKSksZz1hKHIoMTcpKSx2PXIoMTApLHk9cigxMyksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxvLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsbC5kZWZhdWx0KSh0aGlzLChlPSgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJzdGF0ZSIse3N2ZzpudWxsfSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJvblJlbmRlclN1Y2Nlc3MiLChmdW5jdGlvbigpe3IucmVuZGVyZXI9bnVsbDt2YXIgZT1yLnByb3BzLHQ9ZS5vblJlbmRlclN1Y2Nlc3Msbj1lLnBhZ2UsYT1lLnNjYWxlOygwLHYuY2FsbElmRGVmaW5lZCkodCwoMCx2Lm1ha2VQYWdlQ2FsbGJhY2spKG4sYSkpfSkpLCgwLGguZGVmYXVsdCkoKDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKSwib25SZW5kZXJFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCx2LmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsdi5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uUmVuZGVyRXJyb3I7KDAsdi5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksInJlbmRlclNWRyIsKGZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcy5wYWdlO3JldHVybiByLnJlbmRlcmVyPWUuZ2V0T3BlcmF0b3JMaXN0KCksci5yZW5kZXJlci50aGVuKChmdW5jdGlvbih0KXt2YXIgbj1uZXcgbS5kZWZhdWx0LlNWR0dyYXBoaWNzKGUuY29tbW9uT2JqcyxlLm9ianMpO3IucmVuZGVyZXI9bi5nZXRTVkcodCxyLnZpZXdwb3J0KS50aGVuKChmdW5jdGlvbihlKXtyLnNldFN0YXRlKHtzdmc6ZX0sci5vblJlbmRlclN1Y2Nlc3MpfSkpLmNhdGNoKHIub25SZW5kZXJFcnJvcil9KSkuY2F0Y2goci5vblJlbmRlckVycm9yKX0pKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksImRyYXdQYWdlT25Db250YWluZXIiLChmdW5jdGlvbihlKXt2YXIgdD1yLnN0YXRlLnN2ZztpZihlJiZ0KXtlLmZpcnN0RWxlbWVudENoaWxkfHxlLmFwcGVuZENoaWxkKHQpO3ZhciBuPXIudmlld3BvcnQsYT1uLndpZHRoLGk9bi5oZWlnaHQ7dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixhKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixpKX19KSkscn1yZXR1cm4oMCx1LmRlZmF1bHQpKHQsZSksKDAscy5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclNWRygpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnZpZXdwb3J0LHI9dC53aWR0aCxuPXQuaGVpZ2h0O3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX1BhZ2VfX3N2ZyIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixiYWNrZ3JvdW5kQ29sb3I6IndoaXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpyLGhlaWdodDpuLHVzZXJTZWxlY3Q6Im5vbmUifSxyZWY6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZHJhd1BhZ2VPbkNvbnRhaW5lcih0KX19KX19LHtrZXk6InZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5yb3RhdGUsbj1lLnNjYWxlO3JldHVybiB0LmdldFZpZXdwb3J0KHtzY2FsZTpuLHJvdGF0aW9uOnJ9KX19XSksdH0oZC5QdXJlQ29tcG9uZW50KTt0LlBhZ2VTVkdJbnRlcm5hbD1iLGIucHJvcFR5cGVzPXtvblJlbmRlckVycm9yOnAuZGVmYXVsdC5mdW5jLG9uUmVuZGVyU3VjY2VzczpwLmRlZmF1bHQuZnVuYyxwYWdlOnkuaXNQYWdlLmlzUmVxdWlyZWQscm90YXRlOnkuaXNSb3RhdGUsc2NhbGU6cC5kZWZhdWx0Lm51bWJlcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbih0KXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaywoMCxpLmRlZmF1bHQpKHt9LHQsZSkpfSkpfSx0LlRleHRMYXllckludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigxNCkpLHM9YShyKDE1KSksbD1hKHIoMikpLGM9YShyKDYpKSx1PWEocig3KSksZj1hKHIoMykpLGg9YShyKDkpKSxkPWEocig4KSkscD1hKHIoNSkpLG09bihyKDApKSxnPWEocig0KSksdj1hKHIoMTcpKSx5PWEocig4MSkpLGI9cigxMCksdz1yKDEzKSxrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLGwuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCx1LmRlZmF1bHQpKHRoaXMsKGU9KDAsZi5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksInN0YXRlIix7dGV4dEl0ZW1zOm51bGx9KSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksImxvYWRUZXh0SXRlbXMiLCgwLHMuZGVmYXVsdCkoby5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGEsaTtyZXR1cm4gby5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIucHJvcHMucGFnZSxlLnByZXY9MSxuPSgwLGIubWFrZUNhbmNlbGxhYmxlKSh0LmdldFRleHRDb250ZW50KCkpLHIucnVubmluZ1Rhc2s9bixlLm5leHQ9NixuLnByb21pc2U7Y2FzZSA2OmE9ZS5zZW50LGk9YS5pdGVtcyxyLnNldFN0YXRlKHt0ZXh0SXRlbXM6aX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHIub25Mb2FkRXJyb3IoZS50MCk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzEsMTFdXSl9KSkpKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25HZXRUZXh0U3VjY2Vzcyx0PXIuc3RhdGUudGV4dEl0ZW1zOygwLGIuY2FsbElmRGVmaW5lZCkoZSx0KX0pKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksIm9uTG9hZEVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLGIuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXtyLnNldFN0YXRlKHt0ZXh0SXRlbXM6ITF9KSwoMCxiLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25HZXRUZXh0RXJyb3I7KDAsYi5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSxyfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxjLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBhZ2UpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBwYWdlIHRleHQgY29udGVudCwgYnV0IG5vIHBhZ2Ugd2FzIHNwZWNpZmllZC4iKTt0aGlzLmxvYWRUZXh0SXRlbXMoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wYWdlO2UucGFnZSYmdCE9PWUucGFnZSYmdGhpcy5sb2FkVGV4dEl0ZW1zKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxiLmNhbmNlbFJ1bm5pbmdUYXNrKSh0aGlzLnJ1bm5pbmdUYXNrKX19LHtrZXk6InJlbmRlclRleHRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLnRleHRJdGVtcztyZXR1cm4gZT9lLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LCgwLGkuZGVmYXVsdCkoe2tleTp0LGl0ZW1JbmRleDp0fSxlKSl9KSk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVucm90YXRlZFZpZXdwb3J0LHQ9dGhpcy5yb3RhdGU7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LXBkZl9fUGFnZV9fdGV4dENvbnRlbnQiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOiIiLmNvbmNhdChlLndpZHRoLCJweCIpLGhlaWdodDoiIi5jb25jYXQoZS5oZWlnaHQsInB4IiksY29sb3I6InRyYW5zcGFyZW50Iix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoIi5jb25jYXQodCwiZGVnKSIpLHBvaW50ZXJFdmVudHM6Im5vbmUifX0sdGhpcy5yZW5kZXJUZXh0SXRlbXMoKSl9fSx7a2V5OiJ1bnJvdGF0ZWRWaWV3cG9ydCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGFnZSxyPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOnJ9KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGFnZTtyZXR1cm4gZS5yb3RhdGUtdC5yb3RhdGV9fV0pLHR9KG0uUHVyZUNvbXBvbmVudCk7dC5UZXh0TGF5ZXJJbnRlcm5hbD1rLGsucHJvcFR5cGVzPXtvbkdldFRleHRFcnJvcjpnLmRlZmF1bHQuZnVuYyxvbkdldFRleHRTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLHBhZ2U6dy5pc1BhZ2UuaXNSZXF1aXJlZCxyb3RhdGU6dy5pc1JvdGF0ZSxzY2FsZTpnLmRlZmF1bHQubnVtYmVyfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LCgwLGkuZGVmYXVsdCkoe30sdCxlKSl9KSl9LHQuVGV4dExheWVySXRlbUludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigzNCkpLHM9YShyKDE0KSksbD1hKHIoMTUpKSxjPWEocigyKSksdT1hKHIoNikpLGY9YShyKDcpKSxoPWEocigzKSksZD1hKHIoOSkpLHA9YShyKDgpKSxtPWEocig1KSksZz1uKHIoMCkpLHY9YShyKDQpKSx5PWEocigxNykpLGI9cigxMyksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPSgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJnZXRFbGVtZW50V2lkdGgiLChmdW5jdGlvbihlKXt2YXIgdD0oMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLnNpZGV3YXlzO3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Q/ImhlaWdodCI6IndpZHRoIl19KSkscn12YXIgcixuO3JldHVybigwLGQuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWxpZ25UZXh0SXRlbSgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWxpZ25UZXh0SXRlbSgpfX0se2tleToiZ2V0Rm9udERhdGEiLHZhbHVlOihuPSgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbjtyZXR1cm4gcy5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiByPXRoaXMucHJvcHMucGFnZSxlLm5leHQ9MyxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5jb21tb25PYmpzLmdldCh0LGUpfSkpO2Nhc2UgMzpyZXR1cm4gbj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsbik7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImFsaWduVGV4dEl0ZW0iLHZhbHVlOihyPSgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpLG8sbCxjLHUsZixoO3JldHVybiBzLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD10aGlzLml0ZW0pe2UubmV4dD0zO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0LnN0eWxlLnRyYW5zZm9ybT0iIixyPXRoaXMucHJvcHMsbj1yLmZvbnROYW1lLGE9ci5zY2FsZSxpPXIud2lkdGgsdC5zdHlsZS5mb250RmFtaWx5PSIiLmNvbmNhdChuLCIsIHNhbnMtc2VyaWYiKSxlLm5leHQ9OCx0aGlzLmdldEZvbnREYXRhKG4pO2Nhc2UgODpvPWUuc2VudCxsPW8/by5mYWxsYmFja05hbWU6InNhbnMtc2VyaWYiLHQuc3R5bGUuZm9udEZhbWlseT0iIi5jb25jYXQobiwiLCAiKS5jb25jYXQobCksYz1pKmEsdT10aGlzLmdldEVsZW1lbnRXaWR0aCh0KSxmPSJzY2FsZVgoIi5jb25jYXQoYy91LCIpIiksKGg9bz9vLmFzY2VudDowKSYmKGYrPSIgdHJhbnNsYXRlWSgiLmNvbmNhdCgxMDAqKDEtaCksIiUpIikpLHQuc3R5bGUudHJhbnNmb3JtPWY7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5mb250U2l6ZSxyPXRoaXMudG9wLG49dGhpcy5sZWZ0LGE9dGhpcy5wcm9wcyxpPWEuY3VzdG9tVGV4dFJlbmRlcmVyLG89YS5zY2FsZSxzPWEuc3RyO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOntoZWlnaHQ6IjFlbSIsZm9udEZhbWlseToic2Fucy1zZXJpZiIsZm9udFNpemU6IiIuY29uY2F0KHQqbywicHgiKSxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiIi5jb25jYXQocipvLCJweCIpLGxlZnQ6IiIuY29uY2F0KG4qbywicHgiKSx0cmFuc2Zvcm1PcmlnaW46ImxlZnQgYm90dG9tIix3aGl0ZVNwYWNlOiJwcmUiLHBvaW50ZXJFdmVudHM6ImFsbCJ9LHJlZjpmdW5jdGlvbih0KXtlLml0ZW09dH19LGk/aSh0aGlzLnByb3BzKTpzKX19LHtrZXk6InVucm90YXRlZFZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5zY2FsZTtyZXR1cm4gdC5nZXRWaWV3cG9ydCh7c2NhbGU6cn0pfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlO3JldHVybiBlLnJvdGF0ZS10LnJvdGF0ZX19LHtrZXk6InNpZGV3YXlzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3RhdGUlMTgwIT0wfX0se2tleToiZGVmYXVsdFNpZGV3YXlzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJvdGF0ZWRWaWV3cG9ydC5yb3RhdGlvbiUxODAhPTB9fSx7a2V5OiJmb250U2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLmRlZmF1bHRTaWRld2F5cyxyPSgwLG8uZGVmYXVsdCkoZSwyKSxuPXJbMF0sYT1yWzFdO3JldHVybiB0P2E6bn19LHtrZXk6InRvcCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLnVucm90YXRlZFZpZXdwb3J0LHI9dGhpcy5kZWZhdWx0U2lkZXdheXMsbj0oMCxvLmRlZmF1bHQpKGUsNiksYT1uWzJdLGk9blszXSxzPW5bNF0sbD1uWzVdLGM9KDAsby5kZWZhdWx0KSh0LnZpZXdCb3gsNCksdT1jWzFdLGY9Y1szXTtyZXR1cm4gcj9zK2ErdTpmLShsK2kpfX0se2tleToibGVmdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLnVucm90YXRlZFZpZXdwb3J0LHI9dGhpcy5kZWZhdWx0U2lkZXdheXMsbj0oMCxvLmRlZmF1bHQpKGUsNiksYT1uWzRdLGk9bls1XSxzPSgwLG8uZGVmYXVsdCkodC52aWV3Qm94LDEpWzBdO3JldHVybiByP2ktczphLXN9fV0pLHR9KGcuUHVyZUNvbXBvbmVudCk7dC5UZXh0TGF5ZXJJdGVtSW50ZXJuYWw9dyx3LnByb3BUeXBlcz17Y3VzdG9tVGV4dFJlbmRlcmVyOnYuZGVmYXVsdC5mdW5jLGZvbnROYW1lOnYuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxpdGVtSW5kZXg6di5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHBhZ2U6Yi5pc1BhZ2UuaXNSZXF1aXJlZCxyb3RhdGU6Yi5pc1JvdGF0ZSxzY2FsZTp2LmRlZmF1bHQubnVtYmVyLHN0cjp2LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdHJhbnNmb3JtOnYuZGVmYXVsdC5hcnJheU9mKHYuZGVmYXVsdC5udW1iZXIpLmlzUmVxdWlyZWQsd2lkdGg6di5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD10LkFubm90YXRpb25MYXllckludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigxNCkpLHM9YShyKDE1KSksbD1hKHIoMikpLGM9YShyKDYpKSx1PWEocig3KSksZj1hKHIoMykpLGg9YShyKDkpKSxkPWEocig4KSkscD1hKHIoNSkpLG09bihyKDApKSxnPWEocig0KSksdj1hKHIoMjApKSx5PWEocigxOSkpLGI9YShyKDE3KSksdz1yKDEwKSxrPXIoMTMpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7KDAsbC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKWFbaV09YXJndW1lbnRzW2ldO3JldHVybiByPSgwLHUuZGVmYXVsdCkodGhpcywoZT0oMCxmLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChhKSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwic3RhdGUiLHthbm5vdGF0aW9uczpudWxsfSksKDAscC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkocikpLCJsb2FkQW5ub3RhdGlvbnMiLCgwLHMuZGVmYXVsdCkoby5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGE7cmV0dXJuIG8uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1yLnByb3BzLnBhZ2UsZS5wcmV2PTEsbj0oMCx3Lm1ha2VDYW5jZWxsYWJsZSkodC5nZXRBbm5vdGF0aW9ucygpKSxyLnJ1bm5pbmdUYXNrPW4sZS5uZXh0PTYsbi5wcm9taXNlO2Nhc2UgNjphPWUuc2VudCxyLnNldFN0YXRlKHthbm5vdGF0aW9uczphfSxyLm9uTG9hZFN1Y2Nlc3MpLGUubmV4dD0xMzticmVhaztjYXNlIDEwOmUucHJldj0xMCxlLnQwPWUuY2F0Y2goMSksci5vbkxvYWRFcnJvcihlLnQwKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxMF1dKX0pKSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25Mb2FkU3VjY2VzcyIsKGZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcy5vbkdldEFubm90YXRpb25zU3VjY2Vzcyx0PXIuc3RhdGUuYW5ub3RhdGlvbnM7KDAsdy5jYWxsSWZEZWZpbmVkKShlLHQpfSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25Mb2FkRXJyb3IiLChmdW5jdGlvbihlKXtpZighKDAsdy5pc0NhbmNlbEV4Y2VwdGlvbikoZSkpe3Iuc2V0U3RhdGUoe2Fubm90YXRpb25zOiExfSksKDAsdy5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uR2V0QW5ub3RhdGlvbnNFcnJvcjsoMCx3LmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25SZW5kZXJTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2VzczsoMCx3LmNhbGxJZkRlZmluZWQpKGUpfSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25SZW5kZXJFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCx3LmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsdy5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I7KDAsdy5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSxyfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxjLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBhZ2UpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBwYWdlIGFubm90YXRpb25zLCBidXQgbm8gcGFnZSB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZEFubm90YXRpb25zKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LnBhZ2Usbj10LnJlbmRlckludGVyYWN0aXZlRm9ybXM7KGUucGFnZSYmciE9PWUucGFnZXx8biE9PWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcykmJnRoaXMubG9hZEFubm90YXRpb25zKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCx3LmNhbmNlbFJ1bm5pbmdUYXNrKSh0aGlzLnJ1bm5pbmdUYXNrKX19LHtrZXk6InJlbmRlckFubm90YXRpb25MYXllciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLmFubm90YXRpb25zO2lmKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LmxpbmtTZXJ2aWNlLG49dC5wYWdlLGE9dC5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zLGk9dGhpcy52aWV3cG9ydC5jbG9uZSh7ZG9udEZsaXA6ITB9KSxvPXthbm5vdGF0aW9uczplLGRpdjp0aGlzLmFubm90YXRpb25MYXllcixsaW5rU2VydmljZTpyLHBhZ2U6bixyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOmEsdmlld3BvcnQ6aX07dGhpcy5hbm5vdGF0aW9uTGF5ZXIuaW5uZXJIVE1MPSIiO3RyeXt2LmRlZmF1bHQuQW5ub3RhdGlvbkxheWVyLnJlbmRlcihvKSx0aGlzLm9uUmVuZGVyU3VjY2VzcygpfWNhdGNoKGUpe3RoaXMub25SZW5kZXJFcnJvcihlKX19fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LXBkZl9fUGFnZV9fYW5ub3RhdGlvbnMgYW5ub3RhdGlvbkxheWVyIixyZWY6ZnVuY3Rpb24odCl7ZS5hbm5vdGF0aW9uTGF5ZXI9dH19LHRoaXMucmVuZGVyQW5ub3RhdGlvbkxheWVyKCkpfX0se2tleToidmlld3BvcnQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBhZ2Uscj1lLnJvdGF0ZSxuPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOm4scm90YXRpb246cn0pfX1dKSx0fShtLlB1cmVDb21wb25lbnQpO3QuQW5ub3RhdGlvbkxheWVySW50ZXJuYWw9UyxTLnByb3BUeXBlcz17bGlua1NlcnZpY2U6ay5pc0xpbmtTZXJ2aWNlLmlzUmVxdWlyZWQsb25HZXRBbm5vdGF0aW9uc0Vycm9yOmcuZGVmYXVsdC5mdW5jLG9uR2V0QW5ub3RhdGlvbnNTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I6Zy5kZWZhdWx0LmZ1bmMsb25SZW5kZXJBbm5vdGF0aW9uTGF5ZXJTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLHBhZ2U6ay5pc1BhZ2UscmVuZGVySW50ZXJhY3RpdmVGb3JtczpnLmRlZmF1bHQuYm9vbCxyb3RhdGU6ay5pc1JvdGF0ZSxzY2FsZTpnLmRlZmF1bHQubnVtYmVyfTt2YXIgXz1mdW5jdGlvbihlKXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChiLmRlZmF1bHQuQ29uc3VtZXIsbnVsbCwoZnVuY3Rpb24ocil7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMsKDAsaS5kZWZhdWx0KSh7fSx0LHIsZSkpfSkpfSkpfTt0LmRlZmF1bHQ9X30sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXt2YXIgcixuLGEsaSxvLHM7InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpudWxsIT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsaT0ocj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiAxZTkqKGU9bigpKVswXStlWzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89aS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktYX0sYT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktYX0sYT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHIoMjQpKX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoODUpLGE9cig4Nik7InN0cmluZyI9PXR5cGVvZihhPWEuX19lc01vZHVsZT9hLmRlZmF1bHQ6YSkmJihhPVtbZS5pLGEsIiJdXSk7dmFyIGk9e2luc2VydDoiaGVhZCIsc2luZ2xldG9uOiExfSxvPShuKGUuaSxhLGkpLGEubG9jYWxzP2EubG9jYWxzOnt9KTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW4mJihuPUJvb2xlYW4od2luZG93JiZkb2N1bWVudCYmZG9jdW1lbnQuYWxsJiYhd2luZG93LmF0b2IpKSxufSxpPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PWVbdF0pe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7aWYod2luZG93LkhUTUxJRnJhbWVFbGVtZW50JiZyIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KXRyeXtyPXIuY29udGVudERvY3VtZW50LmhlYWR9Y2F0Y2goZSl7cj1udWxsfWVbdF09cn1yZXR1cm4gZVt0XX19KCksbz17fTtmdW5jdGlvbiBzKGUsdCxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9e2Nzczp0W25dWzFdLG1lZGlhOnRbbl1bMl0sc291cmNlTWFwOnRbbl1bM119O29bZV1bbl0/b1tlXVtuXShhKTpvW2VdLnB1c2gobShhLHIpKX19ZnVuY3Rpb24gbChlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLG49ZS5hdHRyaWJ1dGVzfHx7fTtpZih2b2lkIDA9PT1uLm5vbmNlKXt2YXIgYT1yLm5jO2EmJihuLm5vbmNlPWEpfWlmKE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc2V0QXR0cmlidXRlKGUsbltlXSl9KSksImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5zZXJ0KWUuaW5zZXJ0KHQpO2Vsc2V7dmFyIG89aShlLmluc2VydHx8ImhlYWQiKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTtvLmFwcGVuZENoaWxkKHQpfXJldHVybiB0fXZhciBjLHU9KGM9W10sZnVuY3Rpb24oZSx0KXtyZXR1cm4gY1tlXT10LGMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIlxuIil9KTtmdW5jdGlvbiBmKGUsdCxyLG4pe3ZhciBhPXI/IiI6bi5jc3M7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PXUodCxhKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpLG89ZS5jaGlsZE5vZGVzO29bdF0mJmUucmVtb3ZlQ2hpbGQob1t0XSksby5sZW5ndGg/ZS5pbnNlcnRCZWZvcmUoaSxvW3RdKTplLmFwcGVuZENoaWxkKGkpfX1mdW5jdGlvbiBoKGUsdCxyKXt2YXIgbj1yLmNzcyxhPXIubWVkaWEsaT1yLnNvdXJjZU1hcDtpZihhP2Uuc2V0QXR0cmlidXRlKCJtZWRpYSIsYSk6ZS5yZW1vdmVBdHRyaWJ1dGUoIm1lZGlhIiksaSYmYnRvYSYmKG4rPSJcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoaSkpKSksIiAqLyIpKSxlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9bjtlbHNle2Zvcig7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSl9fXZhciBkPW51bGwscD0wO2Z1bmN0aW9uIG0oZSx0KXt2YXIgcixuLGE7aWYodC5zaW5nbGV0b24pe3ZhciBpPXArKztyPWR8fChkPWwodCkpLG49Zi5iaW5kKG51bGwscixpLCExKSxhPWYuYmluZChudWxsLHIsaSwhMCl9ZWxzZSByPWwodCksbj1oLmJpbmQobnVsbCxyLHQpLGE9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSl7aWYobnVsbD09PWUucGFyZW50Tm9kZSlyZXR1cm4hMTtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9KHIpfTtyZXR1cm4gbihlKSxmdW5jdGlvbih0KXtpZih0KXtpZih0LmNzcz09PWUuY3NzJiZ0Lm1lZGlhPT09ZS5tZWRpYSYmdC5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47bihlPXQpfWVsc2UgYSgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybihyPXJ8fHt9KS5zaW5nbGV0b258fCJib29sZWFuIj09dHlwZW9mIHIuc2luZ2xldG9ufHwoci5zaW5nbGV0b249YSgpKSxlPXIuYmFzZT9lK3IuYmFzZTplLHQ9dHx8W10sb1tlXXx8KG9bZV09W10pLHMoZSx0LHIpLGZ1bmN0aW9uKHQpe2lmKHQ9dHx8W10sIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7b1tlXXx8KG9bZV09W10pLHMoZSx0LHIpO2Zvcih2YXIgbj10Lmxlbmd0aDtuPG9bZV0ubGVuZ3RoO24rKylvW2VdW25dKCk7b1tlXS5sZW5ndGg9dC5sZW5ndGgsMD09PW9bZV0ubGVuZ3RoJiZkZWxldGUgb1tlXX19fX0sZnVuY3Rpb24oZSx0LHIpeyh0PXIoODcpKCExKSkucHVzaChbZS5pLCJib2R5IHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTI1NjU5O1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uUmVhZGVyIHtcbiAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVycyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmc6IDVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU2NTc1OTtcbiAgei1pbmRleDogMTAwO1xufVxuLlJlYWRlcl9fY29udGFpbmVyX19udW1iZXJzX19jb250ZW50IHtcbiAgZm9udC1zaXplOiAwLjY1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ0KTtcbiAgd2lkdGg6IDUwcHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fbmF2aWdhdGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgei1pbmRleDogMTAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA1YTY1O1xufVxuLlJlYWRlcl9fY29udGFpbmVyX19uYXZpZ2F0ZV9fYXJyb3cge1xuICBmb250LXNpemU6IDIuNWVtO1xuICBtYXJnaW46IDEwcHg7XG4gIHdpZHRoOiAxMDBweDtcbiAgbWFyZ2luOiBhdXRvO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDYwcHg7XG4gIHJpZ2h0OiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG4gIHotaW5kZXg6IDEwMTtcbiAgZmxleDogMTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyX19idXR0b24ge1xuICBmb250LXNpemU6IDIuNWVtO1xuICBtYXJnaW46IDU7XG4gIHdpZHRoOiA1MHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX2xvYWQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQge1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmctdG9wOiA0MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQgLnJlYWN0LXBkZl9fRG9jdW1lbnQgc3BhbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX2RvY3VtZW50IC5yZWFjdC1wZGZfX1BhZ2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQgLnJlYWN0LXBkZl9fUGFnZSBjYW52YXMge1xuICBtYXJnaW46IGF1dG87XG59XG4uUmVhZGVyX19jb250YWluZXJfX2RvY3VtZW50IC5yZWFjdC1wZGZfX1BhZ2VfX2Fubm90YXRpb25zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIiJdKSxlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsxXXx8IiIsbj1lWzNdO2lmKCFuKXJldHVybiByO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgYT0obz1uLHM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkobykpKSksbD0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQocyksIi8qIyAiLmNvbmNhdChsLCIgKi8iKSksaT1uLnNvdXJjZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChuLnNvdXJjZVJvb3R8fCIiKS5jb25jYXQoZSwiICovIil9KSk7cmV0dXJuW3JdLmNvbmNhdChpKS5jb25jYXQoW2FdKS5qb2luKCJcbiIpfXZhciBvLHMsbDtyZXR1cm5bcl0uam9pbigiXG4iKX0odCxlKTtyZXR1cm4gdFsyXT8iQG1lZGlhICIuY29uY2F0KHRbMl0sIiB7IikuY29uY2F0KHIsIn0iKTpyfSkpLmpvaW4oIiIpfSx0Lmk9ZnVuY3Rpb24oZSxyKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLCIiXV0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1bXS5jb25jYXQoZVtuXSk7ciYmKGFbMl0/YVsyXT0iIi5jb25jYXQociwiIGFuZCAiKS5jb25jYXQoYVsyXSk6YVsyXT1yKSx0LnB1c2goYSl9fSx0fX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0LHIsbil7dmFyIGE7YT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciBhIGluIGUpci5kKG4sYSxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLGEpKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9IiIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1uLldvcmtlck1lc3NhZ2VIYW5kbGVyfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lldvcmtlck1lc3NhZ2VIYW5kbGVyPXQuV29ya2VyVGFzaz12b2lkIDA7dmFyIG49YyhyKDIpKSxhPXIoNiksaT1yKDE1MSksbz1jKHIoOSkpLHM9cigxODkpLGw9cigxNTUpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuKHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBoKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtoKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtoKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubmFtZT1lLHRoaXMudGVybWluYXRlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQgZmluaXNoZWQoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX0sdGVybWluYXRlOmZ1bmN0aW9uKCl7dGhpcy50ZXJtaW5hdGVkPSEwfSxlbnN1cmVOb3RUZXJtaW5hdGVkOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19LGV9KCk7dC5Xb3JrZXJUYXNrPXA7dmFyIG0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fbXNnSGFuZGxlcj1lLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119ZnVuY3Rpb24gdChlKXt2YXIgdD10aGlzO3RoaXMuX21zZ0hhbmRsZXI9ZSx0aGlzLl9jb250ZW50TGVuZ3RoPW51bGwsdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hMSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMTt2YXIgcj10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTt0aGlzLl9yZWFkZXI9ci5nZXRSZWFkZXIoKSx0aGlzLl9oZWFkZXJzUmVhZHk9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oKGZ1bmN0aW9uKGUpe3QuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPWUuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsdC5faXNSYW5nZVN1cHBvcnRlZD1lLmlzUmFuZ2VTdXBwb3J0ZWQsdC5fY29udGVudExlbmd0aD1lLmNvbnRlbnRMZW5ndGh9KSl9ZnVuY3Rpb24gcihlLHQscil7dGhpcy5fbXNnSGFuZGxlcj1yLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJhbmdlUmVhZGVyIix7YmVnaW46ZSxlbmQ6dH0pO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpfXJldHVybiBlLnByb3RvdHlwZT17Z2V0RnVsbFJlYWRlcjpmdW5jdGlvbigpe3JldHVybigwLGEuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB0KHRoaXMuX21zZ0hhbmRsZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfSxnZXRSYW5nZVJlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyByKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKG4pLG59LGNhbmNlbEFsbFJlcXVlc3RzOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbmNlbChlKX0pKX19LHQucHJvdG90eXBlPXtnZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH0sZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfSxnZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gZS5kb25lP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOnQuYnVmZmVyLGRvbmU6ITF9fSkpfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19LHIucHJvdG90eXBlPXtnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIGUuZG9uZT97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTp0LmJ1ZmZlcixkb25lOiExfX0pKX0sY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fSxlfSgpLHY9e3NldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ITE7ZS5vbigidGVzdCIsKGZ1bmN0aW9uKHQpe2lmKCFyKWlmKHI9ITAsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciBuPTI1NT09PXRbMF07ZS5wb3N0TWVzc2FnZVRyYW5zZmVycz1uO3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdCxpPSJyZXNwb25zZSJpbiBhO3RyeXthLnJlc3BvbnNlVHlwZX1jYXRjaChlKXtpPSExfWk/ZS5zZW5kKCJ0ZXN0Iix7c3VwcG9ydFR5cGVkQXJyYXk6ITAsc3VwcG9ydFRyYW5zZmVyczpufSk6ZS5zZW5kKCJ0ZXN0IiwhMSl9ZWxzZSBlLnNlbmQoInRlc3QiLCExKX0pKSxlLm9uKCJjb25maWd1cmUiLChmdW5jdGlvbihlKXsoMCxhLnNldFZlcmJvc2l0eUxldmVsKShlLnZlcmJvc2l0eSl9KSksZS5vbigiR2V0RG9jUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe3JldHVybiB2LmNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpfSkpfSxjcmVhdGVEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcixvPSExLGM9bnVsbCxoPVtdLG09ZS5hcGlWZXJzaW9uO2lmKCIyLjEuMjY2IiE9PW0pdGhyb3cgbmV3IEVycm9yKCdUaGUgQVBJIHZlcnNpb24gIicuY29uY2F0KG0sJyIgZG9lcyBub3QgbWF0Y2ggJykrJ3RoZSBXb3JrZXIgdmVyc2lvbiAiJy5jb25jYXQoIjIuMS4yNjYiLCciLicpKTt2YXIgdj1lLmRvY0lkLHk9ZS5kb2NCYXNlVXJsLGI9ZS5kb2NJZCsiX3dvcmtlciIsdz1uZXcgcy5NZXNzYWdlSGFuZGxlcihiLHYsdCk7ZnVuY3Rpb24gaygpe2lmKG8pdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBTKGUpe2gucHVzaChlKX1mdW5jdGlvbiBfKGUpe2UuZmluaXNoKCk7dmFyIHQ9aC5pbmRleE9mKGUpO2guc3BsaWNlKHQsMSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWQobi5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIGEsaSxvLHM7cmV0dXJuIG4uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6aWYodCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUubmV4dD05LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIpO2Nhc2UgOTpyZXR1cm4gZS5uZXh0PTExLFByb21pc2UuYWxsKFtyLmVuc3VyZURvYygibnVtUGFnZXMiKSxyLmVuc3VyZURvYygiZmluZ2VycHJpbnQiKV0pO2Nhc2UgMTE6cmV0dXJuIGE9ZS5zZW50LGk9ZihhLDIpLG89aVswXSxzPWlbMV0sZS5hYnJ1cHQoInJldHVybiIse251bVBhZ2VzOm8sZmluZ2VycHJpbnQ6c30pO2Nhc2UgMTY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgcixuPSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksbz1lLnNvdXJjZTtpZihvLmRhdGEpe3RyeXtyPW5ldyBpLkxvY2FsUGRmTWFuYWdlcih2LG8uZGF0YSxvLnBhc3N3b3JkLHQseSksbi5yZXNvbHZlKHIpfWNhdGNoKGUpe24ucmVqZWN0KGUpfXJldHVybiBuLnByb21pc2V9dmFyIHMsbD1bXTt0cnl7cz1uZXcgZyh3KX1jYXRjaChlKXtyZXR1cm4gbi5yZWplY3QoZSksbi5wcm9taXNlfXZhciB1PXMuZ2V0RnVsbFJlYWRlcigpO3UuaGVhZGVyc1JlYWR5LnRoZW4oKGZ1bmN0aW9uKCl7aWYodS5pc1JhbmdlU3VwcG9ydGVkKXt2YXIgZT1vLmRpc2FibGVBdXRvRmV0Y2h8fHUuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7cj1uZXcgaS5OZXR3b3JrUGRmTWFuYWdlcih2LHMse21zZ0hhbmRsZXI6dyxwYXNzd29yZDpvLnBhc3N3b3JkLGxlbmd0aDp1LmNvbnRlbnRMZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDplLHJhbmdlQ2h1bmtTaXplOm8ucmFuZ2VDaHVua1NpemV9LHQseSk7Zm9yKHZhciBhPTA7YTxsLmxlbmd0aDthKyspci5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGxbYV0pO2w9W10sbi5yZXNvbHZlKHIpLGM9bnVsbH19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe24ucmVqZWN0KGUpLGM9bnVsbH0pKTt2YXIgZj0wO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxzKXt1LnJlYWQoKS50aGVuKChmdW5jdGlvbiBlKGgpe3RyeXtpZihrKCksaC5kb25lKXJldHVybiByfHxmdW5jdGlvbigpe3ZhciBlPSgwLGEuYXJyYXlzVG9CeXRlcykobCk7by5sZW5ndGgmJmUubGVuZ3RoIT09by5sZW5ndGgmJigwLGEud2FybikoInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO3RyeXtyPW5ldyBpLkxvY2FsUGRmTWFuYWdlcih2LGUsby5wYXNzd29yZCx0LHkpLG4ucmVzb2x2ZShyKX1jYXRjaChlKXtuLnJlamVjdChlKX1sPVtdfSgpLHZvaWQoYz1udWxsKTt2YXIgZD1oLnZhbHVlO2YrPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKShkKSx1LmlzU3RyZWFtaW5nU3VwcG9ydGVkfHx3LnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOmYsdG90YWw6TWF0aC5tYXgoZix1LmNvbnRlbnRMZW5ndGh8fDApfSkscj9yLnNlbmRQcm9ncmVzc2l2ZURhdGEoZCk6bC5wdXNoKGQpLHUucmVhZCgpLnRoZW4oZSxzKX1jYXRjaChlKXtzKGUpfX0pLHMpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtuLnJlamVjdChlKSxjPW51bGx9KSksYz1mdW5jdGlvbigpe3MuY2FuY2VsQWxsUmVxdWVzdHMoImFib3J0Iil9LG4ucHJvbWlzZX1yZXR1cm4gdy5wb3N0TWVzc2FnZVRyYW5zZmVycz1lLnBvc3RNZXNzYWdlVHJhbnNmZXJzLHcub24oIkdldFBhZ2UiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlKGUsInJvdGF0ZSIpLHIuZW5zdXJlKGUsInJlZiIpLHIuZW5zdXJlKGUsInVzZXJVbml0Iiksci5lbnN1cmUoZSwidmlldyIpXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZihlLDQpO3JldHVybntyb3RhdGU6dFswXSxyZWY6dFsxXSx1c2VyVW5pdDp0WzJdLHZpZXc6dFszXX19KSl9KSl9KSksdy5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGwuUmVmKGUucmVmLm51bSxlLnJlZi5nZW4pO3JldHVybiByLnBkZkRvY3VtZW50LmNhdGFsb2cuZ2V0UGFnZUluZGV4KHQpfSkpLHcub24oIkdldERlc3RpbmF0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImRlc3RpbmF0aW9ucyIpfSkpLHcub24oIkdldERlc3RpbmF0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygiZ2V0RGVzdGluYXRpb24iLFtlLmlkXSl9KSksdy5vbigiR2V0UGFnZUxhYmVscyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYWJlbHMiKX0pKSx3Lm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksdy5vbigiZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbkRlc3RpbmF0aW9uIil9KSksdy5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLHcub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksdy5vbigiR2V0T3V0bGluZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImRvY3VtZW50T3V0bGluZSIpfSkpLHcub24oIkdldFBlcm1pc3Npb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pKSx3Lm9uKCJHZXRNZXRhZGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoImRvY3VtZW50SW5mbyIpLHIuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pfSkpLHcub24oIkdldERhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCksci5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJ5dGVzfSkpfSkpLHcub24oIkdldFN0YXRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIucGRmRG9jdW1lbnQueHJlZi5zdGF0c30pKSx3Lm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBbm5vdGF0aW9uc0RhdGEobil9KSl9KSksdy5vbigiUmVuZGVyUGFnZVJlcXVlc3QiLChmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VJbmRleDtyLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG49bmV3IHAoIlJlbmRlclBhZ2VSZXF1ZXN0OiBwYWdlICIrdCk7UyhuKTt2YXIgaT10KzEsbz1EYXRlLm5vdygpO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOncsdGFzazpuLGludGVudDplLmludGVudCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOmUucmVuZGVySW50ZXJhY3RpdmVGb3Jtc30pLnRoZW4oKGZ1bmN0aW9uKGUpe18obiksKDAsYS5pbmZvKSgicGFnZT0iK2krIiAtIGdldE9wZXJhdG9yTGlzdDogdGltZT0iKyhEYXRlLm5vdygpLW8pKyJtcywgbGVuPSIrZS50b3RhbExlbmd0aCl9KSwoZnVuY3Rpb24odCl7aWYoXyhuKSwhbi50ZXJtaW5hdGVkKXt3LnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd259KTt2YXIgcixvPSJ3b3JrZXIuanM6IHdoaWxlIHRyeWluZyB0byBnZXRQYWdlKCkgYW5kIGdldE9wZXJhdG9yTGlzdCgpIjtyPSJzdHJpbmciPT10eXBlb2YgdD97bWVzc2FnZTp0LHN0YWNrOm99OiJvYmplY3QiPT09dSh0KT97bWVzc2FnZTp0Lm1lc3NhZ2V8fHQudG9TdHJpbmcoKSxzdGFjazp0LnN0YWNrfHxvfTp7bWVzc2FnZToiVW5rbm93biBleGNlcHRpb24gdHlwZTogIit1KHQpLHN0YWNrOm99LHcuc2VuZCgiUGFnZUVycm9yIix7cGFnZU51bTppLGVycm9yOnIsaW50ZW50OmUuaW50ZW50fSl9fSkpfSkpfSksdGhpcyksdy5vbigiR2V0VGV4dENvbnRlbnQiLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucGFnZUluZGV4O3Qub25QdWxsPWZ1bmN0aW9uKGUpe30sdC5vbkNhbmNlbD1mdW5jdGlvbihlKXt9LHIuZ2V0UGFnZShuKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgcCgiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIituKTtTKGkpO3ZhciBvPW4rMSxzPURhdGUubm93KCk7ci5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6dyx0YXNrOmksc2luazp0LG5vcm1hbGl6ZVdoaXRlc3BhY2U6ZS5ub3JtYWxpemVXaGl0ZXNwYWNlLGNvbWJpbmVUZXh0SXRlbXM6ZS5jb21iaW5lVGV4dEl0ZW1zfSkudGhlbigoZnVuY3Rpb24oKXtfKGkpLCgwLGEuaW5mbykoInRleHQgaW5kZXhpbmc6IHBhZ2U9IitvKyIgLSB0aW1lPSIrKERhdGUubm93KCktcykrIm1zIiksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2lmKF8oaSksIWkudGVybWluYXRlZCl0aHJvdyB0LmVycm9yKGUpLGV9KSl9KSl9KSksdy5vbigiRm9udEZhbGxiYWNrIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZm9udEZhbGxiYWNrKGUuaWQsdyl9KSksdy5vbigiQ2xlYW51cCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmNsZWFudXAoKX0pKSx3Lm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXtvPSEwLHImJihyLnRlcm1pbmF0ZSgpLHI9bnVsbCksYyYmYygpO3ZhciB0PVtdO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlLmZpbmlzaGVkKSxlLnRlcm1pbmF0ZSgpfSkpLFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7dy5kZXN0cm95KCksdz1udWxsfSkpfSkpLHcub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aygpLHcuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gbihlKXtpZihrKCksZSBpbnN0YW5jZW9mIGEuUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyBwKCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIitlLmNvZGUpO1ModCksdy5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oZSl7Xyh0KSxyLnVwZGF0ZVBhc3N3b3JkKGUucGFzc3dvcmQpLGkoKX0pKS5jYXRjaChmdW5jdGlvbihlKXtfKHQpLHcuc2VuZCgiUGFzc3dvcmRFeGNlcHRpb24iLGUpfS5iaW5kKG51bGwsZSkpfWVsc2UgZSBpbnN0YW5jZW9mIGEuSW52YWxpZFBERkV4Y2VwdGlvbj93LnNlbmQoIkludmFsaWRQREYiLGUpOmUgaW5zdGFuY2VvZiBhLk1pc3NpbmdQREZFeGNlcHRpb24/dy5zZW5kKCJNaXNzaW5nUERGIixlKTplIGluc3RhbmNlb2YgYS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24/dy5zZW5kKCJVbmV4cGVjdGVkUmVzcG9uc2UiLGUpOncuc2VuZCgiVW5rbm93bkVycm9yIixuZXcgYS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSkpfWZ1bmN0aW9uIGkoKXtrKCkseCghMSkudGhlbih0LChmdW5jdGlvbihlKXtrKCksZSBpbnN0YW5jZW9mIGEuWFJlZlBhcnNlRXhjZXB0aW9uPyhyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLm9uTG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtrKCkseCghMCkudGhlbih0LG4pfSkpKTpuKGUpfSksbil9aygpLEMoZSx7Zm9yY2VEYXRhU2NoZW1hOmUuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxtYXhJbWFnZVNpemU6ZS5tYXhJbWFnZVNpemUsZGlzYWJsZUZvbnRGYWNlOmUuZGlzYWJsZUZvbnRGYWNlLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6ZS5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0LGlnbm9yZUVycm9yczplLmlnbm9yZUVycm9ycyxpc0V2YWxTdXBwb3J0ZWQ6ZS5pc0V2YWxTdXBwb3J0ZWR9KS50aGVuKChmdW5jdGlvbihlKXtpZihvKXRocm93IGUudGVybWluYXRlKCksbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKTsocj1lKS5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3cuc2VuZCgiRGF0YUxvYWRlZCIse2xlbmd0aDplLmJ5dGVzLmJ5dGVMZW5ndGh9KX0pKX0pKS50aGVuKGksbil9KGUpLGU9bnVsbH0pKSxifSxpbml0aWFsaXplRnJvbVBvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMuTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO3Yuc2V0dXAodCxlKSx0LnNlbmQoInJlYWR5IixudWxsKX19O3QuV29ya2VyTWVzc2FnZUhhbmRsZXI9diwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmISgwLG8uZGVmYXVsdCkoKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YobT1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBtJiZ2LmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cigzKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmPyJ1bmRlZmluZWQiOm4oc2VsZikpJiZzZWxmfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGk9YS5yZWdlbmVyYXRvclJ1bnRpbWUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmluZGV4T2YoInJlZ2VuZXJhdG9yUnVudGltZSIpPj0wLG89aSYmYS5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoYS5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwLGUuZXhwb3J0cz1yKDQpLGkpYS5yZWdlbmVyYXRvclJ1bnRpbWU9bztlbHNlIHRyeXtkZWxldGUgYS5yZWdlbmVyYXRvclJ1bnRpbWV9Y2F0Y2goZSl7YS5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4odD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLGE9bi5oYXNPd25Qcm9wZXJ0eSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixsPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIixjPSJvYmplY3QiPT09dChlKSx1PXIucmVnZW5lcmF0b3JSdW50aW1lO2lmKHUpYyYmKGUuZXhwb3J0cz11KTtlbHNleyh1PXIucmVnZW5lcmF0b3JSdW50aW1lPWM/ZS5leHBvcnRzOnt9KS53cmFwPWc7dmFyIGY9e30saD17fTtoW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZixwPWQmJmQoZChQKFtdKSkpO3AmJnAhPT1uJiZhLmNhbGwocCxvKSYmKGg9cCk7dmFyIG09dy5wcm90b3R5cGU9eS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoKTtiLnByb3RvdHlwZT1tLmNvbnN0cnVjdG9yPXcsdy5jb25zdHJ1Y3Rvcj1iLHdbbF09Yi5kaXNwbGF5TmFtZT0iR2VuZXJhdG9yRnVuY3Rpb24iLHUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Ynx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sdS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdyk6KGUuX19wcm90b19fPXcsbCBpbiBlfHwoZVtsXT0iR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtKSxlfSx1LmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxTLnByb3RvdHlwZVtzXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx1LkFzeW5jSXRlcmF0b3I9Uyx1LmFzeW5jPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBTKGcoZSx0LHIsbikpO3JldHVybiB1LmlzR2VuZXJhdG9yRnVuY3Rpb24odCk/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6YS5uZXh0KCl9KSl9LGsobSksbVtsXT0iR2VuZXJhdG9yIixtW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0sdS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LHUudmFsdWVzPVAsQy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChBKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmYS5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gcigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9YS5jYWxsKGksImNhdGNoTG9jIiksbD1hLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJmEuY2FsbChuLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxuLmZpbmFsbHlMb2Mpe3ZhciBpPW47YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQShyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Eocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX19ZnVuY3Rpb24gZyhlLHQscixuKXt2YXIgYT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHk/dDp5LGk9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbz1uZXcgQyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPV8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPXYoZSx0LHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19KGUscixvKSxpfWZ1bmN0aW9uIHYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gdygpe31mdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9fSkpfWZ1bmN0aW9uIFMoZSl7dmFyIHI7dGhpcy5faW52b2tlPWZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24gcihuLGksbyxzKXt2YXIgbD12KGVbbl0sZSxpKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgYz1sLmFyZyx1PWMudmFsdWU7cmV0dXJuIHUmJiJvYmplY3QiPT09dCh1KSYmYS5jYWxsKHUsIl9fYXdhaXQiKT9Qcm9taXNlLnJlc29sdmUodS5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtyKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7cigidGhyb3ciLGUsbyxzKX0pKTpQcm9taXNlLnJlc29sdmUodSkudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLG8oYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIoInRocm93IixlLG8scyl9KSl9cyhsLmFyZyl9KG4saSxyLG8pfSkpfXJldHVybiByPXI/ci50aGVuKG8sbyk6bygpfX1mdW5jdGlvbiBfKGUsdCl7dmFyIHI9ZS5pdGVyYXRvclt0Lm1ldGhvZF07aWYodm9pZCAwPT09cil7aWYodC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT10Lm1ldGhvZCl7aWYoZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsXyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCkpcmV0dXJuIGY7dC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIGZ9dmFyIG49dihyLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1uLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bi5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGE9bi5hcmc7cmV0dXJuIGE/YS5kb25lPyh0W2UucmVzdWx0TmFtZV09YS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6YToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiB4KGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEMoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgcj0tMSxuPWZ1bmN0aW9uIHQoKXtmb3IoOysrcjxlLmxlbmd0aDspaWYoYS5jYWxsKGUscikpcmV0dXJuIHQudmFsdWU9ZVtyXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBuLm5leHQ9bn19cmV0dXJue25leHQ6RX19ZnVuY3Rpb24gRSgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fShmdW5jdGlvbigpe3JldHVybiB0aGlzfHwib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/InVuZGVmaW5lZCI6dChzZWxmKSkmJnNlbGZ9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkpfSkuY2FsbCh0aGlzLHIoNSkoZSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudG9Sb21hbk51bWVyYWxzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtmb3IodmFyIHIsbj1bXTtlPj0xZTM7KWUtPTFlMyxuLnB1c2goIk0iKTtyPWUvMTAwfDAsZSU9MTAwLG4ucHVzaChDW3JdKSxyPWUvMTB8MCxlJT0xMCxuLnB1c2goQ1sxMCtyXSksbi5wdXNoKENbMjArZV0pO3ZhciBhPW4uam9pbigiIik7cmV0dXJuIHQ/YS50b0xvd2VyQ2FzZSgpOmF9LHQuYXJyYXlCeXRlTGVuZ3RoPV8sdC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKGUpe2lmKDE9PT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTt2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKXI9ZVt0XSxuPV8ociksYSs9bjt2YXIgbz0wLHM9bmV3IFVpbnQ4QXJyYXkoYSk7Zm9yKHQ9MDt0PGk7dCsrKShyPWVbdF0paW5zdGFuY2VvZiBVaW50OEFycmF5fHwocj0ic3RyaW5nIj09dHlwZW9mIHI/UyhyKTpuZXcgVWludDhBcnJheShyKSksbj1yLmJ5dGVMZW5ndGgscy5zZXQocixvKSxvKz1uO3JldHVybiBzfSx0LmFzc2VydD11LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXt1KG51bGwhPT1lJiYib2JqZWN0Ij09PWkoZSkmJnZvaWQgMCE9PWUubGVuZ3RoLCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIHQ9ZS5sZW5ndGg7aWYodDw4MTkyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Zm9yKHZhciByPVtdLG49MDtuPHQ7bis9ODE5Mil7dmFyIGE9TWF0aC5taW4obis4MTkyLHQpLG89ZS5zdWJhcnJheShuLGEpO3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbykpfXJldHVybiByLmpvaW4oIiIpfSx0LmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PSExO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0dGxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLGUucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtlLnJlc29sdmU9ZnVuY3Rpb24oZSl7dD0hMCxyKGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXt0PSEwLG4oZSl9fSkpLGV9LHQuZGVwcmVjYXRlZD1mdW5jdGlvbihlKXtjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIrZSl9LHQuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmRpY3Qsbj1lLmtleSxhPWUuZ2V0QXJyYXksaT12b2lkIDAhPT1hJiZhLG89ZS5zdG9wV2hlbkZvdW5kLHM9dm9pZCAwPT09b3x8byxjPTA7cjspe3ZhciB1PWk/ci5nZXRBcnJheShuKTpyLmdldChuKTtpZih2b2lkIDAhPT11KXtpZihzKXJldHVybiB1O3R8fCh0PVtdKSx0LnB1c2godSl9aWYoKytjPjEwMCl7bCgnZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTogbWF4aW11bSBsb29wIGNvdW50IGV4Y2VlZGVkIGZvciAiJy5jb25jYXQobiwnIicpKTticmVha31yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH0sdC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUmJih0PU9iamVjdC5jcmVhdGUobnVsbCksZSh0KSxlPW51bGwpLHR9fSx0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuaW5mbz1mdW5jdGlvbihlKXtzPj1vLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIitlKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09aShlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sdC5pc0VtcHR5T2JqPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSx0LmlzTnVtPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sdC5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LHQuaXNTcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTM9PT1lfHwxMD09PWV9LHQuaXNTYW1lT3JpZ2luPWZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciByPW5ldyBhLlVSTChlKTtpZighci5vcmlnaW58fCJudWxsIj09PXIub3JpZ2luKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfXZhciBuPW5ldyBhLlVSTCh0LHIpO3JldHVybiByLm9yaWdpbj09PW4ub3JpZ2lufSx0LmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHI9dD9uZXcgYS5VUkwoZSx0KTpuZXcgYS5VUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0ocikpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmlzTGl0dGxlRW5kaWFuPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCk7cmV0dXJuIGVbMF09MSwxPT09bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsMSlbMF19LHQuaXNFdmFsU3VwcG9ydGVkPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sdC5sb2cyPWZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6TWF0aC5jZWlsKE1hdGgubG9nMihlKSl9LHQucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fSx0LnJlYWRVaW50MTY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8OHxlW3QrMV19LHQucmVhZFVpbnQzMj1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH0sdC5yZW1vdmVOdWxsQ2hhcmFjdGVycz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/KGwoIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4iKSxlKTplLnJlcGxhY2UoaywiIil9LHQuc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHM9ZSl9LHQuc2hhZG93PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9LHQuc3RyaW5nMzI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9LHQuc3RyaW5nVG9CeXRlcz1TLHQuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aCxuPVtdO2lmKCLDviI9PT1lWzBdJiYiw78iPT09ZVsxXSlmb3IodD0yO3Q8cjt0Kz0yKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCh0KTw8OHxlLmNoYXJDb2RlQXQodCsxKSkpO2Vsc2UgZm9yKHQ9MDt0PHI7Kyt0KXt2YXIgYT1QW2UuY2hhckNvZGVBdCh0KV07bi5wdXNoKGE/U3RyaW5nLmZyb21DaGFyQ29kZShhKTplLmNoYXJBdCh0KSl9cmV0dXJuIG4uam9pbigiIil9LHQuc3RyaW5nVG9VVEY4U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX0sdC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9LHQud2Fybj1sLHQudW5yZWFjaGFibGU9YyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVhZGFibGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlJlYWRhYmxlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVUkwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlVSTH19KSx0LmNyZWF0ZU9iamVjdFVSTD10LkZvcm1hdEVycm9yPXQuWFJlZlBhcnNlRXhjZXB0aW9uPXQuWFJlZkVudHJ5RXhjZXB0aW9uPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlRleHRSZW5kZXJpbmdNb2RlPXQuU3RyZWFtVHlwZT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTWlzc2luZ0RhdGFFeGNlcHRpb249dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuQWJvcnRFeGNlcHRpb249dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuSW1hZ2VLaW5kPXQuRm9udFR5cGU9dC5Bbm5vdGF0aW9uVHlwZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz10LlZlcmJvc2l0eUxldmVsPXQuT1BTPXQuSURFTlRJVFlfTUFUUklYPXQuRk9OVF9JREVOVElUWV9NQVRSSVg9dm9pZCAwLHIoNyk7dmFyIG49cigxNDcpLGE9cigxNDkpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX10LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLHQuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9e05PTkU6Im5vbmUiLERFQ09ERToiZGVjb2RlIixESVNQTEFZOiJkaXNwbGF5In0sdC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSx0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9LHQuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M30sdC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9LHQuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LHQuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sdC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSx0LlN0cmVhbVR5cGU9e1VOS05PV046MCxGTEFURToxLExaVzoyLERDVDozLEpQWDo0LEpCSUc6NSxBODU6NixBSFg6NyxDQ0Y6OCxSTDo5fSx0LkZvbnRUeXBlPXtVTktOT1dOOjAsVFlQRTE6MSxUWVBFMUM6MixDSURGT05UVFlQRTA6MyxDSURGT05UVFlQRTBDOjQsVFJVRVRZUEU6NSxDSURGT05UVFlQRTI6NixUWVBFMzo3LE9QRU5UWVBFOjgsVFlQRTA6OSxNTVRZUEUxOjEwfTt2YXIgbz17RVJST1JTOjAsV0FSTklOR1M6MSxJTkZPUzo1fTt0LlZlcmJvc2l0eUxldmVsPW8sdC5DTWFwQ29tcHJlc3Npb25UeXBlPXtOT05FOjAsQklOQVJZOjEsU1RSRUFNOjJ9LHQuT1BTPXtkZXBlbmRlbmN5OjEsc2V0TGluZVdpZHRoOjIsc2V0TGluZUNhcDozLHNldExpbmVKb2luOjQsc2V0TWl0ZXJMaW1pdDo1LHNldERhc2g6NixzZXRSZW5kZXJpbmdJbnRlbnQ6NyxzZXRGbGF0bmVzczo4LHNldEdTdGF0ZTo5LHNhdmU6MTAscmVzdG9yZToxMSx0cmFuc2Zvcm06MTIsbW92ZVRvOjEzLGxpbmVUbzoxNCxjdXJ2ZVRvOjE1LGN1cnZlVG8yOjE2LGN1cnZlVG8zOjE3LGNsb3NlUGF0aDoxOCxyZWN0YW5nbGU6MTksc3Ryb2tlOjIwLGNsb3NlU3Ryb2tlOjIxLGZpbGw6MjIsZW9GaWxsOjIzLGZpbGxTdHJva2U6MjQsZW9GaWxsU3Ryb2tlOjI1LGNsb3NlRmlsbFN0cm9rZToyNixjbG9zZUVPRmlsbFN0cm9rZToyNyxlbmRQYXRoOjI4LGNsaXA6MjksZW9DbGlwOjMwLGJlZ2luVGV4dDozMSxlbmRUZXh0OjMyLHNldENoYXJTcGFjaW5nOjMzLHNldFdvcmRTcGFjaW5nOjM0LHNldEhTY2FsZTozNSxzZXRMZWFkaW5nOjM2LHNldEZvbnQ6Mzcsc2V0VGV4dFJlbmRlcmluZ01vZGU6Mzgsc2V0VGV4dFJpc2U6MzksbW92ZVRleHQ6NDAsc2V0TGVhZGluZ01vdmVUZXh0OjQxLHNldFRleHRNYXRyaXg6NDIsbmV4dExpbmU6NDMsc2hvd1RleHQ6NDQsc2hvd1NwYWNlZFRleHQ6NDUsbmV4dExpbmVTaG93VGV4dDo0NixuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDo0NyxzZXRDaGFyV2lkdGg6NDgsc2V0Q2hhcldpZHRoQW5kQm91bmRzOjQ5LHNldFN0cm9rZUNvbG9yU3BhY2U6NTAsc2V0RmlsbENvbG9yU3BhY2U6NTEsc2V0U3Ryb2tlQ29sb3I6NTIsc2V0U3Ryb2tlQ29sb3JOOjUzLHNldEZpbGxDb2xvcjo1NCxzZXRGaWxsQ29sb3JOOjU1LHNldFN0cm9rZUdyYXk6NTYsc2V0RmlsbEdyYXk6NTcsc2V0U3Ryb2tlUkdCQ29sb3I6NTgsc2V0RmlsbFJHQkNvbG9yOjU5LHNldFN0cm9rZUNNWUtDb2xvcjo2MCxzZXRGaWxsQ01ZS0NvbG9yOjYxLHNoYWRpbmdGaWxsOjYyLGJlZ2luSW5saW5lSW1hZ2U6NjMsYmVnaW5JbWFnZURhdGE6NjQsZW5kSW5saW5lSW1hZ2U6NjUscGFpbnRYT2JqZWN0OjY2LG1hcmtQb2ludDo2NyxtYXJrUG9pbnRQcm9wczo2OCxiZWdpbk1hcmtlZENvbnRlbnQ6NjksYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6NzAsZW5kTWFya2VkQ29udGVudDo3MSxiZWdpbkNvbXBhdDo3MixlbmRDb21wYXQ6NzMscGFpbnRGb3JtWE9iamVjdEJlZ2luOjc0LHBhaW50Rm9ybVhPYmplY3RFbmQ6NzUsYmVnaW5Hcm91cDo3NixlbmRHcm91cDo3NyxiZWdpbkFubm90YXRpb25zOjc4LGVuZEFubm90YXRpb25zOjc5LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SnBlZ1hPYmplY3Q6ODIscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXt1bmtub3duOiJ1bmtub3duIixmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixmb250OiJmb250In0sdC5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgcz1vLldBUk5JTkdTO2Z1bmN0aW9uIGwoZSl7cz49by5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIrZSl9ZnVuY3Rpb24gYyhlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gdShlLHQpe2V8fGModCl9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJQYXNzd29yZEV4Y2VwdGlvbiIsdGhpcy5tZXNzYWdlPWUsdGhpcy5jb2RlPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlBhc3N3b3JkRXhjZXB0aW9uPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmtub3duRXJyb3JFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuZGV0YWlscz10fXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5uYW1lPSJJbnZhbGlkUERGRXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuSW52YWxpZFBERkV4Y2VwdGlvbj1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9Ik1pc3NpbmdQREZFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5NaXNzaW5nUERGRXhjZXB0aW9uPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhdHVzPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuYmVnaW49ZSx0aGlzLmVuZD10LHRoaXMubWVzc2FnZT0iTWlzc2luZyBkYXRhIFsiK2UrIiwgIit0KyIpIn1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9Ik1pc3NpbmdEYXRhRXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPWc7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT0iWFJlZkVudHJ5RXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlhSZWZQYXJzZUV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5YUmVmUGFyc2VFeGNlcHRpb249eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPWV9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJGb3JtYXRFcnJvciIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Gb3JtYXRFcnJvcj1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9IkFib3J0RXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuQWJvcnRFeGNlcHRpb249dzt2YXIgaz0vXHgwMC9nO2Z1bmN0aW9uIFMoZSl7dSgic3RyaW5nIj09dHlwZW9mIGUsIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgVWludDhBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdm9pZCAwIT09ZS5sZW5ndGg/ZS5sZW5ndGg6KHUodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKSxlLmJ5dGVMZW5ndGgpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe312YXIgdD1bInJnYigiLDAsIiwiLDAsIiwiLDAsIikiXTtyZXR1cm4gZS5tYWtlQ3NzUmdiPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFsxXT1lLHRbM109cix0WzVdPW4sdC5qb2luKCIiKX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX0sZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX0sZS5hcHBseUludmVyc2VUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX0sZS5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX0sZS5pbnZlcnNlVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX0sZS5hcHBseTNkVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdLGVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdLGVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdXX0sZS5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydCgocitpKSoocitpKS00KihyKmktYSpuKSkvMixsPW8rc3x8MSxjPW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydChjKV19LGUubm9ybWFsaXplUmVjdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKDApO3JldHVybiBlWzBdPmVbMl0mJih0WzBdPWVbMl0sdFsyXT1lWzBdKSxlWzFdPmVbM10mJih0WzFdPWVbM10sdFszXT1lWzFdKSx0fSxlLmludGVyc2VjdD1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS10fXZhciBhPVt0WzBdLHRbMl0sclswXSxyWzJdXS5zb3J0KG4pLGk9W3RbMV0sdFszXSxyWzFdLHJbM11dLnNvcnQobiksbz1bXTtyZXR1cm4gdD1lLm5vcm1hbGl6ZVJlY3QodCkscj1lLm5vcm1hbGl6ZVJlY3QociksKGFbMF09PT10WzBdJiZhWzFdPT09clswXXx8YVswXT09PXJbMF0mJmFbMV09PT10WzBdKSYmKG9bMF09YVsxXSxvWzJdPWFbMl0sKGlbMF09PT10WzFdJiZpWzFdPT09clsxXXx8aVswXT09PXJbMV0mJmlbMV09PT10WzFdKSYmKG9bMV09aVsxXSxvWzNdPWlbMl0sbykpfSxlfSgpO3QuVXRpbD14O3ZhciBBLEM9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXSxQPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XSxFPShBPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCFyJiZhLlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBuPW5ldyBCbG9iKFtlXSx7dHlwZTp0fSk7cmV0dXJuIGEuVVJMLmNyZWF0ZU9iamVjdFVSTChuKX1mb3IodmFyIGk9ImRhdGE6Iit0KyI7YmFzZTY0LCIsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTMpe3ZhciBsPTI1NSZlW29dLGM9MjU1JmVbbysxXSx1PTI1NSZlW28rMl0sZj1sPj4yLGg9KDMmbCk8PDR8Yz4+NCxkPW8rMTxzPygxNSZjKTw8Mnx1Pj42OjY0LHA9bysyPHM/NjMmdTo2NDtpKz1BW2ZdK0FbaF0rQVtkXStBW3BdfXJldHVybiBpfSk7dC5jcmVhdGVPYmplY3RVUkw9RX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGUpe3JldHVybihhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGk9big4KTtpZighaS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZCl7aS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMDt2YXIgbz1uKDkpLHM9Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6YSh3aW5kb3cpKSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudD8idW5kZWZpbmVkIjphKGRvY3VtZW50KSk7IWkuYnRvYSYmbygpJiYoaS5idG9hPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWkuYXRvYiYmbygpJiYoaS5hdG9iPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSkscyYmdm9pZCAwPT09RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlJiYoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxmdW5jdGlvbigpe2lmKHMmJiFvKCkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGUuY2xhc3NMaXN0LmFkZCgidGVzdE9uZSIsInRlc3RUd28iKSwhMCE9PWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZXN0T25lIil8fCEwIT09ZS5jbGFzc0xpc3QuY29udGFpbnMoInRlc3RUd28iKSl7dmFyIHQ9RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQscj1ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO3QuY2FsbCh0aGlzLGkpfX0sRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtyLmNhbGwodGhpcyxpKX19fX19KCkscyYmIW8oKSYmITEhPT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5jbGFzc0xpc3QudG9nZ2xlKCJ0ZXN0IiwwKSYmKERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT8hIWFyZ3VtZW50c1sxXTohdGhpcy5jb250YWlucyhlKTtyZXR1cm4gdGhpc1t0PyJhZGQiOiJyZW1vdmUiXShlKSx0fSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHxuKDEwKSxTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRofHxuKDQwKSxTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzfHxuKDQyKSxBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fG4oNDQpLEFycmF5LmZyb218fG4oNTEpLE9iamVjdC5hc3NpZ258fG4oNzQpLE1hdGgubG9nMnx8KE1hdGgubG9nMj1uKDc5KSksTnVtYmVyLmlzTmFOfHwoTnVtYmVyLmlzTmFOPW4oODEpKSxOdW1iZXIuaXNJbnRlZ2VyfHwoTnVtYmVyLmlzSW50ZWdlcj1uKDgzKSksaS5Qcm9taXNlJiZpLlByb21pc2UucHJvdG90eXBlJiZpLlByb21pc2UucHJvdG90eXBlLmZpbmFsbHl8fChpLlByb21pc2U9big4NikpLGkuV2Vha01hcHx8KGkuV2Vha01hcD1uKDEwNikpLGkuV2Vha1NldHx8KGkuV2Vha1NldD1uKDEyMykpLFN0cmluZy5jb2RlUG9pbnRBdHx8KFN0cmluZy5jb2RlUG9pbnRBdD1uKDEyNykpLFN0cmluZy5mcm9tQ29kZVBvaW50fHwoU3RyaW5nLmZyb21Db2RlUG9pbnQ9bigxMjkpKSxpLlN5bWJvbHx8bigxMzEpLFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnR8fG4oMTM4KSxTdHJpbmcucHJvdG90eXBlLnBhZEVuZHx8bigxNDIpLE9iamVjdC52YWx1ZXN8fChPYmplY3QudmFsdWVzPW4oMTQ0KSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PT1NYXRoP3dpbmRvdzp2b2lkIDAhPT1yJiZyLk1hdGg9PT1NYXRoP3I6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PT1NYXRoP3NlbGY6e319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4oYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6YShuKSkmJm4rIiI9PSJbb2JqZWN0IHByb2Nlc3NdIiYmIW4udmVyc2lvbnMubnd9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTEpLGUuZXhwb3J0cz1yKDE0KS5TdHJpbmcuc3RhcnRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMzApLGk9cigzMiksbz0iIi5zdGFydHNXaXRoO24obi5QK24uRipyKDM5KSgic3RhcnRzV2l0aCIpLCJTdHJpbmciLHtzdGFydHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWkodGhpcyxlLCJzdGFydHNXaXRoIikscj1hKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQubGVuZ3RoKSksbj1TdHJpbmcoZSk7cmV0dXJuIG8/by5jYWxsKHQsbixyKTp0LnNsaWNlKHIscituLmxlbmd0aCk9PT1ufX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLGE9cigxNCksaT1yKDE1KSxvPXIoMjUpLHM9cigyOCksbD1mdW5jdGlvbiBlKHQscixsKXt2YXIgYyx1LGYsaCxkPXQmZS5GLHA9dCZlLkcsbT10JmUuUCxnPXQmZS5CLHY9cD9uOnQmZS5TP25bcl18fChuW3JdPXt9KToobltyXXx8e30pLnByb3RvdHlwZSx5PXA/YTphW3JdfHwoYVtyXT17fSksYj15LnByb3RvdHlwZXx8KHkucHJvdG90eXBlPXt9KTtmb3IoYyBpbiBwJiYobD1yKSxsKWY9KCh1PSFkJiZ2JiZ2b2lkIDAhPT12W2NdKT92OmwpW2NdLGg9ZyYmdT9zKGYsbik6bSYmImZ1bmN0aW9uIj09dHlwZW9mIGY/cyhGdW5jdGlvbi5jYWxsLGYpOmYsdiYmbyh2LGMsZix0JmUuVSkseVtjXSE9ZiYmaSh5LGMsaCksbSYmYltjXSE9ZiYmKGJbY109Zil9O24uY29yZT1hLGwuRj0xLGwuRz0yLGwuUz00LGwuUD04LGwuQj0xNixsLlc9MzIsbC5VPTY0LGwuUj0xMjgsZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi42LjIifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE2KSxhPXIoMjQpO2UuZXhwb3J0cz1yKDIwKT9mdW5jdGlvbihlLHQscil7cmV0dXJuIG4uZihlLHQsYSgxLHIpKX06ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXIsZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNyksYT1yKDE5KSxpPXIoMjMpLG89T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1yKDIwKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2lmKG4oZSksdD1pKHQsITApLG4ociksYSl0cnl7cmV0dXJuIG8oZSx0LHIpfWNhdGNoKGUpe31pZigiZ2V0ImluIHJ8fCJzZXQiaW4gcil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiByJiYoZVt0XT1yLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09bihlKT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSFyKDIwKSYmIXIoMjEpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigyMikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IXIoMjEpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KSxhPXIoMTMpLmRvY3VtZW50LGk9bihhKSYmbihhLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9hLmNyZWF0ZUVsZW1lbnQoZSk6e319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFuKGUpKXJldHVybiBlO3ZhciByLGE7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKHI9ZS50b1N0cmluZykmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTtpZigiZnVuY3Rpb24iPT10eXBlb2Yocj1lLnZhbHVlT2YpJiYhbihhPXIuY2FsbChlKSkpcmV0dXJuIGE7aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihyPWUudG9TdHJpbmcpJiYhbihhPXIuY2FsbChlKSkpcmV0dXJuIGE7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTUpLGk9cigyNiksbz1yKDI3KSgic3JjIikscz1GdW5jdGlvbi50b1N0cmluZyxsPSgiIitzKS5zcGxpdCgidG9TdHJpbmciKTtyKDE0KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHI7YyYmKGkociwibmFtZSIpfHxhKHIsIm5hbWUiLHQpKSxlW3RdIT09ciYmKGMmJihpKHIsbyl8fGEocixvLGVbdF0/IiIrZVt0XTpsLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1uP2VbdF09cjpzP2VbdF0/ZVt0XT1yOmEoZSx0LHIpOihkZWxldGUgZVt0XSxhKGUsdCxyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHMuY2FsbCh0aGlzKX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPTAsYT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rYSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0LHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUuY2FsbCh0LHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGEpe3JldHVybiBlLmNhbGwodCxyLG4sYSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP2EobihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1NYXRoLmNlaWwsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP2E6bikoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzMpLGE9cigzOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrcisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigzNCksaT1yKDM1KSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJih2b2lkIDAhPT0odD1lW2ldKT8hIXQ6IlJlZ0V4cCI9PWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzNikoIndrcyIpLGE9cigyNyksaT1yKDEzKS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgaTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHwobltlXT1vJiZpW2VdfHwobz9pOmEpKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1ufSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpLGE9cigxMyksaT1hWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KGFbIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnIoMzcpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSExfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5eyIvLi8iW2VdKHQpfWNhdGNoKHIpe3RyeXtyZXR1cm4gdFtuXT0hMSwhIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig0MSksZS5leHBvcnRzPXIoMTQpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMzApLGk9cigzMiksbz0iIi5lbmRzV2l0aDtuKG4uUCtuLkYqcigzOSkoImVuZHNXaXRoIiksIlN0cmluZyIse2VuZHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWkodGhpcyxlLCJlbmRzV2l0aCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbj1hKHQubGVuZ3RoKSxzPXZvaWQgMD09PXI/bjpNYXRoLm1pbihhKHIpLG4pLGw9U3RyaW5nKGUpO3JldHVybiBvP28uY2FsbCh0LGwscyk6dC5zbGljZShzLWwubGVuZ3RoLHMpPT09bH19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDQzKSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmluY2x1ZGVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigzMik7bihuLlArbi5GKnIoMzkpKCJpbmNsdWRlcyIpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4hIX5hKHRoaXMsZSwiaW5jbHVkZXMiKS5pbmRleE9mKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNDUpLGUuZXhwb3J0cz1yKDE0KS5BcnJheS5pbmNsdWRlc30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoNDYpKCEwKTtuKG4uUCwiQXJyYXkiLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTApKCJpbmNsdWRlcyIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDcpLGE9cigzMCksaT1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixvKXt2YXIgcyxsPW4odCksYz1hKGwubGVuZ3RoKSx1PWkobyxjKTtpZihlJiZyIT1yKXtmb3IoO2M+dTspaWYoKHM9bFt1KytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PXIpcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCksYT1yKDM4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzQpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9bihlKSk8MD9hKGUrdCwwKTppKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJ1bnNjb3BhYmxlcyIpLGE9QXJyYXkucHJvdG90eXBlO251bGw9PWFbbl0mJnIoMTUpKGEsbix7fSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Fbbl1bZV09ITB9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNTIpLHIoNjcpLGUuZXhwb3J0cz1yKDE0KS5BcnJheS5mcm9tfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTMpKCEwKTtyKDU0KShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKGUpe3RoaXMuX3Q9U3RyaW5nKGUpLHRoaXMuX2k9MH0pLChmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fdCxyPXRoaXMuX2k7cmV0dXJuIHI+PXQubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9bih0LHIpLHRoaXMuX2krPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPXIoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgaSxvLHM9U3RyaW5nKGEodCkpLGw9bihyKSxjPXMubGVuZ3RoO3JldHVybiBsPDB8fGw+PWM/ZT8iIjp2b2lkIDA6KGk9cy5jaGFyQ29kZUF0KGwpKTw1NTI5Nnx8aT41NjMxOXx8bCsxPT09Y3x8KG89cy5jaGFyQ29kZUF0KGwrMSkpPDU2MzIwfHxvPjU3MzQzP2U/cy5jaGFyQXQobCk6aTplP3Muc2xpY2UobCxsKzIpOm8tNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzcpLGE9cigxMiksaT1yKDI1KSxvPXIoMTUpLHM9cig1NSksbD1yKDU2KSxjPXIoNjQpLHU9cig2NSksZj1yKDM1KSgiaXRlcmF0b3IiKSxoPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHAsbSxnLHYpe2wocix0LHApO3ZhciB5LGIsdyxrPWZ1bmN0aW9uKGUpe2lmKCFoJiZlIGluIEEpcmV0dXJuIEFbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyxlKX19LFM9dCsiIEl0ZXJhdG9yIixfPSJ2YWx1ZXMiPT1tLHg9ITEsQT1lLnByb3RvdHlwZSxDPUFbZl18fEFbIkBAaXRlcmF0b3IiXXx8bSYmQVttXSxQPUN8fGsobSksRT1tP18/aygiZW50cmllcyIpOlA6dm9pZCAwLFQ9IkFycmF5Ij09dCYmQS5lbnRyaWVzfHxDO2lmKFQmJih3PXUoVC5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmdy5uZXh0JiYoYyh3LFMsITApLG58fCJmdW5jdGlvbiI9PXR5cGVvZiB3W2ZdfHxvKHcsZixkKSksXyYmQyYmInZhbHVlcyIhPT1DLm5hbWUmJih4PSEwLFA9ZnVuY3Rpb24oKXtyZXR1cm4gQy5jYWxsKHRoaXMpfSksbiYmIXZ8fCFoJiYheCYmQVtmXXx8byhBLGYsUCksc1t0XT1QLHNbU109ZCxtKWlmKHk9e3ZhbHVlczpfP1A6aygidmFsdWVzIiksa2V5czpnP1A6aygia2V5cyIpLGVudHJpZXM6RX0sdilmb3IoYiBpbiB5KWIgaW4gQXx8aShBLGIseVtiXSk7ZWxzZSBhKGEuUCthLkYqKGh8fHgpLHQseSk7cmV0dXJuIHl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDU3KSxhPXIoMjQpLGk9cig2NCksbz17fTtyKDE1KShvLHIoMzUpKCJpdGVyYXRvciIpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7ZS5wcm90b3R5cGU9bihvLHtuZXh0OmEoMSxyKX0pLGkoZSx0KyIgSXRlcmF0b3IiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNyksYT1yKDU4KSxpPXIoNjIpLG89cig2MSkoIklFX1BST1RPIikscz1mdW5jdGlvbigpe30sbD1mdW5jdGlvbigpe3ZhciBlLHQ9cigyMikoImlmcmFtZSIpLG49aS5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIscig2MykuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6IiwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLGUuY2xvc2UoKSxsPWUuRjtuLS07KWRlbGV0ZSBsLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gbCgpfTtlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gbnVsbCE9PWU/KHMucHJvdG90eXBlPW4oZSkscj1uZXcgcyxzLnByb3RvdHlwZT1udWxsLHJbb109ZSk6cj1sKCksdm9pZCAwPT09dD9yOmEocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNiksYT1yKDE3KSxpPXIoNTkpO2UuZXhwb3J0cz1yKDIwKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe2EoZSk7Zm9yKHZhciByLG89aSh0KSxzPW8ubGVuZ3RoLGw9MDtzPmw7KW4uZihlLHI9b1tsKytdLHRbcl0pO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDYwKSxhPXIoNjIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNiksYT1yKDQ3KSxpPXIoNDYpKCExKSxvPXIoNjEpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLHM9YShlKSxsPTAsYz1bXTtmb3IociBpbiBzKXIhPW8mJm4ocyxyKSYmYy5wdXNoKHIpO2Zvcig7dC5sZW5ndGg+bDspbihzLHI9dFtsKytdKSYmKH5pKGMscil8fGMucHVzaChyKSk7cmV0dXJuIGN9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzYpKCJrZXlzIiksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKS5kb2N1bWVudDtlLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNikuZixhPXIoMjYpLGk9cigzNSkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhYShlPXI/ZTplLnByb3RvdHlwZSxpKSYmbihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjYpLGE9cig2NiksaT1yKDYxKSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YShlKSxuKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI4KSxhPXIoMTIpLGk9cig2Niksbz1yKDY4KSxzPXIoNjkpLGw9cigzMCksYz1yKDcwKSx1PXIoNzEpO2EoYS5TK2EuRiohcig3MykoKGZ1bmN0aW9uKGUpe0FycmF5LmZyb20oZSl9KSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsZixoPWkoZSksZD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHA9YXJndW1lbnRzLmxlbmd0aCxtPXA+MT9hcmd1bWVudHNbMV06dm9pZCAwLGc9dm9pZCAwIT09bSx2PTAseT11KGgpO2lmKGcmJihtPW4obSxwPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09eXx8ZD09QXJyYXkmJnMoeSkpZm9yKHI9bmV3IGQodD1sKGgubGVuZ3RoKSk7dD52O3YrKyljKHIsdixnP20oaFt2XSx2KTpoW3ZdKTtlbHNlIGZvcihmPXkuY2FsbChoKSxyPW5ldyBkOyEoYT1mLm5leHQoKSkuZG9uZTt2KyspYyhyLHYsZz9vKGYsbSxbYS52YWx1ZSx2XSwhMCk6YS52YWx1ZSk7cmV0dXJuIHIubGVuZ3RoPXYscn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSl7dHJ5e3JldHVybiBhP3QobihyKVswXSxyWzFdKTp0KHIpfWNhdGNoKHQpe3ZhciBpPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJm4oaS5jYWxsKGUpKSx0fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDM1KSgiaXRlcmF0b3IiKSxpPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihuLkFycmF5PT09ZXx8aVthXT09PWUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE2KSxhPXIoMjQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dCBpbiBlP24uZihlLHQsYSgwLHIpKTplW3RdPXJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNzIpLGE9cigzNSkoIml0ZXJhdG9yIiksaT1yKDU1KTtlLmV4cG9ydHM9cigxNCkuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSlyZXR1cm4gZVthXXx8ZVsiQEBpdGVyYXRvciJdfHxpW24oZSldfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDM0KSxhPXIoMzUpKCJ0b1N0cmluZ1RhZyIpLGk9IkFyZ3VtZW50cyI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQscixvO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1PYmplY3QoZSksYSkpP3I6aT9uKHQpOiJPYmplY3QiPT0obz1uKHQpKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGVlPyJBcmd1bWVudHMiOm99fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJpdGVyYXRvciIpLGE9ITE7dHJ5e3ZhciBpPVs3XVtuXSgpO2kucmV0dXJuPWZ1bmN0aW9uKCl7YT0hMH0sQXJyYXkuZnJvbShpLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhYSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIGk9WzddLG89aVtuXSgpO28ubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fSxpW25dPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUoaSl9Y2F0Y2goZSl7fXJldHVybiByfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc1KSxlLmV4cG9ydHM9cigxNCkuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtuKG4uUytuLkYsIk9iamVjdCIse2Fzc2lnbjpyKDc2KX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTkpLGE9cig3NyksaT1yKDc4KSxvPXIoNjYpLHM9cig0OCksbD1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hbHx8cigyMSkoKGZ1bmN0aW9uKCl7dmFyIGU9e30sdD17fSxyPVN5bWJvbCgpLG49ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtyXT03LG4uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZX0pKSw3IT1sKHt9LGUpW3JdfHxPYmplY3Qua2V5cyhsKHt9LHQpKS5qb2luKCIiKSE9bn0pKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1vKGUpLGw9YXJndW1lbnRzLmxlbmd0aCxjPTEsdT1hLmYsZj1pLmY7bD5jOylmb3IodmFyIGgsZD1zKGFyZ3VtZW50c1tjKytdKSxwPXU/bihkKS5jb25jYXQodShkKSk6bihkKSxtPXAubGVuZ3RoLGc9MDttPmc7KWYuY2FsbChkLGg9cFtnKytdKSYmKHJbaF09ZFtoXSk7cmV0dXJuIHJ9Omx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODApLGUuZXhwb3J0cz1yKDE0KS5NYXRoLmxvZzJ9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMik7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDgyKSxlLmV4cG9ydHM9cigxNCkuTnVtYmVyLmlzTmFOfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO24obi5TLCJOdW1iZXIiLHtpc05hTjpmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg0KSxlLmV4cG9ydHM9cigxNCkuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtuKG4uUywiTnVtYmVyIix7aXNJbnRlZ2VyOnIoODUpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxOCksYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hbihlKSYmaXNGaW5pdGUoZSkmJmEoZSk9PT1lfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg3KSxyKDUyKSxyKDg4KSxyKDkxKSxyKDEwNCkscigxMDUpLGUuZXhwb3J0cz1yKDE0KS5Qcm9taXNlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNzIpLGE9e307YVtyKDM1KSgidG9TdHJpbmdUYWciKV09InoiLGErIiIhPSJbb2JqZWN0IHpdIiYmcigyNSkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9KSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXIoODkpLGE9cig1OSksaT1yKDI1KSxvPXIoMTMpLHM9cigxNSksbD1yKDU1KSxjPXIoMzUpLHU9YygiaXRlcmF0b3IiKSxmPWMoInRvU3RyaW5nVGFnIiksaD1sLkFycmF5LGQ9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxwPWEoZCksbT0wO208cC5sZW5ndGg7bSsrKXt2YXIgZyx2PXBbbV0seT1kW3ZdLGI9b1t2XSx3PWImJmIucHJvdG90eXBlO2lmKHcmJih3W3VdfHxzKHcsdSxoKSx3W2ZdfHxzKHcsZix2KSxsW3ZdPWgseSkpZm9yKGcgaW4gbil3W2ddfHxpKHcsZyxuW2ddLCEwKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1MCksYT1yKDkwKSxpPXIoNTUpLG89cig0Nyk7ZS5leHBvcnRzPXIoNTQpKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7dGhpcy5fdD1vKGUpLHRoaXMuX2k9MCx0aGlzLl9rPXR9KSwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxyPXRoaXMuX2krKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGEoMSkpOmEoMCwia2V5cyI9PXQ/cjoidmFsdWVzIj09dD9lW3JdOltyLGVbcl1dKX0pLCJ2YWx1ZXMiKSxpLkFyZ3VtZW50cz1pLkFycmF5LG4oImtleXMiKSxuKCJ2YWx1ZXMiKSxuKCJlbnRyaWVzIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGksbyxzPXIoMzcpLGw9cigxMyksYz1yKDI4KSx1PXIoNzIpLGY9cigxMiksaD1yKDE4KSxkPXIoMjkpLHA9cig5MiksbT1yKDkzKSxnPXIoOTQpLHY9cig5NSkuc2V0LHk9cig5NykoKSxiPXIoOTgpLHc9cig5OSksaz1yKDEwMCksUz1yKDEwMSksXz1sLlR5cGVFcnJvcix4PWwucHJvY2VzcyxBPXgmJngudmVyc2lvbnMsQz1BJiZBLnY4fHwiIixQPWwuUHJvbWlzZSxFPSJwcm9jZXNzIj09dSh4KSxUPWZ1bmN0aW9uKCl7fSxSPWE9Yi5mLE89ISFmdW5jdGlvbigpe3RyeXt2YXIgZT1QLnJlc29sdmUoMSksdD0oZS5jb25zdHJ1Y3Rvcj17fSlbcigzNSkoInNwZWNpZXMiKV09ZnVuY3Rpb24oZSl7ZShULFQpfTtyZXR1cm4oRXx8ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJmUudGhlbihUKWluc3RhbmNlb2YgdCYmMCE9PUMuaW5kZXhPZigiNi42IikmJi0xPT09ay5pbmRleE9mKCJDaHJvbWUvNjYiKX1jYXRjaChlKXt9fSgpLEk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISghaChlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS50aGVuKSkmJnR9LEY9ZnVuY3Rpb24oZSx0KXtpZighZS5fbil7ZS5fbj0hMDt2YXIgcj1lLl9jO3koKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWUuX3YsYT0xPT1lLl9zLGk9MCxvPWZ1bmN0aW9uKHQpe3ZhciByLGksbyxzPWE/dC5vazp0LmZhaWwsbD10LnJlc29sdmUsYz10LnJlamVjdCx1PXQuZG9tYWluO3RyeXtzPyhhfHwoMj09ZS5faCYmTShlKSxlLl9oPTEpLCEwPT09cz9yPW46KHUmJnUuZW50ZXIoKSxyPXMobiksdSYmKHUuZXhpdCgpLG89ITApKSxyPT09dC5wcm9taXNlP2MoXygiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooaT1JKHIpKT9pLmNhbGwocixsLGMpOmwocikpOmMobil9Y2F0Y2goZSl7dSYmIW8mJnUuZXhpdCgpLGMoZSl9fTtyLmxlbmd0aD5pOylvKHJbaSsrXSk7ZS5fYz1bXSxlLl9uPSExLHQmJiFlLl9oJiZMKGUpfSkpfX0sTD1mdW5jdGlvbihlKXt2LmNhbGwobCwoZnVuY3Rpb24oKXt2YXIgdCxyLG4sYT1lLl92LGk9RChlKTtpZihpJiYodD13KChmdW5jdGlvbigpe0U/eC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLGEsZSk6KHI9bC5vbnVuaGFuZGxlZHJlamVjdGlvbik/cih7cHJvbWlzZTplLHJlYXNvbjphfSk6KG49bC5jb25zb2xlKSYmbi5lcnJvciYmbi5lcnJvcigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixhKX0pKSxlLl9oPUV8fEQoZSk/MjoxKSxlLl9hPXZvaWQgMCxpJiZ0LmUpdGhyb3cgdC52fSkpfSxEPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5faCYmMD09PShlLl9hfHxlLl9jKS5sZW5ndGh9LE09ZnVuY3Rpb24oZSl7di5jYWxsKGwsKGZ1bmN0aW9uKCl7dmFyIHQ7RT94LmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLGUpOih0PWwub25yZWplY3Rpb25oYW5kbGVkKSYmdCh7cHJvbWlzZTplLHJlYXNvbjplLl92fSl9KSl9LE49ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0Ll9kfHwodC5fZD0hMCwodD10Ll93fHx0KS5fdj1lLHQuX3M9Mix0Ll9hfHwodC5fYT10Ll9jLnNsaWNlKCkpLEYodCwhMCkpfSxqPWZ1bmN0aW9uIGUodCl7dmFyIHIsbj10aGlzO2lmKCFuLl9kKXtuLl9kPSEwLG49bi5fd3x8bjt0cnl7aWYobj09PXQpdGhyb3cgXygiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTsocj1JKHQpKT95KChmdW5jdGlvbigpe3ZhciBhPXtfdzpuLF9kOiExfTt0cnl7ci5jYWxsKHQsYyhlLGEsMSksYyhOLGEsMSkpfWNhdGNoKGUpe04uY2FsbChhLGUpfX0pKToobi5fdj10LG4uX3M9MSxGKG4sITEpKX1jYXRjaChlKXtOLmNhbGwoe193Om4sX2Q6ITF9LGUpfX19O098fChQPWZ1bmN0aW9uKGUpe3AodGhpcyxQLCJQcm9taXNlIiwiX2giKSxkKGUpLG4uY2FsbCh0aGlzKTt0cnl7ZShjKGosdGhpcywxKSxjKE4sdGhpcywxKSl9Y2F0Y2goZSl7Ti5jYWxsKHRoaXMsZSl9fSwobj1mdW5jdGlvbihlKXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSkucHJvdG90eXBlPXIoMTAyKShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciByPVIoZyh0aGlzLFApKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsci5kb21haW49RT94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZGKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksaT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1jKGosZSwxKSx0aGlzLnJlamVjdD1jKE4sZSwxKX0sYi5mPVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1QfHxlPT09bz9uZXcgaShlKTphKGUpfSksZihmLkcrZi5XK2YuRiohTyx7UHJvbWlzZTpQfSkscig2NCkoUCwiUHJvbWlzZSIpLHIoMTAzKSgiUHJvbWlzZSIpLG89cigxNCkuUHJvbWlzZSxmKGYuUytmLkYqIU8sIlByb21pc2UiLHtyZWplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9Uih0aGlzKTtyZXR1cm4oMCx0LnJlamVjdCkoZSksdC5wcm9taXNlfX0pLGYoZi5TK2YuRiooc3x8IU8pLCJQcm9taXNlIix7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gUyhzJiZ0aGlzPT09bz9QOnRoaXMsZSl9fSksZihmLlMrZi5GKiEoTyYmcig3MykoKGZ1bmN0aW9uKGUpe1AuYWxsKGUpLmNhdGNoKFQpfSkpKSwiUHJvbWlzZSIse2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9Uih0KSxuPXIucmVzb2x2ZSxhPXIucmVqZWN0LGk9dygoZnVuY3Rpb24oKXt2YXIgcj1bXSxpPTAsbz0xO20oZSwhMSwoZnVuY3Rpb24oZSl7dmFyIHM9aSsrLGw9ITE7ci5wdXNoKHZvaWQgMCksbysrLHQucmVzb2x2ZShlKS50aGVuKChmdW5jdGlvbihlKXtsfHwobD0hMCxyW3NdPWUsLS1vfHxuKHIpKX0pLGEpfSkpLC0tb3x8bihyKX0pKTtyZXR1cm4gaS5lJiZhKGkudiksci5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1SKHQpLG49ci5yZWplY3QsYT13KChmdW5jdGlvbigpe20oZSwhMSwoZnVuY3Rpb24oZSl7dC5yZXNvbHZlKGUpLnRoZW4oci5yZXNvbHZlLG4pfSkpfSkpO3JldHVybiBhLmUmJm4oYS52KSxyLnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCEoZSBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1uJiZuIGluIGUpdGhyb3cgVHlwZUVycm9yKHIrIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjgpLGE9cig2OCksaT1yKDY5KSxvPXIoMTcpLHM9cigzMCksbD1yKDcxKSxjPXt9LHU9e30sZj1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsZixoKXt2YXIgZCxwLG0sZyx2PWg/ZnVuY3Rpb24oKXtyZXR1cm4gZX06bChlKSx5PW4ocixmLHQ/MjoxKSxiPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHYpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYoaSh2KSl7Zm9yKGQ9cyhlLmxlbmd0aCk7ZD5iO2IrKylpZigoZz10P3kobyhwPWVbYl0pWzBdLHBbMV0pOnkoZVtiXSkpPT09Y3x8Zz09PXUpcmV0dXJuIGd9ZWxzZSBmb3IobT12LmNhbGwoZSk7IShwPW0ubmV4dCgpKS5kb25lOylpZigoZz1hKG0seSxwLnZhbHVlLHQpKT09PWN8fGc9PT11KXJldHVybiBnfTtmLkJSRUFLPWMsZi5SRVRVUk49dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE3KSxhPXIoMjkpLGk9cigzNSkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixvPW4oZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PW98fG51bGw9PShyPW4obylbaV0pP3Q6YShyKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4sYSxpLG89cigyOCkscz1yKDk2KSxsPXIoNjMpLGM9cigyMiksdT1yKDEzKSxmPXUucHJvY2VzcyxoPXUuc2V0SW1tZWRpYXRlLGQ9dS5jbGVhckltbWVkaWF0ZSxwPXUuTWVzc2FnZUNoYW5uZWwsbT11LkRpc3BhdGNoLGc9MCx2PXt9LHk9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7eS5jYWxsKGUuZGF0YSl9O2gmJmR8fChoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXtzKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LG4oZyksZ30sZD1mdW5jdGlvbihlKXtkZWxldGUgdltlXX0sInByb2Nlc3MiPT1yKDM0KShmKT9uPWZ1bmN0aW9uKGUpe2YubmV4dFRpY2sobyh5LGUsMSkpfTptJiZtLm5vdz9uPWZ1bmN0aW9uKGUpe20ubm93KG8oeSxlLDEpKX06cD8oaT0oYT1uZXcgcCkucG9ydDIsYS5wb3J0MS5vbm1lc3NhZ2U9YixuPW8oaS5wb3N0TWVzc2FnZSxpLDEpKTp1LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXUuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXt1LnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sdS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGMoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQoYygic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcykseS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChvKHksZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmgsY2xlYXI6ZH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP2UoKTplLmNhbGwocik7Y2FzZSAxOnJldHVybiBuP2UodFswXSk6ZS5jYWxsKHIsdFswXSk7Y2FzZSAyOnJldHVybiBuP2UodFswXSx0WzFdKTplLmNhbGwocix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwocix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKHIsdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGUuYXBwbHkocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDk1KS5zZXQsaT1uLk11dGF0aW9uT2JzZXJ2ZXJ8fG4uV2ViS2l0TXV0YXRpb25PYnNlcnZlcixvPW4ucHJvY2VzcyxzPW4uUHJvbWlzZSxsPSJwcm9jZXNzIj09cigzNCkobyk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLGM9ZnVuY3Rpb24oKXt2YXIgbixhO2ZvcihsJiYobj1vLmRvbWFpbikmJm4uZXhpdCgpO2U7KXthPWUuZm4sZT1lLm5leHQ7dHJ5e2EoKX1jYXRjaChuKXt0aHJvdyBlP3IoKTp0PXZvaWQgMCxufX10PXZvaWQgMCxuJiZuLmVudGVyKCl9O2lmKGwpcj1mdW5jdGlvbigpe28ubmV4dFRpY2soYyl9O2Vsc2UgaWYoIWl8fG4ubmF2aWdhdG9yJiZuLm5hdmlnYXRvci5zdGFuZGFsb25lKWlmKHMmJnMucmVzb2x2ZSl7dmFyIHU9cy5yZXNvbHZlKHZvaWQgMCk7cj1mdW5jdGlvbigpe3UudGhlbihjKX19ZWxzZSByPWZ1bmN0aW9uKCl7YS5jYWxsKG4sYyl9O2Vsc2V7dmFyIGY9ITAsaD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IGkoYykub2JzZXJ2ZShoLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2guZGF0YT1mPSFmfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIGE9e2ZuOm4sbmV4dDp2b2lkIDB9O3QmJih0Lm5leHQ9YSksZXx8KGU9YSxyKCkpLHQ9YX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjkpO2Z1bmN0aW9uIGEoZSl7dmFyIHQscjt0aGlzLnByb21pc2U9bmV3IGUoKGZ1bmN0aW9uKGUsbil7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09cil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7dD1lLHI9bn0pKSx0aGlzLnJlc29sdmU9bih0KSx0aGlzLnJlamVjdD1uKHIpfWUuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYShlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZTohMSx2OmUoKX19Y2F0Y2goZSl7cmV0dXJue2U6ITAsdjplfX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLm5hdmlnYXRvcjtlLmV4cG9ydHM9biYmbi51c2VyQWdlbnR8fCIifSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTcpLGE9cigxOCksaT1yKDk4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKGUpLGEodCkmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciByPWkuZihlKTtyZXR1cm4oMCxyLnJlc29sdmUpKHQpLHIucHJvbWlzZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGEgaW4gdCluKGUsYSx0W2FdLHIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTYpLGk9cigyMCksbz1yKDM1KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uW2VdO2kmJnQmJiF0W29dJiZhLmYodCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNCksaT1yKDEzKSxvPXIoOTQpLHM9cigxMDEpO24obi5QK24uUiwiUHJvbWlzZSIse2ZpbmFsbHk6ZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzLGEuUHJvbWlzZXx8aS5Qcm9taXNlKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBlO3JldHVybiB0aGlzLnRoZW4ocj9mdW5jdGlvbihyKXtyZXR1cm4gcyh0LGUoKSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX06ZSxyP2Z1bmN0aW9uKHIpe3JldHVybiBzKHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3Rocm93IHJ9KSl9OmUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig5OCksaT1yKDk5KTtuKG4uUywiUHJvbWlzZSIse3RyeTpmdW5jdGlvbihlKXt2YXIgdD1hLmYodGhpcykscj1pKGUpO3JldHVybihyLmU/dC5yZWplY3Q6dC5yZXNvbHZlKShyLnYpLHQucHJvbWlzZX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg3KSxyKDg4KSxyKDEwNykscigxMTkpLHIoMTIxKSxlLmV4cG9ydHM9cigxNCkuV2Vha01hcH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXIoMTA4KSgwKSxpPXIoMjUpLG89cigxMTIpLHM9cig3NiksbD1yKDExMyksYz1yKDE4KSx1PXIoMjEpLGY9cigxMTQpLGg9by5nZXRXZWFrLGQ9T2JqZWN0LmlzRXh0ZW5zaWJsZSxwPWwudWZzdG9yZSxtPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXtnZXQ6ZnVuY3Rpb24oZSl7aWYoYyhlKSl7dmFyIHQ9aChlKTtyZXR1cm4hMD09PXQ/cChmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LHk9ZS5leHBvcnRzPXIoMTE1KSgiV2Vha01hcCIsZyx2LGwsITAsITApO3UoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgeSkuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKG0pLDcpLmdldChtKX0pKSYmKHMoKG49bC5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx2KSxvLk5FRUQ9ITAsYShbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLChmdW5jdGlvbihlKXt2YXIgdD15LnByb3RvdHlwZSxyPXRbZV07aSh0LGUsKGZ1bmN0aW9uKHQsYSl7aWYoYyh0KSYmIWQodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBuKTt2YXIgaT10aGlzLl9mW2VdKHQsYSk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiByLmNhbGwodGhpcyx0LGEpfSkpfSkpKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI4KSxhPXIoNDgpLGk9cig2Niksbz1yKDMwKSxzPXIoMTA5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xPT1lLGw9Mj09ZSxjPTM9PWUsdT00PT1lLGY9Nj09ZSxoPTU9PWV8fGYsZD10fHxzO3JldHVybiBmdW5jdGlvbih0LHMscCl7Zm9yKHZhciBtLGcsdj1pKHQpLHk9YSh2KSxiPW4ocyxwLDMpLHc9byh5Lmxlbmd0aCksaz0wLFM9cj9kKHQsdyk6bD9kKHQsMCk6dm9pZCAwO3c+aztrKyspaWYoKGh8fGsgaW4geSkmJihnPWIobT15W2tdLGssdiksZSkpaWYocilTW2tdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBtO2Nhc2UgNjpyZXR1cm4gaztjYXNlIDI6Uy5wdXNoKG0pfWVsc2UgaWYodSlyZXR1cm4hMTtyZXR1cm4gZj8tMTpjfHx1P3U6U319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KG4oZSkpKHQpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KSxhPXIoMTExKSxpPXIoMzUpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIWEodC5wcm90b3R5cGUpfHwodD12b2lkIDApLG4odCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDM0KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09bihlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMjcpKCJtZXRhIiksaT1yKDE4KSxvPXIoMjYpLHM9cigxNikuZixsPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFyKDIxKSgoZnVuY3Rpb24oKXtyZXR1cm4gYyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSxmPWZ1bmN0aW9uKGUpe3MoZSxhLHt2YWx1ZTp7aToiTyIrICsrbCx3Ont9fX0pfSxoPWUuZXhwb3J0cz17S0VZOmEsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpcmV0dXJuInN5bWJvbCI9PW4oZSk/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIW8oZSxhKSl7aWYoIWMoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtmKGUpfXJldHVybiBlW2FdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighbyhlLGEpKXtpZighYyhlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtmKGUpfXJldHVybiBlW2FdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiB1JiZoLk5FRUQmJmMoZSkmJiFvKGUsYSkmJmYoZSksZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTAyKSxhPXIoMTEyKS5nZXRXZWFrLGk9cigxNyksbz1yKDE4KSxzPXIoOTIpLGw9cig5MyksYz1yKDEwOCksdT1yKDI2KSxmPXIoMTE0KSxoPWMoNSksZD1jKDYpLHA9MCxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9sfHwoZS5fbD1uZXcgZyl9LGc9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaChlLmEsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKX07Zy5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD12KHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhdih0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj12KHRoaXMsZSk7cj9yWzFdPXQ6dGhpcy5hLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZCh0aGlzLmEsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBjPWUoKGZ1bmN0aW9uKGUsbil7cyhlLGMsdCwiX2kiKSxlLl90PXQsZS5faT1wKyssZS5fbD12b2lkIDAsbnVsbCE9biYmbChuLHIsZVtpXSxlKX0pKTtyZXR1cm4gbihjLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFvKGUpKXJldHVybiExO3ZhciByPWEoZSk7cmV0dXJuITA9PT1yP20oZih0aGlzLHQpKS5kZWxldGUoZSk6ciYmdShyLHRoaXMuX2kpJiZkZWxldGUgclt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFvKGUpKXJldHVybiExO3ZhciByPWEoZSk7cmV0dXJuITA9PT1yP20oZih0aGlzLHQpKS5oYXMoZSk6ciYmdShyLHRoaXMuX2kpfX0pLGN9LGRlZjpmdW5jdGlvbihlLHQscil7dmFyIG49YShpKHQpLCEwKTtyZXR1cm4hMD09PW4/bShlKS5zZXQodCxyKTpuW2UuX2ldPXIsZX0sdWZzdG9yZTptfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighbihlKXx8ZS5fdCE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTIpLGk9cigyNSksbz1yKDEwMikscz1yKDExMiksbD1yKDkzKSxjPXIoOTIpLHU9cigxOCksZj1yKDIxKSxoPXIoNzMpLGQ9cig2NCkscD1yKDExNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG0sZyx2KXt2YXIgeT1uW2VdLGI9eSx3PWc/InNldCI6ImFkZCIsaz1iJiZiLnByb3RvdHlwZSxTPXt9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9a1tlXTtpKGssZSwiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHYmJiF1KGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImhhcyI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh2JiYhdShlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB2JiYhdShlKT92b2lkIDA6dC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImFkZCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplLHIpLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGImJih2fHxrLmZvckVhY2gmJiFmKChmdW5jdGlvbigpeyhuZXcgYikuZW50cmllcygpLm5leHQoKX0pKSkpe3ZhciB4PW5ldyBiLEE9eFt3XSh2P3t9Oi0wLDEpIT14LEM9ZigoZnVuY3Rpb24oKXt4LmhhcygxKX0pKSxQPWgoKGZ1bmN0aW9uKGUpe25ldyBiKGUpfSkpLEU9IXYmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBiLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1B8fCgoYj10KChmdW5jdGlvbih0LHIpe2ModCxiLGUpO3ZhciBuPXAobmV3IHksdCxiKTtyZXR1cm4gbnVsbCE9ciYmbChyLGcsblt3XSxuKSxufSkpKS5wcm90b3R5cGU9ayxrLmNvbnN0cnVjdG9yPWIpLChDfHxFKSYmKF8oImRlbGV0ZSIpLF8oImhhcyIpLGcmJl8oImdldCIpKSwoRXx8QSkmJl8odyksdiYmay5jbGVhciYmZGVsZXRlIGsuY2xlYXJ9ZWxzZSBiPW0uZ2V0Q29uc3RydWN0b3IodCxlLGcsdyksbyhiLnByb3RvdHlwZSxyKSxzLk5FRUQ9ITA7cmV0dXJuIGQoYixlKSxTW2VdPWIsYShhLkcrYS5XK2EuRiooYiE9eSksUyksdnx8bS5zZXRTdHJvbmcoYixlLGcpLGJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigxMTcpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG89dC5jb25zdHJ1Y3RvcjtyZXR1cm4gbyE9PXImJiJmdW5jdGlvbiI9PXR5cGVvZiBvJiYoaT1vLnByb3RvdHlwZSkhPT1yLnByb3RvdHlwZSYmbihpKSYmYSYmYShlLGkpLGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigxNyksaT1mdW5jdGlvbihlLHQpe2lmKGEoZSksIW4odCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQsbil7dHJ5eyhuPXIoMjgpKEZ1bmN0aW9uLmNhbGwscigxMTgpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShlLFtdKSx0PSEoZSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChlKXt0PSEwfXJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBpKGUsciksdD9lLl9fcHJvdG9fXz1yOm4oZSxyKSxlfX0oe30sITEpOnZvaWQgMCksY2hlY2s6aX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3OCksYT1yKDI0KSxpPXIoNDcpLG89cigyMykscz1yKDI2KSxsPXIoMTkpLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9cigyMCk/YzpmdW5jdGlvbihlLHQpe2lmKGU9aShlKSx0PW8odCwhMCksbCl0cnl7cmV0dXJuIGMoZSx0KX1jYXRjaChlKXt9aWYocyhlLHQpKXJldHVybiBhKCFuLmYuY2FsbChlLHQpLGVbdF0pfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDEyMCkoIldlYWtNYXAiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7bihuLlMsZSx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKTtlLS07KXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBuZXcgdGhpcyh0KX19KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMjIpKCJXZWFrTWFwIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDI5KSxpPXIoMjgpLG89cig5Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQscixuLHMsbD1hcmd1bWVudHNbMV07cmV0dXJuIGEodGhpcyksKHQ9dm9pZCAwIT09bCkmJmEobCksbnVsbD09ZT9uZXcgdGhpczoocj1bXSx0PyhuPTAscz1pKGwsYXJndW1lbnRzWzJdLDIpLG8oZSwhMSwoZnVuY3Rpb24oZSl7ci5wdXNoKHMoZSxuKyspKX0pKSk6byhlLCExLHIucHVzaCxyKSxuZXcgdGhpcyhyKSl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODcpLHIoODgpLHIoMTI0KSxyKDEyNSkscigxMjYpLGUuZXhwb3J0cz1yKDE0KS5XZWFrU2V0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEzKSxhPXIoMTE0KTtyKDExNSkoIldlYWtTZXQiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSx7YWRkOmZ1bmN0aW9uKGUpe3JldHVybiBuLmRlZihhKHRoaXMsIldlYWtTZXQiKSxlLCEwKX19LG4sITEsITApfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTIwKSgiV2Vha1NldCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTIyKSgiV2Vha1NldCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI4KSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmNvZGVQb2ludEF0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig1MykoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTMwKSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmZyb21Db2RlUG9pbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDQ5KSxpPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYmMSE9by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLG49YXJndW1lbnRzLmxlbmd0aCxvPTA7bj5vOyl7aWYodD0rYXJndW1lbnRzW28rK10sYSh0LDExMTQxMTEpIT09dCl0aHJvdyBSYW5nZUVycm9yKHQrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7ci5wdXNoKHQ8NjU1MzY/aSh0KTppKDU1Mjk2KygodC09NjU1MzYpPj4xMCksdCUxMDI0KzU2MzIwKSl9cmV0dXJuIHIuam9pbigiIil9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMzIpLHIoODcpLGUuZXhwb3J0cz1yKDE0KS5TeW1ib2x9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMTMpLGk9cigyNiksbz1yKDIwKSxzPXIoMTIpLGw9cigyNSksYz1yKDExMikuS0VZLHU9cigyMSksZj1yKDM2KSxoPXIoNjQpLGQ9cigyNykscD1yKDM1KSxtPXIoMTMzKSxnPXIoMTM0KSx2PXIoMTM1KSx5PXIoMTExKSxiPXIoMTcpLHc9cigxOCksaz1yKDQ3KSxTPXIoMjMpLF89cigyNCkseD1yKDU3KSxBPXIoMTM2KSxDPXIoMTE4KSxQPXIoMTYpLEU9cig1OSksVD1DLmYsUj1QLmYsTz1BLmYsST1hLlN5bWJvbCxGPWEuSlNPTixMPUYmJkYuc3RyaW5naWZ5LEQ9cCgiX2hpZGRlbiIpLE09cCgidG9QcmltaXRpdmUiKSxOPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGo9Zigic3ltYm9sLXJlZ2lzdHJ5IiksQj1mKCJzeW1ib2xzIiksVT1mKCJvcC1zeW1ib2xzIikscT1PYmplY3QucHJvdG90eXBlLHo9ImZ1bmN0aW9uIj09dHlwZW9mIEksVz1hLlFPYmplY3QsSD0hV3x8IVcucHJvdG90eXBlfHwhVy5wcm90b3R5cGUuZmluZENoaWxkLEc9byYmdSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9eChSKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1UKHEsdCk7biYmZGVsZXRlIHFbdF0sUihlLHQsciksbiYmZSE9PXEmJlIocSx0LG4pfTpSLFY9ZnVuY3Rpb24oZSl7dmFyIHQ9QltlXT14KEkucHJvdG90eXBlKTtyZXR1cm4gdC5faz1lLHR9LFg9eiYmInN5bWJvbCI9PW4oSS5pdGVyYXRvcik/ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PW4oZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgSX0sWT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9PT1xJiZZKFUsdCxyKSxiKGUpLHQ9Uyh0LCEwKSxiKHIpLGkoQix0KT8oci5lbnVtZXJhYmxlPyhpKGUsRCkmJmVbRF1bdF0mJihlW0RdW3RdPSExKSxyPXgocix7ZW51bWVyYWJsZTpfKDAsITEpfSkpOihpKGUsRCl8fFIoZSxELF8oMSx7fSkpLGVbRF1bdF09ITApLEcoZSx0LHIpKTpSKGUsdCxyKX0sSz1mdW5jdGlvbihlLHQpe2IoZSk7Zm9yKHZhciByLG49dih0PWsodCkpLGE9MCxpPW4ubGVuZ3RoO2k+YTspWShlLHI9blthKytdLHRbcl0pO3JldHVybiBlfSxKPWZ1bmN0aW9uKGUpe3ZhciB0PU4uY2FsbCh0aGlzLGU9UyhlLCEwKSk7cmV0dXJuISh0aGlzPT09cSYmaShCLGUpJiYhaShVLGUpKSYmKCEodHx8IWkodGhpcyxlKXx8IWkoQixlKXx8aSh0aGlzLEQpJiZ0aGlzW0RdW2VdKXx8dCl9LFE9ZnVuY3Rpb24oZSx0KXtpZihlPWsoZSksdD1TKHQsITApLGUhPT1xfHwhaShCLHQpfHxpKFUsdCkpe3ZhciByPVQoZSx0KTtyZXR1cm4hcnx8IWkoQix0KXx8aShlLEQpJiZlW0RdW3RdfHwoci5lbnVtZXJhYmxlPSEwKSxyfX0sWj1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1PKGsoZSkpLG49W10sYT0wO3IubGVuZ3RoPmE7KWkoQix0PXJbYSsrXSl8fHQ9PUR8fHQ9PWN8fG4ucHVzaCh0KTtyZXR1cm4gbn0sJD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lPT09cSxuPU8ocj9VOmsoZSkpLGE9W10sbz0wO24ubGVuZ3RoPm87KSFpKEIsdD1uW28rK10pfHxyJiYhaShxLHQpfHxhLnB1c2goQlt0XSk7cmV0dXJuIGF9O3p8fChsKChJPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEkpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIGU9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksdD1mdW5jdGlvbiB0KHIpe3RoaXM9PT1xJiZ0LmNhbGwoVSxyKSxpKHRoaXMsRCkmJmkodGhpc1tEXSxlKSYmKHRoaXNbRF1bZV09ITEpLEcodGhpcyxlLF8oMSxyKSl9O3JldHVybiBvJiZIJiZHKHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDp0fSksVihlKX0pLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSkpLEMuZj1RLFAuZj1ZLHIoMTM3KS5mPUEuZj1aLHIoNzgpLmY9SixyKDc3KS5mPSQsbyYmIXIoMzcpJiZsKHEsInByb3BlcnR5SXNFbnVtZXJhYmxlIixKLCEwKSxtLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFYocChlKSl9KSxzKHMuRytzLlcrcy5GKiF6LHtTeW1ib2w6SX0pO2Zvcih2YXIgZWU9Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIpLHRlPTA7ZWUubGVuZ3RoPnRlOylwKGVlW3RlKytdKTtmb3IodmFyIHJlPUUocC5zdG9yZSksbmU9MDtyZS5sZW5ndGg+bmU7KWcocmVbbmUrK10pO3Mocy5TK3MuRioheiwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKGUpe3JldHVybiBpKGosZSs9IiIpP2pbZV06altlXT1JKGUpfSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIVgoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciB0IGluIGopaWYoalt0XT09PWUpcmV0dXJuIHR9LHVzZVNldHRlcjpmdW5jdGlvbigpe0g9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0g9ITF9fSkscyhzLlMrcy5GKiF6LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD94KGUpOksoeChlKSx0KX0sZGVmaW5lUHJvcGVydHk6WSxkZWZpbmVQcm9wZXJ0aWVzOkssZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlEsZ2V0T3duUHJvcGVydHlOYW1lczpaLGdldE93blByb3BlcnR5U3ltYm9sczokfSksRiYmcyhzLlMrcy5GKighenx8dSgoZnVuY3Rpb24oKXt2YXIgZT1JKCk7cmV0dXJuIltudWxsXSIhPUwoW2VdKXx8Int9IiE9TCh7YTplfSl8fCJ7fSIhPUwoT2JqZWN0KGUpKX0pKSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbj1bZV0sYT0xO2FyZ3VtZW50cy5sZW5ndGg+YTspbi5wdXNoKGFyZ3VtZW50c1thKytdKTtpZihyPXQ9blsxXSwodyh0KXx8dm9pZCAwIT09ZSkmJiFYKGUpKXJldHVybiB5KHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYodD1yLmNhbGwodGhpcyxlLHQpKSwhWCh0KSlyZXR1cm4gdH0pLG5bMV09dCxMLmFwcGx5KEYsbil9fSksSS5wcm90b3R5cGVbTV18fHIoMTUpKEkucHJvdG90eXBlLE0sSS5wcm90b3R5cGUudmFsdWVPZiksaChJLCJTeW1ib2wiKSxoKE1hdGgsIk1hdGgiLCEwKSxoKGEuSlNPTiwiSlNPTiIsITApfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZj1yKDM1KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTQpLGk9cigzNyksbz1yKDEzMykscz1yKDE2KS5mO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1hLlN5bWJvbHx8KGEuU3ltYm9sPWk/e306bi5TeW1ib2x8fHt9KTsiXyI9PWUuY2hhckF0KDApfHxlIGluIHR8fHModCxlLHt2YWx1ZTpvLmYoZSl9KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1OSksYT1yKDc3KSxpPXIoNzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUpLHI9YS5mO2lmKHIpZm9yKHZhciBvLHM9cihlKSxsPWkuZixjPTA7cy5sZW5ndGg+YzspbC5jYWxsKGUsbz1zW2MrK10pJiZ0LnB1c2gobyk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgYT1yKDQ3KSxpPXIoMTM3KS5mLG89e30udG9TdHJpbmcscz0ib2JqZWN0Ij09KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJ1bmRlZmluZWQiOm4od2luZG93KSkmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIltvYmplY3QgV2luZG93XSI9PW8uY2FsbChlKT9mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGkoZSl9Y2F0Y2goZSl7cmV0dXJuIHMuc2xpY2UoKX19KGUpOmkoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNjApLGE9cig2MikuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTM5KSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLnBhZFN0YXJ0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNDApLGk9cigxMDApO24obi5QK24uRiovVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/IFNhZmFyaVwvLy50ZXN0KGkpLCJTdHJpbmciLHtwYWRTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITApfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApLGE9cigxNDEpLGk9cigzOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8pe3ZhciBzPVN0cmluZyhpKGUpKSxsPXMubGVuZ3RoLGM9dm9pZCAwPT09cj8iICI6U3RyaW5nKHIpLHU9bih0KTtpZih1PD1sfHwiIj09YylyZXR1cm4gczt2YXIgZj11LWwsaD1hLmNhbGwoYyxNYXRoLmNlaWwoZi9jLmxlbmd0aCkpO3JldHVybiBoLmxlbmd0aD5mJiYoaD1oLnNsaWNlKDAsZikpLG8/aCtzOnMraH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMSksYT1yKDM4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9U3RyaW5nKGEodGhpcykpLHI9IiIsaT1uKGUpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlIik7Zm9yKDtpPjA7KGk+Pj49MSkmJih0Kz10KSkxJmkmJihyKz10KTtyZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxNDMpLGUuZXhwb3J0cz1yKDE0KS5TdHJpbmcucGFkRW5kfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNDApLGk9cigxMDApO24obi5QK24uRiovVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/IFNhZmFyaVwvLy50ZXN0KGkpLCJTdHJpbmciLHtwYWRFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCExKX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDE0NSksZS5leHBvcnRzPXIoMTQpLk9iamVjdC52YWx1ZXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDE0NikoITEpO24obi5TLCJPYmplY3QiLHt2YWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1OSksYT1yKDQ3KSxpPXIoNzgpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHIsbz1hKHQpLHM9bihvKSxsPXMubGVuZ3RoLGM9MCx1PVtdO2w+YzspaS5jYWxsKG8scj1zW2MrK10pJiZ1LnB1c2goZT9bcixvW3JdXTpvW3JdKTtyZXR1cm4gdX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pdHJ5e25ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfX0pLG49ITB9Y2F0Y2goZSl7fXQuUmVhZGFibGVTdHJlYW09bj9SZWFkYWJsZVN0cmVhbTpyKDE0OCkuUmVhZGFibGVTdHJlYW19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTcpfShbZnVuY3Rpb24oZSx0LHIpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09bihTeW1ib2wuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6bihlKX0saT1yKDEpLmFzc2VydDtmdW5jdGlvbiBvKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8InN5bWJvbCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKX1mdW5jdGlvbiBzKGUsdCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9dC50eXBlSXNPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfSx0LmNyZWF0ZURhdGFQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7aSh0LnR5cGVJc09iamVjdChlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7dmFsdWU6bix3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfSx0LmNyZWF0ZUFycmF5RnJvbUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5BcnJheUJ1ZmZlckNvcHk9ZnVuY3Rpb24oZSx0LHIsbixhKXtuZXcgVWludDhBcnJheShlKS5zZXQobmV3IFVpbnQ4QXJyYXkocixuLGEpLHQpfSx0LkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3Q9ZnVuY3Rpb24oZSx0KXtpKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkociwidmFsdWUiLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRvbmUiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn0sdC5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiEoTnVtYmVyLmlzTmFOKGUpfHxlPT09MS8wfHxlPDApfSx0Lkludm9rZU9yTm9vcD1mdW5jdGlvbihlLHQscil7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSk7dmFyIG49ZVt0XTtpZih2b2lkIDAhPT1uKXJldHVybiBzKG4sZSxyKX0sdC5Qcm9taXNlSW52b2tlT3JOb29wPWZ1bmN0aW9uKGUscixuKXtpKHZvaWQgMCE9PWUpLGkobyhyKSksaShBcnJheS5pc0FycmF5KG4pKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0Lkludm9rZU9yTm9vcChlLHIsbikpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19LHQuUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSksaShBcnJheS5pc0FycmF5KGEpKTt2YXIgbD12b2lkIDA7dHJ5e2w9ZVt0XX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9aWYodm9pZCAwPT09bClyZXR1cm4gbi5hcHBseShudWxsLGEpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobCxlLHIpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSx0LlRyYW5zZmVyQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7aWYoZT1OdW1iZXIoZSksTnVtYmVyLmlzTmFOKGUpfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImhpZ2hXYXRlck1hcmsgcHJvcGVydHkgb2YgYSBxdWV1aW5nIHN0cmF0ZWd5IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub24tTmFOIik7cmV0dXJuIGV9LHQuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3k9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm57c2l6ZTplLGhpZ2hXYXRlck1hcms6cj10LlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhyKX19fSxmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLm1lc3NhZ2U9ZXx8IiIsdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9e3JldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjpmdW5jdGlvbihlKXtlJiZlLmNvbnN0cnVjdG9yPT09biYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9LEFzc2VydGlvbkVycm9yOm4sYXNzZXJ0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IG4odCl9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5JbnZva2VPck5vb3Ascz1pLlByb21pc2VJbnZva2VPck5vb3AsbD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LGM9aS50eXBlSXNPYmplY3QsdT1yKDEpLGY9dS5hc3NlcnQsaD11LnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixkPXIoMykscD1kLkRlcXVldWVWYWx1ZSxtPWQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsZz1kLlBlZWtRdWV1ZVZhbHVlLHY9ZC5SZXNldFF1ZXVlLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrLG89dm9pZCAwPT09aT8xOmk7YSh0aGlzLGUpLHRoaXMuX3N0YXRlPSJ3cml0YWJsZSIsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX3dyaXRlcj12b2lkIDAsdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyPXZvaWQgMCx0aGlzLl93cml0ZVJlcXVlc3RzPVtdLHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCx0aGlzLl9jbG9zZVJlcXVlc3Q9dm9pZCAwLHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCx0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCx0aGlzLl9iYWNrcHJlc3N1cmU9ITE7dmFyIHM9dC50eXBlO2lmKHZvaWQgMCE9PXMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGoodGhpcyx0LG4sbyksdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fc3RhcnRTdGVwcygpfXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PXcodGhpcyk/UHJvbWlzZS5yZWplY3QoSCgiYWJvcnQiKSk6ITA9PT1rKHRoaXMpP1Byb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhYm9ydCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyIikpOlModGhpcyxlKX19LHtrZXk6ImdldFdyaXRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXcodGhpcykpdGhyb3cgSCgiZ2V0V3JpdGVyIik7cmV0dXJuIGIodGhpcyl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09dyh0aGlzKSl0aHJvdyBIKCJsb2NrZWQiKTtyZXR1cm4gayh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBiKGUpe3JldHVybiBuZXcgTyhlKX1mdW5jdGlvbiB3KGUpe3JldHVybiEhYyhlKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGYoITA9PT13KGUpLCJJc1dyaXRhYmxlU3RyZWFtTG9ja2VkIHNob3VsZCBvbmx5IGJlIHVzZWQgb24ga25vd24gd3JpdGFibGUgc3RyZWFtcyIpLHZvaWQgMCE9PWUuX3dyaXRlcn1mdW5jdGlvbiBTKGUsdCl7dmFyIHI9ZS5fc3RhdGU7aWYoImNsb3NlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlc29sdmUodm9pZCAwKTtpZigiZXJyb3JlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlamVjdChlLl9zdG9yZWRFcnJvcik7dmFyIG49bmV3IFR5cGVFcnJvcigiUmVxdWVzdGVkIHRvIGFib3J0Iik7aWYodm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIsInN0YXRlIG11c3QgYmUgd3JpdGFibGUgb3IgZXJyb3JpbmciKTt2YXIgYT0hMTsiZXJyb3JpbmciPT09ciYmKGE9ITAsdD12b2lkIDApO3ZhciBpPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9e19yZXNvbHZlOnIsX3JlamVjdDpuLF9yZWFzb246dCxfd2FzQWxyZWFkeUVycm9yaW5nOmF9fSkpO3JldHVybiExPT09YSYmeChlLG4pLGl9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuX3N0YXRlOyJ3cml0YWJsZSIhPT1yPyhmKCJlcnJvcmluZyI9PT1yKSxBKGUpKTp4KGUsdCl9ZnVuY3Rpb24geChlLHQpe2Yodm9pZCAwPT09ZS5fc3RvcmVkRXJyb3IsInN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCIpLGYoIndyaXRhYmxlIj09PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIik7dmFyIHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO2Yodm9pZCAwIT09ciwiY29udHJvbGxlciBtdXN0IG5vdCBiZSB1bmRlZmluZWQiKSxlLl9zdGF0ZT0iZXJyb3JpbmciLGUuX3N0b3JlZEVycm9yPXQ7dmFyIG49ZS5fd3JpdGVyO3ZvaWQgMCE9PW4mJkQobix0KSwhMT09PUUoZSkmJiEwPT09ci5fc3RhcnRlZCYmQShlKX1mdW5jdGlvbiBBKGUpe2YoImVycm9yaW5nIj09PWUuX3N0YXRlLCJzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZyIpLGYoITE9PT1FKGUpLCJXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlIiksZS5fc3RhdGU9ImVycm9yZWQiLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtmb3IodmFyIHQ9ZS5fc3RvcmVkRXJyb3Iscj0wO3I8ZS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7cisrKWUuX3dyaXRlUmVxdWVzdHNbcl0uX3JlamVjdCh0KTtpZihlLl93cml0ZVJlcXVlc3RzPVtdLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Qpe3ZhciBuPWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q7aWYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsITA9PT1uLl93YXNBbHJlYWR5RXJyb3JpbmcpcmV0dXJuIG4uX3JlamVjdCh0KSx2b2lkIFQoZSk7ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhuLl9yZWFzb24pLnRoZW4oKGZ1bmN0aW9uKCl7bi5fcmVzb2x2ZSgpLFQoZSl9KSwoZnVuY3Rpb24odCl7bi5fcmVqZWN0KHQpLFQoZSl9KSl9ZWxzZSBUKGUpfWZ1bmN0aW9uIEMoZSl7Zih2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3Jlc29sdmUodm9pZCAwKSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDA7dmFyIHQ9ZS5fc3RhdGU7Zigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLCJlcnJvcmluZyI9PT10JiYoZS5fc3RvcmVkRXJyb3I9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmZnVuY3Rpb24oZSl7Zih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0LCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxmKCJwZW5kaW5nIj09PWUuX2Nsb3NlZFByb21pc2VTdGF0ZSwid3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZyIpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icmVzb2x2ZWQifShyKSxmKHZvaWQgMD09PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QsInN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9zdG9yZWRFcnJvciwic3RyZWFtLl9zdG9yZWRFcnJvciA9PT0gdW5kZWZpbmVkIil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0fHx2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdH1mdW5jdGlvbiBFKGUpe3JldHVybiB2b2lkIDAhPT1lLl9pbkZsaWdodFdyaXRlUmVxdWVzdHx8dm9pZCAwIT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3R9ZnVuY3Rpb24gVChlKXtmKCJlcnJvcmVkIj09PWUuX3N0YXRlLCdfc3RyZWFtXy5bW3N0YXRlXV0gaXMgYCJlcnJvcmVkImAnKSx2b2lkIDAhPT1lLl9jbG9zZVJlcXVlc3QmJihmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9jbG9zZVJlcXVlc3QuX3JlamVjdChlLl9zdG9yZWRFcnJvciksZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMCk7dmFyIHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJihZKHQsZS5fc3RvcmVkRXJyb3IpLHQuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBSKGUsdCl7Zigid3JpdGFibGUiPT09ZS5fc3RhdGUpLGYoITE9PT1QKGUpKTt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmdCE9PWUuX2JhY2twcmVzc3VyZSYmKCEwPT09dD9mdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQiKSxmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2UuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXQsZS5fcmVhZHlQcm9taXNlX3JlamVjdD1yfSkpLGUuX3JlYWR5UHJvbWlzZVN0YXRlPSJwZW5kaW5nIn0ocik6KGYoITE9PT10KSxRKHIpKSksZS5fYmFja3ByZXNzdXJlPXR9ZS5leHBvcnRzPXtBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOmIsSXNXcml0YWJsZVN0cmVhbTp3LElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6ayxXcml0YWJsZVN0cmVhbTp5LFdyaXRhYmxlU3RyZWFtQWJvcnQ6UyxXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6VyxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT10KTt2YXIgcj10Ll9zdGF0ZTtyZXR1cm4hMD09PVAodCl8fCJjbG9zZWQiPT09cj9Qcm9taXNlLnJlc29sdmUoKToiZXJyb3JlZCI9PT1yP1Byb21pc2UucmVqZWN0KHQuX3N0b3JlZEVycm9yKTooZigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLEYoZSkpfSxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOk0sV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6TixXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodDpQfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1rKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlciIpO3RoaXMuX293bmVyV3JpdGFibGVTdHJlYW09dCx0Ll93cml0ZXI9dGhpczt2YXIgcixuPXQuX3N0YXRlO2lmKCJ3cml0YWJsZSI9PT1uKSExPT09UCh0KSYmITA9PT10Ll9iYWNrcHJlc3N1cmU/KChyPXRoaXMpLl9yZWFkeVByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7ci5fcmVhZHlQcm9taXNlX3Jlc29sdmU9ZSxyLl9yZWFkeVByb21pc2VfcmVqZWN0PXR9KSksci5fcmVhZHlQcm9taXNlU3RhdGU9InBlbmRpbmciKTpKKHRoaXMpLFgodGhpcyk7ZWxzZSBpZigiZXJyb3JpbmciPT09bilLKHRoaXMsdC5fc3RvcmVkRXJyb3IpLHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksWCh0aGlzKTtlbHNlIGlmKCJjbG9zZWQiPT09bilKKHRoaXMpLGZ1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZXNvbHZlZCJ9KHRoaXMpO2Vsc2V7ZigiZXJyb3JlZCI9PT1uLCJzdGF0ZSBtdXN0IGJlIGVycm9yZWQiKTt2YXIgaT10Ll9zdG9yZWRFcnJvcjtLKHRoaXMsaSksdGhpcy5fcmVhZHlQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxmdW5jdGlvbihlLHQpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZWplY3RlZCJ9KHRoaXMsaSksdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9fXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygiYWJvcnQiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChWKCJhYm9ydCIpKTpmdW5jdGlvbihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07cmV0dXJuIGYodm9pZCAwIT09ciksUyhyLHQpfSh0aGlzLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChHKCJjbG9zZSIpKTt2YXIgZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO3JldHVybiB2b2lkIDA9PT1lP1Byb21pc2UucmVqZWN0KFYoImNsb3NlIikpOiEwPT09UChlKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbSIpKTpGKHRoaXMpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXRocm93IEcoInJlbGVhc2VMb2NrIik7dmFyIGU9dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTt2b2lkIDAhPT1lJiYoZih2b2lkIDAhPT1lLl93cml0ZXIpLE0odGhpcykpfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09SSh0aGlzKT9Qcm9taXNlLnJlamVjdChHKCJ3cml0ZSIpKTp2b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KFYoIndyaXRlIHRvIikpOk4odGhpcyxlKX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITE9PT1JKHRoaXMpP1Byb21pc2UucmVqZWN0KEcoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX0se2tleToiZGVzaXJlZFNpemUiLGdldDpmdW5jdGlvbigpe2lmKCExPT09SSh0aGlzKSl0aHJvdyBHKCJkZXNpcmVkU2l6ZSIpO2lmKHZvaWQgMD09PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0pdGhyb3cgVigiZGVzaXJlZFNpemUiKTtyZXR1cm4gZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtLCJlcnJvcmVkIj09PSh0PWUuX3N0YXRlKXx8ImVycm9yaW5nIj09PXQ/bnVsbDoiY2xvc2VkIj09PXQ/MDpCKGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7dmFyIGUsdH19LHtrZXk6InJlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygicmVhZHkiKSk6dGhpcy5fcmVhZHlQcm9taXNlfX1dKSxlfSgpO2Z1bmN0aW9uIEkoZSl7cmV0dXJuISFjKGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfb3duZXJXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpO3ZhciByPXQuX3N0YXRlO2lmKCJjbG9zZWQiPT09cnx8ImVycm9yZWQiPT09cilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIityKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKSk7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLGYoITE9PT1QKHQpKTt2YXIgbixhPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXtfcmVzb2x2ZTplLF9yZWplY3Q6cn07dC5fY2xvc2VSZXF1ZXN0PW59KSk7cmV0dXJuITA9PT10Ll9iYWNrcHJlc3N1cmUmJiJ3cml0YWJsZSI9PT1yJiZRKGUpLG49dC5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLG0obiwiY2xvc2UiLDApLFUobiksYX1mdW5jdGlvbiBMKGUsdCl7InBlbmRpbmciPT09ZS5fY2xvc2VkUHJvbWlzZVN0YXRlP1koZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZigicGVuZGluZyIhPT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nIiksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiBEKGUsdCl7InBlbmRpbmciPT09ZS5fcmVhZHlQcm9taXNlU3RhdGU/ZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlX3JlamVjdCh0KSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fcmVhZHlQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCIpLGYodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9yZWFkeVByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfWZ1bmN0aW9uIE0oZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpLGYodC5fd3JpdGVyPT09ZSk7dmFyIHI9bmV3IFR5cGVFcnJvcigiV3JpdGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKTtEKGUsciksTChlLHIpLHQuX3dyaXRlcj12b2lkIDAsZS5fb3duZXJXcml0YWJsZVN0cmVhbT12b2lkIDB9ZnVuY3Rpb24gTihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT1yKTt2YXIgbj1yLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsYT1mdW5jdGlvbihlLHQpe3ZhciByPWUuX3N0cmF0ZWd5U2l6ZTtpZih2b2lkIDA9PT1yKXJldHVybiAxO3RyeXtyZXR1cm4gcih0KX1jYXRjaCh0KXtyZXR1cm4gcShlLHQpLDF9fShuLHQpO2lmKHIhPT1lLl9vd25lcldyaXRhYmxlU3RyZWFtKXJldHVybiBQcm9taXNlLnJlamVjdChWKCJ3cml0ZSB0byIpKTt2YXIgaT1yLl9zdGF0ZTtpZigiZXJyb3JlZCI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7aWYoITA9PT1QKHIpfHwiY2xvc2VkIj09PWkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvIikpO2lmKCJlcnJvcmluZyI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7Zigid3JpdGFibGUiPT09aSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGYoITA9PT1rKGUpKSxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl93cml0ZVJlcXVlc3RzLnB1c2gobil9KSl9KHIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49e2NodW5rOnR9O3RyeXttKGUsbixyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBxKGUsdCl9dmFyIGE9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCExPT09UChhKSYmIndyaXRhYmxlIj09PWEuX3N0YXRlKXt2YXIgaT16KGUpO1IoYSxpKX1VKGUpfShuLHQsYSksb312YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTaW5rPXIsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCx2KHRoaXMpLHRoaXMuX3N0YXJ0ZWQ9ITE7dmFyIG89bChuLGkpO3RoaXMuX3N0cmF0ZWd5U2l6ZT1vLnNpemUsdGhpcy5fc3RyYXRlZ3lIV009by5oaWdoV2F0ZXJNYXJrLFIodCx6KHRoaXMpKX1yZXR1cm4gbihlLFt7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PSghIWModD10aGlzKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiX3VuZGVybHlpbmdTaW5rIikpKXRocm93IG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIik7dmFyIHQ7IndyaXRhYmxlIj09PXRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGUmJlcodGhpcyxlKX19LHtrZXk6Il9fYWJvcnRTdGVwcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5fdW5kZXJseWluZ1NpbmssImFib3J0IixbZV0pfX0se2tleToiX19lcnJvclN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3YodGhpcyl9fSx7a2V5OiJfX3N0YXJ0U3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW8odGhpcy5fdW5kZXJseWluZ1NpbmssInN0YXJ0IixbdGhpc10pLHI9dGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1Byb21pc2UucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbigpe2YoIndyaXRhYmxlIj09PXIuX3N0YXRlfHwiZXJyb3JpbmciPT09ci5fc3RhdGUpLGUuX3N0YXJ0ZWQ9ITAsVShlKX0pLChmdW5jdGlvbih0KXtmKCJ3cml0YWJsZSI9PT1yLl9zdGF0ZXx8ImVycm9yaW5nIj09PXIuX3N0YXRlKSxlLl9zdGFydGVkPSEwLF8ocix0KX0pKS5jYXRjaChoKX19XSksZX0oKTtmdW5jdGlvbiBCKGUpe3JldHVybiBlLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtpZighMSE9PWUuX3N0YXJ0ZWQmJnZvaWQgMD09PXQuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KXt2YXIgcj10Ll9zdGF0ZTtpZigiY2xvc2VkIiE9PXImJiJlcnJvcmVkIiE9PXIpaWYoImVycm9yaW5nIiE9PXIpe2lmKDAhPT1lLl9xdWV1ZS5sZW5ndGgpe3ZhciBuPWcoZSk7ImNsb3NlIj09PW4/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxmKHZvaWQgMCE9PWUuX2Nsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9ZS5fY2xvc2VSZXF1ZXN0LGUuX2Nsb3NlUmVxdWVzdD12b2lkIDB9KSh0KSxwKGUpLGYoMD09PWUuX3F1ZXVlLmxlbmd0aCwicXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQiKSxzKGUuX3VuZGVybHlpbmdTaW5rLCJjbG9zZSIsW10pLnRoZW4oKGZ1bmN0aW9uKCl7Qyh0KX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSx2b2lkIDAhPT1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0JiYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KHQpLGUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwKSxfKGUsdCl9KHQsZSl9KSkuY2F0Y2goaCl9KGUpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0LCJ0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCIpLGYoMCE9PWUuX3dyaXRlUmVxdWVzdHMubGVuZ3RoLCJ3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5IiksZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9ZS5fd3JpdGVSZXF1ZXN0cy5zaGlmdCgpfSkocikscyhlLl91bmRlcmx5aW5nU2luaywid3JpdGUiLFt0LGVdKS50aGVuKChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVzb2x2ZSh2b2lkIDApLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMH0ocik7dmFyIHQ9ci5fc3RhdGU7aWYoZigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLHAoZSksITE9PT1QKHIpJiYid3JpdGFibGUiPT09dCl7dmFyIG49eihlKTtSKHIsbil9VShlKX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSxfKGUsdCl9KHIsZSl9KSkuY2F0Y2goaCl9KGUsbi5jaHVuayl9fWVsc2UgQSh0KX19ZnVuY3Rpb24gcShlLHQpeyJ3cml0YWJsZSI9PT1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZXKGUsdCl9ZnVuY3Rpb24geihlKXtyZXR1cm4gQihlKTw9MH1mdW5jdGlvbiBXKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2YoIndyaXRhYmxlIj09PXIuX3N0YXRlKSx4KHIsdCl9ZnVuY3Rpb24gSChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHdyaXRlciIpfWZ1bmN0aW9uIFgoZSl7ZS5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD1yLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icGVuZGluZyJ9KSl9ZnVuY3Rpb24gWShlLHQpe2Yodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkIiksZih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZigicGVuZGluZyI9PT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmciKSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn1mdW5jdGlvbiBLKGUsdCl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0icmVqZWN0ZWQifWZ1bmN0aW9uIEooZSl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn1mdW5jdGlvbiBRKGUpe2Yodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCIpLGYodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDApLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYT1yKDEpLmFzc2VydDt0LkRlcXVldWVWYWx1ZT1mdW5jdGlvbihlKXthKCJfcXVldWUiaW4gZSYmIl9xdWV1ZVRvdGFsU2l6ZSJpbiBlLCJTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxhKGUuX3F1ZXVlLmxlbmd0aD4wLCJTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuIik7dmFyIHQ9ZS5fcXVldWUuc2hpZnQoKTtyZXR1cm4gZS5fcXVldWVUb3RhbFNpemUtPXQuc2l6ZSxlLl9xdWV1ZVRvdGFsU2l6ZTwwJiYoZS5fcXVldWVUb3RhbFNpemU9MCksdC52YWx1ZX0sdC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZT1mdW5jdGlvbihlLHQscil7aWYoYSgiX3F1ZXVlImluIGUmJiJfcXVldWVUb3RhbFNpemUiaW4gZSwiU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxyPU51bWJlcihyKSwhbihyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLiIpO2UuX3F1ZXVlLnB1c2goe3ZhbHVlOnQsc2l6ZTpyfSksZS5fcXVldWVUb3RhbFNpemUrPXJ9LHQuUGVla1F1ZXVlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uIiksYShlLl9xdWV1ZS5sZW5ndGg+MCwiU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4iKSxlLl9xdWV1ZVswXS52YWx1ZX0sdC5SZXNldFF1ZXVlPWZ1bmN0aW9uKGUpe2EoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxlLl9xdWV1ZT1bXSxlLl9xdWV1ZVRvdGFsU2l6ZT0wfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5BcnJheUJ1ZmZlckNvcHkscz1pLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsbD1pLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYz1pLkludm9rZU9yTm9vcCx1PWkuUHJvbWlzZUludm9rZU9yTm9vcCxmPWkuVHJhbnNmZXJBcnJheUJ1ZmZlcixoPWkuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksZD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayxwPXIoMCksbT1wLmNyZWF0ZUFycmF5RnJvbUxpc3QsZz1wLmNyZWF0ZURhdGFQcm9wZXJ0eSx2PXAudHlwZUlzT2JqZWN0LHk9cigxKSxiPXkuYXNzZXJ0LHc9eS5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24saz1yKDMpLFM9ay5EZXF1ZXVlVmFsdWUsXz1rLkVucXVldWVWYWx1ZVdpdGhTaXplLHg9ay5SZXNldFF1ZXVlLEE9cigyKSxDPUEuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixQPUEuSXNXcml0YWJsZVN0cmVhbSxFPUEuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxUPUEuV3JpdGFibGVTdHJlYW1BYm9ydCxSPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixPPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxJPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUsRj1BLldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrO2EodGhpcyxlKSx0aGlzLl9zdGF0ZT0icmVhZGFibGUiLHRoaXMuX3JlYWRlcj12b2lkIDAsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX2Rpc3R1cmJlZD0hMSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwO3ZhciBvPXQudHlwZSxzPVN0cmluZyhvKTtpZigiYnl0ZXMiPT09cyl2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGRlKHRoaXMsdCxpKTtlbHNle2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt2b2lkIDA9PT1pJiYoaT0xKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGFlKHRoaXMsdCxuLGkpfX1yZXR1cm4gbihlLFt7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09Tih0aGlzKT9Qcm9taXNlLnJlamVjdChSZSgiY2FuY2VsIikpOiEwPT09aih0aGlzKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXIiKSk6eih0aGlzLGUpfX0se2tleToiZ2V0UmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubW9kZTtpZighMT09PU4odGhpcykpdGhyb3cgUmUoImdldFJlYWRlciIpO2lmKHZvaWQgMD09PXQpcmV0dXJuIE0odGhpcyk7aWYoImJ5b2IiPT09KHQ9U3RyaW5nKHQpKSlyZXR1cm4gRCh0aGlzKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBtb2RlIGlzIHNwZWNpZmllZCIpfX0se2tleToicGlwZVRocm91Z2giLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS53cml0YWJsZSxuPWUucmVhZGFibGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3RyeXtQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoZSx2b2lkIDAsKGZ1bmN0aW9uKCl7fSkpfWNhdGNoKGUpe319KHRoaXMucGlwZVRvKHIsdCkpLG59fSx7a2V5OiJwaXBlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLnByZXZlbnRDbG9zZSxhPXIucHJldmVudEFib3J0LGk9ci5wcmV2ZW50Q2FuY2VsO2lmKCExPT09Tih0aGlzKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoUmUoInBpcGVUbyIpKTtpZighMT09PVAoZSkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8ncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0iKSk7aWYobj1Cb29sZWFuKG4pLGE9Qm9vbGVhbihhKSxpPUJvb2xlYW4oaSksITA9PT1qKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtIikpO2lmKCEwPT09RShlKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbyBjYW5ub3QgYmUgdXNlZCBvbiBhIGxvY2tlZCBXcml0YWJsZVN0cmVhbSIpKTt2YXIgbz1NKHRoaXMpLHM9QyhlKSxsPSExLGM9UHJvbWlzZS5yZXNvbHZlKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHUpe3ZhciBmLGgsZDtpZihnKHQsby5fY2xvc2VkUHJvbWlzZSwoZnVuY3Rpb24odCl7ITE9PT1hP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIFQoZSx0KX0pLCEwLHQpOnkoITAsdCl9KSksZyhlLHMuX2Nsb3NlZFByb21pc2UsKGZ1bmN0aW9uKGUpeyExPT09aT92KChmdW5jdGlvbigpe3JldHVybiB6KHQsZSl9KSwhMCxlKTp5KCEwLGUpfSkpLGY9dCxoPW8uX2Nsb3NlZFByb21pc2UsZD1mdW5jdGlvbigpeyExPT09bj92KChmdW5jdGlvbigpe3JldHVybiBSKHMpfSkpOnkoKX0sImNsb3NlZCI9PT1mLl9zdGF0ZT9kKCk6aC50aGVuKGQpLmNhdGNoKHcpLCEwPT09RihlKXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSl7dmFyIHA9bmV3IFR5cGVFcnJvcigidGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Iik7ITE9PT1pP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIHoodCxwKX0pLCEwLHApOnkoITAscCl9ZnVuY3Rpb24gbSgpe3ZhciBlPWM7cmV0dXJuIGMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZSE9PWM/bSgpOnZvaWQgMH0pKX1mdW5jdGlvbiBnKGUsdCxyKXsiZXJyb3JlZCI9PT1lLl9zdGF0ZT9yKGUuX3N0b3JlZEVycm9yKTp0LmNhdGNoKHIpLmNhdGNoKHcpfWZ1bmN0aW9uIHYodCxyLG4pe2Z1bmN0aW9uIGEoKXt0KCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYihyLG4pfSksKGZ1bmN0aW9uKGUpe3JldHVybiBiKCEwLGUpfSkpLmNhdGNoKHcpfSEwIT09bCYmKGw9ITAsIndyaXRhYmxlIj09PWUuX3N0YXRlJiYhMT09PUYoZSk/bSgpLnRoZW4oYSk6YSgpKX1mdW5jdGlvbiB5KHQscil7ITAhPT1sJiYobD0hMCwid3JpdGFibGUiPT09ZS5fc3RhdGUmJiExPT09RihlKT9tKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYih0LHIpfSkpLmNhdGNoKHcpOmIodCxyKSl9ZnVuY3Rpb24gYihlLHQpe08ocykscmUobyksZT91KHQpOnIodm9pZCAwKX0oZnVuY3Rpb24gZSgpe3JldHVybiBjPVByb21pc2UucmVzb2x2ZSgpLCEwPT09bD9Qcm9taXNlLnJlc29sdmUoKTpzLl9yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmUobykudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTshMCE9PWUuZG9uZSYmKGM9SShzLHQpLmNhdGNoKChmdW5jdGlvbigpe30pKSl9KSl9KSkudGhlbihlKX0pKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe2M9UHJvbWlzZS5yZXNvbHZlKCksdyhlKX0pKX0pKX19LHtrZXk6InRlZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PU4odGhpcykpdGhyb3cgUmUoInRlZSIpO3ZhciBlPUIodGhpcywhMSk7cmV0dXJuIG0oZSl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09Tih0aGlzKSl0aHJvdyBSZSgibG9ja2VkIik7cmV0dXJuIGoodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFEoZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4gbmV3IEooZSl9ZnVuY3Rpb24gTihlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIiKX1mdW5jdGlvbiBqKGUpe3JldHVybiBiKCEwPT09TihlKSwiSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSx2b2lkIDAhPT1lLl9yZWFkZXJ9ZnVuY3Rpb24gQihlLHQpe2IoITA9PT1OKGUpKSxiKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPU0oZSksbj17Y2xvc2VkT3JFcnJvcmVkOiExLGNhbmNlbGVkMTohMSxjYW5jZWxlZDI6ITEscmVhc29uMTp2b2lkIDAscmVhc29uMjp2b2lkIDB9O24ucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5fcmVzb2x2ZT1lfSkpO3ZhciBhPWZ1bmN0aW9uIGUoKXt2YXIgdD1lLl9icmFuY2gxLHI9ZS5fYnJhbmNoMixuPWUuX3RlZVN0YXRlO3JldHVybiBuZShlLl9yZWFkZXIpLnRoZW4oKGZ1bmN0aW9uKGUpe2IodihlKSk7dmFyIGE9ZS52YWx1ZSxpPWUuZG9uZTtpZihiKCJib29sZWFuIj09dHlwZW9mIGkpLCEwPT09aSYmITE9PT1uLmNsb3NlZE9yRXJyb3JlZCYmKCExPT09bi5jYW5jZWxlZDEmJnNlKHQpLCExPT09bi5jYW5jZWxlZDImJnNlKHIpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKSwhMCE9PW4uY2xvc2VkT3JFcnJvcmVkKXt2YXIgbz1hLHM9YTshMT09PW4uY2FuY2VsZWQxJiZsZSh0LG8pLCExPT09bi5jYW5jZWxlZDImJmxlKHIscyl9fSkpfTthLl9yZWFkZXI9cixhLl90ZWVTdGF0ZT1uLGEuX2Nsb25lRm9yQnJhbmNoMj10O3ZhciBpPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDE9ITAsbi5yZWFzb24xPXQsITA9PT1uLmNhbmNlbGVkMil7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtpLl9zdHJlYW09ZSxpLl90ZWVTdGF0ZT1uO3ZhciBvPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDI9ITAsbi5yZWFzb24yPXQsITA9PT1uLmNhbmNlbGVkMSl7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtvLl9zdHJlYW09ZSxvLl90ZWVTdGF0ZT1uO3ZhciBzPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7ZyhzLCJwdWxsIixhKSxnKHMsImNhbmNlbCIsaSk7dmFyIGw9bmV3IEwocyksYz1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO2coYywicHVsbCIsYSksZyhjLCJjYW5jZWwiLG8pO3ZhciB1PW5ldyBMKGMpO3JldHVybiBhLl9icmFuY2gxPWwuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixhLl9icmFuY2gyPXUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixyLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXshMCE9PW4uY2xvc2VkT3JFcnJvcmVkJiYoY2UoYS5fYnJhbmNoMSxlKSxjZShhLl9icmFuY2gyLGUpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKX0pKSxbbCx1XX1mdW5jdGlvbiBVKGUpe3JldHVybiBiKCEwPT09WihlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMucHVzaChuKX0pKX1mdW5jdGlvbiBxKGUpe3JldHVybiBiKCEwPT09JChlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKG4pfSkpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6ImVycm9yZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpOihXKGUpLGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBXKGUpe2IoInJlYWRhYmxlIj09PWUuX3N0YXRlKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgdD1lLl9yZWFkZXI7aWYodm9pZCAwIT09dCl7aWYoITA9PT0kKHQpKXtmb3IodmFyIHI9MDtyPHQuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7cisrKSgwLHQuX3JlYWRSZXF1ZXN0c1tyXS5fcmVzb2x2ZSkocyh2b2lkIDAsITApKTt0Ll9yZWFkUmVxdWVzdHM9W119IWZ1bmN0aW9uKGUpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodm9pZCAwKSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH0odCl9fWZ1bmN0aW9uIEgoZSx0KXtiKCEwPT09TihlKSwic3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0iKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSwic3RhdGUgbXVzdCBiZSByZWFkYWJsZSIpLGUuX3N0YXRlPSJlcnJvcmVkIixlLl9zdG9yZWRFcnJvcj10O3ZhciByPWUuX3JlYWRlcjtpZih2b2lkIDAhPT1yKXtpZighMD09PSQocikpe2Zvcih2YXIgbj0wO248ci5fcmVhZFJlcXVlc3RzLmxlbmd0aDtuKyspci5fcmVhZFJlcXVlc3RzW25dLl9yZWplY3QodCk7ci5fcmVhZFJlcXVlc3RzPVtdfWVsc2V7YihaKHIpLCJyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiKTtmb3IodmFyIGE9MDthPHIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO2ErKylyLl9yZWFkSW50b1JlcXVlc3RzW2FdLl9yZWplY3QodCk7ci5fcmVhZEludG9SZXF1ZXN0cz1bXX1GZShyLHQpLHIuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfX1mdW5jdGlvbiBHKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkUmVxdWVzdHMubGVuZ3RoPjApLG4uX3JlYWRSZXF1ZXN0cy5zaGlmdCgpLl9yZXNvbHZlKHModCxyKSl9ZnVuY3Rpb24gVihlKXtyZXR1cm4gZS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aH1mdW5jdGlvbiBYKGUpe3JldHVybiBlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGh9ZnVuY3Rpb24gWShlKXt2YXIgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiExIT09Wih0KX1mdW5jdGlvbiBLKGUpe3ZhciB0PWUuX3JlYWRlcjtyZXR1cm4gdm9pZCAwIT09dCYmITEhPT0kKHQpfWUuZXhwb3J0cz17UmVhZGFibGVTdHJlYW06TCxJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3JldHVybiBiKCEwPT09TihlKSwiSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSxlLl9kaXN0dXJiZWR9LFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTpzZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTpsZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6Y2UsUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOmZlfTt2YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09Tih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1qKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlciIpO2VlKHRoaXMsdCksdGhpcy5fcmVhZFJlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT0kKHRoaXMpP1Byb21pc2UucmVqZWN0KEllKCJjYW5jZWwiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSl9fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExPT09JCh0aGlzKT9Qcm9taXNlLnJlamVjdChJZSgicmVhZCIpKTp2b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KE9lKCJyZWFkIGZyb20iKSk6bmUodGhpcyl9fSx7a2V5OiJyZWxlYXNlTG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PSQodGhpcykpdGhyb3cgSWUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aD4wKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkIik7cmUodGhpcyl9fX0se2tleToiY2xvc2VkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PSQodGhpcyk/UHJvbWlzZS5yZWplY3QoSWUoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX1dKSxlfSgpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKGEodGhpcyxlKSwhTih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZighMT09PXBlKHQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlIHNvdXJjZSIpO2lmKGoodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyIik7ZWUodGhpcyx0KSx0aGlzLl9yZWFkSW50b1JlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFoodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSk6UHJvbWlzZS5yZWplY3QoTGUoImNhbmNlbCIpKX19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaKHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0/UHJvbWlzZS5yZWplY3QoT2UoInJlYWQgZnJvbSIpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoZSk/MD09PWUuYnl0ZUxlbmd0aD9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJ2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoIikpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtyZXR1cm4gYih2b2lkIDAhPT1yKSxyLl9kaXN0dXJiZWQ9ITAsImVycm9yZWQiPT09ci5fc3RhdGU/UHJvbWlzZS5yZWplY3Qoci5fc3RvcmVkRXJyb3IpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLG49MTt0LmNvbnN0cnVjdG9yIT09RGF0YVZpZXcmJihuPXQuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQpO3ZhciBhPXQuY29uc3RydWN0b3IsaT17YnVmZmVyOnQuYnVmZmVyLGJ5dGVPZmZzZXQ6dC5ieXRlT2Zmc2V0LGJ5dGVMZW5ndGg6dC5ieXRlTGVuZ3RoLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6bixjdG9yOmEscmVhZGVyVHlwZToiYnlvYiJ9O2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApcmV0dXJuIGkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKSxVKHIpO2lmKCJjbG9zZWQiPT09ci5fc3RhdGUpe3ZhciBvPW5ldyB0LmNvbnN0cnVjdG9yKGkuYnVmZmVyLGkuYnl0ZU9mZnNldCwwKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobywhMCkpfWlmKGUuX3F1ZXVlVG90YWxTaXplPjApe2lmKCEwPT09a2UoZSxpKSl7dmFyIGw9YmUoaSk7cmV0dXJuIF9lKGUpLFByb21pc2UucmVzb2x2ZShzKGwsITEpKX1pZighMD09PWUuX2Nsb3NlUmVxdWVzdGVkKXt2YXIgYz1uZXcgVHlwZUVycm9yKCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyIik7cmV0dXJuIEVlKGUsYyksUHJvbWlzZS5yZWplY3QoYyl9fWkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKTt2YXIgdT1VKHIpO3JldHVybiBnZShlKSx1fShyLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsdCl9KHRoaXMsZSk6UHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigidmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3IikpOlByb21pc2UucmVqZWN0KExlKCJyZWFkIikpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIVoodGhpcykpdGhyb3cgTGUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg+MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCIpO3JlKHRoaXMpfX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpQcm9taXNlLnJlamVjdChMZSgiY2xvc2VkIikpfX1dKSxlfSgpO2Z1bmN0aW9uIFooZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZEludG9SZXF1ZXN0cyIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZFJlcXVlc3RzIil9ZnVuY3Rpb24gZWUoZSx0KXtlLl9vd25lclJlYWRhYmxlU3RyZWFtPXQsdC5fcmVhZGVyPWUsInJlYWRhYmxlIj09PXQuX3N0YXRlP2Z1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXQsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9cn0pKX0oZSk6ImNsb3NlZCI9PT10Ll9zdGF0ZT9mdW5jdGlvbihlKXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlKTooYigiZXJyb3JlZCI9PT10Ll9zdGF0ZSwic3RhdGUgbXVzdCBiZSBlcnJvcmVkIiksZnVuY3Rpb24oZSx0KXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlLHQuX3N0b3JlZEVycm9yKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgcj1lLl9vd25lclJlYWRhYmxlU3RyZWFtO3JldHVybiBiKHZvaWQgMCE9PXIpLHoocix0KX1mdW5jdGlvbiByZShlKXtiKHZvaWQgMCE9PWUuX293bmVyUmVhZGFibGVTdHJlYW0pLGIoZS5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyPT09ZSksInJlYWRhYmxlIj09PWUuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlP0ZlKGUsbmV3IFR5cGVFcnJvcigiUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKSk6ZnVuY3Rpb24oZSx0KXtiKHZvaWQgMD09PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSksYih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KX0oZSxuZXcgVHlwZUVycm9yKCJSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzcyIpKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxlLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXI9dm9pZCAwLGUuX293bmVyUmVhZGFibGVTdHJlYW09dm9pZCAwfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PWUuX293bmVyUmVhZGFibGVTdHJlYW07cmV0dXJuIGIodm9pZCAwIT09dCksdC5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHModm9pZCAwLCEwKSk6ImVycm9yZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZWplY3QodC5fc3RvcmVkRXJyb3IpOihiKCJyZWFkYWJsZSI9PT10Ll9zdGF0ZSksdC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCkpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09Tih0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTb3VyY2U9cix0aGlzLl9xdWV1ZT12b2lkIDAsdGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jbG9zZVJlcXVlc3RlZD0hMSx0aGlzLl9wdWxsQWdhaW49ITEsdGhpcy5fcHVsbGluZz0hMTt2YXIgbz1oKG4saSk7dGhpcy5fc3RyYXRlZ3lTaXplPW8uc2l6ZSx0aGlzLl9zdHJhdGVneUhXTT1vLmhpZ2hXYXRlck1hcms7dmFyIHM9dGhpcyxsPWMociwic3RhcnQiLFt0aGlzXSk7UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKCl7cy5fc3RhcnRlZD0hMCxiKCExPT09cy5fcHVsbGluZyksYighMT09PXMuX3B1bGxBZ2Fpbiksb2Uocyl9KSwoZnVuY3Rpb24oZSl7dWUocyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTtzZSh0aGlzKX19LHtrZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09aWUodGhpcykpdGhyb3cgRGUoImVucXVldWUiKTtpZighMD09PXRoaXMuX2Nsb3NlUmVxdWVzdGVkKXRocm93IG5ldyBUeXBlRXJyb3IoInN0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmciKTt2YXIgdD10aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO2lmKCJyZWFkYWJsZSIhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gKGluICIrdCsiIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8iKTtyZXR1cm4gbGUodGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7Y2UodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwiY2FuY2VsIixbZV0pfX0se2tleToiX19wdWxsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD4wKXt2YXIgdD1TKHRoaXMpO3JldHVybiEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQmJjA9PT10aGlzLl9xdWV1ZS5sZW5ndGg/VyhlKTpvZSh0aGlzKSxQcm9taXNlLnJlc29sdmUocyh0LCExKSl9dmFyIHI9cShlKTtyZXR1cm4gb2UodGhpcykscn19LHtrZXk6ImRlc2lyZWRTaXplIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJkZXNpcmVkU2l6ZSIpO3JldHVybiBmZSh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBpZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl91bmRlcmx5aW5nU291cmNlIil9ZnVuY3Rpb24gb2UoZSl7ITEhPT1mdW5jdGlvbihlKXt2YXIgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07cmV0dXJuImNsb3NlZCIhPT10Ll9zdGF0ZSYmImVycm9yZWQiIT09dC5fc3RhdGUmJighMCE9PWUuX2Nsb3NlUmVxdWVzdGVkJiYoITEhPT1lLl9zdGFydGVkJiYoITA9PT1qKHQpJiZYKHQpPjB8fGZlKGUpPjApKSl9KGUpJiYoITAhPT1lLl9wdWxsaW5nPyhiKCExPT09ZS5fcHVsbEFnYWluKSxlLl9wdWxsaW5nPSEwLHUoZS5fdW5kZXJseWluZ1NvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2lmKGUuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4pcmV0dXJuIGUuX3B1bGxBZ2Fpbj0hMSxvZShlKX0pLChmdW5jdGlvbih0KXt1ZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtiKCExPT09ZS5fY2xvc2VSZXF1ZXN0ZWQpLGIoInJlYWRhYmxlIj09PXQuX3N0YXRlKSxlLl9jbG9zZVJlcXVlc3RlZD0hMCwwPT09ZS5fcXVldWUubGVuZ3RoJiZXKHQpfWZ1bmN0aW9uIGxlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpLCEwPT09aihyKSYmWChyKT4wKUcocix0LCExKTtlbHNle3ZhciBuPTE7aWYodm9pZCAwIT09ZS5fc3RyYXRlZ3lTaXplKXt2YXIgYT1lLl9zdHJhdGVneVNpemU7dHJ5e249YSh0KX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fXRyeXtfKGUsdCxuKX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fW9lKGUpfWZ1bmN0aW9uIGNlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoInJlYWRhYmxlIj09PXIuX3N0YXRlKSx4KGUpLEgocix0KX1mdW5jdGlvbiB1ZShlLHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZjZShlLHQpfWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfXZhciBoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI9dCx0aGlzLl92aWV3PXJ9cmV0dXJuIG4oZSxbe2tleToicmVzcG9uZCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1tZSh0aGlzKSl0aHJvdyBNZSgicmVzcG9uZCIpO2lmKHZvaWQgMD09PXRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkIik7IWZ1bmN0aW9uKGUsdCl7aWYodD1OdW1iZXIodCksITE9PT1sKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gbXVzdCBiZSBhIGZpbml0ZSIpO2IoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCksQ2UoZSx0KX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9fSx7a2V5OiJyZXNwb25kV2l0aE5ld1ZpZXciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09bWUodGhpcykpdGhyb3cgTWUoInJlc3BvbmQiKTtpZih2b2lkIDA9PT10aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IHJlc3BvbmQgd2l0aCBhcnJheSBidWZmZXIgdmlld3MiKTshZnVuY3Rpb24oZSx0KXtiKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApO3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF07aWYoci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQhPT10LmJ5dGVPZmZzZXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QiKTtpZihyLmJ5dGVMZW5ndGghPT10LmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QiKTtyLmJ1ZmZlcj10LmJ1ZmZlcixDZShlLHQuYnl0ZUxlbmd0aCl9KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLGUpfX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXd9fV0pLGV9KCksZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtpZihhKHRoaXMsZSksITE9PT1OKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZih2b2lkIDAhPT10Ll9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZ2l2ZW4gYSBieXRlIHNvdXJjZSIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlPXIsdGhpcy5fcHVsbEFnYWluPSExLHRoaXMuX3B1bGxpbmc9ITEsdmUodGhpcyksdGhpcy5fcXVldWU9dGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fY2xvc2VSZXF1ZXN0ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9zdHJhdGVneUhXTT1kKG4pO3ZhciBpPXIuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKHZvaWQgMCE9PWkmJighMT09PU51bWJlci5pc0ludGVnZXIoaSl8fGk8PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTt0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU9aSx0aGlzLl9wZW5kaW5nUHVsbEludG9zPVtdO3ZhciBvPXRoaXMscz1jKHIsInN0YXJ0IixbdGhpc10pO1Byb21pc2UucmVzb2x2ZShzKS50aGVuKChmdW5jdGlvbigpe28uX3N0YXJ0ZWQ9ITAsYighMT09PW8uX3B1bGxpbmcpLGIoITE9PT1vLl9wdWxsQWdhaW4pLGdlKG8pfSksKGZ1bmN0aW9uKGUpeyJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmRWUobyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXBlKHRoaXMpKXRocm93IE5lKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09dC5fc3RhdGUpLGUuX3F1ZXVlVG90YWxTaXplPjApZS5fY2xvc2VSZXF1ZXN0ZWQ9ITA7ZWxzZXtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiZlLl9wZW5kaW5nUHVsbEludG9zWzBdLmJ5dGVzRmlsbGVkPjApe3ZhciByPW5ldyBUeXBlRXJyb3IoIkluc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXIiKTt0aHJvdyBFZShlLHIpLHJ9Vyh0KX19KHRoaXMpfX0se2tleToiZW5xdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiZW5xdWV1ZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigic3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZyIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIit0KyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0byIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIik7IWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpO3ZhciBuPXQuYnVmZmVyLGE9dC5ieXRlT2Zmc2V0LGk9dC5ieXRlTGVuZ3RoLG89ZihuKTtpZighMD09PUsocikpaWYoMD09PVgocikpd2UoZSxvLGEsaSk7ZWxzZXtiKDA9PT1lLl9xdWV1ZS5sZW5ndGgpO3ZhciBzPW5ldyBVaW50OEFycmF5KG8sYSxpKTtHKHIscywhMSl9ZWxzZSEwPT09WShyKT8od2UoZSxvLGEsaSksQWUoZSkpOihiKCExPT09aihyKSwic3RyZWFtIG11c3Qgbm90IGJlIGxvY2tlZCIpLHdlKGUsbyxhLGkpKX0odGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PXBlKHRoaXMpKXRocm93IE5lKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7RWUodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiYodGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXS5ieXRlc0ZpbGxlZD0wKSx4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UsImNhbmNlbCIsW2VdKX19LHtrZXk6Il9fcHVsbFN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZihiKCEwPT09SyhlKSksdGhpcy5fcXVldWVUb3RhbFNpemU+MCl7YigwPT09WChlKSk7dmFyIHQ9dGhpcy5fcXVldWUuc2hpZnQoKTt0aGlzLl9xdWV1ZVRvdGFsU2l6ZS09dC5ieXRlTGVuZ3RoLF9lKHRoaXMpO3ZhciByPXZvaWQgMDt0cnl7cj1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKHIsITEpKX12YXIgbj10aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7aWYodm9pZCAwIT09bil7dmFyIGE9dm9pZCAwO3RyeXthPW5ldyBBcnJheUJ1ZmZlcihuKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9dmFyIGk9e2J1ZmZlcjphLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOm4sYnl0ZXNGaWxsZWQ6MCxlbGVtZW50U2l6ZToxLGN0b3I6VWludDhBcnJheSxyZWFkZXJUeXBlOiJkZWZhdWx0In07dGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGkpfXZhciBvPXEoZSk7cmV0dXJuIGdlKHRoaXMpLG99fSx7a2V5OiJieW9iUmVxdWVzdCIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiYnlvYlJlcXVlc3QiKTtpZih2b2lkIDA9PT10aGlzLl9ieW9iUmVxdWVzdCYmdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXSx0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtlLmJ5dGVzRmlsbGVkLGUuYnl0ZUxlbmd0aC1lLmJ5dGVzRmlsbGVkKTt0aGlzLl9ieW9iUmVxdWVzdD1uZXcgaGUodGhpcyx0KX1yZXR1cm4gdGhpcy5fYnlvYlJlcXVlc3R9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBOZSgiZGVzaXJlZFNpemUiKTtyZXR1cm4gVGUodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdW5kZXJseWluZ0J5dGVTb3VyY2UiKX1mdW5jdGlvbiBtZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGdlKGUpeyExIT09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO3JldHVybiJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmKCEwIT09ZS5fY2xvc2VSZXF1ZXN0ZWQmJighMSE9PWUuX3N0YXJ0ZWQmJighMD09PUsodCkmJlgodCk+MHx8KCEwPT09WSh0KSYmVih0KT4wfHxUZShlKT4wKSkpKX0oZSkmJighMCE9PWUuX3B1bGxpbmc/KGIoITE9PT1lLl9wdWxsQWdhaW4pLGUuX3B1bGxpbmc9ITAsdShlLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2UuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsZ2UoZSkpfSksKGZ1bmN0aW9uKHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZFZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHZlKGUpe3hlKGUpLGUuX3BlbmRpbmdQdWxsSW50b3M9W119ZnVuY3Rpb24geWUoZSx0KXtiKCJlcnJvcmVkIiE9PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IG5vdCBiZSBlcnJvcmVkIik7dmFyIHI9ITE7ImNsb3NlZCI9PT1lLl9zdGF0ZSYmKGIoMD09PXQuYnl0ZXNGaWxsZWQpLHI9ITApO3ZhciBuPWJlKHQpOyJkZWZhdWx0Ij09PXQucmVhZGVyVHlwZT9HKGUsbixyKTooYigiYnlvYiI9PT10LnJlYWRlclR5cGUpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aD4wKSxuLl9yZWFkSW50b1JlcXVlc3RzLnNoaWZ0KCkuX3Jlc29sdmUocyh0LHIpKX0oZSxuLHIpKX1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLmJ5dGVzRmlsbGVkLHI9ZS5lbGVtZW50U2l6ZTtyZXR1cm4gYih0PD1lLmJ5dGVMZW5ndGgpLGIodCVyPT0wKSxuZXcgZS5jdG9yKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCx0L3IpfWZ1bmN0aW9uIHdlKGUsdCxyLG4pe2UuX3F1ZXVlLnB1c2goe2J1ZmZlcjp0LGJ5dGVPZmZzZXQ6cixieXRlTGVuZ3RoOm59KSxlLl9xdWV1ZVRvdGFsU2l6ZSs9bn1mdW5jdGlvbiBrZShlLHQpe3ZhciByPXQuZWxlbWVudFNpemUsbj10LmJ5dGVzRmlsbGVkLXQuYnl0ZXNGaWxsZWQlcixhPU1hdGgubWluKGUuX3F1ZXVlVG90YWxTaXplLHQuYnl0ZUxlbmd0aC10LmJ5dGVzRmlsbGVkKSxpPXQuYnl0ZXNGaWxsZWQrYSxzPWktaSVyLGw9YSxjPSExO3M+biYmKGw9cy10LmJ5dGVzRmlsbGVkLGM9ITApO2Zvcih2YXIgdT1lLl9xdWV1ZTtsPjA7KXt2YXIgZj11WzBdLGg9TWF0aC5taW4obCxmLmJ5dGVMZW5ndGgpLGQ9dC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQ7byh0LmJ1ZmZlcixkLGYuYnVmZmVyLGYuYnl0ZU9mZnNldCxoKSxmLmJ5dGVMZW5ndGg9PT1oP3Uuc2hpZnQoKTooZi5ieXRlT2Zmc2V0Kz1oLGYuYnl0ZUxlbmd0aC09aCksZS5fcXVldWVUb3RhbFNpemUtPWgsU2UoZSxoLHQpLGwtPWh9cmV0dXJuITE9PT1jJiYoYigwPT09ZS5fcXVldWVUb3RhbFNpemUsInF1ZXVlIG11c3QgYmUgZW1wdHkiKSxiKHQuYnl0ZXNGaWxsZWQ+MCksYih0LmJ5dGVzRmlsbGVkPHQuZWxlbWVudFNpemUpKSxjfWZ1bmN0aW9uIFNlKGUsdCxyKXtiKDA9PT1lLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aHx8ZS5fcGVuZGluZ1B1bGxJbnRvc1swXT09PXIpLHhlKGUpLHIuYnl0ZXNGaWxsZWQrPXR9ZnVuY3Rpb24gX2UoZSl7YigicmVhZGFibGUiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSksMD09PWUuX3F1ZXVlVG90YWxTaXplJiYhMD09PWUuX2Nsb3NlUmVxdWVzdGVkP1coZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTpnZShlKX1mdW5jdGlvbiB4ZShlKXt2b2lkIDAhPT1lLl9ieW9iUmVxdWVzdCYmKGUuX2J5b2JSZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsZS5fYnlvYlJlcXVlc3QuX3ZpZXc9dm9pZCAwLGUuX2J5b2JSZXF1ZXN0PXZvaWQgMCl9ZnVuY3Rpb24gQWUoZSl7Zm9yKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCk7ZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MDspe2lmKDA9PT1lLl9xdWV1ZVRvdGFsU2l6ZSlyZXR1cm47dmFyIHQ9ZS5fcGVuZGluZ1B1bGxJbnRvc1swXTshMD09PWtlKGUsdCkmJihQZShlKSx5ZShlLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sdCkpfX1mdW5jdGlvbiBDZShlLHQpe3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF0sbj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07aWYoImNsb3NlZCI9PT1uLl9zdGF0ZSl7aWYoMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbSIpOyFmdW5jdGlvbihlLHQpe3QuYnVmZmVyPWYodC5idWZmZXIpLGIoMD09PXQuYnl0ZXNGaWxsZWQsImJ5dGVzRmlsbGVkIG11c3QgYmUgMCIpO3ZhciByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZighMD09PVkocikpZm9yKDtWKHIpPjA7KXllKHIsUGUoZSkpfShlLHIpfWVsc2UgYigicmVhZGFibGUiPT09bi5fc3RhdGUpLGZ1bmN0aW9uKGUsdCxyKXtpZihyLmJ5dGVzRmlsbGVkK3Q+ci5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlIik7aWYoU2UoZSx0LHIpLCEoci5ieXRlc0ZpbGxlZDxyLmVsZW1lbnRTaXplKSl7UGUoZSk7dmFyIG49ci5ieXRlc0ZpbGxlZCVyLmVsZW1lbnRTaXplO2lmKG4+MCl7dmFyIGE9ci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQsaT1yLmJ1ZmZlci5zbGljZShhLW4sYSk7d2UoZSxpLDAsaS5ieXRlTGVuZ3RoKX1yLmJ1ZmZlcj1mKHIuYnVmZmVyKSxyLmJ5dGVzRmlsbGVkLT1uLHllKGUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSxyKSxBZShlKX19KGUsdCxyKX1mdW5jdGlvbiBQZShlKXt2YXIgdD1lLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7cmV0dXJuIHhlKGUpLHR9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgcj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07YigicmVhZGFibGUiPT09ci5fc3RhdGUpLHZlKGUpLHgoZSksSChyLHQpfWZ1bmN0aW9uIFRlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtIil9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlciIpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiKX1mdW5jdGlvbiBGZShlLHQpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH1mdW5jdGlvbiBMZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIil9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIil9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Iil9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIil9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2KSxhPXIoNCksaT1yKDIpO3QuVHJhbnNmb3JtU3RyZWFtPW4uVHJhbnNmb3JtU3RyZWFtLHQuUmVhZGFibGVTdHJlYW09YS5SZWFkYWJsZVN0cmVhbSx0LklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ9YS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlPWEuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU9YS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSx0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZT1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx0LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI9aS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLHQuSXNXcml0YWJsZVN0cmVhbT1pLklzV3JpdGFibGVTdHJlYW0sdC5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkPWkuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCx0LldyaXRhYmxlU3RyZWFtPWkuV3JpdGFibGVTdHJlYW0sdC5Xcml0YWJsZVN0cmVhbUFib3J0PWkuV3JpdGFibGVTdHJlYW1BYm9ydCx0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb249aS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLHQuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsdC5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlfSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBpPXIoMSkuYXNzZXJ0LG89cigwKSxzPW8uSW52b2tlT3JOb29wLGw9by5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssYz1vLlByb21pc2VJbnZva2VPck5vb3AsdT1vLnR5cGVJc09iamVjdCxmPXIoNCksaD1mLlJlYWRhYmxlU3RyZWFtLGQ9Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UscD1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLG09Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsZz1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx2PXIoMikseT12LldyaXRhYmxlU3RyZWFtLGI9di5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7ZnVuY3Rpb24gdyhlLHQpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7dmFyIHI9ZS5fcmVhZGFibGVDb250cm9sbGVyO3RyeXtwKHIsdCl9Y2F0Y2godCl7dGhyb3cgZS5fcmVhZGFibGVDbG9zZWQ9ITAsUyhlLHQpLGUuX3N0b3JlZEVycm9yfSEwPT1nKHIpPD0wJiYhMT09PWUuX2JhY2twcmVzc3VyZSYmQShlLCEwKX1mdW5jdGlvbiBrKGUpe2koITE9PT1lLl9lcnJvcmVkKSxpKCExPT09ZS5fcmVhZGFibGVDbG9zZWQpO3RyeXtkKGUuX3JlYWRhYmxlQ29udHJvbGxlcil9Y2F0Y2goZSl7aSghMSl9ZS5fcmVhZGFibGVDbG9zZWQ9ITB9ZnVuY3Rpb24gUyhlLHQpeyExPT09ZS5fZXJyb3JlZCYmXyhlLHQpfWZ1bmN0aW9uIF8oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksZS5fZXJyb3JlZD0hMCxlLl9zdG9yZWRFcnJvcj10LCExPT09ZS5fd3JpdGFibGVEb25lJiZiKGUuX3dyaXRhYmxlQ29udHJvbGxlcix0KSwhMT09PWUuX3JlYWRhYmxlQ2xvc2VkJiZtKGUuX3JlYWRhYmxlQ29udHJvbGxlcix0KX1mdW5jdGlvbiB4KGUpe3JldHVybiBpKHZvaWQgMCE9PWUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMT09PWUuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMD09PWUuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9ZnVuY3Rpb24gQShlLHQpe2koZS5fYmFja3ByZXNzdXJlIT09dCwiVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gYmFja3ByZXNzdXJlIGlzIGNoYW5nZWQiKSx2b2lkIDAhPT1lLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlJiZlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUodCksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlPXR9KSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpKGUhPT10LCJfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCIpfSkpLGUuX2JhY2twcmVzc3VyZT10fWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdyh0Ll9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSIpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciIpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdHJlYW09dCx0aGlzLl9zdGFydFByb21pc2U9cn1yZXR1cm4gbihlLFt7a2V5OiJzdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHJhbnNmb3JtU3RyZWFtO3JldHVybiB0Ll93cml0YWJsZUNvbnRyb2xsZXI9ZSx0aGlzLl9zdGFydFByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geCh0KX0pKX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksaSghMT09PWUuX3RyYW5zZm9ybWluZyksaSghMT09PWUuX2JhY2twcmVzc3VyZSksZS5fdHJhbnNmb3JtaW5nPSEwO3ZhciByPWUuX3RyYW5zZm9ybWVyLG49ZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcjtyZXR1cm4gbChyLCJ0cmFuc2Zvcm0iLFt0LG5dLEMsW3Qsbl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3RyYW5zZm9ybWluZz0hMSx4KGUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QodCl9KSl9KHRoaXMuX3RyYW5zZm9ybVN0cmVhbSxlKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtlLl93cml0YWJsZURvbmU9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlIHNpZGUgYWJvcnRlZCIpKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMT09PWUuX3RyYW5zZm9ybWluZyksZS5fd3JpdGFibGVEb25lPSEwLGMoZS5fdHJhbnNmb3JtZXIsImZsdXNoIixbZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1lLl9lcnJvcmVkP1Byb21pc2UucmVqZWN0KGUuX3N0b3JlZEVycm9yKTooITE9PT1lLl9yZWFkYWJsZUNsb3NlZCYmayhlKSxQcm9taXNlLnJlc29sdmUoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpfSkpfX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7YSh0aGlzLGUpLHRoaXMuX3RyYW5zZm9ybVN0cmVhbT10LHRoaXMuX3N0YXJ0UHJvbWlzZT1yfXJldHVybiBuKGUsW3trZXk6InN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdHJlYW07cmV0dXJuIHQuX3JlYWRhYmxlQ29udHJvbGxlcj1lLHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3JldHVybiBpKHZvaWQgMCE9PXQuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMD09PXQuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMT09PXQuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksdC5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9KSl9fSx7a2V5OiJwdWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMD09PWUuX2JhY2twcmVzc3VyZSwicHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZSIpLGkodm9pZCAwIT09ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSwiX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLEEoZSwhMSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZX19LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdHJlYW07ZS5fcmVhZGFibGVDbG9zZWQ9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlIHNpZGUgY2FuY2VsZWQiKSl9fV0pLGV9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09RSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlIik7aWYodm9pZCAwIT09dC5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yIik7dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbT10fXJldHVybiBuKGUsW3trZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09UCh0aGlzKSl0aHJvdyBGKCJlbnF1ZXVlIik7dyh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImNsb3NlIik7IWZ1bmN0aW9uKGUpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7ayhlKX0odGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImVycm9yIik7IWZ1bmN0aW9uKGUsdCl7aWYoITA9PT1lLl9lcnJvcmVkKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQiKTtfKGUsdCl9KHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0sZSl9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImRlc2lyZWRTaXplIik7dmFyIGU9dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyO3JldHVybiBnKGUpfX1dKSxlfSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1lcj10O3ZhciByPXQucmVhZGFibGVTdHJhdGVneSxuPXQud3JpdGFibGVTdHJhdGVneTt0aGlzLl90cmFuc2Zvcm1pbmc9ITEsdGhpcy5fZXJyb3JlZD0hMSx0aGlzLl9zdG9yZWRFcnJvcj12b2lkIDAsdGhpcy5fd3JpdGFibGVDb250cm9sbGVyPXZvaWQgMCx0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3dyaXRhYmxlRG9uZT0hMSx0aGlzLl9yZWFkYWJsZUNsb3NlZD0hMSx0aGlzLl9iYWNrcHJlc3N1cmU9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT12b2lkIDAsdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj1uZXcgTyh0aGlzKTt2YXIgbz12b2lkIDAsbD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bz1lfSkpLGM9bmV3IFIodGhpcyxsKTt0aGlzLl9yZWFkYWJsZT1uZXcgaChjLHIpO3ZhciB1PW5ldyBUKHRoaXMsbCk7dGhpcy5fd3JpdGFibGU9bmV3IHkodSxuKSxpKHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciksaSh2b2lkIDAhPT10aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO3ZhciBmPWcodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtBKHRoaXMsZjw9MCk7dmFyIGQ9dGhpcyxwPXModCwic3RhcnQiLFtkLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7byhwKSxsLmNhdGNoKChmdW5jdGlvbihlKXshMT09PWQuX2Vycm9yZWQmJihkLl9lcnJvcmVkPSEwLGQuX3N0b3JlZEVycm9yPWUpfSkpfXJldHVybiBuKGUsW3trZXk6InJlYWRhYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PUUodGhpcykpdGhyb3cgTCgicmVhZGFibGUiKTtyZXR1cm4gdGhpcy5fcmVhZGFibGV9fSx7a2V5OiJ3cml0YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1FKHRoaXMpKXRocm93IEwoIndyaXRhYmxlIik7cmV0dXJuIHRoaXMuX3dyaXRhYmxlfX1dKSxlfSgpO2Z1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiKX1mdW5jdGlvbiBMKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0iKX1lLmV4cG9ydHM9e1RyYW5zZm9ybVN0cmVhbTpJfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpfV0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ITE7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVUkwmJiJvYmplY3QiPT09bihVUkwucHJvdG90eXBlKSYmIm9yaWdpbiJpbiBVUkwucHJvdG90eXBlKXt2YXIgaT1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtpLnBhdGhuYW1lPSJjJTIwZCIsYT0iaHR0cDovL2EvYyUyMGQiPT09aS5ocmVmfX1jYXRjaChlKXt9aWYoYSl0LlVSTD1VUkw7ZWxzZXt2YXIgbz1yKDE1MCkuVVJMLHM9cig4KS5VUkw7cyYmKG8uY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNyZWF0ZU9iamVjdFVSTC5hcHBseShzLGFyZ3VtZW50cyl9LG8ucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3MucmV2b2tlT2JqZWN0VVJMKGUpfSksdC5VUkw9b319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmZ0cD0yMSxlLmZpbGU9MCxlLmdvcGhlcj03MCxlLmh0dHA9ODAsZS5odHRwcz00NDMsZS53cz04MCxlLndzcz00NDM7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBuKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfWZ1bmN0aW9uIGEoKXtoLmNhbGwodGhpcyksdGhpcy5faXNJbnZhbGlkPSEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIiI9PT1lJiZhLmNhbGwodGhpcyksZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO3JldHVybiB0PjMyJiZ0PDEyNyYmLTE9PT1bMzQsMzUsNjAsNjIsNjMsOTZdLmluZGV4T2YodCk/ZTplbmNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ+MzImJnQ8MTI3JiYtMT09PVszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZih0KT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX1yWyIlMmUiXT0iLiIsclsiLiUyZSJdPSIuLiIsclsiJTJlLiJdPSIuLiIsclsiJTJlJTJlIl09Ii4uIjt2YXIgbCxjPS9bYS16QS1aXS8sdT0vW2EtekEtWjAtOVwrXC1cLl0vO2Z1bmN0aW9uIGYodCxmLGgpe2Z1bmN0aW9uIGQoZSl7Yi5wdXNoKGUpfXZhciBwPWZ8fCJzY2hlbWUgc3RhcnQiLG09MCxnPSIiLHY9ITEseT0hMSxiPVtdO2U6Zm9yKDsodFttLTFdIT09bHx8MD09PW0pJiYhdGhpcy5faXNJbnZhbGlkOyl7dmFyIHc9dFttXTtzd2l0Y2gocCl7Y2FzZSJzY2hlbWUgc3RhcnQiOmlmKCF3fHwhYy50ZXN0KHcpKXtpZihmKXtkKCJJbnZhbGlkIHNjaGVtZS4iKTticmVhayBlfWc9IiIscD0ibm8gc2NoZW1lIjtjb250aW51ZX1nKz13LnRvTG93ZXJDYXNlKCkscD0ic2NoZW1lIjticmVhaztjYXNlInNjaGVtZSI6aWYodyYmdS50ZXN0KHcpKWcrPXcudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9PXcpe2lmKGYpe2lmKHc9PT1sKWJyZWFrIGU7ZCgiQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICIrdyk7YnJlYWsgZX1nPSIiLG09MCxwPSJubyBzY2hlbWUiO2NvbnRpbnVlfWlmKHRoaXMuX3NjaGVtZT1nLGc9IiIsZilicmVhayBlO24odGhpcy5fc2NoZW1lKSYmKHRoaXMuX2lzUmVsYXRpdmU9ITApLHA9ImZpbGUiPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSI6dGhpcy5faXNSZWxhdGl2ZSYmaCYmaC5fc2NoZW1lPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOnRoaXMuX2lzUmVsYXRpdmU/ImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6InNjaGVtZSBkYXRhIn1icmVhaztjYXNlInNjaGVtZSBkYXRhIjoiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13Pyh0aGlzLl9mcmFnbWVudD0iIyIscD0iZnJhZ21lbnQiKTp3IT09bCYmIlx0IiE9PXcmJiJcbiIhPT13JiYiXHIiIT09dyYmKHRoaXMuX3NjaGVtZURhdGErPW8odykpO2JyZWFrO2Nhc2Uibm8gc2NoZW1lIjppZihoJiZuKGguX3NjaGVtZSkpe3A9InJlbGF0aXZlIjtjb250aW51ZX1kKCJNaXNzaW5nIHNjaGVtZS4iKSxhLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOmlmKCIvIiE9PXd8fCIvIiE9PXRbbSsxXSl7ZCgiRXhwZWN0ZWQgLywgZ290OiAiK3cpLHA9InJlbGF0aXZlIjtjb250aW51ZX1wPSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiO2JyZWFrO2Nhc2UicmVsYXRpdmUiOmlmKHRoaXMuX2lzUmVsYXRpdmU9ITAsImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5fc2NoZW1lPWguX3NjaGVtZSksdz09PWwpe3RoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQ7YnJlYWsgZX1pZigiLyI9PT13fHwiXFwiPT09dykiXFwiPT09dyYmZCgiXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LiIpLHA9InJlbGF0aXZlIHNsYXNoIjtlbHNlIGlmKCI/Ij09PXcpdGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl9wYXRoPWguX3BhdGguc2xpY2UoKSx0aGlzLl9xdWVyeT0iPyIsdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQscD0icXVlcnkiO2Vsc2V7aWYoIiMiIT09dyl7dmFyIGs9dFttKzFdLFM9dFttKzJdOygiZmlsZSIhPT10aGlzLl9zY2hlbWV8fCFjLnRlc3Qodyl8fCI6IiE9PWsmJiJ8IiE9PWt8fFMhPT1sJiYiLyIhPT1TJiYiXFwiIT09UyYmIj8iIT09UyYmIiMiIT09UykmJih0aGlzLl9ob3N0PWguX2hvc3QsdGhpcy5fcG9ydD1oLl9wb3J0LHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHRoaXMuX3BhdGg9aC5fcGF0aC5zbGljZSgpLHRoaXMuX3BhdGgucG9wKCkpLHA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfXRoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fZnJhZ21lbnQ9IiMiLHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHA9ImZyYWdtZW50In1icmVhaztjYXNlInJlbGF0aXZlIHNsYXNoIjppZigiLyIhPT13JiYiXFwiIT09dyl7ImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl91c2VybmFtZT1oLl91c2VybmFtZSx0aGlzLl9wYXNzd29yZD1oLl9wYXNzd29yZCkscD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9IlxcIj09PXcmJmQoIlxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4iKSxwPSJmaWxlIj09PXRoaXMuX3NjaGVtZT8iZmlsZSBob3N0IjoiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjticmVhaztjYXNlImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6aWYoIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdykscD0iYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjtjb250aW51ZX1wPSJhdXRob3JpdHkgc2Vjb25kIHNsYXNoIjticmVhaztjYXNlImF1dGhvcml0eSBzZWNvbmQgc2xhc2giOmlmKHA9ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyIsIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdyk7Y29udGludWV9YnJlYWs7Y2FzZSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiOmlmKCIvIiE9PXcmJiJcXCIhPT13KXtwPSJhdXRob3JpdHkiO2NvbnRpbnVlfWQoIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiAiK3cpO2JyZWFrO2Nhc2UiYXV0aG9yaXR5IjppZigiQCI9PT13KXt2JiYoZCgiQCBhbHJlYWR5IHNlZW4uIiksZys9IiU0MCIpLHY9ITA7Zm9yKHZhciBfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB4PWdbX107aWYoIlx0IiE9PXgmJiJcbiIhPT14JiYiXHIiIT09eClpZigiOiIhPT14fHxudWxsIT09dGhpcy5fcGFzc3dvcmQpe3ZhciBBPW8oeCk7bnVsbCE9PXRoaXMuX3Bhc3N3b3JkP3RoaXMuX3Bhc3N3b3JkKz1BOnRoaXMuX3VzZXJuYW1lKz1BfWVsc2UgdGhpcy5fcGFzc3dvcmQ9IiI7ZWxzZSBkKCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LiIpfWc9IiJ9ZWxzZXtpZih3PT09bHx8Ii8iPT09d3x8IlxcIj09PXd8fCI/Ij09PXd8fCIjIj09PXcpe20tPWcubGVuZ3RoLGc9IiIscD0iaG9zdCI7Y29udGludWV9Zys9d31icmVhaztjYXNlImZpbGUgaG9zdCI6aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXsyIT09Zy5sZW5ndGh8fCFjLnRlc3QoZ1swXSl8fCI6IiE9PWdbMV0mJiJ8IiE9PWdbMV0/MD09PWcubGVuZ3RoP3A9InJlbGF0aXZlIHBhdGggc3RhcnQiOih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIpOnA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGZpbGUgaG9zdC4iKTpnKz13O2JyZWFrO2Nhc2UiaG9zdCI6Y2FzZSJob3N0bmFtZSI6aWYoIjoiIT09d3x8eSl7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXtpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIsZilicmVhayBlO2NvbnRpbnVlfSJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXc/KCJbIj09PXc/eT0hMDoiXSI9PT13JiYoeT0hMSksZys9dyk6ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6ICIrdyl9ZWxzZSBpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icG9ydCIsImhvc3RuYW1lIj09PWYpYnJlYWsgZTticmVhaztjYXNlInBvcnQiOmlmKC9bMC05XS8udGVzdCh3KSlnKz13O2Vsc2V7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13fHxmKXtpZigiIiE9PWcpe3ZhciBDPXBhcnNlSW50KGcsMTApO0MhPT1lW3RoaXMuX3NjaGVtZV0mJih0aGlzLl9wb3J0PUMrIiIpLGc9IiJ9aWYoZilicmVhayBlO3A9InJlbGF0aXZlIHBhdGggc3RhcnQiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIHBvcnQ6ICIrdyk6YS5jYWxsKHRoaXMpfWJyZWFrO2Nhc2UicmVsYXRpdmUgcGF0aCBzdGFydCI6aWYoIlxcIj09PXcmJmQoIidcXCcgbm90IGFsbG93ZWQgaW4gcGF0aC4iKSxwPSJyZWxhdGl2ZSBwYXRoIiwiLyIhPT13JiYiXFwiIT09dyljb250aW51ZTticmVhaztjYXNlInJlbGF0aXZlIHBhdGgiOnZhciBQO3chPT1sJiYiLyIhPT13JiYiXFwiIT09dyYmKGZ8fCI/IiE9PXcmJiIjIiE9PXcpPyJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJihnKz1vKHcpKTooIlxcIj09PXcmJmQoIlxcIG5vdCBhbGxvd2VkIGluIHJlbGF0aXZlIHBhdGguIiksKFA9cltnLnRvTG93ZXJDYXNlKCldKSYmKGc9UCksIi4uIj09PWc/KHRoaXMuX3BhdGgucG9wKCksIi8iIT09dyYmIlxcIiE9PXcmJnRoaXMuX3BhdGgucHVzaCgiIikpOiIuIj09PWcmJiIvIiE9PXcmJiJcXCIhPT13P3RoaXMuX3BhdGgucHVzaCgiIik6Ii4iIT09ZyYmKCJmaWxlIj09PXRoaXMuX3NjaGVtZSYmMD09PXRoaXMuX3BhdGgubGVuZ3RoJiYyPT09Zy5sZW5ndGgmJmMudGVzdChnWzBdKSYmInwiPT09Z1sxXSYmKGc9Z1swXSsiOiIpLHRoaXMuX3BhdGgucHVzaChnKSksZz0iIiwiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13JiYodGhpcy5fZnJhZ21lbnQ9IiMiLHA9ImZyYWdtZW50IikpO2JyZWFrO2Nhc2UicXVlcnkiOmZ8fCIjIiE9PXc/dyE9PWwmJiJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJih0aGlzLl9xdWVyeSs9cyh3KSk6KHRoaXMuX2ZyYWdtZW50PSIjIixwPSJmcmFnbWVudCIpO2JyZWFrO2Nhc2UiZnJhZ21lbnQiOnchPT1sJiYiXHQiIT09dyYmIlxuIiE9PXcmJiJcciIhPT13JiYodGhpcy5fZnJhZ21lbnQrPXcpfW0rK319ZnVuY3Rpb24gaCgpe3RoaXMuX3NjaGVtZT0iIix0aGlzLl9zY2hlbWVEYXRhPSIiLHRoaXMuX3VzZXJuYW1lPSIiLHRoaXMuX3Bhc3N3b3JkPW51bGwsdGhpcy5faG9zdD0iIix0aGlzLl9wb3J0PSIiLHRoaXMuX3BhdGg9W10sdGhpcy5fcXVlcnk9IiIsdGhpcy5fZnJhZ21lbnQ9IiIsdGhpcy5faXNJbnZhbGlkPSExLHRoaXMuX2lzUmVsYXRpdmU9ITF9ZnVuY3Rpb24gZChlLHQpe3ZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBkfHwodD1uZXcgZChTdHJpbmcodCkpKSx0aGlzLl91cmw9ZSxoLmNhbGwodGhpcyk7dmFyIHI9ZS5yZXBsYWNlKC9eWyBcdFxyXG5cZl0rfFsgXHRcclxuXGZdKyQvZywiIik7Zi5jYWxsKHRoaXMscixudWxsLHQpfWQucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWZ9LGdldCBocmVmKCl7aWYodGhpcy5faXNJbnZhbGlkKXJldHVybiB0aGlzLl91cmw7dmFyIGU9IiI7cmV0dXJuIiI9PT10aGlzLl91c2VybmFtZSYmbnVsbD09PXRoaXMuX3Bhc3N3b3JkfHwoZT10aGlzLl91c2VybmFtZSsobnVsbCE9PXRoaXMuX3Bhc3N3b3JkPyI6Iit0aGlzLl9wYXNzd29yZDoiIikrIkAiKSx0aGlzLnByb3RvY29sKyh0aGlzLl9pc1JlbGF0aXZlPyIvLyIrZSt0aGlzLmhvc3Q6IiIpK3RoaXMucGF0aG5hbWUrdGhpcy5fcXVlcnkrdGhpcy5fZnJhZ21lbnR9LHNldCBocmVmKGUpe2guY2FsbCh0aGlzKSxmLmNhbGwodGhpcyxlKX0sZ2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX3NjaGVtZSsiOiJ9LHNldCBwcm90b2NvbChlKXt0aGlzLl9pc0ludmFsaWR8fGYuY2FsbCh0aGlzLGUrIjoiLCJzY2hlbWUgc3RhcnQiKX0sZ2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX3BvcnQ/dGhpcy5faG9zdCsiOiIrdGhpcy5fcG9ydDp0aGlzLl9ob3N0fSxzZXQgaG9zdChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZmLmNhbGwodGhpcyxlLCJob3N0Iil9LGdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9ob3N0fSxzZXQgaG9zdG5hbWUoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwiaG9zdG5hbWUiKX0sZ2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fcG9ydH0sc2V0IHBvcnQoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwicG9ydCIpfSxnZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX2lzUmVsYXRpdmU/Ii8iK3RoaXMuX3BhdGguam9pbigiLyIpOnRoaXMuX3NjaGVtZURhdGF9LHNldCBwYXRobmFtZShlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcGF0aD1bXSxmLmNhbGwodGhpcyxlLCJyZWxhdGl2ZSBwYXRoIHN0YXJ0IikpfSxnZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3F1ZXJ5fHwiPyI9PT10aGlzLl9xdWVyeT8iIjp0aGlzLl9xdWVyeX0sc2V0IHNlYXJjaChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcXVlcnk9Ij8iLCI/Ij09PWVbMF0mJihlPWUuc2xpY2UoMSkpLGYuY2FsbCh0aGlzLGUsInF1ZXJ5IikpfSxnZXQgaGFzaCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9mcmFnbWVudHx8IiMiPT09dGhpcy5fZnJhZ21lbnQ/IiI6dGhpcy5fZnJhZ21lbnR9LHNldCBoYXNoKGUpe3RoaXMuX2lzSW52YWxpZHx8KHRoaXMuX2ZyYWdtZW50PSIjIiwiIyI9PT1lWzBdJiYoZT1lLnNsaWNlKDEpKSxmLmNhbGwodGhpcyxlLCJmcmFnbWVudCIpKX0sZ2V0IG9yaWdpbigpe3ZhciBlO2lmKHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3NjaGVtZSlyZXR1cm4iIjtzd2l0Y2godGhpcy5fc2NoZW1lKXtjYXNlImRhdGEiOmNhc2UiZmlsZSI6Y2FzZSJqYXZhc2NyaXB0IjpjYXNlIm1haWx0byI6cmV0dXJuIm51bGwiO2Nhc2UiYmxvYiI6dHJ5e3JldHVybiBuZXcgZCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW58fCJudWxsIn1jYXRjaChlKXt9cmV0dXJuIm51bGwifXJldHVybihlPXRoaXMuaG9zdCk/dGhpcy5fc2NoZW1lKyI6Ly8iK2U6IiJ9fSx0LlVSTD1kfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbixhPShuPXIoMikpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoNiksbz1yKDE1Mikscz1yKDE1MyksbD1yKDE1Nyk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4oYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1jKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9wKGUpOnR9ZnVuY3Rpb24gZihlKXtyZXR1cm4oZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybihkPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBwKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBtKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXttKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXttKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBiKGUsdCxyKXtyZXR1cm4gdCYmeShlLnByb3RvdHlwZSx0KSxyJiZ5KGUsciksZX12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJvbkxvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBvbkxvYWRlZFN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJlbnN1cmVEb2MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQsZSx0KX19LHtrZXk6ImVuc3VyZVhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQueHJlZixlLHQpfX0se2tleToiZW5zdXJlQ2F0YWxvZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nLGUsdCl9fSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKGUpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhlLHQpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKCl9fSx7a2V5OiJlbnN1cmUiLHZhbHVlOih0PWcoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgdGVybWluYXRlYCBjYWxsZWQiKX19LHtrZXk6ImRvY0lkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jSWR9fSx7a2V5OiJwYXNzd29yZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkfX0se2tleToiZG9jQmFzZVVybCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDtpZih0aGlzLl9kb2NCYXNlVXJsKXt2YXIgdD0oMCxpLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHRoaXMuX2RvY0Jhc2VVcmwpO3Q/ZT10LmhyZWY6KDAsaS53YXJuKSgnSW52YWxpZCBhYnNvbHV0ZSBkb2NCYXNlVXJsOiAiJy5jb25jYXQodGhpcy5fZG9jQmFzZVVybCwnIi4nKSl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY0Jhc2VVcmwiLGUpfX1dKSxlfSgpLGs9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsbixhLGkpe3ZhciBvO3YodGhpcyx0KSwobz11KHRoaXMsZih0KS5jYWxsKHRoaXMpKSkuX2RvY0lkPWUsby5fcGFzc3dvcmQ9bixvLl9kb2NCYXNlVXJsPWksby5ldmFsdWF0b3JPcHRpb25zPWE7dmFyIGM9bmV3IGwuU3RyZWFtKHIpO3JldHVybiBvLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHAocChvKSksYyksby5fbG9hZGVkU3RyZWFtUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoYyksb312YXIgcjtyZXR1cm4gaCh0LGUpLGIodCxbe2tleToiZW5zdXJlIix2YWx1ZToocj1nKGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaTtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCJmdW5jdGlvbiIhPXR5cGVvZihpPXRbcl0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsaS5hcHBseSh0LG4pKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGkpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3RMb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToib25Mb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2V9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7fX1dKSx0fSh3KTt0LkxvY2FsUGRmTWFuYWdlcj1rO3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyLG4sYSxpKXt2YXIgbDtyZXR1cm4gdih0aGlzLHQpLChsPXUodGhpcyxmKHQpLmNhbGwodGhpcykpKS5fZG9jSWQ9ZSxsLl9wYXNzd29yZD1uLnBhc3N3b3JkLGwuX2RvY0Jhc2VVcmw9aSxsLm1zZ0hhbmRsZXI9bi5tc2dIYW5kbGVyLGwuZXZhbHVhdG9yT3B0aW9ucz1hLGwuc3RyZWFtTWFuYWdlcj1uZXcgby5DaHVua2VkU3RyZWFtTWFuYWdlcihyLHttc2dIYW5kbGVyOm4ubXNnSGFuZGxlcixsZW5ndGg6bi5sZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDpuLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6bi5yYW5nZUNodW5rU2l6ZX0pLGwucGRmRG9jdW1lbnQ9bmV3IHMuUERGRG9jdW1lbnQocChwKGwpKSxsLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpLGx9dmFyIHI7cmV0dXJuIGgodCxlKSxiKHQsW3trZXk6ImVuc3VyZSIsdmFsdWU6KHI9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIG87cmV0dXJuIGEuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2Yobz10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG8uYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixvKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpfX0se2tleToic2VuZFByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX19LHtrZXk6Im9uTG9hZGVkU3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbU1hbmFnZXIuYWJvcnQoKX19XSksdH0odyk7dC5OZXR3b3JrUGRmTWFuYWdlcj1TfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXQuQ2h1bmtlZFN0cmVhbT12b2lkIDA7dmFyIG49cig2KTtmdW5jdGlvbiBhKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIG8oZSx0LHIpe3JldHVybiB0JiZpKGUucHJvdG90eXBlLHQpLHImJmkoZSxyKSxlfXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7YSh0aGlzLGUpLHRoaXMuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkodCksdGhpcy5zdGFydD0wLHRoaXMucG9zPTAsdGhpcy5lbmQ9dCx0aGlzLmNodW5rU2l6ZT1yLHRoaXMubG9hZGVkQ2h1bmtzPVtdLHRoaXMubnVtQ2h1bmtzTG9hZGVkPTAsdGhpcy5udW1DaHVua3M9TWF0aC5jZWlsKHQvciksdGhpcy5tYW5hZ2VyPW4sdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9MCx0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rPS0xfXJldHVybiBvKGUsW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5sb2FkZWRDaHVua3NbdF18fGUucHVzaCh0KTtyZXR1cm4gZX19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt0aGlzXX19LHtrZXk6ImFsbENodW5rc0xvYWRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc319LHtrZXk6Im9uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jaHVua1NpemU7aWYoZSVyIT0wKXRocm93IG5ldyBFcnJvcigiQmFkIGJlZ2luIG9mZnNldDogIi5jb25jYXQoZSkpO3ZhciBuPWUrdC5ieXRlTGVuZ3RoO2lmKG4lciE9MCYmbiE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQmFkIGVuZCBvZmZzZXQ6ICIuY29uY2F0KG4pKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtmb3IodmFyIGE9TWF0aC5mbG9vcihlL3IpLGk9TWF0aC5mbG9vcigobi0xKS9yKSsxLG89YTtvPGk7KytvKXRoaXMubG9hZGVkQ2h1bmtzW29dfHwodGhpcy5sb2FkZWRDaHVua3Nbb109ITAsKyt0aGlzLm51bUNodW5rc0xvYWRlZCl9fSx7a2V5OiJvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoLHI9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KSx0Kz1lLmJ5dGVMZW5ndGgsdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtmb3IodmFyIG49dD49dGhpcy5lbmQ/dGhpcy5udW1DaHVua3M6TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKSxhPXI7YTxuOysrYSl0aGlzLmxvYWRlZENodW5rc1thXXx8KHRoaXMubG9hZGVkQ2h1bmtzW2FdPSEwLCsrdGhpcy5udW1DaHVua3NMb2FkZWQpfX0se2tleToiZW5zdXJlQnl0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZih0IT09dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuayl7aWYoIXRoaXMubG9hZGVkQ2h1bmtzW3RdKXRocm93IG5ldyBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsZSsxKTt0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rPXR9fX0se2tleToiZW5zdXJlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlPj10fHx0PD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkpZm9yKHZhciByPXRoaXMuY2h1bmtTaXplLGE9TWF0aC5mbG9vcihlL3IpLGk9TWF0aC5mbG9vcigodC0xKS9yKSsxLG89YTtvPGk7KytvKWlmKCF0aGlzLmxvYWRlZENodW5rc1tvXSl0aHJvdyBuZXcgbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX0se2tleToibmV4dEVtcHR5Q2h1bmsiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLm51bUNodW5rcyxyPTA7cjx0Oysrcil7dmFyIG49KGUrcikldDtpZighdGhpcy5sb2FkZWRDaHVua3Nbbl0pcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxvYWRlZENodW5rc1tlXX19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3M7cmV0dXJuIGU+PXRoaXMuZW5kPy0xOih0aGlzLmVuc3VyZUJ5dGUoZSksdGhpcy5ieXRlc1t0aGlzLnBvcysrXSl9fSx7a2V5OiJnZXRVaW50MTYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCeXRlKCksdD10aGlzLmdldEJ5dGUoKTtyZXR1cm4tMT09PWV8fC0xPT09dD8tMTooZTw8OCkrdH19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9fSx7a2V5OiJnZXRCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPXRoaXMuYnl0ZXMsbj10aGlzLnBvcyxhPXRoaXMuZW5kO2lmKCFlKXt0aGlzLmVuc3VyZVJhbmdlKG4sYSk7dmFyIGk9ci5zdWJhcnJheShuLGEpO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShpKTppfXZhciBvPW4rZTtvPmEmJihvPWEpLHRoaXMuZW5zdXJlUmFuZ2UobixvKSx0aGlzLnBvcz1vO3ZhciBzPXIuc3ViYXJyYXkobixvKTtyZXR1cm4gdD9uZXcgVWludDhDbGFtcGVkQXJyYXkocyk6c319LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9fSx7a2V5OiJwZWVrQnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj10aGlzLmdldEJ5dGVzKGUsdCk7cmV0dXJuIHRoaXMucG9zLT1yLmxlbmd0aCxyfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZXx8KGU9MSksdGhpcy5wb3MrPWV9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbigpe310aGlzLmVuc3VyZVJhbmdlKGUsZSt0KSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpLG4ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jaHVua1NpemUsdD1NYXRoLmZsb29yKHRoaXMuc3RhcnQvZSkscj1NYXRoLmZsb29yKCh0aGlzLmVuZC0xKS9lKSsxLG49W10sYT10O2E8cjsrK2EpdGhpcy5sb2FkZWRDaHVua3NbYV18fG4ucHVzaChhKTtyZXR1cm4gbn07dmFyIGE9bmV3IG47cmV0dXJuIGEucG9zPWEuc3RhcnQ9ZSxhLmVuZD1lK3R8fHRoaXMuZW5kLGEuZGljdD1yLGF9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19XSksZX0oKTt0LkNodW5rZWRTdHJlYW09czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgcyh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnJlcXVlc3RzQnlDaHVuaz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucHJvbWlzZXNCeVJlcXVlc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIG8oZSxbe2tleToib25Mb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InNlbmRSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsYT10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTthLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoYS5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTt2YXIgaT1bXSxvPTA7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7YS5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhsKXt0cnl7aWYoIWwuZG9uZSl7dmFyIGM9bC52YWx1ZTtyZXR1cm4gaS5wdXNoKGMpLG8rPSgwLG4uYXJyYXlCeXRlTGVuZ3RoKShjKSxhLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBhLnJlYWQoKS50aGVuKHMsdCl9dmFyIHU9KDAsbi5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZSh1KX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGUpLHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN1cnJSZXF1ZXN0SWQrKyxyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbdF09cjt2YXIgYT0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIHMsbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHM9bC5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBjPXMudmFsdWU7dGhpcy5zdHJlYW0uaGFzQ2h1bmsoYyl8fChyW2NdPSEwKX19Y2F0Y2goZSl7aT0hMCxvPWV9ZmluYWxseXt0cnl7YXx8bnVsbD09bC5yZXR1cm58fGwucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fWlmKCgwLG4uaXNFbXB0eU9iaikocikpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciB1PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5wcm9taXNlc0J5UmVxdWVzdFt0XT11O3ZhciBmPVtdO2Zvcih2YXIgaCBpbiByKShofD0wKWluIHRoaXMucmVxdWVzdHNCeUNodW5rfHwodGhpcy5yZXF1ZXN0c0J5Q2h1bmtbaF09W10sZi5wdXNoKGgpKSx0aGlzLnJlcXVlc3RzQnlDaHVua1toXS5wdXNoKHQpO2lmKCFmLmxlbmd0aClyZXR1cm4gdS5wcm9taXNlO3ZhciBkPXRoaXMuZ3JvdXBDaHVua3MoZikscD0hMCxtPSExLGc9dm9pZCAwO3RyeXtmb3IodmFyIHYseT1kW1N5bWJvbC5pdGVyYXRvcl0oKTshKHA9KHY9eS5uZXh0KCkpLmRvbmUpO3A9ITApe3ZhciBiPXYudmFsdWUsdz1iLmJlZ2luQ2h1bmsqdGhpcy5jaHVua1NpemUsaz1NYXRoLm1pbihiLmVuZENodW5rKnRoaXMuY2h1bmtTaXplLHRoaXMubGVuZ3RoKTt0aGlzLnNlbmRSZXF1ZXN0KHcsayl9fWNhdGNoKGUpe209ITAsZz1lfWZpbmFsbHl7dHJ5e3B8fG51bGw9PXkucmV0dXJufHx5LnJldHVybigpfWZpbmFsbHl7aWYobSl0aHJvdyBnfX1yZXR1cm4gdS5wcm9taXNlfX0se2tleToiZ2V0U3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbX19LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0PU1hdGgubWluKHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzLmdldEJlZ2luQ2h1bmsoZSksbj10aGlzLmdldEVuZENodW5rKHQpLGE9W10saT1yO2k8bjsrK2kpYS5wdXNoKGkpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGEpfX0se2tleToicmVxdWVzdFJhbmdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1bXSxyPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1vLm5leHQoKSkuZG9uZSk7cj0hMClmb3IodmFyIHM9aS52YWx1ZSxsPXRoaXMuZ2V0QmVnaW5DaHVuayhzLmJlZ2luKSxjPXRoaXMuZ2V0RW5kQ2h1bmsocy5lbmQpLHU9bDt1PGM7Kyt1KXQuaW5jbHVkZXModSl8fHQucHVzaCh1KX1jYXRjaChlKXtuPSEwLGE9ZX1maW5hbGx5e3RyeXtyfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgYX19cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpLHRoaXMuX3JlcXVlc3RDaHVua3ModCl9fSx7a2V5OiJncm91cENodW5rcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9LTEsbj0tMSxhPTAsaT1lLmxlbmd0aDthPGk7KythKXt2YXIgbz1lW2FdO3I8MCYmKHI9byksbj49MCYmbisxIT09byYmKHQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOm4rMX0pLHI9byksYSsxPT09ZS5sZW5ndGgmJnQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOm8rMX0pLG49b31yZXR1cm4gdH19LHtrZXk6Im9uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUrZS5sb2FkZWQsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2h1bmsscj12b2lkIDA9PT1lLmJlZ2luLGE9cj90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLGk9YSt0LmJ5dGVMZW5ndGgsbz1NYXRoLmZsb29yKGEvdGhpcy5jaHVua1NpemUpLHM9aTx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKGkvdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChpL3RoaXMuY2h1bmtTaXplKTtyPyh0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCksdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9aSk6dGhpcy5zdHJlYW0ub25SZWNlaXZlRGF0YShhLHQpLHRoaXMuc3RyZWFtLmFsbENodW5rc0xvYWRlZCgpJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2Zvcih2YXIgbD1bXSxjPW87YzxzOysrYyl7dmFyIHU9dGhpcy5yZXF1ZXN0c0J5Q2h1bmtbY118fFtdO2RlbGV0ZSB0aGlzLnJlcXVlc3RzQnlDaHVua1tjXTt2YXIgZj0hMCxoPSExLGQ9dm9pZCAwO3RyeXtmb3IodmFyIHAsbT11W1N5bWJvbC5pdGVyYXRvcl0oKTshKGY9KHA9bS5uZXh0KCkpLmRvbmUpO2Y9ITApe3ZhciBnPXAudmFsdWUsdj10aGlzLmNodW5rc05lZWRlZEJ5UmVxdWVzdFtnXTtjIGluIHYmJmRlbGV0ZSB2W2NdLCgwLG4uaXNFbXB0eU9iaikodikmJmwucHVzaChnKX19Y2F0Y2goZSl7aD0hMCxkPWV9ZmluYWxseXt0cnl7Znx8bnVsbD09bS5yZXR1cm58fG0ucmV0dXJuKCl9ZmluYWxseXtpZihoKXRocm93IGR9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYoMCxuLmlzRW1wdHlPYmopKHRoaXMucmVxdWVzdHNCeUNodW5rKSl7dmFyIHk7aWYoMT09PXRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCl7dmFyIGI9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsoYil8fCh5PWIpfWVsc2UgeT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhzKTtOdW1iZXIuaXNJbnRlZ2VyKHkpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFt5XSl9Zm9yKHZhciB3PTA7dzxsLmxlbmd0aDt3Kyspe3ZhciBrPWxbd10sUz10aGlzLnByb21pc2VzQnlSZXF1ZXN0W2tdO2RlbGV0ZSB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W2tdLFMucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKCJhYm9ydCIpLHRoaXMucHJvbWlzZXNCeVJlcXVlc3QpdGhpcy5wcm9taXNlc0J5UmVxdWVzdFtlXS5yZWplY3QobmV3IEVycm9yKCJSZXF1ZXN0IHdhcyBhYm9ydGVkIikpfX1dKSxlfSgpO3QuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9bH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZEb2N1bWVudD10LlBhZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE1NCksaT1yKDE1NSksbz1yKDE1Nykscz1yKDE2OSksbD1yKDE2NyksYz1yKDE1NiksdT1yKDE3MCksZj1yKDE3MSksaD1yKDE4NSk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gcChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmbShlLnByb3RvdHlwZSx0KSxyJiZtKGUsciksZX12YXIgdj1bMCwwLDYxMiw3OTJdO2Z1bmN0aW9uIHkoZSx0KXtyZXR1cm4iZGlzcGxheSI9PT10JiZlLnZpZXdhYmxlfHwicHJpbnQiPT09dCYmZS5wcmludGFibGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5mb250Q2FjaGUsbD10LmJ1aWx0SW5DTWFwQ2FjaGUsYz10LnBkZkZ1bmN0aW9uRmFjdG9yeTtwKHRoaXMsZSksdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5wYWdlSW5kZXg9YSx0aGlzLnBhZ2VEaWN0PWksdGhpcy54cmVmPW4sdGhpcy5yZWY9byx0aGlzLmZvbnRDYWNoZT1zLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1sLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5PWMsdGhpcy5ldmFsdWF0b3JPcHRpb25zPXIuZXZhbHVhdG9yT3B0aW9ucyx0aGlzLnJlc291cmNlc1Byb21pc2U9bnVsbDt2YXIgdT0icCIuY29uY2F0KHRoaXMucGFnZUluZGV4LCJfIiksZj17b2JqOjB9O3RoaXMuaWRGYWN0b3J5PXtjcmVhdGVPYmpJZDpmdW5jdGlvbigpe3JldHVybiB1KyArK2Yub2JqfX19cmV0dXJuIGcoZSxbe2tleToiX2dldEluaGVyaXRhYmxlUHJvcGVydHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/MSE9PXIubGVuZ3RoJiYoMCxpLmlzRGljdCkoclswXSk/aS5EaWN0Lm1lcmdlKHRoaXMueHJlZixyKTpyWzBdOnJ9fSx7a2V5OiJnZXRDb250ZW50U3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jb250ZW50O2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXRoaXMueHJlZixuPVtdLGE9ITAscz0hMSxsPXZvaWQgMDt0cnl7Zm9yKHZhciBjLHU9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShhPShjPXUubmV4dCgpKS5kb25lKTthPSEwKXt2YXIgZj1jLnZhbHVlO24ucHVzaChyLmZldGNoSWZSZWYoZikpfX1jYXRjaChlKXtzPSEwLGw9ZX1maW5hbGx5e3RyeXthfHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgbH19ZT1uZXcgby5TdHJlYW1zU2VxdWVuY2VTdHJlYW0obil9ZWxzZSBlPSgwLGkuaXNTdHJlYW0pKHQpP3Q6bmV3IG8uTnVsbFN0cmVhbTtyZXR1cm4gZX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsYT1lLnRhc2ssaT1lLmludGVudCxvPWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcyxzPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiZ2V0Q29udGVudFN0cmVhbSIpLGw9dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSksYz1uZXcgZi5QYXJ0aWFsRXZhbHVhdG9yKHtwZGZNYW5hZ2VyOnRoaXMucGRmTWFuYWdlcix4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLmlkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnMscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMucGRmRnVuY3Rpb25GYWN0b3J5fSksaD1Qcm9taXNlLmFsbChbcyxsXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIG49ZChlLDEpWzBdLG89bmV3IHUuT3BlcmF0b3JMaXN0KGkscix0LnBhZ2VJbmRleCk7cmV0dXJuIHIuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OmMuaGFzQmxlbmRNb2Rlcyh0LnJlc291cmNlcykscGFnZUluZGV4OnQucGFnZUluZGV4LGludGVudDppfSksYy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6YSxyZXNvdXJjZXM6dC5yZXNvdXJjZXMsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvfSkpfSkpO3JldHVybiBQcm9taXNlLmFsbChbaCx0aGlzLl9wYXJzZWRBbm5vdGF0aW9uc10pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWQoZSwyKSxyPXRbMF0scz10WzFdO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gci5mbHVzaCghMCkscjt2YXIgbD1bXSx1PSEwLGY9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgcCxtPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0ocD1tLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIGc9cC52YWx1ZTt5KGcsaSkmJmwucHVzaChnLmdldE9wZXJhdG9yTGlzdChjLGEsbykpfX1jYXRjaChlKXtmPSEwLGg9ZX1maW5hbGx5e3RyeXt1fHxudWxsPT1tLnJldHVybnx8bS5yZXR1cm4oKX1maW5hbGx5e2lmKGYpdGhyb3cgaH19cmV0dXJuIFByb21pc2UuYWxsKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe3IuYWRkT3Aobi5PUFMuYmVnaW5Bbm5vdGF0aW9ucyxbXSk7dmFyIHQ9ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShvPXMubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgbD1vLnZhbHVlO3IuYWRkT3BMaXN0KGwpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHIuYWRkT3Aobi5PUFMuZW5kQW5ub3RhdGlvbnMsW10pLHIuZmx1c2goITApLHJ9KSl9KSl9fSx7a2V5OiJleHRyYWN0VGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbj1lLnRhc2ssYT1lLm5vcm1hbGl6ZVdoaXRlc3BhY2UsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImdldENvbnRlbnRTdHJlYW0iKSxsPXRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIlhPYmplY3QiLCJGb250Il0pO3JldHVybiBQcm9taXNlLmFsbChbcyxsXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHM9ZChlLDEpWzBdO3JldHVybiBuZXcgZi5QYXJ0aWFsRXZhbHVhdG9yKHtwZGZNYW5hZ2VyOnQucGRmTWFuYWdlcix4cmVmOnQueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnQucGFnZUluZGV4LGlkRmFjdG9yeTp0LmlkRmFjdG9yeSxmb250Q2FjaGU6dC5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0LmJ1aWx0SW5DTWFwQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnMscGRmRnVuY3Rpb25GYWN0b3J5OnQucGRmRnVuY3Rpb25GYWN0b3J5fSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpzLHRhc2s6bixyZXNvdXJjZXM6dC5yZXNvdXJjZXMsbm9ybWFsaXplV2hpdGVzcGFjZTphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOml9KX0pKX19LHtrZXk6ImdldEFubm90YXRpb25zRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTAsYT10Lmxlbmd0aDtuPGE7bisrKWUmJiF5KHRbbl0sZSl8fHIucHVzaCh0W25dLmRhdGEpO3JldHVybiByfSkpfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0KCJDb250ZW50cyIpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmVzb3VyY2VzIix0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSZXNvdXJjZXMiKXx8aS5EaWN0LmVtcHR5KX19LHtrZXk6Im1lZGlhQm94IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJNZWRpYUJveCIsITApO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/KDAsbi5zaGFkb3cpKHRoaXMsIm1lZGlhQm94IixlKTooMCxuLnNoYWRvdykodGhpcywibWVkaWFCb3giLHYpfX0se2tleToiY3JvcEJveCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQ3JvcEJveCIsITApO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/KDAsbi5zaGFkb3cpKHRoaXMsImNyb3BCb3giLGUpOigwLG4uc2hhZG93KSh0aGlzLCJjcm9wQm94Iix0aGlzLm1lZGlhQm94KX19LHtrZXk6InVzZXJVbml0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhZ2VEaWN0LmdldCgiVXNlclVuaXQiKTtyZXR1cm4oISgwLG4uaXNOdW0pKGUpfHxlPD0wKSYmKGU9MSksKDAsbi5zaGFkb3cpKHRoaXMsInVzZXJVbml0IixlKX19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVkaWFCb3gsdD10aGlzLmNyb3BCb3g7aWYoZT09PXQpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXciLGUpO3ZhciByPW4uVXRpbC5pbnRlcnNlY3QodCxlKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlldyIscnx8ZSl9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpfHwwO3JldHVybiBlJTkwIT0wP2U9MDplPj0zNjA/ZSU9MzYwOmU8MCYmKGU9KGUlMzYwKzM2MCklMzYwKSwoMCxuLnNoYWRvdykodGhpcywicm90YXRlIixlKX19LHtrZXk6ImFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIkFubm90cyIpfHxbXSl9fSx7a2V5OiJfcGFyc2VkQW5ub3RhdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImFubm90YXRpb25zIikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZS5hbm5vdGF0aW9ucyxyPVtdLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspci5wdXNoKHMuQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKGUueHJlZix0W2FdLGUucGRmTWFuYWdlcixlLmlkRmFjdG9yeSkpO3JldHVybiBQcm9taXNlLmFsbChyKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pLChmdW5jdGlvbihlKXtyZXR1cm4oMCxuLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxbXX0pKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19XSksZX0oKTtmdW5jdGlvbiB3KGUsdCxyLG4pe3ZhciBhPWUucG9zLGk9ZS5lbmQ7YStyPmkmJihyPWktYSk7Zm9yKHZhciBvPVtdLHM9MDtzPHI7KytzKW8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuZ2V0Qnl0ZSgpKSk7dmFyIGw9by5qb2luKCIiKTtlLnBvcz1hO3ZhciBjPW4/bC5sYXN0SW5kZXhPZih0KTpsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1jJiYoZS5wb3MrPWMsITApfXQuUGFnZT1iO3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBzO2lmKHAodGhpcyxlKSwoMCxpLmlzU3RyZWFtKShyKSlzPXI7ZWxzZXtpZighKDAsbi5pc0FycmF5QnVmZmVyKShyKSl0aHJvdyBuZXcgRXJyb3IoIlBERkRvY3VtZW50OiBVbmtub3duIGFyZ3VtZW50IHR5cGUiKTtzPW5ldyBvLlN0cmVhbShyKX1pZihzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBERkRvY3VtZW50OiBTdHJlYW0gbXVzdCBoYXZlIGRhdGEiKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1zLHRoaXMueHJlZj1uZXcgYS5YUmVmKHMsdCksdGhpcy5wZGZGdW5jdGlvbkZhY3Rvcnk9bmV3IGguUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dC5ldmFsdWF0b3JPcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pLHRoaXMuX3BhZ2VQcm9taXNlcz1bXX1yZXR1cm4gZyhlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXR1cChlKTt2YXIgdD10aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoIlZlcnNpb24iKTsoMCxpLmlzTmFtZSkodCkmJih0aGlzLnBkZkZvcm1hdFZlcnNpb249dC5uYW1lKTt0cnl7aWYodGhpcy5hY3JvRm9ybT10aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoIkFjcm9Gb3JtIiksdGhpcy5hY3JvRm9ybSl7dGhpcy54ZmE9dGhpcy5hY3JvRm9ybS5nZXQoIlhGQSIpO3ZhciByPXRoaXMuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKTtyJiZBcnJheS5pc0FycmF5KHIpJiYwIT09ci5sZW5ndGh8fHRoaXMueGZhfHwodGhpcy5hY3JvRm9ybT1udWxsKX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIEFjcm9Gb3JtcyBhcmUgcHJlc2VudCIpLHRoaXMuYWNyb0Zvcm09bnVsbH19fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksdyhlLCIlUERGLSIsMTAyNCkpe2UubW92ZVN0YXJ0KCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiYhKHIubGVuZ3RoPj0xMik7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dGhpcy5wZGZGb3JtYXRWZXJzaW9ufHwodGhpcy5wZGZGb3JtYXRWZXJzaW9uPXIuc3Vic3RyaW5nKDUpKX19fSx7a2V5OiJwYXJzZVN0YXJ0WFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX19LHtrZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWYucGFyc2UoZSksdGhpcy5jYXRhbG9nPW5ldyBhLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9fSx7a2V5OiJfZ2V0TGluZWFyaXphdGlvblBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2F0YWxvZyxyPXRoaXMubGluZWFyaXphdGlvbjsoMCxuLmFzc2VydCkociYmci5wYWdlRmlyc3Q9PT1lKTt2YXIgYT1uZXcgaS5SZWYoci5vYmplY3ROdW1iZXJGaXJzdCwwKTtyZXR1cm4gdGhpcy54cmVmLmZldGNoQXN5bmMoYSkudGhlbigoZnVuY3Rpb24oZSl7aWYoKDAsaS5pc0RpY3QpKGUsIlBhZ2UiKXx8KDAsaS5pc0RpY3QpKGUpJiYhZS5oYXMoIlR5cGUiKSYmZS5oYXMoIkNvbnRlbnRzIikpcmV0dXJuIGEmJiF0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoYSkmJnQucGFnZUtpZHNDb3VudENhY2hlLnB1dChhLDEpLFtlLGFdO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgdG8gYSB2YWxpZCBQYWdlIGRpY3Rpb25hcnkuIil9KSkuY2F0Y2goKGZ1bmN0aW9uKHIpe3JldHVybigwLG4uaW5mbykociksdC5nZXRQYWdlRGljdChlKX0pKX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy5fcGFnZVByb21pc2VzW2VdKXJldHVybiB0aGlzLl9wYWdlUHJvbWlzZXNbZV07dmFyIHI9dGhpcy5jYXRhbG9nLG49dGhpcy5saW5lYXJpemF0aW9uLGE9biYmbi5wYWdlRmlyc3Q9PT1lP3RoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKGUpOnIuZ2V0UGFnZURpY3QoZSk7cmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1tlXT1hLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBhPWQobiwyKSxpPWFbMF0sbz1hWzFdO3JldHVybiBuZXcgYih7cGRmTWFuYWdlcjp0LnBkZk1hbmFnZXIseHJlZjp0LnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6aSxyZWY6byxmb250Q2FjaGU6ci5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTpyLmJ1aWx0SW5DTWFwQ2FjaGUscGRmRnVuY3Rpb25GYWN0b3J5OnQucGRmRnVuY3Rpb25GYWN0b3J5fSl9KSl9fSx7a2V5OiJjaGVja0ZpcnN0UGFnZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmdldFBhZ2UoMCkuY2F0Y2goKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBuLlhSZWZFbnRyeUV4Y2VwdGlvbil0aHJvdyBlLl9wYWdlUHJvbWlzZXMubGVuZ3RoPTAsZS5jbGVhbnVwKCksbmV3IG4uWFJlZlBhcnNlRXhjZXB0aW9ufSkpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cuY2xlYW51cCgpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1jLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4uaW5mbykoZSl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSx3KGUsImVuZG9iaiIsMTAyNCkmJih0PWUucG9zKzYpO2Vsc2V7Zm9yKHZhciByPSJzdGFydHhyZWYiLmxlbmd0aCxhPSExLGk9ZS5lbmQ7IWEmJmk+MDspKGktPTEwMjQtcik8MCYmKGk9MCksZS5wb3M9aSxhPXcoZSwic3RhcnR4cmVmIiwxMDI0LCEwKTtpZihhKXt2YXIgbztlLnNraXAoOSk7ZG97bz1lLmdldEJ5dGUoKX13aGlsZSgoMCxuLmlzU3BhY2UpKG8pKTtmb3IodmFyIHM9IiI7bz49MzImJm88PTU3OylzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pLG89ZS5nZXRCeXRlKCk7dD1wYXJzZUludChzLDEwKSxpc05hTih0KSYmKHQ9MCl9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJzdGFydFhSZWYiLHQpfX0se2tleToibnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGluZWFyaXphdGlvbix0PWU/ZS5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIix0KX19LHtrZXk6ImRvY3VtZW50SW5mbyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD17VGl0bGU6bi5pc1N0cmluZyxBdXRob3I6bi5pc1N0cmluZyxTdWJqZWN0Om4uaXNTdHJpbmcsS2V5d29yZHM6bi5pc1N0cmluZyxDcmVhdG9yOm4uaXNTdHJpbmcsUHJvZHVjZXI6bi5pc1N0cmluZyxDcmVhdGlvbkRhdGU6bi5pc1N0cmluZyxNb2REYXRlOm4uaXNTdHJpbmcsVHJhcHBlZDppLmlzTmFtZX0scj17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnBkZkZvcm1hdFZlcnNpb24sSXNMaW5lYXJpemVkOiEhdGhpcy5saW5lYXJpemF0aW9uLElzQWNyb0Zvcm1QcmVzZW50OiEhdGhpcy5hY3JvRm9ybSxJc1hGQVByZXNlbnQ6ISF0aGlzLnhmYX07dHJ5e2U9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJbmZvIil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfWlmKCgwLGkuaXNEaWN0KShlKSl7dmFyIGE9ITAsbz0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciBsLGM9ZS5nZXRLZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpOyEoYT0obD1jLm5leHQoKSkuZG9uZSk7YT0hMCl7dmFyIHU9bC52YWx1ZSxmPWUuZ2V0KHUpO2lmKHRbdV0pdFt1XShmKT9yW3VdPSJzdHJpbmciIT10eXBlb2YgZj9mOigwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGYpOigwLG4uaW5mbykoJ0JhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAiJy5jb25jYXQodSwnIi4nKSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHUpe3ZhciBoPXZvaWQgMDtpZigoMCxuLmlzU3RyaW5nKShmKSloPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGYpO2Vsc2V7aWYoISgoMCxpLmlzTmFtZSkoZil8fCgwLG4uaXNOdW0pKGYpfHwoMCxuLmlzQm9vbCkoZikpKXsoMCxuLmluZm8pKCdVbnN1cHBvcnRlZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAoY3VzdG9tKSAiJy5jb25jYXQodSwnIi4nKSk7Y29udGludWV9aD1mfXIuQ3VzdG9tfHwoci5DdXN0b209T2JqZWN0LmNyZWF0ZShudWxsKSksci5DdXN0b21bdV09aH19fWNhdGNoKGUpe289ITAscz1lfWZpbmFsbHl7dHJ5e2F8fG51bGw9PWMucmV0dXJufHxjLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBzfX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIscil9fSx7a2V5OiJmaW5nZXJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7QXJyYXkuaXNBcnJheSh0KSYmdFswXSYmKDAsbi5pc1N0cmluZykodFswXSkmJiJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIhPT10WzBdP2U9KDAsbi5zdHJpbmdUb0J5dGVzKSh0WzBdKToodGhpcy5zdHJlYW0uZW5zdXJlUmFuZ2UmJnRoaXMuc3RyZWFtLmVuc3VyZVJhbmdlKDAsTWF0aC5taW4oMTAyNCx0aGlzLnN0cmVhbS5lbmQpKSxlPSgwLGwuY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5ieXRlcy5zdWJhcnJheSgwLDEwMjQpLDAsMTAyNCkpO2Zvcih2YXIgcj0iIixhPTAsaT1lLmxlbmd0aDthPGk7YSsrKXt2YXIgbz1lW2FdLnRvU3RyaW5nKDE2KTtyKz0xPT09by5sZW5ndGg/IjAiK286b31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnQiLHIpfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9a30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz10LlhSZWY9dC5PYmplY3RMb2FkZXI9dC5DYXRhbG9nPXZvaWQgMDt2YXIgbixhPShuPXIoMikpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoNiksbz1yKDE1NSkscz1yKDE1NiksbD1yKDE1MiksYz1yKDE2NyksdT1yKDE2OCk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXkodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBoKGUpe3JldHVybihoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuKHA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybih5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gYihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHcoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBrKGUsdCxyKXtyZXR1cm4gdCYmdyhlLnByb3RvdHlwZSx0KSxyJiZ3KGUsciksZX1mdW5jdGlvbiBTKGUpe3JldHVybigwLG8uaXNEaWN0KShlKT9lLmdldCgiRCIpOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoYih0aGlzLGUpLHRoaXMucGRmTWFuYWdlcj10LHRoaXMueHJlZj1yLHRoaXMuY2F0RGljdD1yLmdldENhdGFsb2dPYmooKSwhKDAsby5pc0RpY3QpKHRoaXMuY2F0RGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy5mb250Q2FjaGU9bmV3IG8uUmVmU2V0Q2FjaGUsdGhpcy5idWlsdEluQ01hcENhY2hlPW5ldyBNYXAsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IG8uUmVmU2V0Q2FjaGV9cmV0dXJuIGsoZSxbe2tleToiX3JlYWREb2N1bWVudE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKDAsby5pc0RpY3QpKHQpKXJldHVybiBudWxsO2lmKHQ9dC5nZXRSYXcoIkZpcnN0IiksISgwLG8uaXNSZWYpKHQpKXJldHVybiBudWxsO3ZhciByPXtpdGVtczpbXX0sbj1be29iajp0LHBhcmVudDpyfV0sYT1uZXcgby5SZWZTZXQ7YS5wdXQodCk7Zm9yKHZhciBzPXRoaXMueHJlZixsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtuLmxlbmd0aD4wOyl7dmFyIGM9bi5zaGlmdCgpLGY9cy5mZXRjaElmUmVmKGMub2JqKTtpZihudWxsIT09Zil7aWYoIWYuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTt2YXIgaD17dXJsOm51bGwsZGVzdDpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmYscmVzdWx0T2JqOmgsZG9jQmFzZVVybDp0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybH0pO3ZhciBkPWYuZ2V0KCJUaXRsZSIpLHA9Zi5nZXQoIkYiKXx8MCxtPWYuZ2V0QXJyYXkoIkMiKSxnPWw7IUFycmF5LmlzQXJyYXkobSl8fDMhPT1tLmxlbmd0aHx8MD09PW1bMF0mJjA9PT1tWzFdJiYwPT09bVsyXXx8KGc9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihtLDApKTt2YXIgdj17ZGVzdDpoLmRlc3QsdXJsOmgudXJsLHVuc2FmZVVybDpoLnVuc2FmZVVybCxuZXdXaW5kb3c6aC5uZXdXaW5kb3csdGl0bGU6KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6Zyxjb3VudDpmLmdldCgiQ291bnQiKSxib2xkOiEhKDImcCksaXRhbGljOiEhKDEmcCksaXRlbXM6W119O2MucGFyZW50Lml0ZW1zLnB1c2godiksdD1mLmdldFJhdygiRmlyc3QiKSwoMCxvLmlzUmVmKSh0KSYmIWEuaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6dn0pLGEucHV0KHQpKSx0PWYuZ2V0UmF3KCJOZXh0IiksKDAsby5pc1JlZikodCkmJiFhLmhhcyh0KSYmKG4ucHVzaCh7b2JqOnQscGFyZW50OmMucGFyZW50fSksYS5wdXQodCkpfX1yZXR1cm4gci5pdGVtcy5sZW5ndGg+MD9yLml0ZW1zOm51bGx9fSx7a2V5OiJfcmVhZFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMueHJlZi50cmFpbGVyLmdldCgiRW5jcnlwdCIpO2lmKCEoMCxvLmlzRGljdCkoZSkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5nZXQoIlAiKTtpZighKDAsaS5pc051bSkodCkpcmV0dXJuIG51bGw7dCs9TWF0aC5wb3coMiwzMik7dmFyIHI9W107Zm9yKHZhciBuIGluIGkuUGVybWlzc2lvbkZsYWcpe3ZhciBhPWkuUGVybWlzc2lvbkZsYWdbbl07dCZhJiZyLnB1c2goYSl9cmV0dXJuIHJ9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7cmV0dXJuIHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2Ygby5EaWN0P1ModC5nZXQoZSl8fG51bGwpOm51bGx9fSx7a2V5OiJfcmVhZERlc3RzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBDKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5jYXREaWN0LmhhcygiRGVzdHMiKT90aGlzLmNhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH19LHtrZXk6Il9yZWFkUGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwsbj0iIixhPW5ldyBQKGUsdGhpcy54cmVmKS5nZXRBbGwoKSxzPSIiLGw9MSxjPTAsdT10aGlzLm51bVBhZ2VzO2M8dTtjKyspe2lmKGMgaW4gYSl7dmFyIGY9YVtjXTtpZighKDAsby5pc0RpY3QpKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZihmLmhhcygiVHlwZSIpJiYhKDAsby5pc05hbWUpKGYuZ2V0KCJUeXBlIiksIlBhZ2VMYWJlbCIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aWYoZi5oYXMoIlMiKSl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKDAsby5pc05hbWUpKGgpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO3I9aC5uYW1lfWVsc2Ugcj1udWxsO2lmKGYuaGFzKCJQIikpe3ZhciBkPWYuZ2V0KCJQIik7aWYoISgwLGkuaXNTdHJpbmcpKGQpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtuPSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGQpfWVsc2Ugbj0iIjtpZihmLmhhcygiU3QiKSl7dmFyIHA9Zi5nZXQoIlN0Iik7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKHApJiZwPj0xKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtsPXB9ZWxzZSBsPTF9c3dpdGNoKHIpe2Nhc2UiRCI6cz1sO2JyZWFrO2Nhc2UiUiI6Y2FzZSJyIjpzPSgwLGkudG9Sb21hbk51bWVyYWxzKShsLCJyIj09PXIpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpmb3IodmFyIG09ImEiPT09cj85Nzo2NSxnPWwtMSx2PVN0cmluZy5mcm9tQ2hhckNvZGUobStnJTI2KSx5PVtdLGI9MCx3PWcvMjZ8MDtiPD13O2IrKyl5LnB1c2godik7cz15LmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcignSW52YWxpZCBzdHlsZSAiJy5jb25jYXQociwnIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4nKSk7cz0iIn10W2NdPW4rcyxsKyt9cmV0dXJuIHR9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107cmV0dXJuIHRoaXMuZm9udENhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IucHVzaChlKX0pKSxQcm9taXNlLmFsbChyKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1yW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBsPW8udmFsdWU7aWYobC5sb2FkZWROYW1lPT09ZSlyZXR1cm4gdm9pZCBsLmZhbGxiYWNrKHQpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19fSkpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucGFnZUtpZHNDb3VudENhY2hlLmNsZWFyKCk7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9udENhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxQcm9taXNlLmFsbCh0KS50aGVuKChmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZGVsZXRlIHRbcl0uZGljdC50cmFuc2xhdGVkO2UuZm9udENhY2hlLmNsZWFyKCksZS5idWlsdEluQ01hcENhY2hlLmNsZWFyKCl9KSl9fSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG49W3RoaXMuY2F0RGljdC5nZXRSYXcoIlBhZ2VzIildLGE9dGhpcy54cmVmLHM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsbD0wO3JldHVybiBmdW5jdGlvbiBjKCl7Zm9yKHZhciB1PWZ1bmN0aW9uKCl7dmFyIHU9bi5wb3AoKTtpZigoMCxvLmlzUmVmKSh1KSlyZXR1cm4odD1zLmdldCh1KSk+MCYmbCt0PGU/KGwrPXQsImNvbnRpbnVlIik6KGEuZmV0Y2hBc3luYyh1KS50aGVuKChmdW5jdGlvbih0KXsoMCxvLmlzRGljdCkodCwiUGFnZSIpfHwoMCxvLmlzRGljdCkodCkmJiF0LmhhcygiS2lkcyIpP2U9PT1sPyh1JiYhcy5oYXModSkmJnMucHV0KHUsMSksci5yZXNvbHZlKFt0LHVdKSk6KGwrKyxjKCkpOihuLnB1c2godCksYygpKX0pLHIucmVqZWN0KSx7djp2b2lkIDB9KTtpZighKDAsby5pc0RpY3QpKHUpKXJldHVybiByLnJlamVjdChuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSx7djp2b2lkIDB9O2lmKHQ9dS5nZXQoIkNvdW50IiksTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCl7dmFyIGY9dS5vYmpJZDtpZihmJiYhcy5oYXMoZikmJnMucHV0KGYsdCksbCt0PD1lKXJldHVybiBsKz10LCJjb250aW51ZSJ9dmFyIGg9dS5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShoKSlyZXR1cm4oMCxvLmlzTmFtZSkodS5nZXQoIlR5cGUiKSwiUGFnZSIpfHwhdS5oYXMoIlR5cGUiKSYmdS5oYXMoIkNvbnRlbnRzIik/bD09PWU/KHIucmVzb2x2ZShbdSxudWxsXSkse3Y6dm9pZCAwfSk6KGwrKywiY29udGludWUiKTooci5yZWplY3QobmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIikpLHt2OnZvaWQgMH0pO2Zvcih2YXIgZD1oLmxlbmd0aC0xO2Q+PTA7ZC0tKW4ucHVzaChoW2RdKX07bi5sZW5ndGg7KXt2YXIgZj11KCk7c3dpdGNoKGYpe2Nhc2UiY29udGludWUiOmNvbnRpbnVlO2RlZmF1bHQ6aWYoIm9iamVjdCI9PT15KGYpKXJldHVybiBmLnZ9fXIucmVqZWN0KG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdChlLCIgbm90IGZvdW5kLiIpKSl9KCksci5wcm9taXNlfX0se2tleToiZ2V0UGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnhyZWYscj0wO3JldHVybiBmdW5jdGlvbiBuKGEpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixhPTA7cmV0dXJuIHQuZmV0Y2hBc3luYyhyKS50aGVuKChmdW5jdGlvbih0KXtpZigoMCxvLmlzUmVmc0VxdWFsKShyLGUpJiYhKDAsby5pc0RpY3QpKHQsIlBhZ2UiKSYmKCEoMCxvLmlzRGljdCkodCl8fHQuaGFzKCJUeXBlIil8fCF0LmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCF0KXJldHVybiBudWxsO2lmKCEoMCxvLmlzRGljdCkodCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIG49dC5nZXRSYXcoIlBhcmVudCIpLHQuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoMCxvLmlzRGljdCkoZSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgcz1bXSxsPSExLGM9MCx1PWUubGVuZ3RoO2M8dTtjKyspe3ZhciBmPWVbY107aWYoISgwLG8uaXNSZWYpKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxvLmlzUmVmc0VxdWFsKShmLHIpKXtsPSEwO2JyZWFrfXMucHVzaCh0LmZldGNoQXN5bmMoZikudGhlbigoZnVuY3Rpb24oZSl7aWYoISgwLG8uaXNEaWN0KShlKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/YSs9ZS5nZXQoIkNvdW50Iik6YSsrfSkpKX1pZighbCl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bYSxuXX0pKX0pKX0oYSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHI7dmFyIHQ9dihlLDIpLGE9dFswXSxpPXRbMV07cmV0dXJuIHIrPWEsbihpKX0pKX0oZSl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jYXREaWN0LmdldFJhdygiTWV0YWRhdGEiKTtpZighKDAsby5pc1JlZikoZSkpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIixudWxsKTt2YXIgdCxyPSEodGhpcy54cmVmLmVuY3J5cHQmJnRoaXMueHJlZi5lbmNyeXB0LmVuY3J5cHRNZXRhZGF0YSksbj10aGlzLnhyZWYuZmV0Y2goZSxyKTtpZihuJiYoMCxvLmlzRGljdCkobi5kaWN0KSl7dmFyIGE9bi5kaWN0LmdldCgiVHlwZSIpLHM9bi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLG8uaXNOYW1lKShhLCJNZXRhZGF0YSIpJiYoMCxvLmlzTmFtZSkocywiWE1MIikpdHJ5e3Q9KDAsaS5zdHJpbmdUb1VURjhTdHJpbmcpKCgwLGkuYnl0ZXNUb1N0cmluZykobi5nZXRCeXRlcygpKSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLmluZm8pKCJTa2lwcGluZyBpbnZhbGlkIG1ldGFkYXRhLiIpfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywibWV0YWRhdGEiLHQpfX0se2tleToidG9wbGV2ZWxQYWdlc0RpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoISgwLG8uaXNEaWN0KShlKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIHBlcm1pc3Npb25zLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6ImRlc3RpbmF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVhZERlc3RzKCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBDKXt2YXIgcj1lLmdldEFsbCgpO2Zvcih2YXIgbiBpbiByKXRbbl09UyhyW25dKX1lbHNlIGUgaW5zdGFuY2VvZiBvLkRpY3QmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtyJiYodFtlXT1TKHIpKX0pKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX19LHtrZXk6InBhZ2VMYWJlbHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwYWdlTGFiZWxzIixlKX19LHtrZXk6InBhZ2VNb2RlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKCgwLG8uaXNOYW1lKShlKSlzd2l0Y2goZS5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIkZ1bGxTY3JlZW4iOmNhc2UiVXNlT0MiOmNhc2UiVXNlQXR0YWNobWVudHMiOnQ9ZS5uYW1lfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwYWdlTW9kZSIsdCl9fSx7a2V5OiJvcGVuQWN0aW9uRGVzdGluYXRpb24iLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPW51bGw7aWYoKDAsby5pc0RpY3QpKHQpKXt2YXIgbj1uZXcgby5EaWN0KHRoaXMueHJlZik7bi5zZXQoIkEiLHQpO3ZhciBhPXt1cmw6bnVsbCxkZXN0Om51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6bixyZXN1bHRPYmo6YX0pLEFycmF5LmlzQXJyYXkoYS5kZXN0KSYmKHI9YS5kZXN0KX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyPXQpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJvcGVuQWN0aW9uRGVzdGluYXRpb24iLHIpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUmJmUuaGFzKCJFbWJlZGRlZEZpbGVzIikpe3ZhciByPW5ldyBDKGUuZ2V0UmF3KCJFbWJlZGRlZEZpbGVzIiksdGhpcy54cmVmKS5nZXRBbGwoKTtmb3IodmFyIG4gaW4gcil7dmFyIGE9bmV3IEUocltuXSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsaS5zdHJpbmdUb1BERlN0cmluZykobildPWEuc2VyaWFsaXphYmxlfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYXR0YWNobWVudHMiLHQpfX0se2tleToiamF2YVNjcmlwdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLmdldCgiUyIpO2lmKCgwLG8uaXNOYW1lKShyLCJKYXZhU2NyaXB0Iikpe3ZhciBuPWUuZ2V0KCJKUyIpO2lmKCgwLG8uaXNTdHJlYW0pKG4pKW49KDAsaS5ieXRlc1RvU3RyaW5nKShuLmdldEJ5dGVzKCkpO2Vsc2UgaWYoISgwLGkuaXNTdHJpbmcpKG4pKXJldHVybjt0fHwodD1bXSksdC5wdXNoKCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKG4pKX19aWYoZSYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG49bmV3IEMoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpLmdldEFsbCgpO2Zvcih2YXIgYSBpbiBuKXt2YXIgcz1uW2FdOygwLG8uaXNEaWN0KShzKSYmcihzKX19dmFyIGw9dGhpcy5jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpO2lmKCgwLG8uaXNEaWN0KShsLCJBY3Rpb24iKSl7dmFyIGM9bC5nZXQoIlMiKTtpZigoMCxvLmlzTmFtZSkoYywiTmFtZWQiKSl7dmFyIHU9bC5nZXQoIk4iKTsoMCxvLmlzTmFtZSkodSwiUHJpbnQiKSYmKHR8fCh0PVtdKSx0LnB1c2goInByaW50KHt9KTsiKSl9ZWxzZSByKGwpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJqYXZhU2NyaXB0Iix0KX19XSxbe2tleToicGFyc2VEZXN0RGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXN0RGljdDtpZigoMCxvLmlzRGljdCkodCkpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09eShyKSl7dmFyIG4sYSxzPWUuZG9jQmFzZVVybHx8bnVsbCxsPXQuZ2V0KCJBIik7aWYoISgwLG8uaXNEaWN0KShsKSYmdC5oYXMoIkRlc3QiKSYmKGw9dC5nZXQoIkRlc3QiKSksKDAsby5pc0RpY3QpKGwpKXt2YXIgYz1sLmdldCgiUyIpO2lmKCEoMCxvLmlzTmFtZSkoYykpcmV0dXJuIHZvaWQoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7dmFyIHU9Yy5uYW1lO3N3aXRjaCh1KXtjYXNlIlVSSSI6bj1sLmdldCgiVVJJIiksKDAsby5pc05hbWUpKG4pP249Ii8iK24ubmFtZTooMCxpLmlzU3RyaW5nKShuKSYmKG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgid3d3LiIpPyJodHRwOi8vIi5jb25jYXQoZSk6ZX0obikpO2JyZWFrO2Nhc2UiR29UbyI6YT1sLmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjp2YXIgZj1sLmdldCgiRiIpOygwLG8uaXNEaWN0KShmKT9uPWYuZ2V0KCJGIil8fG51bGw6KDAsaS5pc1N0cmluZykoZikmJihuPWYpO3ZhciBoPWwuZ2V0KCJEIik7aWYoaCYmKCgwLG8uaXNOYW1lKShoKSYmKGg9aC5uYW1lKSwoMCxpLmlzU3RyaW5nKShuKSkpe3ZhciBkPW4uc3BsaXQoIiMiKVswXTsoMCxpLmlzU3RyaW5nKShoKT9uPWQrIiMiK2g6QXJyYXkuaXNBcnJheShoKSYmKG49ZCsiIyIrSlNPTi5zdHJpbmdpZnkoaCkpfXZhciBwPWwuZ2V0KCJOZXdXaW5kb3ciKTsoMCxpLmlzQm9vbCkocCkmJihyLm5ld1dpbmRvdz1wKTticmVhaztjYXNlIk5hbWVkIjp2YXIgbT1sLmdldCgiTiIpOygwLG8uaXNOYW1lKShtKSYmKHIuYWN0aW9uPW0ubmFtZSk7YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgZyx2PWwuZ2V0KCJKUyIpO2lmKCgwLG8uaXNTdHJlYW0pKHYpP2c9KDAsaS5ieXRlc1RvU3RyaW5nKSh2LmdldEJ5dGVzKCkpOigwLGkuaXNTdHJpbmcpKHYpJiYoZz12KSxnKXt2YXIgYj1uZXcgUmVnRXhwKCJeXFxzKigiK1siYXBwLmxhdW5jaFVSTCIsIndpbmRvdy5vcGVuIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGcpKTtpZihiJiZiWzJdKXtuPWJbMl0sInRydWUiPT09YlszXSYmImFwcC5sYXVuY2hVUkwiPT09YlsxXSYmKHIubmV3V2luZG93PSEwKTticmVha319ZGVmYXVsdDooMCxpLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5OiB1bnN1cHBvcnRlZCBhY3Rpb24gdHlwZSAiJy5jb25jYXQodSwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGE9dC5nZXQoIkRlc3QiKSk7aWYoKDAsaS5pc1N0cmluZykobikpe249ZnVuY3Rpb24oZSl7dHJ5e3JldHVybigwLGkuc3RyaW5nVG9VVEY4U3RyaW5nKShlKX1jYXRjaCh0KXtyZXR1cm4gZX19KG4pO3ZhciB3PSgwLGkuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkobixzKTt3JiYoci51cmw9dy5ocmVmKSxyLnVuc2FmZVVybD1ufWEmJigoMCxvLmlzTmFtZSkoYSkmJihhPWEubmFtZSksKCgwLGkuaXNTdHJpbmcpKGEpfHxBcnJheS5pc0FycmF5KGEpKSYmKHIuZGVzdD1hKSl9ZWxzZSgwLGkud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGByZXN1bHRPYmpgIG11c3QgYmUgYW4gb2JqZWN0LiIpfWVsc2UoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpfX1dKSxlfSgpO3QuQ2F0YWxvZz1fO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyZWFtPWUsdGhpcy5wZGZNYW5hZ2VyPXQsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhY2hlPVtdLHRoaXMuc3RhdHM9e3N0cmVhbVR5cGVzOltdLGZvbnRUeXBlczpbXX19dmFyIHQscjtyZXR1cm4gZS5wcm90b3R5cGU9e3NldFN0YXJ0WFJlZjpmdW5jdGlvbihlKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlPVtlXX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQscixuO2U/KCgwLGkud2FybikoIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpLHQ9dGhpcy5pbmRleE9iamVjdHMoKSk6dD10aGlzLnJlYWRYUmVmKCksdC5hc3NpZ25YcmVmKHRoaXMpLHRoaXMudHJhaWxlcj10O3RyeXtyPXQuZ2V0KCJFbmNyeXB0Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLndhcm4pKCdYUmVmLnBhcnNlIC0gSW52YWxpZCAiRW5jcnlwdCIgcmVmZXJlbmNlOiAiJy5jb25jYXQoZSwnIi4nKSl9aWYoKDAsby5pc0RpY3QpKHIpKXt2YXIgYT10LmdldCgiSUQiKSxzPWEmJmEubGVuZ3RoP2FbMF06IiI7ci5zdXBwcmVzc0VuY3J5cHRpb249ITAsdGhpcy5lbmNyeXB0PW5ldyBjLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkocixzLHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCl9dHJ5e249dC5nZXQoIlJvb3QiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoJ1hSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighKDAsby5pc0RpY3QpKG4pfHwhbi5oYXMoIlBhZ2VzIikpe2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjt0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCByb290IHJlZmVyZW5jZSIpfXRoaXMucm9vdD1ufSxwcm9jZXNzWFJlZlRhYmxlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsby5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYoISgwLG8uaXNEaWN0KShyKSYmci5kaWN0JiYocj1yLmRpY3QpLCEoMCxvLmlzRGljdCkocikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeSIpO3JldHVybiBkZWxldGUgdGhpcy50YWJsZVN0YXRlLHJ9LHJlYWRYUmVmVGFibGU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxuPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9bi5zdHJlYW1Qb3MsZS5idWYxPW4ucGFyc2VyQnVmMSxlLmJ1ZjI9bi5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gbiYmImVudHJ5Q291bnQiaW4gbikpe2lmKCgwLG8uaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO24uZmlyc3RFbnRyeU51bT10LG4uZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBhPW4uZmlyc3RFbnRyeU51bSxzPW4uZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGw9bi5lbnRyeU51bTtsPHM7bCsrKXtuLnN0cmVhbVBvcz1yLnBvcyxuLmVudHJ5TnVtPWwsbi5wYXJzZXJCdWYxPWUuYnVmMSxuLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciBjPXt9O2Mub2Zmc2V0PWUuZ2V0T2JqKCksYy5nZW49ZS5nZXRPYmooKTt2YXIgdT1lLmdldE9iaigpO2lmKCgwLG8uaXNDbWQpKHUsImYiKT9jLmZyZWU9ITA6KDAsby5pc0NtZCkodSwibiIpJiYoYy51bmNvbXByZXNzZWQ9ITApLCFOdW1iZXIuaXNJbnRlZ2VyKGMub2Zmc2V0KXx8IU51bWJlci5pc0ludGVnZXIoYy5nZW4pfHwhYy5mcmVlJiYhYy51bmNvbXByZXNzZWQpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAiLmNvbmNhdChhLCIsICIpLmNvbmNhdChzKSk7MD09PWwmJmMuZnJlZSYmMT09PWEmJihhPTApLHRoaXMuZW50cmllc1tsK2FdfHwodGhpcy5lbnRyaWVzW2wrYV09Yyl9bi5lbnRyeU51bT0wLG4uc3RyZWFtUG9zPXIucG9zLG4ucGFyc2VyQnVmMT1lLmJ1ZjEsbi5wYXJzZXJCdWYyPWUuYnVmMixkZWxldGUgbi5maXJzdEVudHJ5TnVtLGRlbGV0ZSBuLmVudHJ5Q291bnR9aWYodGhpcy5lbnRyaWVzWzBdJiYhdGhpcy5lbnRyaWVzWzBdLmZyZWUpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gdH0scHJvY2Vzc1hSZWZTdHJlYW06ZnVuY3Rpb24oZSl7aWYoISgic3RyZWFtU3RhdGUiaW4gdGhpcykpe3ZhciB0PWUuZGljdCxyPXQuZ2V0KCJXIiksbj10LmdldCgiSW5kZXgiKTtufHwobj1bMCx0LmdldCgiU2l6ZSIpXSksdGhpcy5zdHJlYW1TdGF0ZT17ZW50cnlSYW5nZXM6bixieXRlV2lkdGhzOnIsZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5wb3N9fXJldHVybiB0aGlzLnJlYWRYUmVmU3RyZWFtKGUpLGRlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlLGUuZGljdH0scmVhZFhSZWZTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuc3RyZWFtU3RhdGU7ZS5wb3M9bi5zdHJlYW1Qb3M7Zm9yKHZhciBhPW4uYnl0ZVdpZHRocyxvPWFbMF0scz1hWzFdLGw9YVsyXSxjPW4uZW50cnlSYW5nZXM7Yy5sZW5ndGg+MDspe3ZhciB1PWNbMF0sZj1jWzFdO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHUpfHwhTnVtYmVyLmlzSW50ZWdlcihmKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogIi5jb25jYXQodSwiLCAiKS5jb25jYXQoZikpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihzKXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAiLmNvbmNhdCh1LCIsICIpLmNvbmNhdChmKSk7Zm9yKHQ9bi5lbnRyeU51bTt0PGY7Kyt0KXtuLmVudHJ5TnVtPXQsbi5zdHJlYW1Qb3M9ZS5wb3M7dmFyIGg9MCxkPTAscD0wO2ZvcihyPTA7cjxvOysrciloPWg8PDh8ZS5nZXRCeXRlKCk7Zm9yKDA9PT1vJiYoaD0xKSxyPTA7cjxzOysrcilkPWQ8PDh8ZS5nZXRCeXRlKCk7Zm9yKHI9MDtyPGw7KytyKXA9cDw8OHxlLmdldEJ5dGUoKTt2YXIgbT17fTtzd2l0Y2gobS5vZmZzZXQ9ZCxtLmdlbj1wLGgpe2Nhc2UgMDptLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOm0udW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K3RdfHwodGhpcy5lbnRyaWVzW3UrdF09bSl9bi5lbnRyeU51bT0wLG4uc3RyZWFtUG9zPWUucG9zLGMuc3BsaWNlKDAsMil9fSxpbmRleE9iamVjdHM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPSIiLG49ZVt0XTsxMCE9PW4mJjEzIT09biYmNjAhPT1uJiYhKCsrdD49ZS5sZW5ndGgpOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pLG49ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0KGUsdCxyKXtmb3IodmFyIG49ci5sZW5ndGgsYT1lLmxlbmd0aCxpPTA7dDxhOyl7Zm9yKHZhciBvPTA7bzxuJiZlW3Qrb109PT1yW29dOykrK287aWYobz49bilicmVhazt0KyssaSsrfXJldHVybiBpfXZhciByPS9eKFxkKylccysoXGQrKVxzK29ialxiLyxuPS9cYmVuZG9ialtcYlxzXSQvLGE9L1xzKyhcZCtccytcZCtccytvYmpbXGJcczxdKSQvLGw9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksYz1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLHU9bmV3IFVpbnQ4QXJyYXkoWzExMSw5OCwxMDZdKSxmPW5ldyBVaW50OEFycmF5KFs0Nyw4OCw4MiwxMDEsMTAyXSk7dGhpcy5lbnRyaWVzLmxlbmd0aD0wO3ZhciBoPXRoaXMuc3RyZWFtO2gucG9zPTA7Zm9yKHZhciBkLHAsbSxnPWguZ2V0Qnl0ZXMoKSx2PWguc3RhcnQseT1nLmxlbmd0aCxiPVtdLHc9W107djx5Oyl7dmFyIGs9Z1t2XTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTLF89ZShnLHYpO2lmKF8uc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PV8ubGVuZ3RofHwvXHMvLnRlc3QoX1s0XSkpKXYrPXQoZyx2LGwpLGIucHVzaCh2KSx2Kz10KGcsdixjKTtlbHNlIGlmKFM9ci5leGVjKF8pKXt2YXIgeD0wfFNbMV0sQT0wfFNbMl07dm9pZCAwPT09dGhpcy5lbnRyaWVzW3hdJiYodGhpcy5lbnRyaWVzW3hdPXtvZmZzZXQ6di1oLnN0YXJ0LGdlbjpBLHVuY29tcHJlc3NlZDohMH0pO2Zvcih2YXIgQz12b2lkIDAsUD12K18ubGVuZ3RoO1A8Zy5sZW5ndGg7KXt2YXIgRT1QK3QoZyxQLHUpKzQ7Qz1FLXY7dmFyIFQ9TWF0aC5tYXgoRS0yNSxQKSxSPSgwLGkuYnl0ZXNUb1N0cmluZykoZy5zdWJhcnJheShULEUpKTtpZihuLnRlc3QoUikpYnJlYWs7dmFyIE89YS5leGVjKFIpO2lmKE8mJk9bMV0peygwLGkud2FybikoJ2luZGV4T2JqZWN0czogRm91bmQgbmV3ICJvYmoiIGluc2lkZSBvZiBhbm90aGVyICJvYmoiLCBjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxDLT1PWzFdLmxlbmd0aDticmVha31QPUV9dmFyIEk9Zy5zdWJhcnJheSh2LHYrQyksRj10KEksMCxmKTtGPEMmJklbRis1XTw2NCYmKHcucHVzaCh2LWguc3RhcnQpLHRoaXMueHJlZnN0bXNbdi1oLnN0YXJ0XT0xKSx2Kz1DfWVsc2UgXy5zdGFydHNXaXRoKCJ0cmFpbGVyIikmJig3PT09Xy5sZW5ndGh8fC9ccy8udGVzdChfWzddKSk/KGIucHVzaCh2KSx2Kz10KGcsdixjKSk6dis9Xy5sZW5ndGgrMX1lbHNlIGRve2lmKCsrdj49eSlicmVhaztrPWdbdl19d2hpbGUoMTAhPT1rJiYxMyE9PWspO2Vsc2UrK3Z9Zm9yKGQ9MCxwPXcubGVuZ3RoO2Q8cDsrK2QpdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHdbZF0pLHRoaXMucmVhZFhSZWYoITApO2ZvcihkPTAscD1iLmxlbmd0aDtkPHA7KytkKXtoLnBvcz1iW2RdO3ZhciBMPW5ldyBzLlBhcnNlcihuZXcgcy5MZXhlcihoKSwhMCx0aGlzLCEwKSxEPUwuZ2V0T2JqKCk7aWYoKDAsby5pc0NtZCkoRCwidHJhaWxlciIpKXt2YXIgTT1MLmdldE9iaigpO2lmKCgwLG8uaXNEaWN0KShNKSl7dmFyIE49dm9pZCAwO3RyeXtOPU0uZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtjb250aW51ZX1pZigoMCxvLmlzRGljdCkoTikmJk4uaGFzKCJQYWdlcyIpKXtpZihNLmhhcygiSUQiKSlyZXR1cm4gTTttPU19fX19aWYobSlyZXR1cm4gbTt0aHJvdyBuZXcgaS5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUiKX0scmVhZFhSZWY6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW0scj1PYmplY3QuY3JlYXRlKG51bGwpO3RyeXtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7dmFyIG49dGhpcy5zdGFydFhSZWZRdWV1ZVswXTtpZihyW25dKSgwLGkud2FybikoInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuIiksdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO2Vsc2V7cltuXT0hMCx0LnBvcz1uK3Quc3RhcnQ7dmFyIGEsbD1uZXcgcy5QYXJzZXIobmV3IHMuTGV4ZXIodCksITAsdGhpcyksYz1sLmdldE9iaigpO2lmKCgwLG8uaXNDbWQpKGMsInhyZWYiKSl7aWYoYT10aGlzLnByb2Nlc3NYUmVmVGFibGUobCksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWEpLGM9YS5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGMpKXt2YXIgdT1jO3UgaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbdV09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2godSkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwuZ2V0T2JqKCkpfHwhKDAsby5pc0NtZCkobC5nZXRPYmooKSwib2JqIil8fCEoMCxvLmlzU3RyZWFtKShjPWwuZ2V0T2JqKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoYT10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGMpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1hKSwhYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1jPWEuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihjKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goYyk6KDAsby5pc1JlZikoYykmJnRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChjLm51bSksdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfX1yZXR1cm4gdGhpcy50b3BEaWN0fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9aWYoIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9ufSxnZXRFbnRyeTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH0sZmV0Y2hJZlJlZjpmdW5jdGlvbihlLHQpe3JldHVybigwLG8uaXNSZWYpKGUpP3RoaXMuZmV0Y2goZSx0KTplfSxmZXRjaDpmdW5jdGlvbihlLHQpe2lmKCEoMCxvLmlzUmVmKShlKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW07aWYociBpbiB0aGlzLmNhY2hlKXt2YXIgbj10aGlzLmNhY2hlW3JdO3JldHVybiBuIGluc3RhbmNlb2Ygby5EaWN0JiYhbi5vYmpJZCYmKG4ub2JqSWQ9ZS50b1N0cmluZygpKSxufXZhciBhPXRoaXMuZ2V0RW50cnkocik7cmV0dXJuIG51bGw9PT1hP3RoaXMuY2FjaGVbcl09bnVsbDooYT1hLnVuY29tcHJlc3NlZD90aGlzLmZldGNoVW5jb21wcmVzc2VkKGUsYSx0KTp0aGlzLmZldGNoQ29tcHJlc3NlZChlLGEsdCksKDAsby5pc0RpY3QpKGEpP2Eub2JqSWQ9ZS50b1N0cmluZygpOigwLG8uaXNTdHJlYW0pKGEpJiYoYS5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksYSl9LGZldGNoVW5jb21wcmVzc2VkOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2VuLGE9ZS5udW07aWYodC5nZW4hPT1uKXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogIi5jb25jYXQoZSkpO3ZhciBsPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGM9bmV3IHMuUGFyc2VyKG5ldyBzLkxleGVyKGwpLCEwLHRoaXMpLHU9Yy5nZXRPYmooKSxmPWMuZ2V0T2JqKCksaD1jLmdldE9iaigpO2lmKE51bWJlci5pc0ludGVnZXIodSl8fCh1PXBhcnNlSW50KHUsMTApKSxOdW1iZXIuaXNJbnRlZ2VyKGYpfHwoZj1wYXJzZUludChmLDEwKSksdSE9PWF8fGYhPT1ufHwhKDAsby5pc0NtZCkoaCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09aC5jbWQpe2lmKGguY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYoYT1wYXJzZUludChoLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4oYSkpKXJldHVybiBhO3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4gdD10aGlzLmVuY3J5cHQmJiFyP2MuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oYSxuKSk6Yy5nZXRPYmooKSwoMCxvLmlzU3RyZWFtKSh0KXx8KHRoaXMuY2FjaGVbYV09dCksdH0sZmV0Y2hDb21wcmVzc2VkOmZ1bmN0aW9uKGUsdCl7YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2YXIgcj10Lm9mZnNldCxuPXRoaXMuZmV0Y2gobmV3IG8uUmVmKHIsMCkpO2lmKCEoMCxvLmlzU3RyZWFtKShuKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTt2YXIgYT1uLmRpY3QuZ2V0KCJGaXJzdCIpLGw9bi5kaWN0LmdldCgiTiIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7dmFyIGM9bmV3IHMuUGFyc2VyKG5ldyBzLkxleGVyKG4pLCExLHRoaXMpO2MuYWxsb3dTdHJlYW1zPSEwO3ZhciB1LGYsaD1bXSxkPVtdO2Zvcih1PTA7dTxsOysrdSl7aWYoZj1jLmdldE9iaigpLCFOdW1iZXIuaXNJbnRlZ2VyKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICIuY29uY2F0KGYpKTtkLnB1c2goZik7dmFyIHA9Yy5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihwKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChwKSl9Zm9yKHU9MDt1PGw7Kyt1KXtoLnB1c2goYy5nZXRPYmooKSksKDAsby5pc0NtZCkoYy5idWYxLCJlbmRvYmoiKSYmYy5zaGlmdCgpLGY9ZFt1XTt2YXIgbT10aGlzLmVudHJpZXNbZl07bSYmbS5vZmZzZXQ9PT1yJiZtLmdlbj09PXUmJih0aGlzLmNhY2hlW2ZdPWhbdV0pfWlmKHZvaWQgMD09PSh0PWhbdC5nZW5dKSl0aHJvdyBuZXcgaS5YUmVmRW50cnlFeGNlcHRpb24oIkJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO3JldHVybiB0fSxmZXRjaElmUmVmQXN5bmM6KHI9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoKDAsby5pc1JlZikodCkpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZldGNoQXN5bmM6KHQ9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGdldENhdGFsb2dPYmo6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fX0sZX0oKTt0LlhSZWY9eDt2YXIgQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2IodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsaS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBrKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG8uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KXt2YXIgYT10LmZldGNoSWZSZWYobi5zaGlmdCgpKTtpZigoMCxvLmlzRGljdCkoYSkpaWYoYS5oYXMoIktpZHMiKSlmb3IodmFyIHM9YS5nZXQoIktpZHMiKSxsPTAsYz1zLmxlbmd0aDtsPGM7bCsrKXt2YXIgdT1zW2xdO2lmKHIuaGFzKHUpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCdEdXBsaWNhdGUgZW50cnkgaW4gIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSk7bi5wdXNoKHUpLHIucHV0KHUpfWVsc2V7dmFyIGY9YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShmKSlmb3IodmFyIGg9MCxkPWYubGVuZ3RoO2g8ZDtoKz0yKWVbdC5mZXRjaElmUmVmKGZbaF0pXT10LmZldGNoSWZSZWYoZltoKzFdKX19cmV0dXJuIGV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJvb3QpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXRoaXMueHJlZixyPXQuZmV0Y2hJZlJlZih0aGlzLnJvb3QpLG49MDtyLmhhcygiS2lkcyIpOyl7aWYoKytuPjEwKXJldHVybigwLGkud2FybikoJ1NlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciAiJy5jb25jYXQodGhpcy5fdHlwZSwnIiB0cmVlLicpKSxudWxsO3ZhciBhPXIuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIG51bGw7Zm9yKHZhciBvPTAscz1hLmxlbmd0aC0xO288PXM7KXt2YXIgbD1vK3M+PjEsYz10LmZldGNoSWZSZWYoYVtsXSkuZ2V0KCJMaW1pdHMiKTtpZihlPHQuZmV0Y2hJZlJlZihjWzBdKSlzPWwtMTtlbHNle2lmKCEoZT50LmZldGNoSWZSZWYoY1sxXSkpKXtyPXQuZmV0Y2hJZlJlZihhW2xdKTticmVha31vPWwrMX19aWYobz5zKXJldHVybiBudWxsfXZhciB1PXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkodSkpe2Zvcih2YXIgZj0wLGg9dS5sZW5ndGgtMjtmPD1oOyl7dmFyIGQ9ZitoPj4xLHA9ZCsoMSZkKSxtPXQuZmV0Y2hJZlJlZih1W3BdKTtpZihlPG0paD1wLTI7ZWxzZXtpZighKGU+bSkpcmV0dXJuIHQuZmV0Y2hJZlJlZih1W3ArMV0pO2Y9cCsyfX0oMCxpLmluZm8pKCdGYWxsaW5nIGJhY2sgdG8gYW4gZXhoYXVzdGl2ZSBzZWFyY2gsIGZvciBrZXkgIicuY29uY2F0KGUsJyIsICcpKydpbiAiJy5jb25jYXQodGhpcy5fdHlwZSwnIiB0cmVlLicpKTtmb3IodmFyIGc9MCx2PXUubGVuZ3RoO2c8djtnKz0yKWlmKHQuZmV0Y2hJZlJlZih1W2ddKT09PWUpcmV0dXJuKDAsaS53YXJuKSgnVGhlICInLmNvbmNhdChlLCciIGtleSB3YXMgZm91bmQgYXQgYW4gaW5jb3JyZWN0LCAnKSsnaS5lLiBvdXQtb2Ytb3JkZXIsIHBvc2l0aW9uIGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpLHQuZmV0Y2hJZlJlZih1W2crMV0pfXJldHVybiBudWxsfX1dKSxlfSgpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIpe3JldHVybiBiKHRoaXMsdCksZih0aGlzLGgodCkuY2FsbCh0aGlzLGUsciwiTmFtZXMiKSl9cmV0dXJuIGQodCxlKSx0fShBKSxQPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyKXtyZXR1cm4gYih0aGlzLHQpLGYodGhpcyxoKHQpLmNhbGwodGhpcyxlLHIsIk51bXMiKSl9cmV0dXJuIGQodCxlKSx0fShBKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2UmJigwLG8uaXNEaWN0KShlKSYmKHRoaXMueHJlZj10LHRoaXMucm9vdD1lLGUuaGFzKCJGUyIpJiYodGhpcy5mcz1lLmdldCgiRlMiKSksdGhpcy5kZXNjcmlwdGlvbj1lLmhhcygiRGVzYyIpPygwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJEZXNjIikpOiIiLGUuaGFzKCJSRiIpJiYoMCxpLndhcm4pKCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSx0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITAsZS5oYXMoIkVGIil8fCh0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITEsKDAsaS53YXJuKSgiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuaGFzKCJVRiIpP2UuZ2V0KCJVRiIpOmUuaGFzKCJGIik/ZS5nZXQoIkYiKTplLmhhcygiVW5peCIpP2UuZ2V0KCJVbml4Iik6ZS5oYXMoIk1hYyIpP2UuZ2V0KCJNYWMiKTplLmhhcygiRE9TIik/ZS5nZXQoIkRPUyIpOm51bGx9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQgZmlsZW5hbWUoKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9dCh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9LGdldCBjb250ZW50KCl7aWYoIXRoaXMuY29udGVudEF2YWlsYWJsZSlyZXR1cm4gbnVsbDshdGhpcy5jb250ZW50UmVmJiZ0aGlzLnJvb3QmJih0aGlzLmNvbnRlbnRSZWY9dCh0aGlzLnJvb3QuZ2V0KCJFRiIpKSk7dmFyIGU9bnVsbDtpZih0aGlzLmNvbnRlbnRSZWYpe3ZhciByPXRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuY29udGVudFJlZik7ciYmKDAsby5pc1N0cmVhbSkocik/ZT1yLmdldEJ5dGVzKCk6KDAsaS53YXJuKSgiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIHBvaW50cyB0byBub24tZXhpc3RpbmcvaW52YWxpZCBjb250ZW50Iil9ZWxzZSgwLGkud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudCIpO3JldHVybiBlfSxnZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX0sZX0oKTt0LkZpbGVTcGVjPUU7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybigwLG8uaXNSZWYpKGUpfHwoMCxvLmlzRGljdCkoZSl8fEFycmF5LmlzQXJyYXkoZSl8fCgwLG8uaXNTdHJlYW0pKGUpfWZ1bmN0aW9uIHQodCxyKXtpZigoMCxvLmlzRGljdCkodCl8fCgwLG8uaXNTdHJlYW0pKHQpKWZvcih2YXIgbj0oMCxvLmlzRGljdCkodCk/dDp0LmRpY3QsYT1uLmdldEtleXMoKSxpPTAscz1hLmxlbmd0aDtpPHM7aSsrKXt2YXIgbD1uLmdldFJhdyhhW2ldKTtlKGwpJiZyLnB1c2gobCl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgYz0wLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGY9dFtjXTtlKGYpJiZyLnB1c2goZil9fWZ1bmN0aW9uIHIoZSx0LHIpe3RoaXMuZGljdD1lLHRoaXMua2V5cz10LHRoaXMueHJlZj1yLHRoaXMucmVmU2V0PW51bGwsdGhpcy5jYXBhYmlsaXR5PW51bGx9cmV0dXJuIHIucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7aWYodGhpcy5jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksISh0aGlzLnhyZWYuc3RyZWFtIGluc3RhbmNlb2YgbC5DaHVua2VkU3RyZWFtKXx8MD09PXRoaXMueHJlZi5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpLmxlbmd0aClyZXR1cm4gdGhpcy5jYXBhYmlsaXR5LnJlc29sdmUoKSx0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTt2YXIgZT10aGlzLmtleXMsdD10aGlzLmRpY3Q7dGhpcy5yZWZTZXQ9bmV3IG8uUmVmU2V0O2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgcz10LmdldFJhdyhlW25dKTt2b2lkIDAhPT1zJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuX3dhbGsociksdGhpcy5jYXBhYmlsaXR5LnByb21pc2V9LF93YWxrOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49W10sYT1bXTtlLmxlbmd0aDspe3ZhciBzPWUucG9wKCk7aWYoKDAsby5pc1JlZikocykpe2lmKHRoaXMucmVmU2V0LmhhcyhzKSljb250aW51ZTt0cnl7dGhpcy5yZWZTZXQucHV0KHMpLHM9dGhpcy54cmVmLmZldGNoKHMpfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IGU7bi5wdXNoKHMpLGEucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYocyYmcy5nZXRCYXNlU3RyZWFtcyl7Zm9yKHZhciBsPXMuZ2V0QmFzZVN0cmVhbXMoKSxjPSExLHU9MCxmPWwubGVuZ3RoO3U8Zjt1Kyspe3ZhciBoPWxbdV07aC5nZXRNaXNzaW5nQ2h1bmtzJiZoLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGgmJihjPSEwLGEucHVzaCh7YmVnaW46aC5zdGFydCxlbmQ6aC5lbmR9KSl9YyYmbi5wdXNoKHMpfXQocyxlKX1hLmxlbmd0aD90aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhhKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7dmFyIGE9bltlXTsoMCxvLmlzUmVmKShhKSYmci5yZWZTZXQucmVtb3ZlKGEpfXIuX3dhbGsobil9KSx0aGlzLmNhcGFiaWxpdHkucmVqZWN0KToodGhpcy5yZWZTZXQ9bnVsbCx0aGlzLmNhcGFiaWxpdHkucmVzb2x2ZSgpKX19LHJ9KCk7dC5PYmplY3RMb2FkZXI9VH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNFT0Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSx0LmlzQ21kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBvJiYodm9pZCAwPT09dHx8ZS5jbWQ9PT10KX0sdC5pc0RpY3Q9aCx0LmlzTmFtZT1mLHQuaXNSZWY9ZCx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59LHQuaXNTdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT1uKGUpJiZudWxsIT09ZSYmdm9pZCAwIT09ZS5nZXRCeXRlc30sdC5SZWZTZXRDYWNoZT10LlJlZlNldD10LlJlZj10Lk5hbWU9dC5EaWN0PXQuQ21kPXQuRU9GPXZvaWQgMDt2YXIgYT17fTt0LkVPRj1hO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9ZX1lLnByb3RvdHlwZT17fTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlLmdldD1mdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwodFtyXT1uZXcgZShyKSl9LGV9KCk7dC5OYW1lPWk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuY21kPWV9ZS5wcm90b3R5cGU9e307dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZS5nZXQ9ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KHRbcl09bmV3IGUocikpfSxlfSgpO3QuQ21kPW87dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBlfTtmdW5jdGlvbiB0KHQpe3RoaXMuX21hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMueHJlZj10LHRoaXMub2JqSWQ9bnVsbCx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbj0hMSx0aGlzLl9fbm9uU2VyaWFsaXphYmxlX189ZX1yZXR1cm4gdC5wcm90b3R5cGU9e2Fzc2lnblhyZWY6ZnVuY3Rpb24oZSl7dGhpcy54cmVmPWV9LGdldDpmdW5jdGlvbihlLHQscil7dmFyIG4sYT10aGlzLnhyZWYsaT10aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtyZXR1cm4gdm9pZCAwIT09KG49dGhpcy5fbWFwW2VdKXx8ZSBpbiB0aGlzLl9tYXB8fHZvaWQgMD09PXQ/YT9hLmZldGNoSWZSZWYobixpKTpuOnZvaWQgMCE9PShuPXRoaXMuX21hcFt0XSl8fHQgaW4gdGhpcy5fbWFwfHx2b2lkIDA9PT1yP2E/YS5mZXRjaElmUmVmKG4saSk6bjoobj10aGlzLl9tYXBbcl18fG51bGwsYT9hLmZldGNoSWZSZWYobixpKTpuKX0sZ2V0QXN5bmM6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy54cmVmLGk9dGhpcy5zdXBwcmVzc0VuY3J5cHRpb247cmV0dXJuIHZvaWQgMCE9PShuPXRoaXMuX21hcFtlXSl8fGUgaW4gdGhpcy5fbWFwfHx2b2lkIDA9PT10P2E/YS5mZXRjaElmUmVmQXN5bmMobixpKTpQcm9taXNlLnJlc29sdmUobik6dm9pZCAwIT09KG49dGhpcy5fbWFwW3RdKXx8dCBpbiB0aGlzLl9tYXB8fHZvaWQgMD09PXI/YT9hLmZldGNoSWZSZWZBc3luYyhuLGkpOlByb21pc2UucmVzb2x2ZShuKToobj10aGlzLl9tYXBbcl18fG51bGwsYT9hLmZldGNoSWZSZWZBc3luYyhuLGkpOlByb21pc2UucmVzb2x2ZShuKSl9LGdldEFycmF5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLmdldChlLHQsciksYT10aGlzLnhyZWYsaT10aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtpZighQXJyYXkuaXNBcnJheShuKXx8IWEpcmV0dXJuIG47Zm9yKHZhciBvPTAscz0obj1uLnNsaWNlKCkpLmxlbmd0aDtvPHM7bysrKWQobltvXSkmJihuW29dPWEuZmV0Y2gobltvXSxpKSk7cmV0dXJuIG59LGdldFJhdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfSxnZXRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCl9LHNldDpmdW5jdGlvbihlLHQpe3RoaXMuX21hcFtlXT10fSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gdGhpcy5fbWFwfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuZ2V0KHQpKX19LHQuZW1wdHk9bmV3IHQobnVsbCksdC5tZXJnZT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1uZXcgdChlKSxhPTAsaT1yLmxlbmd0aDthPGk7YSsrKXt2YXIgbz1yW2FdO2lmKGgobykpZm9yKHZhciBzIGluIG8uX21hcCl2b2lkIDA9PT1uLl9tYXBbc10mJihuLl9tYXBbc109by5fbWFwW3NdKX1yZXR1cm4gbn0sdH0oKTt0LkRpY3Q9czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm51bT1lLHRoaXMuZ2VuPXR9cmV0dXJuIGUucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5nZW4/IiIuY29uY2F0KHRoaXMubnVtLCJSIikuY29uY2F0KHRoaXMuZ2VuKToiIi5jb25jYXQodGhpcy5udW0sIlIiKX19LGV9KCk7dC5SZWY9bDt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmRpY3Q9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGU9e2hhczpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygpaW4gdGhpcy5kaWN0fSxwdXQ6ZnVuY3Rpb24oZSl7dGhpcy5kaWN0W2UudG9TdHJpbmcoKV09ITB9LHJlbW92ZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5kaWN0W2UudG9TdHJpbmcoKV19fSxlfSgpO3QuUmVmU2V0PWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5kaWN0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGljdFtlLnRvU3RyaW5nKCldfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKWluIHRoaXMuZGljdH0scHV0OmZ1bmN0aW9uKGUsdCl7dGhpcy5kaWN0W2UudG9TdHJpbmcoKV09dH0scHV0QWxpYXM6ZnVuY3Rpb24oZSx0KXt0aGlzLmRpY3RbZS50b1N0cmluZygpXT10aGlzLmdldCh0KX0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0aGlzLmRpY3QpZS5jYWxsKHQsdGhpcy5kaWN0W3JdKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmRpY3Q9T2JqZWN0LmNyZWF0ZShudWxsKX19LGV9KCk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgaSYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHMmJih2b2lkIDA9PT10fHxmKGUuZ2V0KCJUeXBlIiksdCkpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfXQuUmVmU2V0Q2FjaGU9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJzZXI9dC5MaW5lYXJpemF0aW9uPXQuTGV4ZXI9dm9pZCAwO3ZhciBuPXIoMTU3KSxhPXIoNiksaT1yKDE1NSksbz1yKDE1OCkscz1yKDE2MCksbD1yKDE2MyksYz1yKDE2NSk7ZnVuY3Rpb24gdShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49MCxhPTA7YTx0OysrYSluKz1yKz0yNTUmZVthXTtyZXR1cm4gbiU2NTUyMTw8MTZ8ciU2NTUyMX12YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbil7dGhpcy5sZXhlcj1lLHRoaXMuYWxsb3dTdHJlYW1zPXQsdGhpcy54cmVmPXIsdGhpcy5yZWNvdmVyeU1vZGU9bnx8ITEsdGhpcy5pbWFnZUNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5yZWZpbGwoKX1yZXR1cm4gZS5wcm90b3R5cGU9e3JlZmlsbDpmdW5jdGlvbigpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfSxzaGlmdDpmdW5jdGlvbigpeygwLGkuaXNDbWQpKHRoaXMuYnVmMiwiSUQiKT8odGhpcy5idWYxPXRoaXMuYnVmMix0aGlzLmJ1ZjI9bnVsbCk6KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCkpfSx0cnlTaGlmdDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBhLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fSxnZXRPYmo6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgaS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGkuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiYhKDAsaS5pc0VPRikodGhpcy5idWYxKTspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZigoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpKXtpZighdGhpcy5yZWNvdmVyeU1vZGUpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkVuZCBvZiBmaWxlIGluc2lkZSBhcnJheSIpO3JldHVybiByfXJldHVybiB0aGlzLnNoaWZ0KCkscjtjYXNlIjw8Ijpmb3IodmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpOyEoMCxpLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJiEoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpOylpZigoMCxpLmlzTmFtZSkodGhpcy5idWYxKSl7dmFyIG89dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLCgwLGkuaXNFT0YpKHRoaXMuYnVmMSkpYnJlYWs7bi5zZXQobyx0aGlzLmdldE9iaihlKSl9ZWxzZSgwLGEuaW5mbykoIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0IiksdGhpcy5zaGlmdCgpO2lmKCgwLGkuaXNFT0YpKHRoaXMuYnVmMSkpe2lmKCF0aGlzLnJlY292ZXJ5TW9kZSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiRW5kIG9mIGZpbGUgaW5zaWRlIGRpY3Rpb25hcnkiKTtyZXR1cm4gbn1yZXR1cm4oMCxpLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShuLGUpOm46KHRoaXMuc2hpZnQoKSxuKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe3ZhciBzPXQ7aWYoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpJiYoMCxpLmlzQ21kKSh0aGlzLmJ1ZjIsIlIiKSl7dmFyIGw9bmV3IGkuUmVmKHMsdGhpcy5idWYxKTtyZXR1cm4gdGhpcy5zaGlmdCgpLHRoaXMuc2hpZnQoKSxsfXJldHVybiBzfWlmKCgwLGEuaXNTdHJpbmcpKHQpKXt2YXIgYz10O3JldHVybiBlJiYoYz1lLmRlY3J5cHRTdHJpbmcoYykpLGN9cmV0dXJuIHR9LGZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49ZS5wb3MsaT0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09aSlpPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09aSlpPTczPT09dD8yOjA7ZWxzZSBpZigoMCxhLmFzc2VydCkoMj09PWkpLDMyPT09dHx8MTA9PT10fHwxMz09PXQpe3I9ZS5wb3M7Zm9yKHZhciBvPWUucGVla0J5dGVzKDEwKSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKWlmKCgwIT09KHQ9b1tzXSl8fDA9PT1vW3MrMV0pJiYxMCE9PXQmJjEzIT09dCYmKHQ8MzJ8fHQ+MTI3KSl7aT0wO2JyZWFrfWlmKDI9PT1pKWJyZWFrfWVsc2UgaT0wOy0xPT09dCYmKCgwLGEud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKSxyJiYoKDAsYS53YXJuKSgnLi4uIHRyeWluZyB0byByZWNvdmVyIGJ5IHVzaW5nIHRoZSBsYXN0ICJFSSIgb2NjdXJyZW5jZS4nKSxlLnNraXAoLShlLnBvcy1yKSkpKTt2YXIgYz00O3JldHVybiBlLnNraXAoLWMpLHQ9ZS5wZWVrQnl0ZSgpLGUuc2tpcChjKSwoMCxhLmlzU3BhY2UpKHQpfHxjLS0sZS5wb3MtYy1ufSxmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4saT1lLnBvcyxvPSExOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigyNTU9PT10KXtzd2l0Y2goZS5nZXRCeXRlKCkpe2Nhc2UgMDpicmVhaztjYXNlIDI1NTplLnNraXAoLTEpO2JyZWFrO2Nhc2UgMjE3Om89ITA7YnJlYWs7Y2FzZSAxOTI6Y2FzZSAxOTM6Y2FzZSAxOTQ6Y2FzZSAxOTU6Y2FzZSAxOTc6Y2FzZSAxOTg6Y2FzZSAxOTk6Y2FzZSAyMDE6Y2FzZSAyMDI6Y2FzZSAyMDM6Y2FzZSAyMDU6Y2FzZSAyMDY6Y2FzZSAyMDc6Y2FzZSAxOTY6Y2FzZSAyMDQ6Y2FzZSAyMTg6Y2FzZSAyMTk6Y2FzZSAyMjA6Y2FzZSAyMjE6Y2FzZSAyMjI6Y2FzZSAyMjM6Y2FzZSAyMjQ6Y2FzZSAyMjU6Y2FzZSAyMjY6Y2FzZSAyMjc6Y2FzZSAyMjg6Y2FzZSAyMjk6Y2FzZSAyMzA6Y2FzZSAyMzE6Y2FzZSAyMzI6Y2FzZSAyMzM6Y2FzZSAyMzQ6Y2FzZSAyMzU6Y2FzZSAyMzY6Y2FzZSAyMzc6Y2FzZSAyMzg6Y2FzZSAyMzk6Y2FzZSAyNTQ6KHI9ZS5nZXRVaW50MTYoKSk+Mj9lLnNraXAoci0yKTplLnNraXAoLTIpfWlmKG8pYnJlYWt9cmV0dXJuIG49ZS5wb3MtaSwtMT09PXQ/KCgwLGEud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1uKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSksbil9LGZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49ZS5wb3M7LTEhPT0odD1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PXQmJjYyPT09ZS5wZWVrQnl0ZSgpKXtlLnNraXAoKTticmVha31yZXR1cm4gcj1lLnBvcy1uLC0xPT09dD8oKDAsYS53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1yKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscil9LGZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTtyZXR1cm4gcj1lLnBvcy1uLC0xPT09dD8oKDAsYS53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtciksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLHIpfSxpbmxpbmVTdHJlYW1Ta2lwRUk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMD09PXIpcj02OT09PXQ/MTowO2Vsc2UgaWYoMT09PXIpcj03Mz09PXQ/MjowO2Vsc2UgaWYoMj09PXIpYnJlYWt9LG1ha2VJbmxpbmVJbWFnZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLmxleGVyLG49ci5zdHJlYW0sbz1uZXcgaS5EaWN0KHRoaXMueHJlZik7ISgwLGkuaXNDbWQpKHRoaXMuYnVmMSwiSUQiKSYmISgwLGkuaXNFT0YpKHRoaXMuYnVmMSk7KXtpZighKDAsaS5pc05hbWUpKHRoaXMuYnVmMSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3ZhciBzPXRoaXMuYnVmMS5uYW1lO2lmKHRoaXMuc2hpZnQoKSwoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfS0xIT09ci5iZWdpbklubGluZUltYWdlUG9zJiYodD1uLnBvcy1yLmJlZ2luSW5saW5lSW1hZ2VQb3MpO3ZhciBsLGM9by5nZXQoIkZpbHRlciIsIkYiKTtpZigoMCxpLmlzTmFtZSkoYykpbD1jLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgZj10aGlzLnhyZWYuZmV0Y2hJZlJlZihjWzBdKTsoMCxpLmlzTmFtZSkoZikmJihsPWYubmFtZSl9dmFyIGgsZD1uLnBvcztoPSJEQ1REZWNvZGUiPT09bHx8IkRDVCI9PT1sP3RoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChuKToiQVNDSUk4NURlY29kZSI9PT1sfHwiQTg1Ij09PWw/dGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChuKToiQVNDSUlIZXhEZWNvZGUiPT09bHx8IkFIeCI9PT1sP3RoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKG4pOnRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQobik7dmFyIHAsbT1uLm1ha2VTdWJTdHJlYW0oZCxoLG8pO2lmKGg8MWUzJiZ0PDU1NTIpe3ZhciBnPW0uZ2V0Qnl0ZXMoKTttLnJlc2V0KCk7dmFyIHY9bi5wb3M7bi5wb3M9ci5iZWdpbklubGluZUltYWdlUG9zO3ZhciB5PW4uZ2V0Qnl0ZXModCk7bi5wb3M9dixwPXUoZykrIl8iK3UoeSk7dmFyIGI9dGhpcy5pbWFnZUNhY2hlW3BdO2lmKHZvaWQgMCE9PWIpcmV0dXJuIHRoaXMuYnVmMj1pLkNtZC5nZXQoIkVJIiksdGhpcy5zaGlmdCgpLGIucmVzZXQoKSxifXJldHVybiBlJiYobT1lLmNyZWF0ZVN0cmVhbShtLGgpKSwobT10aGlzLmZpbHRlcihtLG8saCkpLmRpY3Q9byx2b2lkIDAhPT1wJiYobS5jYWNoZUtleT0iaW5saW5lXyIraCsiXyIrcCx0aGlzLmltYWdlQ2FjaGVbcF09bSksdGhpcy5idWYyPWkuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX0sX2ZpbmRTdHJlYW1MZW5ndGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmxleGVyLnN0cmVhbTtyLnBvcz1lO2Zvcih2YXIgbj10Lmxlbmd0aDtyLnBvczxyLmVuZDspe3ZhciBhPXIucGVla0J5dGVzKDIwNDgpLGk9YS5sZW5ndGgtbjtpZihpPD0wKWJyZWFrO2Zvcih2YXIgbz0wO288aTspe2Zvcih2YXIgcz0wO3M8biYmYVtvK3NdPT09dFtzXTspcysrO2lmKHM+PW4pcmV0dXJuIHIucG9zKz1vLHIucG9zLWU7bysrfXIucG9zKz1pfXJldHVybi0xfSxtYWtlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5sZXhlcixuPXIuc3RyZWFtO3Iuc2tpcFRvTmV4dExpbmUoKTt2YXIgbz1uLnBvcy0xLHM9ZS5nZXQoIkxlbmd0aCIpO2lmKE51bWJlci5pc0ludGVnZXIocyl8fCgoMCxhLmluZm8pKCJCYWQgIitzKyIgYXR0cmlidXRlIGluIHN0cmVhbSIpLHM9MCksbi5wb3M9bytzLHIubmV4dENoYXIoKSx0aGlzLnRyeVNoaWZ0KCkmJigwLGkuaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMTAsMTAwLDExNSwxMTYsMTE0LDEwMSw5NywxMDldKSxjPXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxsKTtpZihjPDApe2Zvcih2YXIgdT0xO3U8PTE7dSsrKXt2YXIgZj1sLmxlbmd0aC11LGg9bC5zbGljZSgwLGYpLGQ9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGgpO2lmKGQ+PTApe3ZhciBwPW4ucGVla0J5dGVzKGYrMSlbZl07aWYoISgwLGEuaXNTcGFjZSkocCkpYnJlYWs7KDAsYS5pbmZvKSgnRm91bmQgIicuY29uY2F0KCgwLGEuYnl0ZXNUb1N0cmluZykoaCksJyIgd2hlbiAnKSsic2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC4iKSxjPWQ7YnJlYWt9fWlmKGM8MCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKX1zPWMsci5uZXh0Q2hhcigpLHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCl9cmV0dXJuIHRoaXMuc2hpZnQoKSxuPW4ubWFrZVN1YlN0cmVhbShvLHMsZSksdCYmKG49dC5jcmVhdGVTdHJlYW0obixzKSksKG49dGhpcy5maWx0ZXIobixlLHMpKS5kaWN0PWUsbn0sZmlsdGVyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10LmdldCgiRmlsdGVyIiwiRiIpLG89dC5nZXQoIkRlY29kZVBhcm1zIiwiRFAiKTtpZigoMCxpLmlzTmFtZSkobikpcmV0dXJuIEFycmF5LmlzQXJyYXkobykmJigwLGEud2FybikoIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGNvbnRhaW4gYW4gQXJyYXksIHdoZW4gL0ZpbHRlciBjb250YWlucyBhIE5hbWUuIiksdGhpcy5tYWtlRmlsdGVyKGUsbi5uYW1lLHIsbyk7dmFyIHM9cjtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgbD1uLGM9byx1PTAsZj1sLmxlbmd0aDt1PGY7Kyt1KXtpZihuPXRoaXMueHJlZi5mZXRjaElmUmVmKGxbdV0pLCEoMCxpLmlzTmFtZSkobikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkJhZCBmaWx0ZXIgbmFtZTogIituKTtvPW51bGwsQXJyYXkuaXNBcnJheShjKSYmdSBpbiBjJiYobz10aGlzLnhyZWYuZmV0Y2hJZlJlZihjW3VdKSksZT10aGlzLm1ha2VGaWx0ZXIoZSxuLm5hbWUscyxvKSxzPW51bGx9cmV0dXJuIGV9LG1ha2VGaWx0ZXI6ZnVuY3Rpb24oZSx0LHIsaSl7aWYoMD09PXIpcmV0dXJuKDAsYS53YXJuKSgnRW1wdHkgIicrdCsnIiBzdHJlYW0uJyksbmV3IG4uTnVsbFN0cmVhbTt0cnl7dmFyIHU9dGhpcy54cmVmLnN0YXRzLnN0cmVhbVR5cGVzO2lmKCJGbGF0ZURlY29kZSI9PT10fHwiRmwiPT09dClyZXR1cm4gdVthLlN0cmVhbVR5cGUuRkxBVEVdPSEwLGk/bmV3IG4uUHJlZGljdG9yU3RyZWFtKG5ldyBuLkZsYXRlU3RyZWFtKGUscikscixpKTpuZXcgbi5GbGF0ZVN0cmVhbShlLHIpO2lmKCJMWldEZWNvZGUiPT09dHx8IkxaVyI9PT10KXt1W2EuU3RyZWFtVHlwZS5MWlddPSEwO3ZhciBmPTE7cmV0dXJuIGk/KGkuaGFzKCJFYXJseUNoYW5nZSIpJiYoZj1pLmdldCgiRWFybHlDaGFuZ2UiKSksbmV3IG4uUHJlZGljdG9yU3RyZWFtKG5ldyBuLkxaV1N0cmVhbShlLHIsZikscixpKSk6bmV3IG4uTFpXU3RyZWFtKGUscixmKX1yZXR1cm4iRENURGVjb2RlIj09PXR8fCJEQ1QiPT09dD8odVthLlN0cmVhbVR5cGUuRENUXT0hMCxuZXcgbC5KcGVnU3RyZWFtKGUscixlLmRpY3QsaSkpOiJKUFhEZWNvZGUiPT09dHx8IkpQWCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5KUFhdPSEwLG5ldyBjLkpweFN0cmVhbShlLHIsZS5kaWN0LGkpKToiQVNDSUk4NURlY29kZSI9PT10fHwiQTg1Ij09PXQ/KHVbYS5TdHJlYW1UeXBlLkE4NV09ITAsbmV3IG4uQXNjaWk4NVN0cmVhbShlLHIpKToiQVNDSUlIZXhEZWNvZGUiPT09dHx8IkFIeCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5BSFhdPSEwLG5ldyBuLkFzY2lpSGV4U3RyZWFtKGUscikpOiJDQ0lUVEZheERlY29kZSI9PT10fHwiQ0NGIj09PXQ/KHVbYS5TdHJlYW1UeXBlLkNDRl09ITAsbmV3IG8uQ0NJVFRGYXhTdHJlYW0oZSxyLGkpKToiUnVuTGVuZ3RoRGVjb2RlIj09PXR8fCJSTCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5STF09ITAsbmV3IG4uUnVuTGVuZ3RoU3RyZWFtKGUscikpOiJKQklHMkRlY29kZSI9PT10Pyh1W2EuU3RyZWFtVHlwZS5KQklHXT0hMCxuZXcgcy5KYmlnMlN0cmVhbShlLHIsZS5kaWN0LGkpKTooKDAsYS53YXJuKSgnZmlsdGVyICInK3QrJyIgbm90IHN1cHBvcnRlZCB5ZXQnKSxlKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLGEud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJytlKyciJyksbmV3IG4uTnVsbFN0cmVhbX19fSxlfSgpO3QuUGFyc2VyPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLm5leHRDaGFyKCksdGhpcy5zdHJCdWY9W10sdGhpcy5rbm93bkNvbW1hbmRzPXQsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXZhciB0PVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiByKGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9cmV0dXJuIGUucHJvdG90eXBlPXtuZXh0Q2hhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX0scGVla0NoYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX0sZ2V0TnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50Q2hhcix0PSExLHI9MCxuPTA7aWYoNDU9PT1lPyhuPS0xLDQ1PT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmKGU9dGhpcy5uZXh0Q2hhcigpKSk6NDM9PT1lJiYobj0xLGU9dGhpcy5uZXh0Q2hhcigpKSwxMD09PWV8fDEzPT09ZSlkb3tlPXRoaXMubmV4dENoYXIoKX13aGlsZSgxMD09PWV8fDEzPT09ZSk7aWYoNDY9PT1lJiYocj0xMCxlPXRoaXMubmV4dENoYXIoKSksZTw0OHx8ZT41Nyl7aWYoMTA9PT1yJiYwPT09biYmKCgwLGEuaXNTcGFjZSkoZSl8fC0xPT09ZSkpcmV0dXJuKDAsYS53YXJuKSgiTGV4ZXIuZ2V0TnVtYmVyIC0gdHJlYXRpbmcgYSBzaW5nbGUgZGVjaW1hbCBwb2ludCBhcyB6ZXJvLiIpLDA7dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgbnVtYmVyOiAiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpLCIgKGNoYXJDb2RlICIpLmNvbmNhdChlLCIpIikpfW49bnx8MTtmb3IodmFyIGk9ZS00OCxvPTAscz0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKDQ4PD1lJiZlPD01Nyl7dmFyIGw9ZS00ODt0P289MTAqbytsOigwIT09ciYmKHIqPTEwKSxpPTEwKmkrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxhLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyIik7ZWxzZXtpZig2OSE9PWUmJjEwMSE9PWUpYnJlYWs7aWYoNDM9PT0oZT10aGlzLnBlZWtDaGFyKCkpfHw0NT09PWUpcz00NT09PWU/LTE6MSx0aGlzLm5leHRDaGFyKCk7ZWxzZSBpZihlPDQ4fHxlPjU3KWJyZWFrO3Q9ITB9cmV0dXJuIDAhPT1yJiYoaS89ciksdCYmKGkqPU1hdGgucG93KDEwLHMqbykpLG4qaX0sZ2V0U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9MSx0PSExLHI9dGhpcy5zdHJCdWY7ci5sZW5ndGg9MDtmb3IodmFyIG49dGhpcy5uZXh0Q2hhcigpOzspe3ZhciBpPSExO3N3aXRjaCgwfG4pe2Nhc2UtMTooMCxhLndhcm4pKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIiksdD0hMDticmVhaztjYXNlIDQwOisrZSxyLnB1c2goIigiKTticmVhaztjYXNlIDQxOjA9PS0tZT8odGhpcy5uZXh0Q2hhcigpLHQ9ITApOnIucHVzaCgiKSIpO2JyZWFrO2Nhc2UgOTI6c3dpdGNoKG49dGhpcy5uZXh0Q2hhcigpKXtjYXNlLTE6KDAsYS53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSAxMTA6ci5wdXNoKCJcbiIpO2JyZWFrO2Nhc2UgMTE0OnIucHVzaCgiXHIiKTticmVhaztjYXNlIDExNjpyLnB1c2goIlx0Iik7YnJlYWs7Y2FzZSA5ODpyLnB1c2goIlxiIik7YnJlYWs7Y2FzZSAxMDI6ci5wdXNoKCJcZiIpO2JyZWFrO2Nhc2UgOTI6Y2FzZSA0MDpjYXNlIDQxOnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTticmVhaztjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6dmFyIG89MTUmbjtpPSEwLChuPXRoaXMubmV4dENoYXIoKSk+PTQ4JiZuPD01NSYmKG89KG88PDMpKygxNSZuKSwobj10aGlzLm5leHRDaGFyKCkpPj00OCYmbjw9NTUmJihpPSExLG89KG88PDMpKygxNSZuKSkpLHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG8pKTticmVhaztjYXNlIDEzOjEwPT09dGhpcy5wZWVrQ2hhcigpJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWs7Y2FzZSAxMDpicmVhaztkZWZhdWx0OnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKX1icmVhaztkZWZhdWx0OnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKX1pZih0KWJyZWFrO2l8fChuPXRoaXMubmV4dENoYXIoKSl9cmV0dXJuIHIuam9pbigiIil9LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgZSxuLG89dGhpcy5zdHJCdWY7Zm9yKG8ubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIXRbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksdFtlXSl7KDAsYS53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxvLnB1c2goIiMiKTticmVha312YXIgcz1yKGUpO2lmKC0xIT09cyl7bj1lO3ZhciBsPXIoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09bCl7aWYoKDAsYS53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIitTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKyIpIGluIGhleGFkZWNpbWFsIG51bWJlci4iKSxvLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUobikpLHRbZV0pYnJlYWs7by5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfW8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHM8PDR8bCkpfWVsc2Ugby5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIG8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtyZXR1cm4gby5sZW5ndGg+MTI3JiYoMCxhLndhcm4pKCJuYW1lIHRva2VuIGlzIGxvbmdlciB0aGFuIGFsbG93ZWQgYnkgdGhlIHNwZWM6ICIrby5sZW5ndGgpLGkuTmFtZS5nZXQoby5qb2luKCIiKSl9LGdldEhleFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RyQnVmO2UubGVuZ3RoPTA7Zm9yKHZhciBuLGksbz10aGlzLmN1cnJlbnRDaGFyLHM9ITA7Oyl7aWYobzwwKXsoMCxhLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09byl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT10W29dKXtpZihzKXtpZigtMT09PShuPXIobykpKXsoMCxhLndhcm4pKCdJZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlciAiJytvKyciIGluIGhleCBzdHJpbmcnKSxvPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXtpZigtMT09PShpPXIobykpKXsoMCxhLndhcm4pKCdJZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlciAiJytvKyciIGluIGhleCBzdHJpbmcnKSxvPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX1lLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuPDw0fGkpKX1zPSFzLG89dGhpcy5uZXh0Q2hhcigpfWVsc2Ugbz10aGlzLm5leHRDaGFyKCl9cmV0dXJuIGUuam9pbigiIil9LGdldE9iajpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSxyPXRoaXMuY3VycmVudENoYXI7Oyl7aWYocjwwKXJldHVybiBpLkVPRjtpZihlKTEwIT09ciYmMTMhPT1yfHwoZT0hMSk7ZWxzZSBpZigzNz09PXIpZT0hMDtlbHNlIGlmKDEhPT10W3JdKWJyZWFrO3I9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHIpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksaS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGkuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHI9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGkuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PShyPXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxpLkNtZC5nZXQoIj4+IikpOmkuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksaS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxpLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgYS5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHIpKX1mb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxvPXRoaXMua25vd25Db21tYW5kcyxzPW8mJnZvaWQgMCE9PW9bbl07KHI9dGhpcy5uZXh0Q2hhcigpKT49MCYmIXRbcl07KXt2YXIgbD1uK1N0cmluZy5mcm9tQ2hhckNvZGUocik7aWYocyYmdm9pZCAwPT09b1tsXSlicmVhaztpZigxMjg9PT1uLmxlbmd0aCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogIi5jb25jYXQobi5sZW5ndGgpKTtuPWwscz1vJiZ2b2lkIDAhPT1vW25dfXJldHVybiJ0cnVlIj09PW58fCJmYWxzZSIhPT1uJiYoIm51bGwiPT09bj9udWxsOigiQkkiPT09biYmKHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz10aGlzLnN0cmVhbS5wb3MpLGkuQ21kLmdldChuKSkpfSxza2lwVG9OZXh0TGluZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19LGV9KCk7dC5MZXhlcj1oO3ZhciBkPXtjcmVhdGU6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3ZhciByPXUuZ2V0KGUpO2lmKE51bWJlci5pc0ludGVnZXIocikmJih0P3I+PTA6cj4wKSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJytlKyciIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyl9dmFyIHIsbixvPW5ldyBmKG5ldyBoKGUpLCExLG51bGwpLHM9by5nZXRPYmooKSxsPW8uZ2V0T2JqKCksYz1vLmdldE9iaigpLHU9by5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIocykmJk51bWJlci5pc0ludGVnZXIobCkmJigwLGkuaXNDbWQpKGMsIm9iaiIpJiYoMCxpLmlzRGljdCkodSkmJigwLGEuaXNOdW0pKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCgiTCIpKSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlICJMIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC4nKTtyZXR1cm57bGVuZ3RoOm4saGludHM6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dS5nZXQoIkgiKTtpZihBcnJheS5pc0FycmF5KHIpJiYoMj09PShlPXIubGVuZ3RoKXx8ND09PWUpKXtmb3IodmFyIG49MDtuPGU7bisrKWlmKCEoTnVtYmVyLmlzSW50ZWdlcih0PXJbbl0pJiZ0PjApKXRocm93IG5ldyBFcnJvcigiSGludCAoIituKyIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKTtyZXR1cm4gcn10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfSgpLG9iamVjdE51bWJlckZpcnN0OnQoIk8iKSxlbmRGaXJzdDp0KCJFIiksbnVtUGFnZXM6dCgiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDp0KCJUIikscGFnZUZpcnN0OnUuaGFzKCJQIik/dCgiUCIsITApOjB9fX07dC5MaW5lYXJpemF0aW9uPWR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXQuU3RyaW5nU3RyZWFtPXQuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuU3RyZWFtPXQuUnVuTGVuZ3RoU3RyZWFtPXQuUHJlZGljdG9yU3RyZWFtPXQuTnVsbFN0cmVhbT10LkZsYXRlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXQuRGVjcnlwdFN0cmVhbT10LkFzY2lpSGV4U3RyZWFtPXQuQXNjaWk4NVN0cmVhbT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KTtmdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuKXt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSksdGhpcy5zdGFydD10fHwwLHRoaXMucG9zPXRoaXMuc3RhcnQsdGhpcy5lbmQ9dCtyfHx0aGlzLmJ5dGVzLmxlbmd0aCx0aGlzLmRpY3Q9bn1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGFydH0sZ2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofSxnZXRCeXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfSxnZXRVaW50MTY6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fSxnZXRJbnQzMjpmdW5jdGlvbigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9LGdldEJ5dGVzOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj10aGlzLmJ5dGVzLG49dGhpcy5wb3MsYT10aGlzLmVuZDtpZighZSl7dmFyIGk9ci5zdWJhcnJheShuLGEpO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShpKTppfXZhciBvPW4rZTtvPmEmJihvPWEpLHRoaXMucG9zPW87dmFyIHM9ci5zdWJhcnJheShuLG8pO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShzKTpzfSxwZWVrQnl0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9LHBlZWtCeXRlczpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9dGhpcy5nZXRCeXRlcyhlLHQpO3JldHVybiB0aGlzLnBvcy09ci5sZW5ndGgscn0sc2tpcDpmdW5jdGlvbihlKXtlfHwoZT0xKSx0aGlzLnBvcys9ZX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fSxtb3ZlU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0PXRoaXMucG9zfSxtYWtlU3ViU3RyZWFtOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUodGhpcy5ieXRlcy5idWZmZXIsdCxyLG4pfX0sZX0oKTt0LlN0cmVhbT1vO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO28uY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1vLnByb3RvdHlwZSxlfSgpO3QuU3RyaW5nU3RyZWFtPXM7dmFyIGw9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSgwKTtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD10fHwwLHRoaXMucG9zPTAsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmVvZj0hMSx0aGlzLmJ1ZmZlcj1lLHRoaXMubWluQnVmZmVyTGVuZ3RoPTUxMix0KWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8dDspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9cmV0dXJuIHQucHJvdG90eXBlPXtnZXQgaXNFbXB0eSgpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH0sZW5zdXJlQnVmZmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyO2lmKGU8PXQuYnl0ZUxlbmd0aClyZXR1cm4gdDtmb3IodmFyIHI9dGhpcy5taW5CdWZmZXJMZW5ndGg7cjxlOylyKj0yO3ZhciBuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiBuLnNldCh0KSx0aGlzLmJ1ZmZlcj1ufSxnZXRCeXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuYnVmZmVyTGVuZ3RoPD1lOyl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK119LGdldFVpbnQxNjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpLHQ9dGhpcy5nZXRCeXRlKCk7cmV0dXJuLTE9PT1lfHwtMT09PXQ/LTE6KGU8PDgpK3R9LGdldEludDMyOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX0sZ2V0Qnl0ZXM6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKG4rZSksdD1uK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBhPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+YSYmKHQ9YSl9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPXQ7dmFyIGk9dGhpcy5idWZmZXIuc3ViYXJyYXkobix0KTtyZXR1cm4hcnx8aSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P2k6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkpfSxwZWVrQnl0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9LHBlZWtCeXRlczpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9dGhpcy5nZXRCeXRlcyhlLHQpO3JldHVybiB0aGlzLnBvcy09ci5sZW5ndGgscn0sbWFrZVN1YlN0cmVhbTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgbyh0aGlzLmJ1ZmZlcixlLHQscil9LHNraXA6ZnVuY3Rpb24oZSl7ZXx8KGU9MSksdGhpcy5wb3MrPWV9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wb3M9MH0sZ2V0QmFzZVN0cmVhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHImJnRoaXMuc3RyLmdldEJhc2VTdHJlYW1zP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6W119fSx0fSgpO3QuRGVjb2RlU3RyZWFtPWw7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc3RyZWFtcz1lO2Zvcih2YXIgdD0wLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07dCs9YSBpbnN0YW5jZW9mIGw/YS5fcmF3TWluQnVmZmVyTGVuZ3RoOmEubGVuZ3RofWwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdD1lLnNoaWZ0KCkuZ2V0Qnl0ZXMoKSxyPXRoaXMuYnVmZmVyTGVuZ3RoLG49cit0Lmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihuKS5zZXQodCxyKSx0aGlzLmJ1ZmZlckxlbmd0aD1ufWVsc2UgdGhpcy5lb2Y9ITB9LGUucHJvdG90eXBlLmdldEJhc2VTdHJlYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMuc3RyZWFtcy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49dGhpcy5zdHJlYW1zW3RdO24uZ2V0QmFzZVN0cmVhbXMmJmUucHVzaC5hcHBseShlLGkobi5nZXRCYXNlU3RyZWFtcygpKSl9cmV0dXJuIGV9LGV9KCk7dC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09Yzt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPW5ldyBJbnQzMkFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdD1uZXcgSW50MzJBcnJheShbMyw0LDUsNiw3LDgsOSwxMCw2NTU0Nyw2NTU0OSw2NTU1MSw2NTU1MywxMzEwOTEsMTMxMDk1LDEzMTA5OSwxMzExMDMsMTk2NjQzLDE5NjY1MSwxOTY2NTksMTk2NjY3LDI2MjIxMSwyNjIyMjcsMjYyMjQzLDI2MjI1OSwzMjc4MTEsMzI3ODQzLDMyNzg3NSwzMjc5MDcsMjU4LDI1OCwyNThdKSxyPW5ldyBJbnQzMkFycmF5KFsxLDIsMyw0LDY1NTQxLDY1NTQzLDEzMTA4MSwxMzEwODUsMTk2NjI1LDE5NjYzMywyNjIxNzcsMjYyMTkzLDMyNzc0NSwzMjc3NzcsMzkzMzQ1LDM5MzQwOSw0NTkwMDksNDU5MTM3LDUyNDgwMSw1MjUwNTcsNTkwODQ5LDU5MTM2MSw2NTc0MDksNjU4NDMzLDcyNDk5Myw3MjcwNDEsNzk0NjI1LDc5ODcyMSw4NjgzNTMsODc2NTQ1XSksYT1bbmV3IEludDMyQXJyYXkoWzQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTYsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg0LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OCw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjgsNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMyLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5ZTQsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY0LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjQsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkyLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Niw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzYsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQwLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOCw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzIsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMCw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODgsNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUyLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Miw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzYsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA0LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OCw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI4LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Niw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjAsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgwLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NCw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTIsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc2LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTgsNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg2LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MCw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzAsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM0LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMiw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjYsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNiw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTQsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU4LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OCw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDIsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDEwLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NCw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIyLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MCw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTQsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc0LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOCw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDYsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcwLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzAsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk4LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Miw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODIsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ2LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNCw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzgsNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNyw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODUsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ5LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OSw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzMsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTkwMDAxLDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NSw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI1LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Myw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTcsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc3LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MSw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDksNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDczLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjEsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg5LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Myw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzMsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM3LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNSw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjksNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOSw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTcsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYxLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MSw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDUsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEzLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Nyw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE5LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Nyw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTEsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcxLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNSw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDMsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY3LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjcsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk1LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OSw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzksNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQzLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMSw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzUsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMyw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTEsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU1LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NSw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzksNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA3LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MSw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMxLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OSw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjMsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgzLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Nyw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTUsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc5XSksOV0saT1bbmV3IEludDMyQXJyYXkoWzMyNzY4MCwzMjc2OTYsMzI3Njg4LDMyNzcwNCwzMjc2ODQsMzI3NzAwLDMyNzY5MiwzMjc3MDgsMzI3NjgyLDMyNzY5OCwzMjc2OTAsMzI3NzA2LDMyNzY4NiwzMjc3MDIsMzI3Njk0LDAsMzI3NjgxLDMyNzY5NywzMjc2ODksMzI3NzA1LDMyNzY4NSwzMjc3MDEsMzI3NjkzLDMyNzcwOSwzMjc2ODMsMzI3Njk5LDMyNzY5MSwzMjc3MDcsMzI3Njg3LDMyNzcwMywzMjc2OTUsMF0pLDVdO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3Q7dmFyIHI9ZS5nZXRCeXRlKCksYT1lLmdldEJ5dGUoKTtpZigtMT09PXJ8fC0xPT09YSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChyLCIsICIpLmNvbmNhdChhKSk7aWYoOCE9KDE1JnIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KHIsIiwgIikuY29uY2F0KGEpKTtpZigoKHI8PDgpK2EpJTMxIT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQociwiLCAiKS5jb25jYXQoYSkpO2lmKDMyJmEpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChyLCIsICIpLmNvbmNhdChhKSk7dGhpcy5jb2RlU2l6ZT0wLHRoaXMuY29kZUJ1Zj0wLGwuY2FsbCh0aGlzLHQpfXJldHVybiBvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxvLnByb3RvdHlwZS5nZXRCaXRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuc3RyLGE9dGhpcy5jb2RlU2l6ZSxpPXRoaXMuY29kZUJ1ZjthPGU7KXtpZigtMT09PSh0PXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO2l8PXQ8PGEsYSs9OH1yZXR1cm4gdD1pJigxPDxlKS0xLHRoaXMuY29kZUJ1Zj1pPj5lLHRoaXMuY29kZVNpemU9YS09ZSx0fSxvLnByb3RvdHlwZS5nZXRDb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuc3RyLGE9ZVswXSxpPWVbMV0sbz10aGlzLmNvZGVTaXplLHM9dGhpcy5jb2RlQnVmO288aSYmLTEhPT0odD1yLmdldEJ5dGUoKSk7KXN8PXQ8PG8sbys9ODt2YXIgbD1hW3MmKDE8PGkpLTFdLGM9bD4+MTYsdT02NTUzNSZsO2lmKGM8MXx8bzxjKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJuIHRoaXMuY29kZUJ1Zj1zPj5jLHRoaXMuY29kZVNpemU9by1jLHV9LG8ucHJvdG90eXBlLmdlbmVyYXRlSHVmZm1hblRhYmxlPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxsPTI7bzw9bjsrK28sczw8PTEsbDw8PTEpZm9yKHZhciBjPTA7YzxyOysrYylpZihlW2NdPT09byl7dmFyIHU9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KXU9dTw8MXwxJmYsZj4+PTE7Zm9yKHQ9dTt0PGE7dCs9bClpW3RdPW88PDE2fGM7KytzfXJldHVybltpLG5dfSxvLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgbyxzLGw9dGhpcy5zdHIsYz10aGlzLmdldEJpdHMoMyk7aWYoMSZjJiYodGhpcy5lb2Y9ITApLDAhPShjPj49MSkpe3ZhciB1LGY7aWYoMT09PWMpdT1hLGY9aTtlbHNle2lmKDIhPT1jKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7dmFyIGgsZD10aGlzLmdldEJpdHMoNSkrMjU3LHA9dGhpcy5nZXRCaXRzKDUpKzEsbT10aGlzLmdldEJpdHMoNCkrNCxnPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKTtmb3IoaD0wO2g8bTsrK2gpZ1tlW2hdXT10aGlzLmdldEJpdHMoMyk7dmFyIHY9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShnKTtzPTAsaD0wO2Zvcih2YXIgeSxiLHcsaz1kK3AsUz1uZXcgVWludDhBcnJheShrKTtoPGs7KXt2YXIgXz10aGlzLmdldENvZGUodik7aWYoMTY9PT1fKXk9MixiPTMsdz1zO2Vsc2UgaWYoMTc9PT1fKXk9MyxiPTMsdz1zPTA7ZWxzZXtpZigxOCE9PV8pe1NbaCsrXT1zPV87Y29udGludWV9eT03LGI9MTEsdz1zPTB9Zm9yKHZhciB4PXRoaXMuZ2V0Qml0cyh5KStiO3gtLSA+MDspU1toKytdPXd9dT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKFMuc3ViYXJyYXkoMCxkKSksZj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKFMuc3ViYXJyYXkoZCxrKSl9Zm9yKHZhciBBPShvPXRoaXMuYnVmZmVyKT9vLmxlbmd0aDowLEM9dGhpcy5idWZmZXJMZW5ndGg7Oyl7dmFyIFA9dGhpcy5nZXRDb2RlKHUpO2lmKFA8MjU2KUMrMT49QSYmKEE9KG89dGhpcy5lbnN1cmVCdWZmZXIoQysxKSkubGVuZ3RoKSxvW0MrK109UDtlbHNle2lmKDI1Nj09PVApcmV0dXJuIHZvaWQodGhpcy5idWZmZXJMZW5ndGg9Qyk7dmFyIEU9KFA9dFtQLT0yNTddKT4+MTY7RT4wJiYoRT10aGlzLmdldEJpdHMoRSkpLHM9KDY1NTM1JlApK0UsUD10aGlzLmdldENvZGUoZiksKEU9KFA9cltQXSk+PjE2KT4wJiYoRT10aGlzLmdldEJpdHMoRSkpO3ZhciBUPSg2NTUzNSZQKStFO0Mrcz49QSYmKEE9KG89dGhpcy5lbnN1cmVCdWZmZXIoQytzKSkubGVuZ3RoKTtmb3IodmFyIFI9MDtSPHM7KytSLCsrQylvW0NdPW9bQy1UXX19fWVsc2V7dmFyIE87aWYoLTE9PT0oTz1sLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIEk9TztpZigtMT09PShPPWwuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZihJfD1PPDw4LC0xPT09KE89bC5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3ZhciBGPU87aWYoLTE9PT0oTz1sLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7aWYoKEZ8PU88PDgpIT0oNjU1MzUmfkkpJiYoMCE9PUl8fDAhPT1GKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIHVuY29tcHJlc3NlZCBibG9jayBsZW5ndGggaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPTAsdGhpcy5jb2RlU2l6ZT0wO3ZhciBMPXRoaXMuYnVmZmVyTGVuZ3RoO289dGhpcy5lbnN1cmVCdWZmZXIoTCtJKTt2YXIgRD1MK0k7aWYodGhpcy5idWZmZXJMZW5ndGg9RCwwPT09SSktMT09PWwucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNlIGZvcih2YXIgTT1MO008RDsrK00pe2lmKC0xPT09KE89bC5nZXRCeXRlKCkpKXt0aGlzLmVvZj0hMDticmVha31vW01dPU99fX0sb30oKTt0LkZsYXRlU3RyZWFtPXU7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtpZighKDAsYS5pc0RpY3QpKHIpKXJldHVybiBlO3ZhciBpPXRoaXMucHJlZGljdG9yPXIuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihpPD0xKXJldHVybiBlO2lmKDIhPT1pJiYoaTwxMHx8aT4xNSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoaSkpO3RoaXMucmVhZEJsb2NrPTI9PT1pP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZyx0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3Q7dmFyIG89dGhpcy5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLHM9dGhpcy5iaXRzPXIuZ2V0KCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsYz10aGlzLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gdGhpcy5waXhCeXRlcz1vKnMrNz4+Myx0aGlzLnJvd0J5dGVzPWMqbypzKzc+PjMsbC5jYWxsKHRoaXMsdCksdGhpc31yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrVGlmZj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxyPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSksbj10aGlzLmJpdHMsYT10aGlzLmNvbG9ycyxpPXRoaXMuc3RyLmdldEJ5dGVzKGUpO2lmKHRoaXMuZW9mPSFpLmxlbmd0aCwhdGhpcy5lb2Ype3ZhciBvLHM9MCxsPTAsYz0wLHU9MCxmPXQ7aWYoMT09PW4mJjE9PT1hKWZvcihvPTA7bzxlOysrbyl7dmFyIGg9aVtvXV5zO2hePWg+PjEsaF49aD4+MixzPSgxJihoXj1oPj40KSk8PDcscltmKytdPWh9ZWxzZSBpZig4PT09bil7Zm9yKG89MDtvPGE7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlOysrbylyW2ZdPXJbZi1hXStpW29dLGYrK31lbHNlIGlmKDE2PT09bil7dmFyIGQ9MiphO2ZvcihvPTA7bzxkOysrbylyW2YrK109aVtvXTtmb3IoO288ZTtvKz0yKXt2YXIgcD0oKDI1NSZpW29dKTw8OCkrKDI1NSZpW28rMV0pKygoMjU1JnJbZi1kXSk8PDgpKygyNTUmcltmLWQrMV0pO3JbZisrXT1wPj44JjI1NSxyW2YrK109MjU1JnB9fWVsc2V7dmFyIG09bmV3IFVpbnQ4QXJyYXkoYSsxKSxnPSgxPDxuKS0xLHY9MCx5PXQsYj10aGlzLmNvbHVtbnM7Zm9yKG89MDtvPGI7KytvKWZvcih2YXIgdz0wO3c8YTsrK3cpYzxuJiYocz1zPDw4fDI1NSZpW3YrK10sYys9OCksbVt3XT1tW3ddKyhzPj5jLW4pJmcsYy09bixsPWw8PG58bVt3XSwodSs9bik+PTgmJihyW3krK109bD4+dS04JjI1NSx1LT04KTt1PjAmJihyW3krK109KGw8PDgtdSkrKHMmKDE8PDgtdSktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX0sZS5wcm90b3R5cGUucmVhZEJsb2NrUG5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMscj10aGlzLnN0ci5nZXRCeXRlKCksYT10aGlzLnN0ci5nZXRCeXRlcyhlKTtpZih0aGlzLmVvZj0hYS5sZW5ndGgsIXRoaXMuZW9mKXt2YXIgaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZW5zdXJlQnVmZmVyKGkrZSkscz1vLnN1YmFycmF5KGktZSxpKTswPT09cy5sZW5ndGgmJihzPW5ldyBVaW50OEFycmF5KGUpKTt2YXIgbCxjLHUsZj1pO3N3aXRjaChyKXtjYXNlIDA6Zm9yKGw9MDtsPGU7KytsKW9bZisrXT1hW2xdO2JyZWFrO2Nhc2UgMTpmb3IobD0wO2w8dDsrK2wpb1tmKytdPWFbbF07Zm9yKDtsPGU7KytsKW9bZl09b1tmLXRdK2FbbF0mMjU1LGYrKzticmVhaztjYXNlIDI6Zm9yKGw9MDtsPGU7KytsKW9bZisrXT1zW2xdK2FbbF0mMjU1O2JyZWFrO2Nhc2UgMzpmb3IobD0wO2w8dDsrK2wpb1tmKytdPShzW2xdPj4xKSthW2xdO2Zvcig7bDxlOysrbClvW2ZdPShzW2xdK29bZi10XT4+MSkrYVtsXSYyNTUsZisrO2JyZWFrO2Nhc2UgNDpmb3IobD0wO2w8dDsrK2wpYz1zW2xdLHU9YVtsXSxvW2YrK109Yyt1O2Zvcig7bDxlOysrbCl7Yz1zW2xdO3ZhciBoPXNbbC10XSxkPW9bZi10XSxwPWQrYy1oLG09cC1kO208MCYmKG09LW0pO3ZhciBnPXAtYztnPDAmJihnPS1nKTt2YXIgdj1wLWg7djwwJiYodj0tdiksdT1hW2xdLG9bZisrXT1tPD1nJiZtPD12P2QrdTpnPD12P2MrdTpoK3V9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAiLmNvbmNhdChyKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fSxlfSgpO3QuUHJlZGljdG9yU3RyZWFtPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsdGhpcy5kZWNyeXB0PXIsdGhpcy5uZXh0Q2h1bms9bnVsbCx0aGlzLmluaXRpYWxpemVkPSExLGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmluaXRpYWxpemVkP2U9dGhpcy5uZXh0Q2h1bms6KGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKSx0aGlzLmluaXRpYWxpemVkPSEwKSxlJiYwIT09ZS5sZW5ndGgpe3RoaXMubmV4dENodW5rPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7dmFyIHQ9dGhpcy5uZXh0Q2h1bmsmJnRoaXMubmV4dENodW5rLmxlbmd0aD4wO2U9KDAsdGhpcy5kZWNyeXB0KShlLCF0KTt2YXIgcixuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9ZS5sZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihuK2EpO2ZvcihyPTA7cjxhO3IrKylpW24rK109ZVtyXTt0aGlzLmJ1ZmZlckxlbmd0aD1ufWVsc2UgdGhpcy5lb2Y9ITB9LGV9KCk7dC5EZWNyeXB0U3RyZWFtPWg7dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSksdCYmKHQqPS44KSxsLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsbi5pc1NwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZigtMSE9PXQmJjEyNiE9PXQpe3ZhciByLGEsaT10aGlzLmJ1ZmZlckxlbmd0aDtpZigxMjI9PT10KXtmb3Iocj10aGlzLmVuc3VyZUJ1ZmZlcihpKzQpLGE9MDthPDQ7KythKXJbaSthXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7dmFyIG89dGhpcy5pbnB1dDtmb3Iob1swXT10LGE9MTthPDU7KythKXtmb3IodD1lLmdldEJ5dGUoKTsoMCxuLmlzU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKG9bYV09dCwtMT09PXR8fDEyNj09PXQpYnJlYWt9aWYocj10aGlzLmVuc3VyZUJ1ZmZlcihpK2EtMSksdGhpcy5idWZmZXJMZW5ndGgrPWEtMSxhPDUpe2Zvcig7YTw1OysrYSlvW2FdPTExNzt0aGlzLmVvZj0hMH12YXIgcz0wO2ZvcihhPTA7YTw1OysrYSlzPTg1KnMrKG9bYV0tMzMpO2ZvcihhPTM7YT49MDstLWEpcltpK2FdPTI1NSZzLHM+Pj04fX1lbHNlIHRoaXMuZW9mPSEwfSxlfSgpO3QuQXNjaWk4NVN0cmVhbT1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyPWUsdGhpcy5kaWN0PWUuZGljdCx0aGlzLmZpcnN0RGlnaXQ9LTEsdCYmKHQqPS41KSxsLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7Zm9yKHZhciB0PWUubGVuZ3RoKzE+PjEscj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCt0KSxuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9dGhpcy5maXJzdERpZ2l0LGk9MCxvPWUubGVuZ3RoO2k8bztpKyspe3ZhciBzLGw9ZVtpXTtpZihsPj00OCYmbDw9NTcpcz0xNSZsO2Vsc2V7aWYoIShsPj02NSYmbDw9NzB8fGw+PTk3JiZsPD0xMDIpKXtpZig2Mj09PWwpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXM9OSsoMTUmbCl9YTwwP2E9czoocltuKytdPWE8PDR8cyxhPS0xKX1hPj0wJiZ0aGlzLmVvZiYmKHJbbisrXT1hPDw0LGE9LTEpLHRoaXMuZmlyc3REaWdpdD1hLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH0sZX0oKTt0LkFzY2lpSGV4U3RyZWFtPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX0sZX0oKTt0LlJ1bkxlbmd0aFN0cmVhbT1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMuY2FjaGVkRGF0YT0wLHRoaXMuYml0c0NhY2hlZD0wO2Zvcih2YXIgbj17ZWFybHlDaGFuZ2U6cixjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkoNDA5NiksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KDQwOTYpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KDQwOTYpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheSg0MDk2KSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH0sYT0wO2E8MjU2OysrYSluLmRpY3Rpb25hcnlWYWx1ZXNbYV09YSxuLmRpY3Rpb25hcnlMZW5ndGhzW2FdPTE7dGhpcy5sendTdGF0ZT1uLGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQml0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5iaXRzQ2FjaGVkLHI9dGhpcy5jYWNoZWREYXRhO3Q8ZTspe3ZhciBuPXRoaXMuc3RyLmdldEJ5dGUoKTtpZigtMT09PW4pcmV0dXJuIHRoaXMuZW9mPSEwLG51bGw7cj1yPDw4fG4sdCs9OH1yZXR1cm4gdGhpcy5iaXRzQ2FjaGVkPXQtPWUsdGhpcy5jYWNoZWREYXRhPXIsdGhpcy5sYXN0Q29kZT1udWxsLHI+Pj50JigxPDxlKS0xfSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbj0xMDI0LGE9dGhpcy5sendTdGF0ZTtpZihhKXt2YXIgaT1hLmVhcmx5Q2hhbmdlLG89YS5uZXh0Q29kZSxzPWEuZGljdGlvbmFyeVZhbHVlcyxsPWEuZGljdGlvbmFyeUxlbmd0aHMsYz1hLmRpY3Rpb25hcnlQcmV2Q29kZXMsdT1hLmNvZGVMZW5ndGgsZj1hLnByZXZDb2RlLGg9YS5jdXJyZW50U2VxdWVuY2UsZD1hLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aCxwPTAsbT10aGlzLmJ1ZmZlckxlbmd0aCxnPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pO2ZvcihlPTA7ZTw1MTI7ZSsrKXt2YXIgdj10aGlzLnJlYWRCaXRzKHUpLHk9ZD4wO2lmKHY8MjU2KWhbMF09dixkPTE7ZWxzZXtpZighKHY+PTI1OCkpe2lmKDI1Nj09PXYpe3U9OSxvPTI1OCxkPTA7Y29udGludWV9dGhpcy5lb2Y9ITAsZGVsZXRlIHRoaXMubHp3U3RhdGU7YnJlYWt9aWYodjxvKWZvcih0PShkPWxbdl0pLTEscj12O3Q+PTA7dC0tKWhbdF09c1tyXSxyPWNbcl07ZWxzZSBoW2QrK109aFswXX1pZih5JiYoY1tvXT1mLGxbb109bFtmXSsxLHNbb109aFswXSx1PSsrbytpJm8raS0xP3U6MHxNYXRoLm1pbihNYXRoLmxvZyhvK2kpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpKSxmPXYsbjwocCs9ZCkpe2Rve24rPTUxMn13aGlsZShuPHApO2c9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrbil9Zm9yKHQ9MDt0PGQ7dCsrKWdbbSsrXT1oW3RdfWEubmV4dENvZGU9byxhLmNvZGVMZW5ndGg9dSxhLnByZXZDb2RlPWYsYS5jdXJyZW50U2VxdWVuY2VMZW5ndGg9ZCx0aGlzLmJ1ZmZlckxlbmd0aD1tfX0sZX0oKTt0LkxaV1N0cmVhbT1nO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28uY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KDApKX1yZXR1cm4gZS5wcm90b3R5cGU9by5wcm90b3R5cGUsZX0oKTt0Lk51bGxTdHJlYW09dn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DQ0lUVEZheFN0cmVhbT12b2lkIDA7dmFyIG49cigxNTUpLGE9cigxNTkpLGk9cigxNTcpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsKDAsbi5pc0RpY3QpKHIpfHwocj1uLkRpY3QuZW1wdHkpO3ZhciBvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qnl0ZSgpfX07dGhpcy5jY2l0dEZheERlY29kZXI9bmV3IGEuQ0NJVFRGYXhEZWNvZGVyKG8se0s6ci5nZXQoIksiKSxFbmRPZkxpbmU6ci5nZXQoIkVuZE9mTGluZSIpLEVuY29kZWRCeXRlQWxpZ246ci5nZXQoIkVuY29kZWRCeXRlQWxpZ24iKSxDb2x1bW5zOnIuZ2V0KCJDb2x1bW5zIiksUm93czpyLmdldCgiUm93cyIpLEVuZE9mQmxvY2s6ci5nZXQoIkVuZE9mQmxvY2siKSxCbGFja0lzMTpyLmdldCgiQmxhY2tJczEiKX0pLGkuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLGUucHJvdG90eXBlLnJlYWRCbG9jaz1mdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mOyl7dmFyIGU9dGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1lKXJldHVybiB2b2lkKHRoaXMuZW9mPSEwKTt0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCsxKSx0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lfX0sZX0oKTt0LkNDSVRURmF4U3RyZWFtPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9ZnVuY3Rpb24oKXt2YXIgZT1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSx0PVtbLTEsLTFdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNTYwXV0scj1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbOCwyOV0sWzgsMjldLFs4LDMwXSxbOCwzMF0sWzgsNDVdLFs4LDQ1XSxbOCw0Nl0sWzgsNDZdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbNywyM10sWzgsNDddLFs4LDQ3XSxbOCw0OF0sWzgsNDhdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs4LDMzXSxbOCwzM10sWzgsMzRdLFs4LDM0XSxbOCwzNV0sWzgsMzVdLFs4LDM2XSxbOCwzNl0sWzgsMzddLFs4LDM3XSxbOCwzOF0sWzgsMzhdLFs3LDE5XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbOCwzMV0sWzgsMzFdLFs4LDMyXSxbOCwzMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbOCw1M10sWzgsNTNdLFs4LDU0XSxbOCw1NF0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs4LDM5XSxbOCwzOV0sWzgsNDBdLFs4LDQwXSxbOCw0MV0sWzgsNDFdLFs4LDQyXSxbOCw0Ml0sWzgsNDNdLFs4LDQzXSxbOCw0NF0sWzgsNDRdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzgsNjFdLFs4LDYxXSxbOCw2Ml0sWzgsNjJdLFs4LDYzXSxbOCw2M10sWzgsMF0sWzgsMF0sWzgsMzIwXSxbOCwzMjBdLFs4LDM4NF0sWzgsMzg0XSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs3LDI3XSxbNywyN10sWzcsMjddLFs3LDI3XSxbOCw1OV0sWzgsNTldLFs4LDYwXSxbOCw2MF0sWzksMTQ3Ml0sWzksMTUzNl0sWzksMTYwMF0sWzksMTcyOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbOCw0OV0sWzgsNDldLFs4LDUwXSxbOCw1MF0sWzgsNTFdLFs4LDUxXSxbOCw1Ml0sWzgsNTJdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbOCw1NV0sWzgsNTVdLFs4LDU2XSxbOCw1Nl0sWzgsNTddLFs4LDU3XSxbOCw1OF0sWzgsNThdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbOCw0NDhdLFs4LDQ0OF0sWzgsNTEyXSxbOCw1MTJdLFs5LDcwNF0sWzksNzY4XSxbOCw2NDBdLFs4LDY0MF0sWzgsNTc2XSxbOCw1NzZdLFs5LDgzMl0sWzksODk2XSxbOSw5NjBdLFs5LDEwMjRdLFs5LDEwODhdLFs5LDExNTJdLFs5LDEyMTZdLFs5LDEyODBdLFs5LDEzNDRdLFs5LDE0MDhdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XV0sYT1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxpPVtbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzExLDIzXSxbMTEsMjNdLFsxMiw1MF0sWzEyLDUxXSxbMTIsNDRdLFsxMiw0NV0sWzEyLDQ2XSxbMTIsNDddLFsxMiw1N10sWzEyLDU4XSxbMTIsNjFdLFsxMiwyNTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTIsNDhdLFsxMiw0OV0sWzEyLDYyXSxbMTIsNjNdLFsxMiwzMF0sWzEyLDMxXSxbMTIsMzJdLFsxMiwzM10sWzEyLDQwXSxbMTIsNDFdLFsxMSwyMl0sWzExLDIyXSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzEyLDEyOF0sWzEyLDE5Ml0sWzEyLDI2XSxbMTIsMjddLFsxMiwyOF0sWzEyLDI5XSxbMTEsMTldLFsxMSwxOV0sWzExLDIwXSxbMTEsMjBdLFsxMiwzNF0sWzEyLDM1XSxbMTIsMzZdLFsxMiwzN10sWzEyLDM4XSxbMTIsMzldLFsxMSwyMV0sWzExLDIxXSxbMTIsNDJdLFsxMiw0M10sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl1dLG89W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzYsOV0sWzYsOF0sWzUsN10sWzUsN10sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl1dO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7dGhpcy5zb3VyY2U9ZSx0aGlzLmVvZj0hMSx0aGlzLmVuY29kaW5nPXQuS3x8MCx0aGlzLmVvbGluZT10LkVuZE9mTGluZXx8ITEsdGhpcy5ieXRlQWxpZ249dC5FbmNvZGVkQnl0ZUFsaWdufHwhMSx0aGlzLmNvbHVtbnM9dC5Db2x1bW5zfHwxNzI4LHRoaXMucm93cz10LlJvd3N8fDA7dmFyIHIsbj10LkVuZE9mQmxvY2s7Zm9yKG51bGw9PW4mJihuPSEwKSx0aGlzLmVvYmxvY2s9bix0aGlzLmJsYWNrPXQuQmxhY2tJczF8fCExLHRoaXMuY29kaW5nTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzEpLHRoaXMucmVmTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzIpLHRoaXMuY29kaW5nTGluZVswXT10aGlzLmNvbHVtbnMsdGhpcy5jb2RpbmdQb3M9MCx0aGlzLnJvdz0wLHRoaXMubmV4dExpbmUyRD10aGlzLmVuY29kaW5nPDAsdGhpcy5pbnB1dEJpdHM9MCx0aGlzLmlucHV0QnVmPTAsdGhpcy5vdXRwdXRCaXRzPTAsdGhpcy5yb3dzRG9uZT0hMTswPT09KHI9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09ciYmdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5uZXh0TGluZTJEPSF0aGlzLl9sb29rQml0cygxKSx0aGlzLl9lYXRCaXRzKDEpKX1yZXR1cm4gcy5wcm90b3R5cGU9e3JlYWROZXh0Q2hhcjpmdW5jdGlvbigpe2lmKHRoaXMuZW9mKXJldHVybi0xO3ZhciBlLHQscixhLGksbz10aGlzLnJlZkxpbmUscz10aGlzLmNvZGluZ0xpbmUsbD10aGlzLmNvbHVtbnM7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7aWYodGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKSx0aGlzLmVvZilyZXR1cm4tMTt2YXIgYyx1LGY7aWYodGhpcy5lcnI9ITEsdGhpcy5uZXh0TGluZTJEKXtmb3IoYT0wO3NbYV08bDsrK2Epb1thXT1zW2FdO2ZvcihvW2ErK109bCxvW2FdPWwsc1swXT0wLHRoaXMuY29kaW5nUG9zPTAsZT0wLHQ9MDtzW3RoaXMuY29kaW5nUG9zXTxsOylzd2l0Y2goYz10aGlzLl9nZXRUd29EaW1Db2RlKCkpe2Nhc2UgMDp0aGlzLl9hZGRQaXhlbHMob1tlKzFdLHQpLG9bZSsxXTxsJiYoZSs9Mik7YnJlYWs7Y2FzZSAxOmlmKGM9dT0wLHQpe2Rve2MrPWY9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZj49NjQpO2Rve3UrPWY9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoZj49NjQpfWVsc2V7ZG97Yys9Zj10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShmPj02NCk7ZG97dSs9Zj10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShmPj02NCl9Zm9yKHRoaXMuX2FkZFBpeGVscyhzW3RoaXMuY29kaW5nUG9zXStjLHQpLHNbdGhpcy5jb2RpbmdQb3NdPGwmJnRoaXMuX2FkZFBpeGVscyhzW3RoaXMuY29kaW5nUG9zXSt1LDFedCk7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDc6aWYodGhpcy5fYWRkUGl4ZWxzKG9bZV0rMyx0KSx0Xj0xLHNbdGhpcy5jb2RpbmdQb3NdPGwpZm9yKCsrZTtvW2VdPD1zW3RoaXMuY29kaW5nUG9zXSYmb1tlXTxsOyllKz0yO2JyZWFrO2Nhc2UgNTppZih0aGlzLl9hZGRQaXhlbHMob1tlXSsyLHQpLHRePTEsc1t0aGlzLmNvZGluZ1Bvc108bClmb3IoKytlO29bZV08PXNbdGhpcy5jb2RpbmdQb3NdJiZvW2VdPGw7KWUrPTI7YnJlYWs7Y2FzZSAzOmlmKHRoaXMuX2FkZFBpeGVscyhvW2VdKzEsdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcigrK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDI6aWYodGhpcy5fYWRkUGl4ZWxzKG9bZV0sdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcigrK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDg6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKG9bZV0tMyx0KSx0Xj0xLHNbdGhpcy5jb2RpbmdQb3NdPGwpZm9yKGU+MD8tLWU6KytlO29bZV08PXNbdGhpcy5jb2RpbmdQb3NdJiZvW2VdPGw7KWUrPTI7YnJlYWs7Y2FzZSA2OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhvW2VdLTIsdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcihlPjA/LS1lOisrZTtvW2VdPD1zW3RoaXMuY29kaW5nUG9zXSYmb1tlXTxsOyllKz0yO2JyZWFrO2Nhc2UgNDppZih0aGlzLl9hZGRQaXhlbHNOZWcob1tlXS0xLHQpLHRePTEsc1t0aGlzLmNvZGluZ1Bvc108bClmb3IoZT4wPy0tZTorK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlLTE6dGhpcy5fYWRkUGl4ZWxzKGwsMCksdGhpcy5lb2Y9ITA7YnJlYWs7ZGVmYXVsdDooMCxuLmluZm8pKCJiYWQgMmQgY29kZSIpLHRoaXMuX2FkZFBpeGVscyhsLDApLHRoaXMuZXJyPSEwfX1lbHNlIGZvcihzWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCx0PTA7c1t0aGlzLmNvZGluZ1Bvc108bDspe2lmKGM9MCx0KWRve2MrPWY9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZj49NjQpO2Vsc2UgZG97Yys9Zj10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShmPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHNbdGhpcy5jb2RpbmdQb3NdK2MsdCksdF49MX12YXIgaD0hMTtpZih0aGlzLmJ5dGVBbGlnbiYmKHRoaXMuaW5wdXRCaXRzJj0tOCksdGhpcy5lb2Jsb2NrfHx0aGlzLnJvdyE9PXRoaXMucm93cy0xKXtpZihjPXRoaXMuX2xvb2tCaXRzKDEyKSx0aGlzLmVvbGluZSlmb3IoOy0xIT09YyYmMSE9PWM7KXRoaXMuX2VhdEJpdHMoMSksYz10aGlzLl9sb29rQml0cygxMik7ZWxzZSBmb3IoOzA9PT1jOyl0aGlzLl9lYXRCaXRzKDEpLGM9dGhpcy5fbG9va0JpdHMoMTIpOzE9PT1jPyh0aGlzLl9lYXRCaXRzKDEyKSxoPSEwKTotMT09PWMmJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZoJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShjPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0oYz10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrYyksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKC0xPT09KGM9dGhpcy5fbG9va0JpdHMoMTMpKSlyZXR1cm4gdGhpcy5lb2Y9ITAsLTE7aWYoYz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2VhdEJpdHMoMSksdGhpcy5uZXh0TGluZTJEPSEoMSZjKSl9c1swXT4wP3RoaXMub3V0cHV0Qml0cz1zW3RoaXMuY29kaW5nUG9zPTBdOnRoaXMub3V0cHV0Qml0cz1zW3RoaXMuY29kaW5nUG9zPTFdLHRoaXMucm93Kyt9aWYodGhpcy5vdXRwdXRCaXRzPj04KWk9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NSx0aGlzLm91dHB1dEJpdHMtPTgsMD09PXRoaXMub3V0cHV0Qml0cyYmc1t0aGlzLmNvZGluZ1Bvc108bCYmKHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPXNbdGhpcy5jb2RpbmdQb3NdLXNbdGhpcy5jb2RpbmdQb3MtMV0pO2Vsc2V7cj04LGk9MDtkb3t0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLHNbdGhpcy5jb2RpbmdQb3NdPGw/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPXNbdGhpcy5jb2RpbmdQb3NdLXNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfSxfYWRkUGl4ZWxzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2RpbmdQb3M7ZT5yW2FdJiYoZT50aGlzLmNvbHVtbnMmJigoMCxuLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIiksdGhpcy5lcnI9ITAsZT10aGlzLmNvbHVtbnMpLDEmYV50JiYrK2EsclthXT1lKSx0aGlzLmNvZGluZ1Bvcz1hfSxfYWRkUGl4ZWxzTmVnOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2RpbmdQb3M7aWYoZT5yW2FdKWU+dGhpcy5jb2x1bW5zJiYoKDAsbi5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpLHRoaXMuZXJyPSEwLGU9dGhpcy5jb2x1bW5zKSwxJmFedCYmKythLHJbYV09ZTtlbHNlIGlmKGU8clthXSl7Zm9yKGU8MCYmKCgwLG4uaW5mbykoImludmFsaWQgY29kZSIpLHRoaXMuZXJyPSEwLGU9MCk7YT4wJiZlPHJbYS0xXTspLS1hO3JbYV09ZX10aGlzLmNvZGluZ1Bvcz1hfSxfZmluZFRhYmxlQ29kZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBvPXRoaXMuX2xvb2tCaXRzKGkpO2lmKC0xPT09bylyZXR1cm5bITAsMSwhMV07aWYoaTx0JiYobzw8PXQtaSksIWF8fG8+PWEpe3ZhciBzPXJbby1hXTtpZihzWzBdPT09aSlyZXR1cm4gdGhpcy5fZWF0Qml0cyhpKSxbITAsc1sxXSwhMF19fXJldHVyblshMSwwLCExXX0sX2dldFR3b0RpbUNvZGU6ZnVuY3Rpb24oKXt2YXIgdCxyPTA7aWYodGhpcy5lb2Jsb2NrKXtpZihyPXRoaXMuX2xvb2tCaXRzKDcpLCh0PWVbcl0pJiZ0WzBdPjApcmV0dXJuIHRoaXMuX2VhdEJpdHModFswXSksdFsxXX1lbHNle3ZhciBhPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LGUpO2lmKGFbMF0mJmFbMl0pcmV0dXJuIGFbMV19cmV0dXJuKDAsbi5pbmZvKSgiQmFkIHR3byBkaW0gY29kZSIpLC0xfSxfZ2V0V2hpdGVDb2RlOmZ1bmN0aW9uKCl7dmFyIGUsYT0wO2lmKHRoaXMuZW9ibG9jayl7aWYoLTE9PT0oYT10aGlzLl9sb29rQml0cygxMikpKXJldHVybiAxO2lmKChlPWE+PjU9PTA/dFthXTpyW2E+PjNdKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgaT10aGlzLl9maW5kVGFibGVDb2RlKDEsOSxyKTtpZihpWzBdKXJldHVybiBpWzFdO2lmKChpPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsMTIsdCkpWzBdKXJldHVybiBpWzFdfXJldHVybigwLG4uaW5mbykoImJhZCB3aGl0ZSBjb2RlIiksdGhpcy5fZWF0Qml0cygxKSwxfSxfZ2V0QmxhY2tDb2RlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKC0xPT09KGU9dGhpcy5fbG9va0JpdHMoMTMpKSlyZXR1cm4gMTtpZigodD1lPj43PT0wP2FbZV06ZT4+OT09MCYmZT4+NyE9MD9pWyhlPj4xKS02NF06b1tlPj43XSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyh0WzBdKSx0WzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsbyk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIsaSw2NCkpWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsMTMsYSkpWzBdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoImJhZCBibGFjayBjb2RlIiksdGhpcy5fZWF0Qml0cygxKSwxfSxfbG9va0JpdHM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0O3RoaXMuaW5wdXRCaXRzPGU7KXtpZigtMT09PSh0PXRoaXMuc291cmNlLm5leHQoKSkpcmV0dXJuIDA9PT10aGlzLmlucHV0Qml0cz8tMTp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfSxfZWF0Qml0czpmdW5jdGlvbihlKXsodGhpcy5pbnB1dEJpdHMtPWUpPDAmJih0aGlzLmlucHV0Qml0cz0wKX19LHN9KCk7dC5DQ0lUVEZheERlY29kZXI9YX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KYmlnMlN0cmVhbT12b2lkIDA7dmFyIG49cigxNTUpLGE9cigxNTcpLGk9cigxNjEpLG89cig2KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuKXt0aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1uLGEuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgaS5KYmlnMkltYWdlLHQ9W107aWYoKDAsbi5pc0RpY3QpKHRoaXMucGFyYW1zKSl7dmFyIHI9dGhpcy5wYXJhbXMuZ2V0KCJKQklHMkdsb2JhbHMiKTtpZigoMCxuLmlzU3RyZWFtKShyKSl7dmFyIGE9ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTphLHN0YXJ0OjAsZW5kOmEubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBvPWUucGFyc2VDaHVua3ModCkscz1vLmxlbmd0aCxsPTA7bDxzO2wrKylvW2xdXj0yNTU7dGhpcy5idWZmZXI9byx0aGlzLmJ1ZmZlckxlbmd0aD1zLHRoaXMuZW9mPSEwfX0sZX0oKTt0LkpiaWcyU3RyZWFtPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTYyKSxpPXIoMTU5KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9IkpCSUcyIGVycm9yOiAiK2V9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJKYmlnMkVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiB0KGUsdCxyKXt0aGlzLmRhdGE9ZSx0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9cn1mdW5jdGlvbiByKGUsdCxyKXt2YXIgbj1lLmdldENvbnRleHRzKHQpLGE9MTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD0wLGk9MDtpPGU7aSsrKXt2YXIgbz1yLnJlYWRCaXQobixhKTthPWE8MjU2P2E8PDF8bzo1MTEmKGE8PDF8byl8MjU2LHQ9dDw8MXxvfXJldHVybiB0Pj4+MH12YXIgbz1pKDEpLHM9aSgxKT9pKDEpP2koMSk/aSgxKT9pKDEpP2koMzIpKzQ0MzY6aSgxMikrMzQwOmkoOCkrODQ6aSg2KSsyMDppKDQpKzQ6aSgyKTtyZXR1cm4gMD09PW8/czpzPjA/LXM6bnVsbH1mdW5jdGlvbiBzKGUsdCxyKXtmb3IodmFyIG49ZS5nZXRDb250ZXh0cygiSUFJRCIpLGE9MSxpPTA7aTxyO2krKylhPWE8PDF8dC5yZWFkQml0KG4sYSk7cmV0dXJuIHI8MzE/YSYoMTw8ciktMToyMTQ3NDgzNjQ3JmF9ZS5wcm90b3R5cGU9e2dldENvbnRleHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXM/dGhpc1tlXTp0aGlzW2VdPW5ldyBJbnQ4QXJyYXkoNjU1MzYpfX0sdC5wcm90b3R5cGU9e2dldCBkZWNvZGVyKCl7dmFyIGU9bmV3IGEuQXJpdGhtZXRpY0RlY29kZXIodGhpcy5kYXRhLHRoaXMuc3RhcnQsdGhpcy5lbmQpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJkZWNvZGVyIixlKX0sZ2V0IGNvbnRleHRDYWNoZSgpe3ZhciB0PW5ldyBlO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLHQpfX07dmFyIGw9WyJTeW1ib2xEaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlVGV4dFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJQYXR0ZXJuRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUhhbGZ0b25lUmVnaW9uIixudWxsLCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uIiwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCwiUGFnZUluZm9ybWF0aW9uIiwiRW5kT2ZQYWdlIiwiRW5kT2ZTdHJpcGUiLCJFbmRPZkZpbGUiLCJQcm9maWxlcyIsIlRhYmxlcyIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJFeHRlbnNpb24iXSxjPVtbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6Mix5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTMseTotMX0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dXSx1PVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sZj1bMzk3MTcsMTk0MSwyMjksNDA1XSxoPVszMiw4XTtmdW5jdGlvbiBkKGUsdCxyLG4sYSxpLG8scyl7aWYoZSlyZXR1cm4gTyhuZXcgRShzLmRhdGEscy5zdGFydCxzLmVuZCksdCxyLCExKTtpZigwPT09biYmIWkmJiFhJiY0PT09by5sZW5ndGgmJjM9PT1vWzBdLngmJi0xPT09b1swXS55JiYtMz09PW9bMV0ueCYmLTE9PT1vWzFdLnkmJjI9PT1vWzJdLngmJi0yPT09b1syXS55JiYtMj09PW9bM10ueCYmLTI9PT1vWzNdLnkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGwsYyx1PXIuZGVjb2RlcixmPXIuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLGg9W107Zm9yKGE9MDthPHQ7YSsrKWZvcihzPWhbYV09bmV3IFVpbnQ4QXJyYXkoZSksbD1hPDE/czpoW2EtMV0sbj0oYz1hPDI/czpoW2EtMl0pWzBdPDwxM3xjWzFdPDwxMnxjWzJdPDwxMXxsWzBdPDw3fGxbMV08PDZ8bFsyXTw8NXxsWzNdPDw0LGk9MDtpPGU7aSsrKXNbaV09bz11LnJlYWRCaXQoZixuKSxuPSgzMTczNSZuKTw8MXwoaSszPGU/Y1tpKzNdPDwxMTowKXwoaSs0PGU/bFtpKzRdPDw0OjApfG87cmV0dXJuIGh9KHQscixzKTt2YXIgbD0hIWksdT1jW25dLmNvbmNhdChvKTt1LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7dmFyIGgsZCxwPXUubGVuZ3RoLG09bmV3IEludDhBcnJheShwKSxnPW5ldyBJbnQ4QXJyYXkocCksdj1bXSx5PTAsYj0wLHc9MCxrPTA7Zm9yKGQ9MDtkPHA7ZCsrKW1bZF09dVtkXS54LGdbZF09dVtkXS55LGI9TWF0aC5taW4oYix1W2RdLngpLHc9TWF0aC5tYXgodyx1W2RdLngpLGs9TWF0aC5taW4oayx1W2RdLnkpLGQ8cC0xJiZ1W2RdLnk9PT11W2QrMV0ueSYmdVtkXS54PT09dVtkKzFdLngtMT95fD0xPDxwLTEtZDp2LnB1c2goZCk7dmFyIFM9di5sZW5ndGgsXz1uZXcgSW50OEFycmF5KFMpLHg9bmV3IEludDhBcnJheShTKSxBPW5ldyBVaW50MTZBcnJheShTKTtmb3IoaD0wO2g8UztoKyspZD12W2hdLF9baF09dVtkXS54LHhbaF09dVtkXS55LEFbaF09MTw8cC0xLWQ7Zm9yKHZhciBDLFAsVCxSLEksRj0tYixMPS1rLEQ9dC13LE09ZltuXSxOPW5ldyBVaW50OEFycmF5KHQpLGo9W10sQj1zLmRlY29kZXIsVT1zLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxxPTAsej0wLFc9MDtXPHI7VysrKWlmKGEmJihxXj1CLnJlYWRCaXQoVSxNKSkpai5wdXNoKE4pO2Vsc2UgZm9yKE49bmV3IFVpbnQ4QXJyYXkoTiksai5wdXNoKE4pLEM9MDtDPHQ7QysrKWlmKGwmJmlbV11bQ10pTltDXT0wO2Vsc2V7aWYoQz49RiYmQzxEJiZXPj1MKWZvcih6PXo8PDEmeSxkPTA7ZDxTO2QrKylQPVcreFtkXSxUPUMrX1tkXSwoUj1qW1BdW1RdKSYmKHp8PVI9QVtkXSk7ZWxzZSBmb3Ioej0wLEk9cC0xLGQ9MDtkPHA7ZCsrLEktLSkoVD1DK21bZF0pPj0wJiZUPHQmJihQPVcrZ1tkXSk+PTAmJihSPWpbUF1bVF0pJiYoenw9Ujw8SSk7dmFyIEg9Qi5yZWFkQml0KFUseik7TltDXT1IfXJldHVybiBqfWZ1bmN0aW9uIHAoZSx0LHIsbixhLGkscyxsLGMpe3ZhciBmPXVbcl0uY29kaW5nOzA9PT1yJiYoZj1mLmNvbmNhdChbbFswXV0pKTt2YXIgZCxwPWYubGVuZ3RoLG09bmV3IEludDMyQXJyYXkocCksZz1uZXcgSW50MzJBcnJheShwKTtmb3IoZD0wO2Q8cDtkKyspbVtkXT1mW2RdLngsZ1tkXT1mW2RdLnk7dmFyIHY9dVtyXS5yZWZlcmVuY2U7MD09PXImJih2PXYuY29uY2F0KFtsWzFdXSkpO3ZhciB5PXYubGVuZ3RoLGI9bmV3IEludDMyQXJyYXkoeSksdz1uZXcgSW50MzJBcnJheSh5KTtmb3IoZD0wO2Q8eTtkKyspYltkXT12W2RdLngsd1tkXT12W2RdLnk7Zm9yKHZhciBrPW5bMF0ubGVuZ3RoLFM9bi5sZW5ndGgsXz1oW3JdLHg9W10sQT1jLmRlY29kZXIsQz1jLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR1IiKSxQPTAsRT0wO0U8dDtFKyspe2lmKHMmJihQXj1BLnJlYWRCaXQoQyxfKSkpdGhyb3cgbmV3IG8oInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBUPW5ldyBVaW50OEFycmF5KGUpO3gucHVzaChUKTtmb3IodmFyIFI9MDtSPGU7UisrKXt2YXIgTyxJLEY9MDtmb3IoZD0wO2Q8cDtkKyspTz1FK2dbZF0sST1SK21bZF0sTzwwfHxJPDB8fEk+PWU/Rjw8PTE6Rj1GPDwxfHhbT11bSV07Zm9yKGQ9MDtkPHk7ZCsrKU89RSt3W2RdLWksST1SK2JbZF0tYSxPPDB8fE8+PVN8fEk8MHx8ST49az9GPDw9MTpGPUY8PDF8bltPXVtJXTt2YXIgTD1BLnJlYWRCaXQoQyxGKTtUW1JdPUx9fXJldHVybiB4fWZ1bmN0aW9uIG0oZSx0LG4sYSxpLGwsYyx1LGYsaCxkLG0sZyx2LHksYix3LGssUyl7aWYoZSYmdCl0aHJvdyBuZXcgbygicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBfLHgsQT1bXTtmb3IoXz0wO188YTtfKyspe2lmKHg9bmV3IFVpbnQ4QXJyYXkobiksaSlmb3IodmFyIEM9MDtDPG47QysrKXhbQ109aTtBLnB1c2goeCl9dmFyIFA9dy5kZWNvZGVyLEU9dy5jb250ZXh0Q2FjaGUsVD1lPy12LnRhYmxlRGVsdGFULmRlY29kZShTKTotcihFLCJJQURUIixQKSxSPTA7Zm9yKF89MDtfPGw7KXtUKz1lP3YudGFibGVEZWx0YVQuZGVjb2RlKFMpOnIoRSwiSUFEVCIsUCk7Zm9yKHZhciBPPVIrPWU/di50YWJsZUZpcnN0Uy5kZWNvZGUoUyk6cihFLCJJQUZTIixQKTs7KXt2YXIgST0wO2M+MSYmKEk9ZT9TLnJlYWRCaXRzKGspOnIoRSwiSUFJVCIsUCkpO3ZhciBGPWMqVCtJLEw9ZT92LnN5bWJvbElEVGFibGUuZGVjb2RlKFMpOnMoRSxQLGYpLEQ9dCYmKGU/Uy5yZWFkQml0KCk6cihFLCJJQVJJIixQKSksTT11W0xdLE49TVswXS5sZW5ndGgsaj1NLmxlbmd0aDtpZihEKXt2YXIgQj1yKEUsIklBUkRXIixQKSxVPXIoRSwiSUFSREgiLFApO009cChOKz1CLGorPVUseSxNLChCPj4xKStyKEUsIklBUkRYIixQKSwoVT4+MSkrcihFLCJJQVJEWSIsUCksITEsYix3KX12YXIgcSx6LFcsSD1GLSgxJm0/MDpqLTEpLEc9Ty0oMiZtP04tMTowKTtpZihoKXtmb3IocT0wO3E8ajtxKyspaWYoeD1BW0crcV0pe1c9TVtxXTt2YXIgVj1NYXRoLm1pbihuLUgsTik7c3dpdGNoKGcpe2Nhc2UgMDpmb3Ioej0wO3o8Vjt6KyspeFtIK3pdfD1XW3pdO2JyZWFrO2Nhc2UgMjpmb3Ioej0wO3o8Vjt6KyspeFtIK3pdXj1XW3pdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oIm9wZXJhdG9yICIuY29uY2F0KGcsIiBpcyBub3Qgc3VwcG9ydGVkIikpfX1PKz1qLTF9ZWxzZXtmb3Ioej0wO3o8ajt6KyspaWYoeD1BW0grel0pc3dpdGNoKFc9TVt6XSxnKXtjYXNlIDA6Zm9yKHE9MDtxPE47cSsrKXhbRytxXXw9V1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPE47cSsrKXhbRytxXV49V1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJvcGVyYXRvciAiLmNvbmNhdChnLCIgaXMgbm90IHN1cHBvcnRlZCIpKX1PKz1OLTF9XysrO3ZhciBYPWU/di50YWJsZURlbHRhUy5kZWNvZGUoUyk6cihFLCJJQURTIixQKTtpZihudWxsPT09WClicmVhaztPKz1YK2R9fXJldHVybiBBfWZ1bmN0aW9uIGcoZSx0KXt2YXIgcj17fTtyLm51bWJlcj0oMCxuLnJlYWRVaW50MzIpKGUsdCk7dmFyIGE9ZVt0KzRdLGk9NjMmYTtpZighbFtpXSl0aHJvdyBuZXcgbygiaW52YWxpZCBzZWdtZW50IHR5cGU6ICIraSk7ci50eXBlPWksci50eXBlTmFtZT1sW2ldLHIuZGVmZXJyZWROb25SZXRhaW49ISEoMTI4JmEpO3ZhciBzPSEhKDY0JmEpLGM9ZVt0KzVdLHU9Yz4+NSY3LGY9WzMxJmNdLGg9dCs2O2lmKDc9PT1jKXt1PTUzNjg3MDkxMSYoMCxuLnJlYWRVaW50MzIpKGUsaC0xKSxoKz0zO3ZhciBkPXUrNz4+Mztmb3IoZlswXT1lW2grK107LS1kPjA7KWYucHVzaChlW2grK10pfWVsc2UgaWYoNT09PWN8fDY9PT1jKXRocm93IG5ldyBvKCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzIik7ci5yZXRhaW5CaXRzPWY7dmFyIHAsbSxnPXIubnVtYmVyPD0yNTY/MTpyLm51bWJlcjw9NjU1MzY/Mjo0LHY9W107Zm9yKHA9MDtwPHU7cCsrKXt2YXIgdz0xPT09Zz9lW2hdOjI9PT1nPygwLG4ucmVhZFVpbnQxNikoZSxoKTooMCxuLnJlYWRVaW50MzIpKGUsaCk7di5wdXNoKHcpLGgrPWd9aWYoci5yZWZlcnJlZFRvPXYscz8oci5wYWdlQXNzb2NpYXRpb249KDAsbi5yZWFkVWludDMyKShlLGgpLGgrPTQpOnIucGFnZUFzc29jaWF0aW9uPWVbaCsrXSxyLmxlbmd0aD0oMCxuLnJlYWRVaW50MzIpKGUsaCksaCs9NCw0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgbygiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7dmFyIGs9eShlLGgpLFM9ISEoMSZlW2grYl0pLF89bmV3IFVpbnQ4QXJyYXkoNik7Zm9yKFN8fChfWzBdPTI1NSxfWzFdPTE3MiksX1syXT1rLmhlaWdodD4+PjI0JjI1NSxfWzNdPWsuaGVpZ2h0Pj4xNiYyNTUsX1s0XT1rLmhlaWdodD4+OCYyNTUsX1s1XT0yNTUmay5oZWlnaHQscD1oLG09ZS5sZW5ndGg7cDxtO3ArKyl7Zm9yKHZhciB4PTA7eDw2JiZfW3hdPT09ZVtwK3hdOyl4Kys7aWYoNj09PXgpe3IubGVuZ3RoPXArNjticmVha319aWYoNDI5NDk2NzI5NT09PXIubGVuZ3RoKXRocm93IG5ldyBvKCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kIil9cmV0dXJuIHIuaGVhZGVyRW5kPWgscn1mdW5jdGlvbiB2KGUsdCxyLG4pe2Zvcih2YXIgYT1bXSxpPXI7aTxuOyl7dmFyIG89Zyh0LGkpO2k9by5oZWFkZXJFbmQ7dmFyIHM9e2hlYWRlcjpvLGRhdGE6dH07aWYoZS5yYW5kb21BY2Nlc3N8fChzLnN0YXJ0PWksaSs9by5sZW5ndGgscy5lbmQ9aSksYS5wdXNoKHMpLDUxPT09by50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcih2YXIgbD0wLGM9YS5sZW5ndGg7bDxjO2wrKylhW2xdLnN0YXJ0PWksaSs9YVtsXS5oZWFkZXIubGVuZ3RoLGFbbF0uZW5kPWk7cmV0dXJuIGF9ZnVuY3Rpb24geShlLHQpe3JldHVybnt3aWR0aDooMCxuLnJlYWRVaW50MzIpKGUsdCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikoZSx0KzQpLHg6KDAsbi5yZWFkVWludDMyKShlLHQrOCkseTooMCxuLnJlYWRVaW50MzIpKGUsdCsxMiksY29tYmluYXRpb25PcGVyYXRvcjo3JmVbdCsxNl19fXZhciBiPTE3O2Z1bmN0aW9uIHcoZSx0KXt2YXIgcixhLGkscyxsPWUuaGVhZGVyLGM9ZS5kYXRhLHU9ZS5zdGFydCxmPWUuZW5kO3N3aXRjaChsLnR5cGUpe2Nhc2UgMDp2YXIgaD17fSxkPSgwLG4ucmVhZFVpbnQxNikoYyx1KTtpZihoLmh1ZmZtYW49ISEoMSZkKSxoLnJlZmluZW1lbnQ9ISEoMiZkKSxoLmh1ZmZtYW5ESFNlbGVjdG9yPWQ+PjImMyxoLmh1ZmZtYW5EV1NlbGVjdG9yPWQ+PjQmMyxoLmJpdG1hcFNpemVTZWxlY3Rvcj1kPj42JjEsaC5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yPWQ+PjcmMSxoLmJpdG1hcENvZGluZ0NvbnRleHRVc2VkPSEhKDI1NiZkKSxoLmJpdG1hcENvZGluZ0NvbnRleHRSZXRhaW5lZD0hISg1MTImZCksaC50ZW1wbGF0ZT1kPj4xMCYzLGgucmVmaW5lbWVudFRlbXBsYXRlPWQ+PjEyJjEsdSs9MiwhaC5odWZmbWFuKXtmb3Iocz0wPT09aC50ZW1wbGF0ZT80OjEsYT1bXSxpPTA7aTxzO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7aC5hdD1hfWlmKGgucmVmaW5lbWVudCYmIWgucmVmaW5lbWVudFRlbXBsYXRlKXtmb3IoYT1bXSxpPTA7aTwyO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7aC5yZWZpbmVtZW50QXQ9YX1oLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzPSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LGgubnVtYmVyT2ZOZXdTeW1ib2xzPSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LHI9W2gsbC5udW1iZXIsbC5yZWZlcnJlZFRvLGMsdSxmXTticmVhaztjYXNlIDY6Y2FzZSA3OnZhciBwPXt9O3AuaW5mbz15KGMsdSksdSs9Yjt2YXIgbT0oMCxuLnJlYWRVaW50MTYpKGMsdSk7aWYodSs9MixwLmh1ZmZtYW49ISEoMSZtKSxwLnJlZmluZW1lbnQ9ISEoMiZtKSxwLmxvZ1N0cmlwU2l6ZT1tPj4yJjMscC5zdHJpcFNpemU9MTw8cC5sb2dTdHJpcFNpemUscC5yZWZlcmVuY2VDb3JuZXI9bT4+NCYzLHAudHJhbnNwb3NlZD0hISg2NCZtKSxwLmNvbWJpbmF0aW9uT3BlcmF0b3I9bT4+NyYzLHAuZGVmYXVsdFBpeGVsVmFsdWU9bT4+OSYxLHAuZHNPZmZzZXQ9bTw8MTc+PjI3LHAucmVmaW5lbWVudFRlbXBsYXRlPW0+PjE1JjEscC5odWZmbWFuKXt2YXIgZz0oMCxuLnJlYWRVaW50MTYpKGMsdSk7dSs9MixwLmh1ZmZtYW5GUz0zJmcscC5odWZmbWFuRFM9Zz4+MiYzLHAuaHVmZm1hbkRUPWc+PjQmMyxwLmh1ZmZtYW5SZWZpbmVtZW50RFc9Zz4+NiYzLHAuaHVmZm1hblJlZmluZW1lbnRESD1nPj44JjMscC5odWZmbWFuUmVmaW5lbWVudERYPWc+PjEwJjMscC5odWZmbWFuUmVmaW5lbWVudERZPWc+PjEyJjMscC5odWZmbWFuUmVmaW5lbWVudFNpemVTZWxlY3Rvcj0hISgxNjM4NCZnKX1pZihwLnJlZmluZW1lbnQmJiFwLnJlZmluZW1lbnRUZW1wbGF0ZSl7Zm9yKGE9W10saT0wO2k8MjtpKyspYS5wdXNoKHt4OigwLG4ucmVhZEludDgpKGMsdSkseTooMCxuLnJlYWRJbnQ4KShjLHUrMSl9KSx1Kz0yO3AucmVmaW5lbWVudEF0PWF9cC5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz0oMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxyPVtwLGwucmVmZXJyZWRUbyxjLHUsZl07YnJlYWs7Y2FzZSAxNjp2YXIgdj17fSx3PWNbdSsrXTt2Lm1tcj0hISgxJncpLHYudGVtcGxhdGU9dz4+MSYzLHYucGF0dGVybldpZHRoPWNbdSsrXSx2LnBhdHRlcm5IZWlnaHQ9Y1t1KytdLHYubWF4UGF0dGVybkluZGV4PSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LHI9W3YsbC5udW1iZXIsYyx1LGZdO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp2YXIgaz17fTtrLmluZm89eShjLHUpLHUrPWI7dmFyIFM9Y1t1KytdO2subW1yPSEhKDEmUyksay50ZW1wbGF0ZT1TPj4xJjMsay5lbmFibGVTa2lwPSEhKDgmUyksay5jb21iaW5hdGlvbk9wZXJhdG9yPVM+PjQmNyxrLmRlZmF1bHRQaXhlbFZhbHVlPVM+PjcmMSxrLmdyaWRXaWR0aD0oMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxrLmdyaWRIZWlnaHQ9KDAsbi5yZWFkVWludDMyKShjLHUpLHUrPTQsay5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LGsuZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxrLmdyaWRWZWN0b3JYPSgwLG4ucmVhZFVpbnQxNikoYyx1KSx1Kz0yLGsuZ3JpZFZlY3Rvclk9KDAsbi5yZWFkVWludDE2KShjLHUpLHUrPTIscj1bayxsLnJlZmVycmVkVG8sYyx1LGZdO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTp2YXIgXz17fTtfLmluZm89eShjLHUpLHUrPWI7dmFyIHg9Y1t1KytdO2lmKF8ubW1yPSEhKDEmeCksXy50ZW1wbGF0ZT14Pj4xJjMsXy5wcmVkaWN0aW9uPSEhKDgmeCksIV8ubW1yKXtmb3Iocz0wPT09Xy50ZW1wbGF0ZT80OjEsYT1bXSxpPTA7aTxzO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7Xy5hdD1hfXI9W18sYyx1LGZdO2JyZWFrO2Nhc2UgNDg6dmFyIEE9e3dpZHRoOigwLG4ucmVhZFVpbnQzMikoYyx1KSxoZWlnaHQ6KDAsbi5yZWFkVWludDMyKShjLHUrNCkscmVzb2x1dGlvblg6KDAsbi5yZWFkVWludDMyKShjLHUrOCkscmVzb2x1dGlvblk6KDAsbi5yZWFkVWludDMyKShjLHUrMTIpfTs0Mjk0OTY3Mjk1PT09QS5oZWlnaHQmJmRlbGV0ZSBBLmhlaWdodDt2YXIgQz1jW3UrMTZdOygwLG4ucmVhZFVpbnQxNikoYyx1KzE3KSxBLmxvc3NsZXNzPSEhKDEmQyksQS5yZWZpbmVtZW50PSEhKDImQyksQS5kZWZhdWx0UGl4ZWxWYWx1ZT1DPj4yJjEsQS5jb21iaW5hdGlvbk9wZXJhdG9yPUM+PjMmMyxBLnJlcXVpcmVzQnVmZmVyPSEhKDMyJkMpLEEuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlPSEhKDY0JkMpLHI9W0FdO2JyZWFrO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmJyZWFrO2Nhc2UgNTM6cj1bbC5udW1iZXIsYyx1LGZdO2JyZWFrO2Nhc2UgNjI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygic2VnbWVudCB0eXBlICIuY29uY2F0KGwudHlwZU5hbWUsIigiKS5jb25jYXQobC50eXBlLCIpIikrIiBpcyBub3QgaW1wbGVtZW50ZWQiKX12YXIgUD0ib24iK2wudHlwZU5hbWU7UCBpbiB0JiZ0W1BdLmFwcGx5KHQscil9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl3KGVbcl0sdCl9ZnVuY3Rpb24gUygpe31mdW5jdGlvbiBfKGUpezI9PT1lLmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9ZVswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPWVbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9ZVswXSx0aGlzLnByZWZpeExlbmd0aD1lWzFdLHRoaXMucmFuZ2VMZW5ndGg9ZVsyXSx0aGlzLnByZWZpeENvZGU9ZVszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XSl9ZnVuY3Rpb24geChlKXt0aGlzLmNoaWxkcmVuPVtdLGU/KHRoaXMuaXNMZWFmPSEwLHRoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aCx0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3csdGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2UsdGhpcy5pc09PQj1lLmlzT09CKTp0aGlzLmlzTGVhZj0hMX1mdW5jdGlvbiBBKGUsdCl7dHx8dGhpcy5hc3NpZ25QcmVmaXhDb2RlcyhlKSx0aGlzLnJvb3ROb2RlPW5ldyB4KG51bGwpO3ZhciByLG4sYT1lLmxlbmd0aDtmb3Iocj0wO3I8YTtyKyspKG49ZVtyXSkucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKG4sbi5wcmVmaXhMZW5ndGgtMSl9Uy5wcm90b3R5cGU9e29uUGFnZUluZm9ybWF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2lmKGUuZGVmYXVsdFBpeGVsVmFsdWUpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKXJbbl09MjU1O3RoaXMuYnVmZmVyPXJ9LGRyYXdCaXRtYXA6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxzPXRoaXMuY3VycmVudFBhZ2VJbmZvLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9cy53aWR0aCs3Pj4zLGY9cy5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU/ZS5jb21iaW5hdGlvbk9wZXJhdG9yOnMuY29tYmluYXRpb25PcGVyYXRvcixoPXRoaXMuYnVmZmVyLGQ9MTI4Pj4oNyZlLngpLHA9ZS55KnUrKGUueD4+Myk7c3dpdGNoKGYpe2Nhc2UgMDpmb3Iocj0wO3I8YztyKyspe2ZvcihhPWQsaT1wLG49MDtuPGw7bisrKXRbcl1bbl0mJihoW2ldfD1hKSwoYT4+PTEpfHwoYT0xMjgsaSsrKTtwKz11fWJyZWFrO2Nhc2UgMjpmb3Iocj0wO3I8YztyKyspe2ZvcihhPWQsaT1wLG49MDtuPGw7bisrKXRbcl1bbl0mJihoW2ldXj1hKSwoYT4+PTEpfHwoYT0xMjgsaSsrKTtwKz11fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oIm9wZXJhdG9yICIuY29uY2F0KGYsIiBpcyBub3Qgc3VwcG9ydGVkIikpfX0sb25JbW1lZGlhdGVHZW5lcmljUmVnaW9uOmZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPWUuaW5mbyxvPW5ldyB0KHIsbixhKSxzPWQoZS5tbXIsaS53aWR0aCxpLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsbyk7dGhpcy5kcmF3Qml0bWFwKGkscyl9LG9uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvblN5bWJvbERpY3Rpb25hcnk6ZnVuY3Rpb24oZSxhLGksbCxjLHUpe3ZhciBmLGg7ZS5odWZmbWFuJiYoZj1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLHMsbD0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49UChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPVQobCx0LHIpLGwrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPVAoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1UKGwsdCxyKSxsKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPVQobCx0LHIpLGwrKyk6aT1QKDEpLHM9ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP1QobCx0LHIpOlAoMSkse3RhYmxlRGVsdGFIZWlnaHQ6bix0YWJsZURlbHRhV2lkdGg6YSx0YWJsZUJpdG1hcFNpemU6aSx0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczpzfX0oZSxpLHRoaXMuY3VzdG9tVGFibGVzKSxoPW5ldyBFKGwsYyx1KSk7dmFyIGc9dGhpcy5zeW1ib2xzO2d8fCh0aGlzLnN5bWJvbHM9Zz17fSk7Zm9yKHZhciB2PVtdLHk9MCxiPWkubGVuZ3RoO3k8Yjt5Kyspe3ZhciB3PWdbaVt5XV07dyYmKHY9di5jb25jYXQodykpfXZhciBrPW5ldyB0KGwsYyx1KTtnW2FdPWZ1bmN0aW9uKGUsdCxhLGksbCxjLHUsZixoLGcsdix5KXtpZihlJiZ0KXRocm93IG5ldyBvKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBiLHcsaz1bXSxTPTAsXz0oMCxuLmxvZzIpKGEubGVuZ3RoK2kpLHg9di5kZWNvZGVyLEE9di5jb250ZXh0Q2FjaGU7Zm9yKGUmJihiPVAoMSksdz1bXSxfPU1hdGgubWF4KF8sMSkpO2subGVuZ3RoPGk7KXtTKz1lP2MudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoeSk6cihBLCJJQURIIix4KTtmb3IodmFyIEM9MCxFPTAsVD1lP3cubGVuZ3RoOjA7Oyl7dmFyIEksRj1lP2MudGFibGVEZWx0YVdpZHRoLmRlY29kZSh5KTpyKEEsIklBRFciLHgpO2lmKG51bGw9PT1GKWJyZWFrO2lmKEUrPUMrPUYsdCl7dmFyIEw9cihBLCJJQUFJIix4KTtpZihMPjEpST1tKGUsdCxDLFMsMCxMLDEsYS5jb25jYXQoayksXywwLDAsMSwwLGMsaCxnLHYsMCx5KTtlbHNle3ZhciBEPXMoQSx4LF8pLE09cihBLCJJQVJEWCIseCksTj1yKEEsIklBUkRZIix4KTtJPXAoQyxTLGgsRDxhLmxlbmd0aD9hW0RdOmtbRC1hLmxlbmd0aF0sTSxOLCExLGcsdil9ay5wdXNoKEkpfWVsc2UgZT93LnB1c2goQyk6KEk9ZCghMSxDLFMsdSwhMSxudWxsLGYsdiksay5wdXNoKEkpKX1pZihlJiYhdCl7dmFyIGo9Yy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKHkpO3kuYnl0ZUFsaWduKCk7dmFyIEI9dm9pZCAwO2lmKDA9PT1qKUI9Uih5LEUsUyk7ZWxzZXt2YXIgVT15LmVuZCxxPXkucG9zaXRpb24rajt5LmVuZD1xLEI9Tyh5LEUsUywhMSkseS5lbmQ9VSx5LnBvc2l0aW9uPXF9dmFyIHo9dy5sZW5ndGg7aWYoVD09PXotMSlrLnB1c2goQik7ZWxzZXt2YXIgVz12b2lkIDAsSD12b2lkIDAsRz0wLFY9dm9pZCAwLFg9dm9pZCAwO2ZvcihXPVQ7Vzx6O1crKyl7Zm9yKFY9Ryt3W1ddLFg9W10sSD0wO0g8UztIKyspWC5wdXNoKEJbSF0uc3ViYXJyYXkoRyxWKSk7ay5wdXNoKFgpLEc9Vn19fX1mb3IodmFyIFk9W10sSz1bXSxKPSExLFE9YS5sZW5ndGgraTtLLmxlbmd0aDxROyl7Zm9yKHZhciBaPWU/Yi5kZWNvZGUoeSk6cihBLCJJQUVYIix4KTtaLS07KUsucHVzaChKKTtKPSFKfWZvcih2YXIgJD0wLGVlPWEubGVuZ3RoOyQ8ZWU7JCsrKUtbJF0mJlkucHVzaChhWyRdKTtmb3IodmFyIHRlPTA7dGU8aTskKyssdGUrKylLWyRdJiZZLnB1c2goa1t0ZV0pO3JldHVybiBZfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHYsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxmLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxrLGgpfSxvbkltbWVkaWF0ZVRleHRSZWdpb246ZnVuY3Rpb24oZSxyLGEsaSxzKXtmb3IodmFyIGwsYyx1PWUuaW5mbyxmPXRoaXMuc3ltYm9scyxoPVtdLGQ9MCxwPXIubGVuZ3RoO2Q8cDtkKyspe3ZhciBnPWZbcltkXV07ZyYmKGg9aC5jb25jYXQoZykpfXZhciB2PSgwLG4ubG9nMikoaC5sZW5ndGgpO2UuaHVmZm1hbiYmKGM9bmV3IEUoYSxpLHMpLGw9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxzLGw9W107Zm9yKGk9MDtpPD0zNDtpKyspcz1hLnJlYWRCaXRzKDQpLGwucHVzaChuZXcgXyhbaSxzLDAsMF0pKTt2YXIgYz1uZXcgQShsLCExKTtmb3IobC5sZW5ndGg9MCxpPTA7aTxuOylpZigocz1jLmRlY29kZShhKSk+PTMyKXt2YXIgdT12b2lkIDAsZj12b2lkIDAsaD12b2lkIDA7c3dpdGNoKHMpe2Nhc2UgMzI6aWYoMD09PWkpdGhyb3cgbmV3IG8oIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2Y9YS5yZWFkQml0cygyKSszLHU9bFtpLTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmY9YS5yZWFkQml0cygzKSszLHU9MDticmVhaztjYXNlIDM0OmY9YS5yZWFkQml0cyg3KSsxMSx1PTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoaD0wO2g8ZjtoKyspbC5wdXNoKG5ldyBfKFtpLHUsMCwwXSkpLGkrK31lbHNlIGwucHVzaChuZXcgXyhbaSxzLDAsMF0pKSxpKys7YS5ieXRlQWxpZ24oKTt2YXIgZCxwLG0sZz1uZXcgQShsLCExKSx2PTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmQ9UChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6ZD1UKHYsdCxyKSx2Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpwPVAoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOnA9VCh2LHQsciksdisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bT1QKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6bT1UKHYsdCxyKSx2Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBvKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6Zyx0YWJsZUZpcnN0UzpkLHRhYmxlRGVsdGFTOnAsdGFibGVEZWx0YVQ6bX19KGUscix0aGlzLmN1c3RvbVRhYmxlcyxoLmxlbmd0aCxjKSk7dmFyIHk9bmV3IHQoYSxpLHMpLGI9bShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHUud2lkdGgsdS5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGgsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCx5LGUubG9nU3RyaXBTaXplLGMpO3RoaXMuZHJhd0JpdG1hcCh1LGIpfSxvbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbjpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sb25QYXR0ZXJuRGljdGlvbmFyeTpmdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvPXRoaXMucGF0dGVybnM7b3x8KHRoaXMucGF0dGVybnM9bz17fSk7dmFyIHM9bmV3IHQobixhLGkpO29bcl09ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPVtdO2V8fChvLnB1c2goe3g6LXQseTowfSksMD09PWEmJihvLnB1c2goe3g6LTMseTotMX0pLG8ucHVzaCh7eDoyLHk6LTJ9KSxvLnB1c2goe3g6LTIseTotMn0pKSk7Zm9yKHZhciBzLGwsYyx1LGY9ZChlLChuKzEpKnQscixhLCExLG51bGwsbyxpKSxoPVtdLHA9MDtwPD1uOyl7Zm9yKHM9W10sYz0obD10KnApK3QsdT0wO3U8cjt1Kyspcy5wdXNoKGZbdV0uc3ViYXJyYXkobCxjKSk7aC5wdXNoKHMpLHArK31yZXR1cm4gaH0oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9LG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb246ZnVuY3Rpb24oZSxyLGEsaSxzKXt2YXIgbD10aGlzLnBhdHRlcm5zW3JbMF1dLGM9ZS5pbmZvLHU9bmV3IHQoYSxpLHMpLGY9ZnVuY3Rpb24oZSx0LHIsYSxpLHMsbCxjLHUsZixoLHAsbSxnLHYpe2lmKGwpdGhyb3cgbmV3IG8oInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1jKXRocm93IG5ldyBvKCJvcGVyYXRvciAiK2MrIiBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbiIpO3ZhciB5LGIsdyxrPVtdO2Zvcih5PTA7eTxpO3krKyl7aWYodz1uZXcgVWludDhBcnJheShhKSxzKWZvcihiPTA7YjxhO2IrKyl3W2JdPXM7ay5wdXNoKHcpfXZhciBTPXQubGVuZ3RoLF89dFswXSx4PV9bMF0ubGVuZ3RoLEE9Xy5sZW5ndGgsQz0oMCxuLmxvZzIpKFMpLFA9W107ZXx8KFAucHVzaCh7eDpyPD0xPzM6Mix5Oi0xfSksMD09PXImJihQLnB1c2goe3g6LTMseTotMX0pLFAucHVzaCh7eDoyLHk6LTJ9KSxQLnB1c2goe3g6LTIseTotMn0pKSk7dmFyIFQsUixJLEYsTCxELE0sTixqLEIsVSxxPVtdO2ZvcihlJiYoVD1uZXcgRSh2LmRhdGEsdi5zdGFydCx2LmVuZCkpLHk9Qy0xO3k+PTA7eS0tKVI9ZT9PKFQsdSxmLCEwKTpkKCExLHUsZixyLCExLG51bGwsUCx2KSxxW3ldPVI7Zm9yKEk9MDtJPGY7SSsrKWZvcihGPTA7Rjx1O0YrKyl7Zm9yKEw9MCxEPTAsYj1DLTE7Yj49MDtiLS0pRHw9KEw9cVtiXVtJXVtGXV5MKTw8YjtpZihNPXRbRF0saj1wK0kqbS1GKmc+PjgsKE49aCtJKmcrRiptPj44KT49MCYmTit4PD1hJiZqPj0wJiZqK0E8PWkpZm9yKHk9MDt5PEE7eSsrKWZvcihVPWtbait5XSxCPU1beV0sYj0wO2I8eDtiKyspVVtOK2JdfD1CW2JdO2Vsc2V7dmFyIHo9dm9pZCAwLFc9dm9pZCAwO2Zvcih5PTA7eTxBO3krKylpZighKChXPWoreSk8MHx8Vz49aSkpZm9yKFU9a1tXXSxCPU1beV0sYj0wO2I8eDtiKyspKHo9TitiKT49MCYmejxhJiYoVVt6XXw9QltiXSl9fXJldHVybiBrfShlLm1tcixsLGUudGVtcGxhdGUsYy53aWR0aCxjLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUuZW5hYmxlU2tpcCxlLmNvbWJpbmF0aW9uT3BlcmF0b3IsZS5ncmlkV2lkdGgsZS5ncmlkSGVpZ2h0LGUuZ3JpZE9mZnNldFgsZS5ncmlkT2Zmc2V0WSxlLmdyaWRWZWN0b3JYLGUuZ3JpZFZlY3RvclksdSk7dGhpcy5kcmF3Qml0bWFwKGMsZil9LG9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbjpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG9uVGFibGVzOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpPXRoaXMuY3VzdG9tVGFibGVzO2l8fCh0aGlzLmN1c3RvbVRhYmxlcz1pPXt9KSxpW2VdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxpLG89ZVt0XSxzPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShlLHQrMSksbD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikoZSx0KzUpLGM9bmV3IEUoZSx0KzksciksdT0xKyhvPj4xJjcpLGY9MSsobz4+NCY3KSxoPVtdLGQ9cztkb3thPWMucmVhZEJpdHModSksaT1jLnJlYWRCaXRzKGYpLGgucHVzaChuZXcgXyhbZCxhLGksMF0pKSxkKz0xPDxpfXdoaWxlKGQ8bCk7cmV0dXJuIGE9Yy5yZWFkQml0cyh1KSxoLnB1c2gobmV3IF8oW3MtMSxhLDMyLDAsImxvd2VyIl0pKSxhPWMucmVhZEJpdHModSksaC5wdXNoKG5ldyBfKFtsLGEsMzIsMF0pKSwxJm8mJihhPWMucmVhZEJpdHModSksaC5wdXNoKG5ldyBfKFthLDBdKSkpLG5ldyBBKGgsITEpfSh0LHIsYSl9fSx4LnByb3RvdHlwZT17YnVpbGRUcmVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5wcmVmaXhDb2RlPj50JjE7aWYodDw9MCl0aGlzLmNoaWxkcmVuW3JdPW5ldyB4KGUpO2Vsc2V7dmFyIG49dGhpcy5jaGlsZHJlbltyXTtufHwodGhpcy5jaGlsZHJlbltyXT1uPW5ldyB4KG51bGwpKSxuLmJ1aWxkVHJlZShlLHQtMSl9fSxkZWNvZGVOb2RlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO3ZhciB0PWUucmVhZEJpdHModGhpcy5yYW5nZUxlbmd0aCk7cmV0dXJuIHRoaXMucmFuZ2VMb3crKHRoaXMuaXNMb3dlclJhbmdlPy10OnQpfXZhciByPXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCFyKXRocm93IG5ldyBvKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiByLmRlY29kZU5vZGUoZSl9fSxBLnByb3RvdHlwZT17ZGVjb2RlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvb3ROb2RlLmRlY29kZU5vZGUoZSl9LGFzc2lnblByZWZpeENvZGVzOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyO3QrKyluPU1hdGgubWF4KG4sZVt0XS5wcmVmaXhMZW5ndGgpO3ZhciBhPW5ldyBVaW50MzJBcnJheShuKzEpO2Zvcih0PTA7dDxyO3QrKylhW2VbdF0ucHJlZml4TGVuZ3RoXSsrO3ZhciBpLG8scyxsPTEsYz0wO2ZvcihhWzBdPTA7bDw9bjspe2ZvcihpPWM9YythW2wtMV08PDEsbz0wO288cjspKHM9ZVtvXSkucHJlZml4TGVuZ3RoPT09bCYmKHMucHJlZml4Q29kZT1pLGkrKyksbysrO2wrK319fTt2YXIgQz17fTtmdW5jdGlvbiBQKGUpe3ZhciB0LHI9Q1tlXTtpZihyKXJldHVybiByO3N3aXRjaChlKXtjYXNlIDE6dD1bWzAsMSw0LDBdLFsxNiwyLDgsMl0sWzI3MiwzLDE2LDZdLFs2NTgwOCwzLDMyLDddXTticmVhaztjYXNlIDI6dD1bWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbNzUsNiwzMiw2Ml0sWzYsNjNdXTticmVhaztjYXNlIDM6dD1bWy0yNTYsOCw4LDI1NF0sWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbLTI1Nyw4LDMyLDI1NSwibG93ZXIiXSxbNzUsNywzMiwxMjZdLFs2LDYyXV07YnJlYWs7Y2FzZSA0OnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWzc2LDUsMzIsMzFdXTticmVhaztjYXNlIDU6dD1bWy0yNTUsNyw4LDEyNl0sWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbLTI1Niw3LDMyLDEyNywibG93ZXIiXSxbNzYsNiwzMiw2Ml1dO2JyZWFrO2Nhc2UgNjp0PVtbLTIwNDgsNSwxMCwyOF0sWy0xMDI0LDQsOSw4XSxbLTUxMiw0LDgsOV0sWy0yNTYsNCw3LDEwXSxbLTEyOCw1LDYsMjldLFstNjQsNSw1LDMwXSxbLTMyLDQsNSwxMV0sWzAsMiw3LDBdLFsxMjgsMyw3LDJdLFsyNTYsMyw4LDNdLFs1MTIsNCw5LDEyXSxbMTAyNCw0LDEwLDEzXSxbLTIwNDksNiwzMiw2MiwibG93ZXIiXSxbMjA0OCw2LDMyLDYzXV07YnJlYWs7Y2FzZSA3OnQ9W1stMTAyNCw0LDksOF0sWy01MTIsMyw4LDBdLFstMjU2LDQsNyw5XSxbLTEyOCw1LDYsMjZdLFstNjQsNSw1LDI3XSxbLTMyLDQsNSwxMF0sWzAsNCw1LDExXSxbMzIsNSw1LDI4XSxbNjQsNSw2LDI5XSxbMTI4LDQsNywxMl0sWzI1NiwzLDgsMV0sWzUxMiwzLDksMl0sWzEwMjQsMywxMCwzXSxbLTEwMjUsNSwzMiwzMCwibG93ZXIiXSxbMjA0OCw1LDMyLDMxXV07YnJlYWs7Y2FzZSA4OnQ9W1stMTUsOCwzLDI1Ml0sWy03LDksMSw1MDhdLFstNSw4LDEsMjUzXSxbLTMsOSwwLDUwOV0sWy0yLDcsMCwxMjRdLFstMSw0LDAsMTBdLFswLDIsMSwwXSxbMiw1LDAsMjZdLFszLDYsMCw1OF0sWzQsMyw0LDRdLFsyMCw2LDEsNTldLFsyMiw0LDQsMTFdLFszOCw0LDUsMTJdLFs3MCw1LDYsMjddLFsxMzQsNSw3LDI4XSxbMjYyLDYsNyw2MF0sWzM5MCw3LDgsMTI1XSxbNjQ2LDYsMTAsNjFdLFstMTYsOSwzMiw1MTAsImxvd2VyIl0sWzE2NzAsOSwzMiw1MTFdLFsyLDFdXTticmVhaztjYXNlIDk6dD1bWy0zMSw4LDQsMjUyXSxbLTE1LDksMiw1MDhdLFstMTEsOCwyLDI1M10sWy03LDksMSw1MDldLFstNSw3LDEsMTI0XSxbLTMsNCwxLDEwXSxbLTEsMywxLDJdLFsxLDMsMSwzXSxbMyw1LDEsMjZdLFs1LDYsMSw1OF0sWzcsMyw1LDRdLFszOSw2LDIsNTldLFs0Myw0LDUsMTFdLFs3NSw0LDYsMTJdLFsxMzksNSw3LDI3XSxbMjY3LDUsOCwyOF0sWzUyMyw2LDgsNjBdLFs3NzksNyw5LDEyNV0sWzEyOTEsNiwxMSw2MV0sWy0zMiw5LDMyLDUxMCwibG93ZXIiXSxbMzMzOSw5LDMyLDUxMV0sWzIsMF1dO2JyZWFrO2Nhc2UgMTA6dD1bWy0yMSw3LDQsMTIyXSxbLTUsOCwwLDI1Ml0sWy00LDcsMCwxMjNdLFstMyw1LDAsMjRdLFstMiwyLDIsMF0sWzIsNSwwLDI1XSxbMyw2LDAsNTRdLFs0LDcsMCwxMjRdLFs1LDgsMCwyNTNdLFs2LDIsNiwxXSxbNzAsNSw1LDI2XSxbMTAyLDYsNSw1NV0sWzEzNCw2LDYsNTZdLFsxOTgsNiw3LDU3XSxbMzI2LDYsOCw1OF0sWzU4Miw2LDksNTldLFsxMDk0LDYsMTAsNjBdLFsyMTE4LDcsMTEsMTI1XSxbLTIyLDgsMzIsMjU0LCJsb3dlciJdLFs0MTY2LDgsMzIsMjU1XSxbMiwyXV07YnJlYWs7Y2FzZSAxMTp0PVtbMSwxLDAsMF0sWzIsMiwxLDJdLFs0LDQsMCwxMl0sWzUsNCwxLDEzXSxbNyw1LDEsMjhdLFs5LDUsMiwyOV0sWzEzLDYsMiw2MF0sWzE3LDcsMiwxMjJdLFsyMSw3LDMsMTIzXSxbMjksNyw0LDEyNF0sWzQ1LDcsNSwxMjVdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxMjp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMSw2XSxbNSw1LDAsMjhdLFs2LDUsMSwyOV0sWzgsNiwxLDYwXSxbMTAsNywwLDEyMl0sWzExLDcsMSwxMjNdLFsxMyw3LDIsMTI0XSxbMTcsNywzLDEyNV0sWzI1LDcsNCwxMjZdLFs0MSw4LDUsMjU0XSxbNzMsOCwzMiwyNTVdXTticmVhaztjYXNlIDEzOnQ9W1sxLDEsMCwwXSxbMiwzLDAsNF0sWzMsNCwwLDEyXSxbNCw1LDAsMjhdLFs1LDQsMSwxM10sWzcsMywzLDVdLFsxNSw2LDEsNThdLFsxNyw2LDIsNTldLFsyMSw2LDMsNjBdLFsyOSw2LDQsNjFdLFs0NSw2LDUsNjJdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxNDp0PVtbLTIsMywwLDRdLFstMSwzLDAsNV0sWzAsMSwwLDBdLFsxLDMsMCw2XSxbMiwzLDAsN11dO2JyZWFrO2Nhc2UgMTU6dD1bWy0yNCw3LDQsMTI0XSxbLTgsNiwyLDYwXSxbLTQsNSwxLDI4XSxbLTIsNCwwLDEyXSxbLTEsMywwLDRdLFswLDEsMCwwXSxbMSwzLDAsNV0sWzIsNCwwLDEzXSxbMyw1LDEsMjldLFs1LDYsMiw2MV0sWzksNyw0LDEyNV0sWy0yNSw3LDMyLDEyNiwibG93ZXIiXSxbMjUsNywzMiwxMjddXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJzdGFuZGFyZCB0YWJsZSBCLiIuY29uY2F0KGUsIiBkb2VzIG5vdCBleGlzdCIpKX12YXIgbixhPXQubGVuZ3RoO2ZvcihuPTA7bjxhO24rKyl0W25dPW5ldyBfKHRbbl0pO3JldHVybiByPW5ldyBBKHQsITApLENbZV09cixyfWZ1bmN0aW9uIEUoZSx0LHIpe3RoaXMuZGF0YT1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yLHRoaXMucG9zaXRpb249dCx0aGlzLnNoaWZ0PS0xLHRoaXMuY3VycmVudEJ5dGU9MH1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbixhLGk9MCxzPXQubGVuZ3RoO2ZvcihuPTA7bjxzO24rKylpZihhPXJbdFtuXV0pe2lmKGU9PT1pKXJldHVybiBhO2krK310aHJvdyBuZXcgbygiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIFIoZSx0LHIpe3ZhciBuLGEsaSxvPVtdO2ZvcihhPTA7YTxyO2ErKyl7Zm9yKGk9bmV3IFVpbnQ4QXJyYXkodCksby5wdXNoKGkpLG49MDtuPHQ7bisrKWlbbl09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gb31mdW5jdGlvbiBPKGUsdCxyLG4pe3ZhciBhLG8scyxsLGMsdT17SzotMSxDb2x1bW5zOnQsUm93czpyLEJsYWNrSXMxOiEwLEVuZE9mQmxvY2s6bn0sZj1uZXcgaS5DQ0lUVEZheERlY29kZXIoZSx1KSxoPVtdLGQ9ITE7Zm9yKG89MDtvPHI7bysrKWZvcihzPW5ldyBVaW50OEFycmF5KHQpLGgucHVzaChzKSxjPS0xLGE9MDthPHQ7YSsrKWM8MCYmKC0xPT09KGw9Zi5yZWFkTmV4dENoYXIoKSkmJihsPTAsZD0hMCksYz03KSxzW2FdPWw+PmMmMSxjLS07aWYobiYmIWQpZm9yKHZhciBwPTA7cDw1JiYtMSE9PWYucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gaH1mdW5jdGlvbiBJKCl7fXJldHVybiBFLnByb3RvdHlwZT17cmVhZEJpdDpmdW5jdGlvbigpe2lmKHRoaXMuc2hpZnQ8MCl7aWYodGhpcy5wb3NpdGlvbj49dGhpcy5lbmQpdGhyb3cgbmV3IG8oImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7dGhpcy5jdXJyZW50Qnl0ZT10aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXSx0aGlzLnNoaWZ0PTd9dmFyIGU9dGhpcy5jdXJyZW50Qnl0ZT4+dGhpcy5zaGlmdCYxO3JldHVybiB0aGlzLnNoaWZ0LS0sZX0scmVhZEJpdHM6ZnVuY3Rpb24oZSl7dmFyIHQscj0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlyfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gcn0sYnl0ZUFsaWduOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uPj10aGlzLmVuZD8tMTp0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXX19LEkucHJvdG90eXBlPXtwYXJzZUNodW5rczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBTLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07ayh2KHt9LGEuZGF0YSxhLnN0YXJ0LGEuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD0wLHI9ZS5sZW5ndGg7aWYoMTUxIT09ZVt0XXx8NzQhPT1lW3QrMV18fDY2IT09ZVt0KzJdfHw1MCE9PWVbdCszXXx8MTMhPT1lW3QrNF18fDEwIT09ZVt0KzVdfHwyNiE9PWVbdCs2XXx8MTAhPT1lW3QrN10pdGhyb3cgbmV3IG8oInBhcnNlSmJpZzIgLSBpbnZhbGlkIGhlYWRlci4iKTt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO3QrPTg7dmFyIGk9ZVt0KytdO2EucmFuZG9tQWNjZXNzPSEoMSZpKSwyJml8fChhLm51bWJlck9mUGFnZXM9KDAsbi5yZWFkVWludDMyKShlLHQpLHQrPTQpO3ZhciBzPXYoYSxlLHQsciksbD1uZXcgUztrKHMsbCk7Zm9yKHZhciBjPWwuY3VycmVudFBhZ2VJbmZvLHU9Yy53aWR0aCxmPWMuaGVpZ2h0LGg9bC5idWZmZXIsZD1uZXcgVWludDhDbGFtcGVkQXJyYXkodSpmKSxwPTAsbT0wLGc9MDtnPGY7ZysrKWZvcih2YXIgeT0wLGI9dm9pZCAwLHc9MDt3PHU7dysrKXl8fCh5PTEyOCxiPWhbbSsrXSksZFtwKytdPWImeT8wOjI1NSx5Pj49MTtyZXR1cm57aW1nRGF0YTpkLHdpZHRoOnUsaGVpZ2h0OmZ9fShlKSxyPXQuaW1nRGF0YSxhPXQud2lkdGgsaT10LmhlaWdodDtyZXR1cm4gdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWkscn19LEl9KCk7dC5KYmlnMkltYWdlPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFyaXRobWV0aWNEZWNvZGVyPXZvaWQgMDt2YXIgYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5icD1yLHRoaXMuZGF0YUVuZD1uLHRoaXMuY2hpZ2g9dFtyXSx0aGlzLmNsb3c9MCx0aGlzLmJ5dGVJbigpLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8NyY2NTUzNXx0aGlzLmNsb3c+PjkmMTI3LHRoaXMuY2xvdz10aGlzLmNsb3c8PDcmNjU1MzUsdGhpcy5jdC09Nyx0aGlzLmE9MzI3Njh9dmFyIHQscixpO3JldHVybiB0PWUsKHI9W3trZXk6ImJ5dGVJbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEsdD10aGlzLmJwOzI1NT09PWVbdF0/ZVt0KzFdPjE0Mz8odGhpcy5jbG93Kz02NTI4MCx0aGlzLmN0PTgpOih0KyssdGhpcy5jbG93Kz1lW3RdPDw5LHRoaXMuY3Q9Nyx0aGlzLmJwPXQpOih0KyssdGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwLHRoaXMuY3Q9OCx0aGlzLmJwPXQpLHRoaXMuY2xvdz42NTUzNSYmKHRoaXMuY2hpZ2grPXRoaXMuY2xvdz4+MTYsdGhpcy5jbG93Jj02NTUzNSl9fSx7a2V5OiJyZWFkQml0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49ZVt0XT4+MSxpPTEmZVt0XSxvPWFbbl0scz1vLnFlLGw9dGhpcy5hLXM7aWYodGhpcy5jaGlnaDxzKWw8cz8obD1zLHI9aSxuPW8ubm1wcyk6KGw9cyxyPTFeaSwxPT09by5zd2l0Y2hGbGFnJiYoaT1yKSxuPW8ubmxwcyk7ZWxzZXtpZih0aGlzLmNoaWdoLT1zLDAhPSgzMjc2OCZsKSlyZXR1cm4gdGhpcy5hPWwsaTtsPHM/KHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKToocj1pLG49by5ubXBzKX1kb3swPT09dGhpcy5jdCYmdGhpcy5ieXRlSW4oKSxsPDw9MSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDEmNjU1MzV8dGhpcy5jbG93Pj4xNSYxLHRoaXMuY2xvdz10aGlzLmNsb3c8PDEmNjU1MzUsdGhpcy5jdC0tfXdoaWxlKDA9PSgzMjc2OCZsKSk7cmV0dXJuIHRoaXMuYT1sLGVbdF09bjw8MXxpLHJ9fV0pJiZuKHQucHJvdG90eXBlLHIpLGkmJm4odCxpKSxlfSgpO3QuQXJpdGhtZXRpY0RlY29kZXI9aX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KcGVnU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTcpLGk9cigxNTUpLG89cigxNjQpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4pe2Zvcih2YXIgaTstMSE9PShpPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09aSl7ZS5za2lwKC0xKTticmVha310aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1uLGEuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT17ZGVjb2RlVHJhbnNmb3JtOnZvaWQgMCxjb2xvclRyYW5zZm9ybTp2b2lkIDB9LHQ9dGhpcy5kaWN0LmdldEFycmF5KCJEZWNvZGUiLCJEIik7aWYodGhpcy5mb3JjZVJHQiYmQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciByPXRoaXMuZGljdC5nZXQoIkJpdHNQZXJDb21wb25lbnQiKXx8OCxuPXQubGVuZ3RoLGE9bmV3IEludDMyQXJyYXkobikscz0hMSxsPSgxPDxyKS0xLGM9MDtjPG47Yys9MilhW2NdPTI1NioodFtjKzFdLXRbY10pfDAsYVtjKzFdPXRbY10qbHwwLDI1Nj09PWFbY10mJjA9PT1hW2MrMV18fChzPSEwKTtzJiYoZS5kZWNvZGVUcmFuc2Zvcm09YSl9aWYoKDAsaS5pc0RpY3QpKHRoaXMucGFyYW1zKSl7dmFyIHU9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIodSkmJihlLmNvbG9yVHJhbnNmb3JtPXUpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19LGUucHJvdG90eXBlLmdldElSPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4oMCxuLmNyZWF0ZU9iamVjdFVSTCkodGhpcy5ieXRlcywiaW1hZ2UvanBlZyIsZSl9LGV9KCk7dC5KcGVnU3RyZWFtPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnBlZ0ltYWdlPXZvaWQgMDt2YXIgbj1yKDYpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuKGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPSJKUEVHIGVycm9yOiAiK2V9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJKcGVnRXJyb3IiLGUuY29uc3RydWN0b3I9ZSxlfSgpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5tZXNzYWdlPWUsdGhpcy5zY2FuTGluZXM9dH1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkROTE1hcmtlckVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkVPSU1hcmtlckVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxsPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoWzAsMSw4LDE2LDksMiwzLDEwLDE3LDI0LDMyLDI1LDE4LDExLDQsNSwxMiwxOSwyNiwzMyw0MCw0OCw0MSwzNCwyNywyMCwxMyw2LDcsMTQsMjEsMjgsMzUsNDIsNDksNTYsNTcsNTAsNDMsMzYsMjksMjIsMTUsMjMsMzAsMzcsNDQsNTEsNTgsNTksNTIsNDUsMzgsMzEsMzksNDYsNTMsNjAsNjEsNTQsNDcsNTUsNjIsNjNdKTtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5kZWNvZGVUcmFuc2Zvcm0scj12b2lkIDA9PT10P251bGw6dCxuPWUuY29sb3JUcmFuc2Zvcm0sYT12b2lkIDA9PT1uPy0xOm47dGhpcy5fZGVjb2RlVHJhbnNmb3JtPXIsdGhpcy5fY29sb3JUcmFuc2Zvcm09YX1mdW5jdGlvbiByKGUsdCl7Zm9yKHZhciByLG4sYT0wLGk9W10sbz0xNjtvPjAmJiFlW28tMV07KW8tLTtpLnB1c2goe2NoaWxkcmVuOltdLGluZGV4OjB9KTt2YXIgcyxsPWlbMF07Zm9yKHI9MDtyPG87cisrKXtmb3Iobj0wO248ZVtyXTtuKyspe2ZvcigobD1pLnBvcCgpKS5jaGlsZHJlbltsLmluZGV4XT10W2FdO2wuaW5kZXg+MDspbD1pLnBvcCgpO2ZvcihsLmluZGV4KyssaS5wdXNoKGwpO2kubGVuZ3RoPD1yOylpLnB1c2gocz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGwuY2hpbGRyZW5bbC5pbmRleF09cy5jaGlsZHJlbixsPXM7YSsrfXIrMTxvJiYoaS5wdXNoKHM9e2NoaWxkcmVuOltdLGluZGV4OjB9KSxsLmNoaWxkcmVuW2wuaW5kZXhdPXMuY2hpbGRyZW4sbD1zKX1yZXR1cm4gaVswXS5jaGlsZHJlbn1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gNjQqKChlLmJsb2Nrc1BlckxpbmUrMSkqdCtyKX1mdW5jdGlvbiBjKHQscixjLHUsZixkLHAsbSxnKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjkmJnZvaWQgMCE9PWFyZ3VtZW50c1s5XSYmYXJndW1lbnRzWzldLHk9Yy5tY3VzUGVyTGluZSxiPWMucHJvZ3Jlc3NpdmUsdz1yLGs9MCxTPTA7ZnVuY3Rpb24gXygpe2lmKFM+MClyZXR1cm4gUy0tLGs+PlMmMTtpZigyNTU9PT0oaz10W3IrK10pKXt2YXIgZT10W3IrK107aWYoZSl7aWYoMjIwPT09ZSYmdil7cis9Mjt2YXIgbj10W3IrK108PDh8dFtyKytdO2lmKG4+MCYmbiE9PWMuc2NhbkxpbmVzKXRocm93IG5ldyBvKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixuKX1lbHNlIGlmKDIxNz09PWUpdGhyb3cgbmV3IHMoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKTt0aHJvdyBuZXcgaSgidW5leHBlY3RlZCBtYXJrZXIgIi5jb25jYXQoKGs8PDh8ZSkudG9TdHJpbmcoMTYpKSl9fXJldHVybiBTPTcsaz4+Pjd9ZnVuY3Rpb24geChlKXtmb3IodmFyIHQ9ZTs7KXtpZigibnVtYmVyIj09dHlwZW9mKHQ9dFtfKCldKSlyZXR1cm4gdDtpZigib2JqZWN0IiE9PWEodCkpdGhyb3cgbmV3IGkoImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZSIpfX1mdW5jdGlvbiBBKGUpe2Zvcih2YXIgdD0wO2U+MDspdD10PDwxfF8oKSxlLS07cmV0dXJuIHR9ZnVuY3Rpb24gQyhlKXtpZigxPT09ZSlyZXR1cm4gMT09PV8oKT8xOi0xO3ZhciB0PUEoZSk7cmV0dXJuIHQ+PTE8PGUtMT90OnQrKC0xPDxlKSsxfWZ1bmN0aW9uIFAodCxyKXt2YXIgbj14KHQuaHVmZm1hblRhYmxlREMpLGE9MD09PW4/MDpDKG4pO3QuYmxvY2tEYXRhW3JdPXQucHJlZCs9YTtmb3IodmFyIGk9MTtpPDY0Oyl7dmFyIG89eCh0Lmh1ZmZtYW5UYWJsZUFDKSxzPTE1Jm8sbD1vPj40O2lmKDAhPT1zKXt2YXIgYz1lW2krPWxdO3QuYmxvY2tEYXRhW3IrY109QyhzKSxpKyt9ZWxzZXtpZihsPDE1KWJyZWFrO2krPTE2fX19ZnVuY3Rpb24gRShlLHQpe3ZhciByPXgoZS5odWZmbWFuVGFibGVEQyksbj0wPT09cj8wOkMocik8PGc7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1ufWZ1bmN0aW9uIFQoZSx0KXtlLmJsb2NrRGF0YVt0XXw9XygpPDxnfXZhciBSPTA7ZnVuY3Rpb24gTyh0LHIpe2lmKFI+MClSLS07ZWxzZSBmb3IodmFyIG49ZCxhPXA7bjw9YTspe3ZhciBpPXgodC5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGw9ZVtuKz1zXTt0LmJsb2NrRGF0YVtyK2xdPUMobykqKDE8PGcpLG4rK31lbHNle2lmKHM8MTUpe1I9QShzKSsoMTw8cyktMTticmVha31uKz0xNn19fXZhciBJLEY9MDtmdW5jdGlvbiBMKHQscil7Zm9yKHZhciBuLGEsbz1kLHM9cCxsPTA7bzw9czspe3ZhciBjPXIrZVtvXSx1PXQuYmxvY2tEYXRhW2NdPDA/LTE6MTtzd2l0Y2goRil7Y2FzZSAwOmlmKGw9KGE9eCh0Lmh1ZmZtYW5UYWJsZUFDKSk+PjQsMD09KG49MTUmYSkpbDwxNT8oUj1BKGwpKygxPDxsKSxGPTQpOihsPTE2LEY9MSk7ZWxzZXtpZigxIT09bil0aHJvdyBuZXcgaSgiaW52YWxpZCBBQ24gZW5jb2RpbmciKTtJPUMobiksRj1sPzI6M31jb250aW51ZTtjYXNlIDE6Y2FzZSAyOnQuYmxvY2tEYXRhW2NdP3QuYmxvY2tEYXRhW2NdKz11KihfKCk8PGcpOjA9PS0tbCYmKEY9Mj09PUY/MzowKTticmVhaztjYXNlIDM6dC5ibG9ja0RhdGFbY10/dC5ibG9ja0RhdGFbY10rPXUqKF8oKTw8Zyk6KHQuYmxvY2tEYXRhW2NdPUk8PGcsRj0wKTticmVhaztjYXNlIDQ6dC5ibG9ja0RhdGFbY10mJih0LmJsb2NrRGF0YVtjXSs9dSooXygpPDxnKSl9bysrfTQ9PT1GJiYwPT0tLVImJihGPTApfWZ1bmN0aW9uIEQoZSx0LHIsbixhKXt2YXIgaT1yJXk7dChlLGwoZSwoci95fDApKmUudituLGkqZS5oK2EpKX1mdW5jdGlvbiBNKGUsdCxyKXt0KGUsbChlLHIvZS5ibG9ja3NQZXJMaW5lfDAsciVlLmJsb2Nrc1BlckxpbmUpKX12YXIgTixqLEIsVSxxLHosVz11Lmxlbmd0aDt6PWI/MD09PWQ/MD09PW0/RTpUOjA9PT1tP086TDpQO3ZhciBILEcsVixYLFk9MDtmb3IoRz0xPT09Vz91WzBdLmJsb2Nrc1BlckxpbmUqdVswXS5ibG9ja3NQZXJDb2x1bW46eSpjLm1jdXNQZXJDb2x1bW47WTxHOyl7dmFyIEs9Zj9NYXRoLm1pbihHLVksZik6Rztmb3Ioaj0wO2o8VztqKyspdVtqXS5wcmVkPTA7aWYoUj0wLDE9PT1XKWZvcihOPXVbMF0scT0wO3E8SztxKyspTShOLHosWSksWSsrO2Vsc2UgZm9yKHE9MDtxPEs7cSsrKXtmb3Ioaj0wO2o8VztqKyspZm9yKFY9KE49dVtqXSkuaCxYPU4udixCPTA7QjxYO0IrKylmb3IoVT0wO1U8VjtVKyspRChOLHosWSxCLFUpO1krK31TPTAsKEg9aCh0LHIpKSYmSC5pbnZhbGlkJiYoKDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtIHVuZXhwZWN0ZWQgTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAiK0guaW52YWxpZCkscj1ILm9mZnNldCk7dmFyIEo9SCYmSC5tYXJrZXI7aWYoIUp8fEo8PTY1MjgwKXRocm93IG5ldyBpKCJtYXJrZXIgd2FzIG5vdCBmb3VuZCIpO2lmKCEoSj49NjU0ODgmJko8PTY1NDk1KSlicmVhaztyKz0yfXJldHVybihIPWgodCxyKSkmJkguaW52YWxpZCYmKCgwLG4ud2FybikoImRlY29kZVNjYW4gLSB1bmV4cGVjdGVkIFNjYW4gZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrSC5pbnZhbGlkKSxyPUgub2Zmc2V0KSxyLXd9ZnVuY3Rpb24gdShlLHQscil7dmFyIG4sYSxvLHMsbCxjLHUsZixoLGQscCxtLGcsdix5LGIsdyxrPWUucXVhbnRpemF0aW9uVGFibGUsUz1lLmJsb2NrRGF0YTtpZighayl0aHJvdyBuZXcgaSgibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7Zm9yKHZhciBfPTA7Xzw2NDtfKz04KWg9U1t0K19dLGQ9U1t0K18rMV0scD1TW3QrXysyXSxtPVNbdCtfKzNdLGc9U1t0K18rNF0sdj1TW3QrXys1XSx5PVNbdCtfKzZdLGI9U1t0K18rN10saCo9a1tfXSwwIT0oZHxwfG18Z3x2fHl8Yik/KGQqPWtbXysxXSxwKj1rW18rMl0sbSo9a1tfKzNdLGcqPWtbXys0XSx2Kj1rW18rNV0sYT0obj0obj01NzkzKmgrMTI4Pj44KSsoYT01NzkzKmcrMTI4Pj44KSsxPj4xKS1hLHc9Mzc4NCoobz1wKSsxNTY3KihzPXkqPWtbXys2XSkrMTI4Pj44LG89MTU2NypvLTM3ODQqcysxMjg+PjgsdT0obD0obD0yODk2KihkLShiKj1rW18rN10pKSsxMjg+PjgpKyh1PXY8PDQpKzE+PjEpLXUsYz0oZj0oZj0yODk2KihkK2IpKzEyOD4+OCkrKGM9bTw8NCkrMT4+MSktYyxzPShuPW4rKHM9dykrMT4+MSktcyxvPShhPWErbysxPj4xKS1vLHc9MjI3NipsKzM0MDYqZisyMDQ4Pj4xMixsPTM0MDYqbC0yMjc2KmYrMjA0OD4+MTIsZj13LHc9Nzk5KmMrNDAxNyp1KzIwNDg+PjEyLGM9NDAxNypjLTc5OSp1KzIwNDg+PjEyLHU9dyxyW19dPW4rZixyW18rN109bi1mLHJbXysxXT1hK3UscltfKzZdPWEtdSxyW18rMl09bytjLHJbXys1XT1vLWMscltfKzNdPXMrbCxyW18rNF09cy1sKToodz01NzkzKmgrNTEyPj4xMCxyW19dPXcscltfKzFdPXcscltfKzJdPXcscltfKzNdPXcscltfKzRdPXcscltfKzVdPXcscltfKzZdPXcscltfKzddPXcpO2Zvcih2YXIgeD0wO3g8ODsrK3gpaD1yW3hdLDAhPSgoZD1yW3grOF0pfChwPXJbeCsxNl0pfChtPXJbeCsyNF0pfChnPXJbeCszMl0pfCh2PXJbeCs0MF0pfCh5PXJbeCs0OF0pfChiPXJbeCs1Nl0pKT8oYT0obj00MTEyKygobj01NzkzKmgrMjA0OD4+MTIpKyhhPTU3OTMqZysyMDQ4Pj4xMikrMT4+MSkpLWEsdz0zNzg0KihvPXApKzE1NjcqKHM9eSkrMjA0OD4+MTIsbz0xNTY3Km8tMzc4NCpzKzIwNDg+PjEyLHM9dyx1PShsPShsPTI4OTYqKGQtYikrMjA0OD4+MTIpKyh1PXYpKzE+PjEpLXUsYz0oZj0oZj0yODk2KihkK2IpKzIwNDg+PjEyKSsoYz1tKSsxPj4xKS1jLHc9MjI3NipsKzM0MDYqZisyMDQ4Pj4xMixsPTM0MDYqbC0yMjc2KmYrMjA0OD4+MTIsZj13LHc9Nzk5KmMrNDAxNyp1KzIwNDg+PjEyLGM9NDAxNypjLTc5OSp1KzIwNDg+PjEyLGg9KGg9KG49bitzKzE+PjEpK2YpPDE2PzA6aD49NDA4MD8yNTU6aD4+NCxkPShkPShhPWErbysxPj4xKSsodT13KSk8MTY/MDpkPj00MDgwPzI1NTpkPj40LHA9KHA9KG89YS1vKStjKTwxNj8wOnA+PTQwODA/MjU1OnA+PjQsbT0obT0ocz1uLXMpK2wpPDE2PzA6bT49NDA4MD8yNTU6bT4+NCxnPShnPXMtbCk8MTY/MDpnPj00MDgwPzI1NTpnPj40LHY9KHY9by1jKTwxNj8wOnY+PTQwODA/MjU1OnY+PjQseT0oeT1hLXUpPDE2PzA6eT49NDA4MD8yNTU6eT4+NCxiPShiPW4tZik8MTY/MDpiPj00MDgwPzI1NTpiPj40LFNbdCt4XT1oLFNbdCt4KzhdPWQsU1t0K3grMTZdPXAsU1t0K3grMjRdPW0sU1t0K3grMzJdPWcsU1t0K3grNDBdPXYsU1t0K3grNDhdPXksU1t0K3grNTZdPWIpOih3PSh3PTU3OTMqaCs4MTkyPj4xNCk8LTIwNDA/MDp3Pj0yMDI0PzI1NTp3KzIwNTY+PjQsU1t0K3hdPXcsU1t0K3grOF09dyxTW3QreCsxNl09dyxTW3QreCsyNF09dyxTW3QreCszMl09dyxTW3QreCs0MF09dyxTW3QreCs0OF09dyxTW3QreCs1Nl09dyl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj10LmJsb2Nrc1BlckxpbmUsbj10LmJsb2Nrc1BlckNvbHVtbixhPW5ldyBJbnQxNkFycmF5KDY0KSxpPTA7aTxuO2krKylmb3IodmFyIG89MDtvPHI7bysrKXUodCxsKHQsaSxvKSxhKTtyZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gaChlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0O2Z1bmN0aW9uIG4odCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfXZhciBhPWUubGVuZ3RoLTEsaT1yPHQ/cjp0O2lmKHQ+PWEpcmV0dXJuIG51bGw7dmFyIG89bih0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPW4oaSk7IShzPj02NTQ3MiYmczw9NjU1MzQpOyl7aWYoKytpPj1hKXJldHVybiBudWxsO3M9bihpKX1yZXR1cm57aW52YWxpZDpvLnRvU3RyaW5nKDE2KSxtYXJrZXI6cyxvZmZzZXQ6aX19cmV0dXJuIHQucHJvdG90eXBlPXtwYXJzZTpmdW5jdGlvbih0KXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbD1hLmRubFNjYW5MaW5lcyx1PXZvaWQgMD09PWw/bnVsbDpsO2Z1bmN0aW9uIGQoKXt2YXIgZT10W3ldPDw4fHRbeSsxXTtyZXR1cm4geSs9MixlfWZ1bmN0aW9uIHAoKXt2YXIgZT1kKCkscj15K2UtMixhPWgodCxyLHkpO2EmJmEuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIithLmludmFsaWQpLHI9YS5vZmZzZXQpO3ZhciBpPXQuc3ViYXJyYXkoeSxyKTtyZXR1cm4geSs9aS5sZW5ndGgsaX1mdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCkscj1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpLG49MDtuPGUuY29tcG9uZW50cy5sZW5ndGg7bisrKXtZPWUuY29tcG9uZW50c1tuXTt2YXIgYT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqWS5oL2UubWF4SCksaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKlkudi9lLm1heFYpLG89dCpZLmgscz1yKlkudio2NCoobysxKTtZLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShzKSxZLmJsb2Nrc1BlckxpbmU9YSxZLmJsb2Nrc1BlckNvbHVtbj1pfWUubWN1c1BlckxpbmU9dCxlLm1jdXNQZXJDb2x1bW49cn12YXIgZyx2LHk9MCxiPW51bGwsdz1udWxsLGs9MCxTPVtdLF89W10seD1bXSxBPWQoKTtpZig2NTQ5NiE9PUEpdGhyb3cgbmV3IGkoIlNPSSBub3QgZm91bmQiKTtBPWQoKTtlOmZvcig7NjU0OTchPT1BOyl7dmFyIEMsUCxFO3N3aXRjaChBKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6dmFyIFQ9cCgpOzY1NTA0PT09QSYmNzQ9PT1UWzBdJiY3MD09PVRbMV0mJjczPT09VFsyXSYmNzA9PT1UWzNdJiYwPT09VFs0XSYmKGI9e3ZlcnNpb246e21ham9yOlRbNV0sbWlub3I6VFs2XX0sZGVuc2l0eVVuaXRzOlRbN10seERlbnNpdHk6VFs4XTw8OHxUWzldLHlEZW5zaXR5OlRbMTBdPDw4fFRbMTFdLHRodW1iV2lkdGg6VFsxMl0sdGh1bWJIZWlnaHQ6VFsxM10sdGh1bWJEYXRhOlQuc3ViYXJyYXkoMTQsMTQrMypUWzEyXSpUWzEzXSl9KSw2NTUxOD09PUEmJjY1PT09VFswXSYmMTAwPT09VFsxXSYmMTExPT09VFsyXSYmOTg9PT1UWzNdJiYxMDE9PT1UWzRdJiYodz17dmVyc2lvbjpUWzVdPDw4fFRbNl0sZmxhZ3MwOlRbN108PDh8VFs4XSxmbGFnczE6VFs5XTw8OHxUWzEwXSx0cmFuc2Zvcm1Db2RlOlRbMTFdfSk7YnJlYWs7Y2FzZSA2NTQ5OTpmb3IodmFyIFI9ZCgpLE89Uit5LTI7eTxPOyl7dmFyIEk9dFt5KytdLEY9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihJPj40PT0wKWZvcihQPTA7UDw2NDtQKyspRltlW1BdXT10W3krK107ZWxzZXtpZihJPj40IT0xKXRocm93IG5ldyBpKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoUD0wO1A8NjQ7UCsrKUZbZVtQXV09ZCgpfVNbMTUmSV09Rn1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihnKXRocm93IG5ldyBpKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtkKCksKGc9e30pLmV4dGVuZGVkPTY1NDczPT09QSxnLnByb2dyZXNzaXZlPTY1NDc0PT09QSxnLnByZWNpc2lvbj10W3krK107dmFyIEw9ZCgpO2cuc2NhbkxpbmVzPXV8fEwsZy5zYW1wbGVzUGVyTGluZT1kKCksZy5jb21wb25lbnRzPVtdLGcuY29tcG9uZW50SWRzPXt9O3ZhciBELE09dFt5KytdLE49MCxqPTA7Zm9yKEM9MDtDPE07QysrKXtEPXRbeV07dmFyIEI9dFt5KzFdPj40LFU9MTUmdFt5KzFdO048QiYmKE49QiksajxVJiYoaj1VKTt2YXIgcT10W3krMl07RT1nLmNvbXBvbmVudHMucHVzaCh7aDpCLHY6VSxxdWFudGl6YXRpb25JZDpxLHF1YW50aXphdGlvblRhYmxlOm51bGx9KSxnLmNvbXBvbmVudElkc1tEXT1FLTEseSs9M31nLm1heEg9TixnLm1heFY9aixtKGcpO2JyZWFrO2Nhc2UgNjU0NzY6dmFyIHo9ZCgpO2ZvcihDPTI7Qzx6Oyl7dmFyIFc9dFt5KytdLEg9bmV3IFVpbnQ4QXJyYXkoMTYpLEc9MDtmb3IoUD0wO1A8MTY7UCsrLHkrKylHKz1IW1BdPXRbeV07dmFyIFY9bmV3IFVpbnQ4QXJyYXkoRyk7Zm9yKFA9MDtQPEc7UCsrLHkrKylWW1BdPXRbeV07Qys9MTcrRywoVz4+ND09MD94Ol8pWzE1JlddPXIoSCxWKX1icmVhaztjYXNlIDY1NTAxOmQoKSx2PWQoKTticmVhaztjYXNlIDY1NDk4OnZhciBYPTE9PSsrayYmIXU7ZCgpO3ZhciBZLEs9dFt5KytdLEo9W107Zm9yKEM9MDtDPEs7QysrKXt2YXIgUT1nLmNvbXBvbmVudElkc1t0W3krK11dO1k9Zy5jb21wb25lbnRzW1FdO3ZhciBaPXRbeSsrXTtZLmh1ZmZtYW5UYWJsZURDPXhbWj4+NF0sWS5odWZmbWFuVGFibGVBQz1fWzE1JlpdLEoucHVzaChZKX12YXIgJD10W3krK10sZWU9dFt5KytdLHRlPXRbeSsrXTt0cnl7dmFyIHJlPWModCx5LGcsSix2LCQsZWUsdGU+PjQsMTUmdGUsWCk7eSs9cmV9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuKDAsbi53YXJuKSgiIi5jb25jYXQoZS5tZXNzYWdlLCIgLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS4iKSksdGhpcy5wYXJzZSh0LHtkbmxTY2FuTGluZXM6ZS5zY2FuTGluZXN9KTtpZihlIGluc3RhbmNlb2Ygcyl7KDAsbi53YXJuKSgiIi5jb25jYXQoZS5tZXNzYWdlLCIgLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuIikpO2JyZWFrIGV9dGhyb3cgZX1icmVhaztjYXNlIDY1NTAwOnkrPTQ7YnJlYWs7Y2FzZSA2NTUzNToyNTUhPT10W3ldJiZ5LS07YnJlYWs7ZGVmYXVsdDppZigyNTU9PT10W3ktM10mJnRbeS0yXT49MTkyJiZ0W3ktMl08PTI1NCl7eS09MzticmVha312YXIgbmU9aCh0LHktMik7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCkseT1uZS5vZmZzZXQ7YnJlYWt9dGhyb3cgbmV3IGkoInVua25vd24gbWFya2VyICIrQS50b1N0cmluZygxNikpfUE9ZCgpfWZvcih0aGlzLndpZHRoPWcuc2FtcGxlc1BlckxpbmUsdGhpcy5oZWlnaHQ9Zy5zY2FuTGluZXMsdGhpcy5qZmlmPWIsdGhpcy5hZG9iZT13LHRoaXMuY29tcG9uZW50cz1bXSxDPTA7QzxnLmNvbXBvbmVudHMubGVuZ3RoO0MrKyl7dmFyIGFlPVNbKFk9Zy5jb21wb25lbnRzW0NdKS5xdWFudGl6YXRpb25JZF07YWUmJihZLnF1YW50aXphdGlvblRhYmxlPWFlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7b3V0cHV0OmYoMCxZKSxzY2FsZVg6WS5oL2cubWF4SCxzY2FsZVk6WS52L2cubWF4VixibG9ja3NQZXJMaW5lOlkuYmxvY2tzUGVyTGluZSxibG9ja3NQZXJDb2x1bW46WS5ibG9ja3NQZXJDb2x1bW59KX10aGlzLm51bUNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLmxlbmd0aH0sX2dldExpbmVhcml6ZWRCbG9ja0RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvLHMsbCxjLHUsZixoLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxwPXRoaXMud2lkdGgvZSxtPXRoaXMuaGVpZ2h0L3QsZz0wLHY9dGhpcy5jb21wb25lbnRzLmxlbmd0aCx5PWUqdCp2LGI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHkpLHc9bmV3IFVpbnQzMkFycmF5KGUpLGs9NDI5NDk2NzI4ODtmb3IobD0wO2w8djtsKyspe2ZvcihuPShyPXRoaXMuY29tcG9uZW50c1tsXSkuc2NhbGVYKnAsYT1yLnNjYWxlWSptLGc9bCxoPXIub3V0cHV0LGk9ci5ibG9ja3NQZXJMaW5lKzE8PDMsbz0wO288ZTtvKyspYz0wfG8qbix3W29dPShjJmspPDwzfDcmYztmb3Iocz0wO3M8dDtzKyspZm9yKGY9aSooKGM9MHxzKmEpJmspfCg3JmMpPDwzLG89MDtvPGU7bysrKWJbZ109aFtmK3dbb11dLGcrPXZ9dmFyIFM9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2lmKGR8fDQhPT12fHxTfHwoUz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSksUylmb3IobD0wO2w8eTspZm9yKGM9MCx1PTA7Yzx2O2MrKyxsKyssdSs9MiliW2xdPShiW2xdKlNbdV0+PjgpK1NbdSsxXTtyZXR1cm4gYn0sZ2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpe3JldHVybiB0aGlzLmFkb2JlPyEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlOjM9PT10aGlzLm51bUNvbXBvbmVudHM/MCE9PXRoaXMuX2NvbG9yVHJhbnNmb3JtOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX0sX2NvbnZlcnRZY2NUb1JnYjpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz0zKXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPXQtMTc5LjQ1NisxLjQwMipuLGVbYSsxXT10KzEzNS40NTktLjM0NCpyLS43MTQqbixlW2ErMl09dC0yMjYuODE2KzEuNzcyKnI7cmV0dXJuIGV9LF9jb252ZXJ0WWNja1RvUmdiOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpPTAsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTQpdD1lW29dLHI9ZVtvKzFdLG49ZVtvKzJdLGE9ZVtvKzNdLGVbaSsrXT1yKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSpyKy4wMDA0MzcxMzA0NzU5MjYyMzIqbi01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqYS0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrbiooLS4wMDA5NTc5NjQzNzg0NDU3NzMqbisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3KmErMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMyphKy40ODM1NzA4ODQ1MTI2NSkrYSooLS4wMDAzMzYxOTcxNzc2MTgzOTQqYSsuNDg0NzkxNTYxNDkwNzc2KSxlW2krK109MTA3LjI2ODAzOTM5NzcyNCtyKigyMTk5MjcxMDQ1MjU3NDFlLTE5KnItLjAwMDY0MDk5MjAxODI5Nzk0NSpuKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3KmEtLjE3NjQ5MTc5MjQ2Mjg3NSkrbiooLS4wMDA3NzgyNjk5NDE1MTM2ODMqbisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKmEtLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4KmErLjI1ODAyOTEwMjA2ODQ1KSthKigtLjAwMDMxODkxMzExNzU4ODMyOCphLS4yMTM3NDI0MDAzMjM2NjUpLGVbaSsrXT1yKigtLjAwMDU3MDExNTE5Njk3MzY3NypyLTI2MzQwOTA1MTAwNDU4OWUtMTkqbisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MiphKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytuKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpuLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKmEtLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3KmErLjExNjkzNTAyMDQ2NTE0NSkrYSooLS4wMDAzNDM1MzE5OTY1MTA1NTUqYSsuMjQxNjUyNjAyMzI0MDcpO3JldHVybiBlLnN1YmFycmF5KDAsaSl9LF9jb252ZXJ0WWNja1RvQ215azpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9LF9jb252ZXJ0Q215a1RvUmdiOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpPTAsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTQpdD1lW29dKigxLzI1NSkscj1lW28rMV0qKDEvMjU1KSxuPWVbbysyXSooMS8yNTUpLGE9ZVtvKzNdKigxLzI1NSksZVtpKytdPTI1NSt0KigtNC4zODczMzIzODQ2MDk5ODgqdCs1NC40ODYxNTE5NDE4OTE3NipyKzE4LjgyMjkwNTAyMTY1MzAyKm4rMjEyLjI1NjYyNDUxNjM5NTg1KmEtMjg1LjIzMzEwMjYxMzcwMDQpK3IqKDEuNzE0OTc2MzQ3NzM2MjEzNCpyLTUuNjA5NjczNjkwNDA0NzMxNSpuLTE3Ljg3Mzg3MDg2MTQxNTQ0NCphLTUuNDk3MDA2NDI3MTk2MzY2KStuKigtMi41MjE3MzQwMTMxNjgzMDMzKm4tMjEuMjQ4OTIzMzM3MzUzMDczKmErMTcuNTExOTI3MDg0MTgxMyktYSooMjEuODYxMjIxNDc0NjM2MDUqYSsxODkuNDgxODA4MzU5MjI3NDcpLGVbaSsrXT0yNTUrdCooOC44NDEwNDE0MjIwMzYxNDkqdCs2MC4xMTgwMjcwNDU1OTczNjYqcis2Ljg3MTQyNTU5MjA0OTAwNypuKzMxLjE1OTEwMDEzMDA1NTkyMiphLTc5LjI5NzA4NDQ4MTY1NDgpK3IqKC0xNS4zMTAzNjEzMDY5Njc4MTcqcisxNy41NzUyNTEyNjExMDk0ODIqbisxMzEuMzUyNTA5MTI0OTM5NzYqYS0xOTAuOTQ1MzMwMjU4ODk1MSkrbiooNC40NDQzMzkxMDI4NTI3Mzkqbis5Ljg2MzI4NjE0OTM0MDUqYS0yNC44Njc0MTU4MjU1NTg3OCktYSooMjAuNzM3MzI1NDcxMTgxMDM0KmErMTg3LjgwNDUzNzA5NzE5NTc4KSxlW2krK109MjU1K3QqKC44ODQyNTIyNDMwMDAzMjk2KnQrOC4wNzg2Nzc1MDMxMTI5MjgqciszMC44OTk3ODMwOTcwMzcyOSpuLS4yMzg4MzIzODY4OTE3ODkzNCphLTE0LjE4MzU3Njc5OTY3MzI4NikrciooMTAuNDk1OTMyNzM0MzIwNzIqcis2My4wMjM3ODQ5NDc1NDA1MipuKzUwLjYwNjk1NzY1NjM2MDczNCphLTExMi4yMzg4NDI1MzcxOTI0OCkrbiooLjAzMjk2MDQxMTE0ODczMjE3Km4rMTE1LjYwMzg0NDQ5NjQ2NjQxKmEtMTkzLjU4MjA5MzU2ODYxNTA1KS1hKigyMi4zMzgxNjgwNzMwOTg4NiphKzE4MC4xMjYxMzk3NDcwODM2Nyk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX0sZ2V0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmZvcmNlUkdCLGE9dm9pZCAwIT09biYmbixvPWUuaXNTb3VyY2VQREYscz12b2lkIDAhPT1vJiZvO2lmKHRoaXMubnVtQ29tcG9uZW50cz40KXRocm93IG5ldyBpKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7dmFyIGw9dGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh0LHIscyk7aWYoMT09PXRoaXMubnVtQ29tcG9uZW50cyYmYSl7Zm9yKHZhciBjPWwubGVuZ3RoLHU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqYyksZj0wLGg9MDtoPGM7aCsrKXt2YXIgZD1sW2hdO3VbZisrXT1kLHVbZisrXT1kLHVbZisrXT1kfXJldHVybiB1fWlmKDM9PT10aGlzLm51bUNvbXBvbmVudHMmJnRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2IobCk7aWYoND09PXRoaXMubnVtQ29tcG9uZW50cyl7aWYodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIGE/dGhpcy5fY29udmVydFljY2tUb1JnYihsKTp0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhsKTtpZihhKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKGwpfXJldHVybiBsfX0sdH0oKTt0LkpwZWdJbWFnZT1sfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweFN0cmVhbT12b2lkIDA7dmFyIG49cigxNTcpLGE9cigxNjYpLGk9cig2KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixhKXt0aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1hLG4uRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgYS5KcHhJbWFnZTtlLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuY29tcG9uZW50c0NvdW50LGk9ZS50aWxlcy5sZW5ndGg7aWYoMT09PWkpdGhpcy5idWZmZXI9ZS50aWxlc1swXS5pdGVtcztlbHNle2Zvcih2YXIgbz1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKm4pLHM9MDtzPGk7cysrKWZvcih2YXIgbD1lLnRpbGVzW3NdLGM9bC53aWR0aCx1PWwuaGVpZ2h0LGY9bC5sZWZ0LGg9bC50b3AsZD1sLml0ZW1zLHA9MCxtPSh0KmgrZikqbixnPXQqbix2PWMqbix5PTA7eTx1O3krKyl7dmFyIGI9ZC5zdWJhcnJheShwLHArdik7by5zZXQoYixtKSxwKz12LG0rPWd9dGhpcy5idWZmZXI9b310aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGgsdGhpcy5lb2Y9ITB9fSxlfSgpO3QuSnB4U3RyZWFtPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4SW1hZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE2MiksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPSJKUFggZXJyb3I6ICIrZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkpweEVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxvPWZ1bmN0aW9uKCl7dmFyIGU9e0xMOjAsTEg6MSxITDoxLEhIOjJ9O2Z1bmN0aW9uIHQoKXt0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlPSExfWZ1bmN0aW9uIHIoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopLGUueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KSxlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopLGUueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KSxlLndpZHRoPWUueDEtZS54MCxlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcixuPWUuU0laLGE9W10saT1NYXRoLmNlaWwoKG4uWHNpei1uLlhUT3Npeikvbi5YVHNpeiksbz1NYXRoLmNlaWwoKG4uWXNpei1uLllUT3Npeikvbi5ZVHNpeikscz0wO3M8bztzKyspZm9yKHZhciBsPTA7bDxpO2wrKykocj17fSkudHgwPU1hdGgubWF4KG4uWFRPc2l6K2wqbi5YVHNpeixuLlhPc2l6KSxyLnR5MD1NYXRoLm1heChuLllUT3NpeitzKm4uWVRzaXosbi5ZT3Npeiksci50eDE9TWF0aC5taW4obi5YVE9zaXorKGwrMSkqbi5YVHNpeixuLlhzaXopLHIudHkxPU1hdGgubWluKG4uWVRPc2l6KyhzKzEpKm4uWVRzaXosbi5Zc2l6KSxyLndpZHRoPXIudHgxLXIudHgwLHIuaGVpZ2h0PXIudHkxLXIudHkwLHIuY29tcG9uZW50cz1bXSxhLnB1c2gocik7ZS50aWxlcz1hO2Zvcih2YXIgYz0wLHU9bi5Dc2l6O2M8dTtjKyspZm9yKHZhciBmPXRbY10saD0wLGQ9YS5sZW5ndGg7aDxkO2grKyl7dmFyIHA9e307cj1hW2hdLHAudGN4MD1NYXRoLmNlaWwoci50eDAvZi5YUnNpeikscC50Y3kwPU1hdGguY2VpbChyLnR5MC9mLllSc2l6KSxwLnRjeDE9TWF0aC5jZWlsKHIudHgxL2YuWFJzaXopLHAudGN5MT1NYXRoLmNlaWwoci50eTEvZi5ZUnNpeikscC53aWR0aD1wLnRjeDEtcC50Y3gwLHAuaGVpZ2h0PXAudGN5MS1wLnRjeTAsci5jb21wb25lbnRzW2NdPXB9fWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLGE9e307cmV0dXJuIG4uZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cz8oYS5QUHg9bi5wcmVjaW5jdHNTaXplc1tyXS5QUHgsYS5QUHk9bi5wcmVjaW5jdHNTaXplc1tyXS5QUHkpOihhLlBQeD0xNSxhLlBQeT0xNSksYS54Y2JfPXI+MD9NYXRoLm1pbihuLnhjYixhLlBQeC0xKTpNYXRoLm1pbihuLnhjYixhLlBQeCksYS55Y2JfPXI+MD9NYXRoLm1pbihuLnljYixhLlBQeS0xKTpNYXRoLm1pbihuLnljYixhLlBQeSksYX1mdW5jdGlvbiBsKGUsdCxyKXt2YXIgbj0xPDxyLlBQeCxhPTE8PHIuUFB5LGk9MD09PXQucmVzTGV2ZWwsbz0xPDxyLlBQeCsoaT8wOi0xKSxzPTE8PHIuUFB5KyhpPzA6LTEpLGw9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL24pLU1hdGguZmxvb3IodC50cngwL24pOjAsYz10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvYSktTWF0aC5mbG9vcih0LnRyeTAvYSk6MCx1PWwqYzt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpuLHByZWNpbmN0SGVpZ2h0OmEsbnVtcHJlY2luY3Rzd2lkZTpsLG51bXByZWNpbmN0c2hpZ2g6YyxudW1wcmVjaW5jdHM6dSxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOm8scHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6c319ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYSxpLG8scz1yLnhjYl8sbD1yLnljYl8sYz0xPDxzLHU9MTw8bCxmPXQudGJ4MD4+cyxoPXQudGJ5MD4+bCxkPXQudGJ4MStjLTE+PnMscD10LnRieTErdS0xPj5sLG09dC5yZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycyxnPVtdLHY9W107Zm9yKGE9aDthPHA7YSsrKWZvcihuPWY7bjxkO24rKylpZigoaT17Y2J4Om4sY2J5OmEsdGJ4MDpjKm4sdGJ5MDp1KmEsdGJ4MTpjKihuKzEpLHRieTE6dSooYSsxKX0pLnRieDBfPU1hdGgubWF4KHQudGJ4MCxpLnRieDApLGkudGJ5MF89TWF0aC5tYXgodC50YnkwLGkudGJ5MCksaS50YngxXz1NYXRoLm1pbih0LnRieDEsaS50YngxKSxpLnRieTFfPU1hdGgubWluKHQudGJ5MSxpLnRieTEpLG89TWF0aC5mbG9vcigoaS50YngwXy10LnRieDApL20ucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigoaS50YnkwXy10LnRieTApL20ucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKm0ubnVtcHJlY2luY3Rzd2lkZSxpLnByZWNpbmN0TnVtYmVyPW8saS5zdWJiYW5kVHlwZT10LnR5cGUsaS5MYmxvY2s9MywhKGkudGJ4MV88PWkudGJ4MF98fGkudGJ5MV88PWkudGJ5MF8pKXtnLnB1c2goaSk7dmFyIHk9dltvXTt2b2lkIDAhPT15PyhuPHkuY2J4TWluP3kuY2J4TWluPW46bj55LmNieE1heCYmKHkuY2J4TWF4PW4pLGE8eS5jYnlNaW4/eS5jYnhNaW49YTphPnkuY2J5TWF4JiYoeS5jYnlNYXg9YSkpOnZbb109eT17Y2J4TWluOm4sY2J5TWluOmEsY2J4TWF4Om4sY2J5TWF4OmF9LGkucHJlY2luY3Q9eX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnMsY29kZWJsb2NrSGVpZ2h0OmwsbnVtY29kZWJsb2Nrd2lkZTpkLWYrMSxudW1jb2RlYmxvY2toaWdoOnAtaCsxfSx0LmNvZGVibG9ja3M9Zyx0LnByZWNpbmN0cz12fWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPWUuc3ViYmFuZHMsaT0wLG89YS5sZW5ndGg7aTxvO2krKylmb3IodmFyIHM9YVtpXS5jb2RlYmxvY2tzLGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe3ZhciB1PXNbbF07dS5wcmVjaW5jdE51bWJlcj09PXQmJm4ucHVzaCh1KX1yZXR1cm57bGF5ZXJOdW1iZXI6cixjb2RlYmxvY2tzOm59fWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz0wLGw9MDtsPG87bCsrKXM9TWF0aC5tYXgocyxuLmNvbXBvbmVudHNbbF0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7dmFyIGM9MCxmPTAsaD0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2M8YTtjKyspe2Zvcig7Zjw9cztmKyspe2Zvcig7aDxvO2grKyl7dmFyIGU9bi5jb21wb25lbnRzW2hdO2lmKCEoZj5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpKXtmb3IodmFyIHQ9ZS5yZXNvbHV0aW9uc1tmXSxyPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztkPHI7KXt2YXIgbD11KHQsZCxjKTtyZXR1cm4gZCsrLGx9ZD0wfX1oPTB9Zj0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBoKGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LG89dC5Dc2l6LHM9MCxsPTA7bDxvO2wrKylzPU1hdGgubWF4KHMsbi5jb21wb25lbnRzW2xdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsZj0wLGg9MCxkPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPD1zO2MrKyl7Zm9yKDtmPGE7ZisrKXtmb3IoO2g8bztoKyspe3ZhciBlPW4uY29tcG9uZW50c1toXTtpZighKGM+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbY10scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZDxyOyl7dmFyIGw9dSh0LGQsZik7cmV0dXJuIGQrKyxsfWQ9MH19aD0wfWY9MH10aHJvdyBuZXcgaSgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gZChlKXt2YXIgdCxyLG4sYSxvPWUuU0laLHM9ZS5jdXJyZW50VGlsZS5pbmRleCxsPWUudGlsZXNbc10sYz1sLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsZj1vLkNzaXosaD0wO2ZvcihuPTA7bjxmO24rKyl7dmFyIGQ9bC5jb21wb25lbnRzW25dO2g9TWF0aC5tYXgoaCxkLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfXZhciBwPW5ldyBJbnQzMkFycmF5KGgrMSk7Zm9yKHI9MDtyPD1oOysrcil7dmFyIG09MDtmb3Iobj0wO248ZjsrK24pe3ZhciBnPWwuY29tcG9uZW50c1tuXS5yZXNvbHV0aW9ucztyPGcubGVuZ3RoJiYobT1NYXRoLm1heChtLGdbcl0ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cykpfXBbcl09bX10PTAscj0wLG49MCxhPTAsdGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtyPD1oO3IrKyl7Zm9yKDthPHBbcl07YSsrKXtmb3IoO248ZjtuKyspe3ZhciBlPWwuY29tcG9uZW50c1tuXTtpZighKHI+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7dmFyIG89ZS5yZXNvbHV0aW9uc1tyXSxzPW8ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGE+PXMpKXtmb3IoO3Q8Yzspe3ZhciBkPXUobyxhLHQpO3JldHVybiB0KyssZH10PTB9fX1uPTB9YT0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBwKGUpe3ZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz12KG4pLGw9cyxjPTAsZj0wLGg9MCxkPTAscD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cDxsLm1heE51bUhpZ2g7cCsrKXtmb3IoO2Q8bC5tYXhOdW1XaWRlO2QrKyl7Zm9yKDtoPG87aCsrKXtmb3IodmFyIGU9bi5jb21wb25lbnRzW2hdLHQ9ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O2Y8PXQ7ZisrKXt2YXIgcj1lLnJlc29sdXRpb25zW2ZdLG09cy5jb21wb25lbnRzW2hdLnJlc29sdXRpb25zW2ZdLHY9ZyhkLHAsbSxsLHIpO2lmKG51bGwhPT12KXtmb3IoO2M8YTspe3ZhciB5PXUocix2LGMpO3JldHVybiBjKysseX1jPTB9fWY9MH1oPTB9ZD0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBtKGUpe3ZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz12KG4pLGw9MCxjPTAsZj0wLGg9MCxkPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtmPG87KytmKXtmb3IodmFyIGU9bi5jb21wb25lbnRzW2ZdLHQ9cy5jb21wb25lbnRzW2ZdLHI9ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O2Q8dC5tYXhOdW1IaWdoO2QrKyl7Zm9yKDtoPHQubWF4TnVtV2lkZTtoKyspe2Zvcig7Yzw9cjtjKyspe3ZhciBwPWUucmVzb2x1dGlvbnNbY10sbT10LnJlc29sdXRpb25zW2NdLHY9ZyhoLGQsbSx0LHApO2lmKG51bGwhPT12KXtmb3IoO2w8YTspe3ZhciB5PXUocCx2LGwpO3JldHVybiBsKysseX1sPTB9fWM9MH1oPTB9ZD0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnKGUsdCxyLG4sYSl7dmFyIGk9ZSpuLm1pbldpZHRoLG89dCpuLm1pbkhlaWdodDtpZihpJXIud2lkdGghPTB8fG8lci5oZWlnaHQhPTApcmV0dXJuIG51bGw7dmFyIHM9by9yLndpZHRoKmEucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7cmV0dXJuIGkvci5oZWlnaHQrc31mdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD1lLmNvbXBvbmVudHMubGVuZ3RoLHI9TnVtYmVyLk1BWF9WQUxVRSxuPU51bWJlci5NQVhfVkFMVUUsYT0wLGk9MCxvPW5ldyBBcnJheSh0KSxzPTA7czx0O3MrKyl7Zm9yKHZhciBsPWUuY29tcG9uZW50c1tzXSxjPWwuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCx1PW5ldyBBcnJheShjKzEpLGY9TnVtYmVyLk1BWF9WQUxVRSxoPU51bWJlci5NQVhfVkFMVUUsZD0wLHA9MCxtPTEsZz1jO2c+PTA7LS1nKXt2YXIgdj1sLnJlc29sdXRpb25zW2ddLHk9bSp2LnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLGI9bSp2LnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtmPU1hdGgubWluKGYseSksaD1NYXRoLm1pbihoLGIpLGQ9TWF0aC5tYXgoZCx2LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKSxwPU1hdGgubWF4KHAsdi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCksdVtnXT17d2lkdGg6eSxoZWlnaHQ6Yn0sbTw8PTF9cj1NYXRoLm1pbihyLGYpLG49TWF0aC5taW4obixoKSxhPU1hdGgubWF4KGEsZCksaT1NYXRoLm1heChpLHApLG9bc109e3Jlc29sdXRpb25zOnUsbWluV2lkdGg6ZixtaW5IZWlnaHQ6aCxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpwfX1yZXR1cm57Y29tcG9uZW50czpvLG1pbldpZHRoOnIsbWluSGVpZ2h0Om4sbWF4TnVtV2lkZTphLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24geShlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPXQuQ3NpeixvPTA7bzxhO28rKyl7Zm9yKHZhciB1PW4uY29tcG9uZW50c1tvXSxnPXUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCx2PVtdLHk9W10sYj0wO2I8PWc7YisrKXt2YXIgdyxrPXMoMCx1LGIpLFM9e30sXz0xPDxnLWI7aWYoUy50cngwPU1hdGguY2VpbCh1LnRjeDAvXyksUy50cnkwPU1hdGguY2VpbCh1LnRjeTAvXyksUy50cngxPU1hdGguY2VpbCh1LnRjeDEvXyksUy50cnkxPU1hdGguY2VpbCh1LnRjeTEvXyksUy5yZXNMZXZlbD1iLGwoMCxTLGspLHYucHVzaChTKSwwPT09Yikodz17fSkudHlwZT0iTEwiLHcudGJ4MD1NYXRoLmNlaWwodS50Y3gwL18pLHcudGJ5MD1NYXRoLmNlaWwodS50Y3kwL18pLHcudGJ4MT1NYXRoLmNlaWwodS50Y3gxL18pLHcudGJ5MT1NYXRoLmNlaWwodS50Y3kxL18pLHcucmVzb2x1dGlvbj1TLGMoMCx3LGspLHkucHVzaCh3KSxTLnN1YmJhbmRzPVt3XTtlbHNle3ZhciB4PTE8PGctYisxLEE9W107KHc9e30pLnR5cGU9IkhMIix3LnRieDA9TWF0aC5jZWlsKHUudGN4MC94LS41KSx3LnRieTA9TWF0aC5jZWlsKHUudGN5MC94KSx3LnRieDE9TWF0aC5jZWlsKHUudGN4MS94LS41KSx3LnRieTE9TWF0aC5jZWlsKHUudGN5MS94KSx3LnJlc29sdXRpb249UyxjKDAsdyxrKSx5LnB1c2godyksQS5wdXNoKHcpLCh3PXt9KS50eXBlPSJMSCIsdy50YngwPU1hdGguY2VpbCh1LnRjeDAveCksdy50YnkwPU1hdGguY2VpbCh1LnRjeTAveC0uNSksdy50YngxPU1hdGguY2VpbCh1LnRjeDEveCksdy50YnkxPU1hdGguY2VpbCh1LnRjeTEveC0uNSksdy5yZXNvbHV0aW9uPVMsYygwLHcsaykseS5wdXNoKHcpLEEucHVzaCh3KSwodz17fSkudHlwZT0iSEgiLHcudGJ4MD1NYXRoLmNlaWwodS50Y3gwL3gtLjUpLHcudGJ5MD1NYXRoLmNlaWwodS50Y3kwL3gtLjUpLHcudGJ4MT1NYXRoLmNlaWwodS50Y3gxL3gtLjUpLHcudGJ5MT1NYXRoLmNlaWwodS50Y3kxL3gtLjUpLHcucmVzb2x1dGlvbj1TLGMoMCx3LGspLHkucHVzaCh3KSxBLnB1c2godyksUy5zdWJiYW5kcz1BfX11LnJlc29sdXRpb25zPXYsdS5zdWJiYW5kcz15fXZhciBDPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChDKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IGYoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBoKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgZChlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHAoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBtKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGkoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KEMpKX19ZnVuY3Rpb24gYihlLHQscixhKXt2YXIgaSxvPTAscz0wLGw9ITE7ZnVuY3Rpb24gYyhlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssbD8oaT1pPDw3fG4scys9NyxsPSExKTooaT1pPDw4fG4scys9OCksMjU1PT09biYmKGw9ITApfXJldHVybiBpPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGwmJihvKyssbD0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT1jKDEpKXJldHVybiAxO2lmKDA9PT1jKDEpKXJldHVybiAyO3ZhciBlPWMoMik7cmV0dXJuIGU8Mz9lKzM6KGU9Yyg1KSk8MzE/ZSs2OihlPWMoNykpKzM3fWZvcih2YXIgcD1lLmN1cnJlbnRUaWxlLmluZGV4LG09ZS50aWxlc1twXSxnPWUuQ09ELnNvcE1hcmtlclVzZWQsdj1lLkNPRC5lcGhNYXJrZXJVc2VkLHk9bS5wYWNrZXRzSXRlcmF0b3I7bzxhOyl7aCgpLGcmJnUoMTQ1KSYmZig0KTt2YXIgYj15Lm5leHRQYWNrZXQoKTtpZihjKDEpKXtmb3IodmFyIHcsaz1iLmxheWVyTnVtYmVyLFM9W10sQT0wLEM9Yi5jb2RlYmxvY2tzLmxlbmd0aDtBPEM7QSsrKXt2YXIgUD0odz1iLmNvZGVibG9ja3NbQV0pLnByZWNpbmN0LEU9dy5jYngtUC5jYnhNaW4sVD13LmNieS1QLmNieU1pbixSPSExLE89ITE7aWYodm9pZCAwIT09dy5pbmNsdWRlZClSPSEhYygxKTtlbHNle3ZhciBJLEY7aWYodm9pZCAwIT09KFA9dy5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlJPVAuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBMPVAuY2J4TWF4LVAuY2J4TWluKzEsRD1QLmNieU1heC1QLmNieU1pbisxO0k9bmV3IHgoTCxELGspLEY9bmV3IF8oTCxEKSxQLmluY2x1c2lvblRyZWU9SSxQLnplcm9CaXRQbGFuZXNUcmVlPUZ9aWYoSS5yZXNldChFLFQsaykpZm9yKDs7KXtpZighYygxKSl7SS5pbmNyZW1lbnRWYWx1ZShrKTticmVha31pZighSS5uZXh0TGV2ZWwoKSl7dy5pbmNsdWRlZD0hMCxSPU89ITA7YnJlYWt9fX1pZihSKXtpZihPKXtmb3IoKEY9UC56ZXJvQml0UGxhbmVzVHJlZSkucmVzZXQoRSxUKTs7KWlmKGMoMSkpe2lmKCFGLm5leHRMZXZlbCgpKWJyZWFrfWVsc2UgRi5pbmNyZW1lbnRWYWx1ZSgpO3cuemVyb0JpdFBsYW5lcz1GLnZhbHVlfWZvcih2YXIgTT1kKCk7YygxKTspdy5MYmxvY2srKzt2YXIgTj0oMCxuLmxvZzIpKE0pLGo9YygoTTwxPDxOP04tMTpOKSt3LkxibG9jayk7Uy5wdXNoKHtjb2RlYmxvY2s6dyxjb2RpbmdwYXNzZXM6TSxkYXRhTGVuZ3RoOmp9KX19Zm9yKGgoKSx2JiZ1KDE0Nik7Uy5sZW5ndGg+MDspe3ZhciBCPVMuc2hpZnQoKTt2b2lkIDA9PT0odz1CLmNvZGVibG9jaykuZGF0YSYmKHcuZGF0YT1bXSksdy5kYXRhLnB1c2goe2RhdGE6dCxzdGFydDpyK28sZW5kOnIrbytCLmRhdGFMZW5ndGgsY29kaW5ncGFzc2VzOkIuY29kaW5ncGFzc2VzfSksbys9Qi5kYXRhTGVuZ3RofX19cmV0dXJuIG99ZnVuY3Rpb24gdyhlLHQscixuLGksbyxzLGwpe2Zvcih2YXIgYz1uLnRieDAsdT1uLnRieTAsZj1uLnRieDEtbi50YngwLGg9bi5jb2RlYmxvY2tzLGQ9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAscD0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCxtPTAsZz1oLmxlbmd0aDttPGc7KyttKXt2YXIgdj1oW21dLHk9di50YngxXy12LnRieDBfLGI9di50YnkxXy12LnRieTBfO2lmKDAhPT15JiYwIT09YiYmdm9pZCAwIT09di5kYXRhKXt2YXIgdyxrO3c9bmV3IEEoeSxiLHYuc3ViYmFuZFR5cGUsdi56ZXJvQml0UGxhbmVzLG8pLGs9Mjt2YXIgUyxfLHgsQz12LmRhdGEsUD0wLEU9MDtmb3IoUz0wLF89Qy5sZW5ndGg7UzxfO1MrKylQKz0oeD1DW1NdKS5lbmQteC5zdGFydCxFKz14LmNvZGluZ3Bhc3Nlczt2YXIgVD1uZXcgVWludDhBcnJheShQKSxSPTA7Zm9yKFM9MCxfPUMubGVuZ3RoO1M8XztTKyspe3ZhciBPPSh4PUNbU10pLmRhdGEuc3ViYXJyYXkoeC5zdGFydCx4LmVuZCk7VC5zZXQoTyxSKSxSKz1PLmxlbmd0aH12YXIgST1uZXcgYS5Bcml0aG1ldGljRGVjb2RlcihULDAsUCk7Zm9yKHcuc2V0RGVjb2RlcihJKSxTPTA7UzxFO1MrKyl7c3dpdGNoKGspe2Nhc2UgMDp3LnJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpO2JyZWFrO2Nhc2UgMTp3LnJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCk7YnJlYWs7Y2FzZSAyOncucnVuQ2xlYW51cFBhc3MoKSxsJiZ3LmNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCl9az0oaysxKSUzfXZhciBGLEwsRCxNPXYudGJ4MF8tYysodi50YnkwXy11KSpmLE49dy5jb2VmZmljZW50c1NpZ24saj13LmNvZWZmaWNlbnRzTWFnbml0dWRlLEI9dy5iaXRzRGVjb2RlZCxVPXM/MDouNTtSPTA7dmFyIHE9IkxMIiE9PW4udHlwZTtmb3IoUz0wO1M8YjtTKyspe3ZhciB6PTIqKE0vZnwwKSoodC1mKStkK3A7Zm9yKEY9MDtGPHk7RisrKXtpZigwIT09KEw9altSXSkpe0w9KEwrVSkqaSwwIT09TltSXSYmKEw9LUwpLEQ9QltSXTt2YXIgVz1xP3orKE08PDEpOk07ZVtXXT1zJiZEPj1vP0w6TCooMTw8by1EKX1NKyssUisrfU0rPWYteX19fX1mdW5jdGlvbiBrKHQscixuKXtmb3IodmFyIGE9ci5jb21wb25lbnRzW25dLGk9YS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsbz1hLnF1YW50aXphdGlvblBhcmFtZXRlcnMscz1pLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxsPW8uU1BxY2RzLGM9by5zY2FsYXJFeHBvdW5kZWQsdT1vLmd1YXJkQml0cyxmPWkuc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxoPXQuY29tcG9uZW50c1tuXS5wcmVjaXNpb24sZD1pLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWQ/bmV3IEU6bmV3IFAsbT1bXSxnPTAsdj0wO3Y8PXM7disrKXtmb3IodmFyIHk9YS5yZXNvbHV0aW9uc1t2XSxiPXkudHJ4MS15LnRyeDAsaz15LnRyeTEteS50cnkwLFM9bmV3IEZsb2F0MzJBcnJheShiKmspLF89MCx4PXkuc3ViYmFuZHMubGVuZ3RoO188eDtfKyspe3ZhciBBLEM7Yz8oQT1sW2ddLm11LEM9bFtnXS5lcHNpbG9uLGcrKyk6KEE9bFswXS5tdSxDPWxbMF0uZXBzaWxvbisodj4wPzEtdjowKSk7dmFyIFQ9eS5zdWJiYW5kc1tfXSxSPWVbVC50eXBlXTt3KFMsYiwwLFQsZD8xOk1hdGgucG93KDIsaCtSLUMpKigxK0EvMjA0OCksdStDLTEsZCxmKX1tLnB1c2goe3dpZHRoOmIsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBPPXAuY2FsY3VsYXRlKG0sYS50Y3gwLGEudGN5MCk7cmV0dXJue2xlZnQ6YS50Y3gwLHRvcDphLnRjeTAsd2lkdGg6Ty53aWR0aCxoZWlnaHQ6Ty5oZWlnaHQsaXRlbXM6Ty5pdGVtc319ZnVuY3Rpb24gUyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5wcm90b3R5cGU9e3BhcnNlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsbi5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOyl7dmFyIGE9OCxvPSgwLG4ucmVhZFVpbnQzMikoZSx0KSxzPSgwLG4ucmVhZFVpbnQzMikoZSx0KzQpO2lmKHQrPWEsMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsbi5yZWFkVWludDMyKShlLHQpKygwLG4ucmVhZFVpbnQzMikoZSx0KzQpLHQrPTgsYSs9OCksMD09PW8mJihvPXItdCthKSxvPGEpdGhyb3cgbmV3IGkoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgbD1vLWEsYz0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOmM9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciB1PWVbdF07aWYoMT09PXUpe3ZhciBmPSgwLG4ucmVhZFVpbnQzMikoZSx0KzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLG4ud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT11JiYoMCxuLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsdCx0K2wpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSx0KSYmKDAsbi53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsbi53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIitzKyIgKCIraCsiKSIpfWMmJih0Kz1sKX1lbHNlIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsMCxlLmxlbmd0aCl9LHBhcnNlSW1hZ2VQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmdldEJ5dGUoKTt0Pj0wOylpZig2NTM2MT09KHQ8PDh8KHQ9ZS5nZXRCeXRlKCkpKSl7ZS5za2lwKDQpO3ZhciByPWUuZ2V0SW50MzIoKT4+PjAsbj1lLmdldEludDMyKCk+Pj4wLGE9ZS5nZXRJbnQzMigpPj4+MCxvPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTt2YXIgcz1lLmdldFVpbnQxNigpO3JldHVybiB0aGlzLndpZHRoPXItYSx0aGlzLmhlaWdodD1uLW8sdGhpcy5jb21wb25lbnRzQ291bnQ9cyx2b2lkKHRoaXMuYml0c1BlckNvbXBvbmVudD04KX10aHJvdyBuZXcgaSgiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbSIpfSxwYXJzZUNvZGVzdHJlYW06ZnVuY3Rpb24oZSx0LGEpe3ZhciBzPXt9LGw9ITE7dHJ5e2Zvcih2YXIgYz10O2MrMTxhOyl7dmFyIHU9KDAsbi5yZWFkVWludDE2KShlLGMpO2MrPTI7dmFyIGYsaCxkLHAsbSxnLHY9MDtzd2l0Y2godSl7Y2FzZSA2NTM1OTpzLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnY9KDAsbi5yZWFkVWludDE2KShlLGMpO3ZhciB3PXt9O3cuWHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYys0KSx3LllzaXo9KDAsbi5yZWFkVWludDMyKShlLGMrOCksdy5YT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsYysxMiksdy5ZT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsYysxNiksdy5YVHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYysyMCksdy5ZVHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYysyNCksdy5YVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLGMrMjgpLHcuWVRPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxjKzMyKTt2YXIgXz0oMCxuLnJlYWRVaW50MTYpKGUsYyszNik7dy5Dc2l6PV87dmFyIHg9W107Zj1jKzM4O2Zvcih2YXIgQT0wO0E8XztBKyspe3ZhciBDPXtwcmVjaXNpb246MSsoMTI3JmVbZl0pLGlzU2lnbmVkOiEhKDEyOCZlW2ZdKSxYUnNpejplW2YrMV0sWVJzaXo6ZVtmKzJdfTtmKz0zLHIoQyx3KSx4LnB1c2goQyl9cy5TSVo9dyxzLmNvbXBvbmVudHM9eCxvKHMseCkscy5RQ0M9W10scy5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTt2YXIgUD17fTtzd2l0Y2goZj1jKzIsMzEmKGg9ZVtmKytdKSl7Y2FzZSAwOnA9OCxtPSEwO2JyZWFrO2Nhc2UgMTpwPTE2LG09ITE7YnJlYWs7Y2FzZSAyOnA9MTYsbT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIraCl9Zm9yKFAubm9RdWFudGl6YXRpb249OD09PXAsUC5zY2FsYXJFeHBvdW5kZWQ9bSxQLmd1YXJkQml0cz1oPj41LGQ9W107Zjx2K2M7KXt2YXIgRT17fTs4PT09cD8oRS5lcHNpbG9uPWVbZisrXT4+MyxFLm11PTApOihFLmVwc2lsb249ZVtmXT4+MyxFLm11PSg3JmVbZl0pPDw4fGVbZisxXSxmKz0yKSxkLnB1c2goRSl9UC5TUHFjZHM9ZCxzLm1haW5IZWFkZXI/cy5RQ0Q9UDoocy5jdXJyZW50VGlsZS5RQ0Q9UCxzLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTt2YXIgVCxSPXt9O3N3aXRjaChmPWMrMixzLlNJWi5Dc2l6PDI1Nz9UPWVbZisrXTooVD0oMCxuLnJlYWRVaW50MTYpKGUsZiksZis9MiksMzEmKGg9ZVtmKytdKSl7Y2FzZSAwOnA9OCxtPSEwO2JyZWFrO2Nhc2UgMTpwPTE2LG09ITE7YnJlYWs7Y2FzZSAyOnA9MTYsbT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIraCl9Zm9yKFIubm9RdWFudGl6YXRpb249OD09PXAsUi5zY2FsYXJFeHBvdW5kZWQ9bSxSLmd1YXJkQml0cz1oPj41LGQ9W107Zjx2K2M7KUU9e30sOD09PXA/KEUuZXBzaWxvbj1lW2YrK10+PjMsRS5tdT0wKTooRS5lcHNpbG9uPWVbZl0+PjMsRS5tdT0oNyZlW2ZdKTw8OHxlW2YrMV0sZis9MiksZC5wdXNoKEUpO1IuU1BxY2RzPWQscy5tYWluSGVhZGVyP3MuUUNDW1RdPVI6cy5jdXJyZW50VGlsZS5RQ0NbVF09UjticmVhaztjYXNlIDY1MzYyOnY9KDAsbi5yZWFkVWludDE2KShlLGMpO3ZhciBPPXt9O2Y9YysyO3ZhciBJPWVbZisrXTtPLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM9ISEoMSZJKSxPLnNvcE1hcmtlclVzZWQ9ISEoMiZJKSxPLmVwaE1hcmtlclVzZWQ9ISEoNCZJKSxPLnByb2dyZXNzaW9uT3JkZXI9ZVtmKytdLE8ubGF5ZXJzQ291bnQ9KDAsbi5yZWFkVWludDE2KShlLGYpLGYrPTIsTy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybT1lW2YrK10sTy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ9ZVtmKytdLE8ueGNiPTIrKDE1JmVbZisrXSksTy55Y2I9MisoMTUmZVtmKytdKTt2YXIgRj1lW2YrK107aWYoTy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmRiksTy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImRiksTy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZGKSxPLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZGKSxPLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmRiksTy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJkYpLE8ucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbZisrXSxPLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2Zvcih2YXIgTD1bXTtmPHYrYzspe3ZhciBEPWVbZisrXTtMLnB1c2goe1BQeDoxNSZELFBQeTpEPj40fSl9Ty5wcmVjaW5jdHNTaXplcz1MfXZhciBNPVtdO2lmKE8uc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyYmTS5wdXNoKCJzZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzIiksTy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzJiZNLnB1c2goInJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMiKSxPLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyYmTS5wdXNoKCJ0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MiKSxPLnZlcnRpY2FsbHlTdHJpcGUmJk0ucHVzaCgidmVydGljYWxseVN0cmlwZSIpLE8ucHJlZGljdGFibGVUZXJtaW5hdGlvbiYmTS5wdXNoKCJwcmVkaWN0YWJsZVRlcm1pbmF0aW9uIiksTS5sZW5ndGg+MCl0aHJvdyBsPSEwLG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCIrTS5qb2luKCIsICIpKyIpIik7cy5tYWluSGVhZGVyP3MuQ09EPU86KHMuY3VycmVudFRpbGUuQ09EPU8scy5jdXJyZW50VGlsZS5DT0M9W10pO2JyZWFrO2Nhc2UgNjU0MjQ6dj0oMCxuLnJlYWRVaW50MTYpKGUsYyksKGc9e30pLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxjKzIpLGcubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxjKzQpLGcuZGF0YUVuZD1nLmxlbmd0aCtjLTIsZy5wYXJ0SW5kZXg9ZVtjKzhdLGcucGFydHNDb3VudD1lW2MrOV0scy5tYWluSGVhZGVyPSExLDA9PT1nLnBhcnRJbmRleCYmKGcuQ09EPXMuQ09ELGcuQ09DPXMuQ09DLnNsaWNlKDApLGcuUUNEPXMuUUNELGcuUUNDPXMuUUNDLnNsaWNlKDApKSxzLmN1cnJlbnRUaWxlPWc7YnJlYWs7Y2FzZSA2NTQyNzowPT09KGc9cy5jdXJyZW50VGlsZSkucGFydEluZGV4JiYoUyhzLGcuaW5kZXgpLHkocykpLGIocyxlLGMsdj1nLmRhdGFFbmQtYyk7YnJlYWs7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTticmVhaztjYXNlIDY1MzYzOnRocm93IG5ldyBFcnJvcigiQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrdS50b1N0cmluZygxNikpfWMrPXZ9fWNhdGNoKGUpe2lmKGx8fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IGkoZS5tZXNzYWdlKTsoMCxuLndhcm4pKCJKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIrZS5tZXNzYWdlKX10aGlzLnRpbGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY29tcG9uZW50cyxuPXQuQ3NpeixhPVtdLGk9MCxvPWUudGlsZXMubGVuZ3RoO2k8bztpKyspe3ZhciBzLGw9ZS50aWxlc1tpXSxjPVtdO2ZvcihzPTA7czxuO3MrKyljW3NdPWsoZSxsLHMpO3ZhciB1LGYsaCxkLHAsbSxnLHY9Y1swXSx5PW5ldyBVaW50OENsYW1wZWRBcnJheSh2Lml0ZW1zLmxlbmd0aCpuKSxiPXtsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6di53aWR0aCxoZWlnaHQ6di5oZWlnaHQsaXRlbXM6eX0sdz0wO2lmKGwuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSl7dmFyIFM9ND09PW4sXz1jWzBdLml0ZW1zLHg9Y1sxXS5pdGVtcyxBPWNbMl0uaXRlbXMsQz1TP2NbM10uaXRlbXM6bnVsbDt1PXJbMF0ucHJlY2lzaW9uLTgsZj0uNSsoMTI4PDx1KTt2YXIgUD1sLmNvbXBvbmVudHNbMF0sRT1uLTM7aWYoZD1fLmxlbmd0aCxQLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGg9MDtoPGQ7aCsrLHcrPUUpe3A9X1toXStmLG09eFtoXSxnPUFbaF07dmFyIFQ9cC0oZyttPj4yKTt5W3crK109VCtnPj51LHlbdysrXT1UPj51LHlbdysrXT1UK20+PnV9ZWxzZSBmb3IoaD0wO2g8ZDtoKyssdys9RSlwPV9baF0rZixtPXhbaF0sZz1BW2hdLHlbdysrXT1wKzEuNDAyKmc+PnUseVt3KytdPXAtLjM0NDEzKm0tLjcxNDE0Kmc+PnUseVt3KytdPXArMS43NzIqbT4+dTtpZihTKWZvcihoPTAsdz0zO2g8ZDtoKyssdys9NCl5W3ddPUNbaF0rZj4+dX1lbHNlIGZvcihzPTA7czxuO3MrKyl7dmFyIFI9Y1tzXS5pdGVtcztmb3IodT1yW3NdLnByZWNpc2lvbi04LGY9LjUrKDEyODw8dSksdz1zLGg9MCxkPVIubGVuZ3RoO2g8ZDtoKyspeVt3XT1SW2hdK2Y+PnUsdys9bn1hLnB1c2goYil9cmV0dXJuIGF9KHMpLHRoaXMud2lkdGg9cy5TSVouWHNpei1zLlNJWi5YT3Npeix0aGlzLmhlaWdodD1zLlNJWi5Zc2l6LXMuU0laLllPc2l6LHRoaXMuY29tcG9uZW50c0NvdW50PXMuU0laLkNzaXp9fTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKHZhciBhPTA7YTxyO2ErKyl7dmFyIGk9e3dpZHRoOmUsaGVpZ2h0OnQsaXRlbXM6W119O3RoaXMubGV2ZWxzLnB1c2goaSksZT1NYXRoLmNlaWwoZS8yKSx0PU1hdGguY2VpbCh0LzIpfX1yZXR1cm4gZS5wcm90b3R5cGU9e3Jlc2V0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG49MCxhPTA7bjx0aGlzLmxldmVscy5sZW5ndGg7KXt2YXIgaT1lK3QqKHI9dGhpcy5sZXZlbHNbbl0pLndpZHRoO2lmKHZvaWQgMCE9PXIuaXRlbXNbaV0pe2E9ci5pdGVtc1tpXTticmVha31yLmluZGV4PWksZT4+PTEsdD4+PTEsbisrfW4tLSwocj10aGlzLmxldmVsc1tuXSkuaXRlbXNbci5pbmRleF09YSx0aGlzLmN1cnJlbnRMZXZlbD1uLGRlbGV0ZSB0aGlzLnZhbHVlfSxpbmNyZW1lbnRWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9LG5leHRMZXZlbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybi0tZTwwPyh0aGlzLnZhbHVlPXIsITEpOih0aGlzLmN1cnJlbnRMZXZlbD1lLCh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yLCEwKX19LGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBhPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGk9MDtpPGE7aSsrKXtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoZSp0KSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKW9bc109cjt2YXIgYz17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpvfTt0aGlzLmxldmVscy5wdXNoKGMpLGU9TWF0aC5jZWlsKGUvMiksdD1NYXRoLmNlaWwodC8yKX19cmV0dXJuIGUucHJvdG90eXBlPXtyZXNldDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxldmVscy5sZW5ndGg7KXt2YXIgYT10aGlzLmxldmVsc1tuXSxpPWUrdCphLndpZHRoO2EuaW5kZXg9aTt2YXIgbz1hLml0ZW1zW2ldO2lmKDI1NT09PW8pYnJlYWs7aWYobz5yKXJldHVybiB0aGlzLmN1cnJlbnRMZXZlbD1uLHRoaXMucHJvcGFnYXRlVmFsdWVzKCksITE7ZT4+PTEsdD4+PTEsbisrfXJldHVybiB0aGlzLmN1cnJlbnRMZXZlbD1uLTEsITB9LGluY3JlbWVudFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfSxwcm9wYWdhdGVWYWx1ZXM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07LS1lPj0wOykodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09cn0sbmV4dExldmVsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuIHQuaXRlbXNbdC5pbmRleF09MjU1LCEoLS1lPDB8fCh0aGlzLmN1cnJlbnRMZXZlbD1lLCh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yLDApKX19LGV9KCksQT1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLHQ9bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSkscj1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKTtmdW5jdGlvbiBuKG4sYSxpLG8scyl7dGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWEsdGhpcy5jb250ZXh0TGFiZWxUYWJsZT0iSEgiPT09aT9yOiJITCI9PT1pP3Q6ZTt2YXIgbD1uKmE7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkobCksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkobCksdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZT1zPjE0P25ldyBVaW50MzJBcnJheShsKTpzPjY/bmV3IFVpbnQxNkFycmF5KGwpOm5ldyBVaW50OEFycmF5KGwpLHRoaXMucHJvY2Vzc2luZ0ZsYWdzPW5ldyBVaW50OEFycmF5KGwpO3ZhciBjPW5ldyBVaW50OEFycmF5KGwpO2lmKDAhPT1vKWZvcih2YXIgdT0wO3U8bDt1KyspY1t1XT1vO3RoaXMuYml0c0RlY29kZWQ9Yyx0aGlzLnJlc2V0KCl9cmV0dXJuIG4ucHJvdG90eXBlPXtzZXREZWNvZGVyOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY29udGV4dHM9bmV3IEludDhBcnJheSgxOSksdGhpcy5jb250ZXh0c1swXT04LHRoaXMuY29udGV4dHNbMTddPTkyLHRoaXMuY29udGV4dHNbMThdPTZ9LHNldE5laWdoYm9yc1NpZ25pZmljYW5jZTpmdW5jdGlvbihlLHQscil7dmFyIG4sYT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxpPXRoaXMud2lkdGgsbz10aGlzLmhlaWdodCxzPXQ+MCxsPXQrMTxpO2U+MCYmKG49ci1pLHMmJihhW24tMV0rPTE2KSxsJiYoYVtuKzFdKz0xNiksYVtuXSs9NCksZSsxPG8mJihuPXIraSxzJiYoYVtuLTFdKz0xNiksbCYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLHMmJihhW3ItMV0rPTEpLGwmJihhW3IrMV0rPTEpLGFbcl18PTEyOH0scnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGw9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxjPXRoaXMuYml0c0RlY29kZWQsdT0wO3U8cjt1Kz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPXUqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPXUrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgbT1sW2lbaF1dO2lmKGUucmVhZEJpdChzLG0pKXt2YXIgZz10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09ZyxuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9Y1toXSsrLG9baF18PTF9fX0sZGVjb2RlU2lnbkJpdDpmdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLG8scyxsLGM9dGhpcy53aWR0aCx1PXRoaXMuaGVpZ2h0LGY9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxoPXRoaXMuY29lZmZpY2VudHNTaWduO289dD4wJiYwIT09ZltyLTFdLHQrMTxjJiYwIT09ZltyKzFdPyhpPWhbcisxXSxuPW8/MS1pLShhPWhbci0xXSk6MS1pLWkpOm49bz8xLShhPWhbci0xXSktYTowO3ZhciBkPTMqbjtyZXR1cm4gbz1lPjAmJjAhPT1mW3ItY10sZSsxPHUmJjAhPT1mW3IrY10/KGk9aFtyK2NdLG49bz8xLWktKGE9aFtyLWNdKStkOjEtaS1pK2QpOm49bz8xLShhPWhbci1jXSktYStkOmQsbj49MD8ocz05K24sbD10aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLHMpKToocz05LW4sbD0xXnRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpLGx9LHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5kZWNvZGVyLHI9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGE9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5jb250ZXh0cyxzPXRoaXMuYml0c0RlY29kZWQsbD10aGlzLnByb2Nlc3NpbmdGbGFncyxjPXIqbix1PTQqcixmPTA7ZjxjO2Y9ZSl7ZT1NYXRoLm1pbihjLGYrdSk7Zm9yKHZhciBoPTA7aDxyO2grKylmb3IodmFyIGQ9ZitoO2Q8ZTtkKz1yKWlmKGFbZF0mJjA9PSgxJmxbZF0pKXt2YXIgcD0xNjswIT0oMiZsW2RdKSYmKGxbZF1ePTIscD0wPT0oMTI3JmlbZF0pPzE1OjE0KTt2YXIgbT10LnJlYWRCaXQobyxwKTthW2RdPWFbZF08PDF8bSxzW2RdKyssbFtkXXw9MX19fSxydW5DbGVhbnVwUGFzczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxsPXRoaXMuY29udGV4dExhYmVsVGFibGUsYz10aGlzLmJpdHNEZWNvZGVkLHU9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIG09cCpyLGc9cCszPG4sdj0wO3Y8cjt2Kyspe3ZhciB5LGI9bSt2LHc9MCxrPWIsUz1wO2lmKGcmJjA9PT11W2JdJiYwPT09dVtiK2ZdJiYwPT09dVtiK2hdJiYwPT09dVtiK2RdJiYwPT09YVtiXSYmMD09PWFbYitmXSYmMD09PWFbYitoXSYmMD09PWFbYitkXSl7aWYoIXQucmVhZEJpdChzLDE4KSl7Y1tiXSsrLGNbYitmXSsrLGNbYitoXSsrLGNbYitkXSsrO2NvbnRpbnVlfTAhPSh3PXQucmVhZEJpdChzLDE3KTw8MXx0LnJlYWRCaXQocywxNykpJiYoUz1wK3csays9dypyKSx5PXRoaXMuZGVjb2RlU2lnbkJpdChTLHYsayksb1trXT15LGlba109MSx0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShTLHYsayksdVtrXXw9MixrPWI7Zm9yKHZhciBfPXA7Xzw9UztfKyssays9ciljW2tdKys7dysrfWZvcihTPXArdztTPGU7UysrLGsrPXIpaWYoIWlba10mJjA9PSgxJnVba10pKXt2YXIgeD1sW2Fba11dOzE9PT10LnJlYWRCaXQocyx4KSYmKHk9dGhpcy5kZWNvZGVTaWduQml0KFMsdixrKSxvW2tdPXksaVtrXT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKFMsdixrKSx1W2tdfD0yKSxjW2tdKyt9fX19LGNoZWNrU2VnbWVudGF0aW9uU3ltYm9sOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy5jb250ZXh0cztpZigxMCE9KGUucmVhZEJpdCh0LDE3KTw8M3xlLnJlYWRCaXQodCwxNyk8PDJ8ZS5yZWFkQml0KHQsMTcpPDwxfGUucmVhZEJpdCh0LDE3KSkpdGhyb3cgbmV3IGkoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX0sbn0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY2FsY3VsYXRlPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufSxlLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQtMSxhPXQrMSxpPXQrci0yLG89dCtyO2Vbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbl09ZVthXSxlW29dPWVbaV19LGUucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvLHMsbCxjLHU9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pdGVtcyxkPXQud2lkdGgscD10LmhlaWdodCxtPXQuaXRlbXM7Zm9yKG89MCxhPTA7YTxmO2ErKylmb3Iocz0yKmEqZCxpPTA7aTx1O2krKyxvKysscys9MiltW3NdPWhbb107aD1lLml0ZW1zPW51bGw7dmFyIGc9bmV3IEZsb2F0MzJBcnJheShkKzgpO2lmKDE9PT1kKXtpZigwIT0oMSZyKSlmb3IoYz0wLG89MDtjPHA7YysrLG8rPWQpbVtvXSo9LjV9ZWxzZSBmb3IoYz0wLG89MDtjPHA7YysrLG8rPWQpZy5zZXQobS5zdWJhcnJheShvLG8rZCksNCksdGhpcy5leHRlbmQoZyw0LGQpLHRoaXMuZmlsdGVyKGcsNCxkKSxtLnNldChnLnN1YmFycmF5KDQsNCtkKSxvKTt2YXIgdj0xNix5PVtdO2ZvcihhPTA7YTx2O2ErKyl5LnB1c2gobmV3IEZsb2F0MzJBcnJheShwKzgpKTt2YXIgYix3PTA7aWYoZT00K3AsMT09PXApe2lmKDAhPSgxJm4pKWZvcihsPTA7bDxkO2wrKyltW2xdKj0uNX1lbHNlIGZvcihsPTA7bDxkO2wrKyl7aWYoMD09PXcpe2Zvcih2PU1hdGgubWluKGQtbCx2KSxvPWwscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8djtiKyspeVtiXVtzXT1tW28rYl07dz12fXZhciBrPXlbLS13XTtpZih0aGlzLmV4dGVuZChrLDQscCksdGhpcy5maWx0ZXIoayw0LHApLDA9PT13KWZvcihvPWwtdisxLHM9NDtzPGU7bys9ZCxzKyspZm9yKGI9MDtiPHY7YisrKW1bbytiXT15W2JdW3NdfXJldHVybnt3aWR0aDpkLGhlaWdodDpwLGl0ZW1zOm19fSxlfSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Qy5jYWxsKHRoaXMpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHM9cj4+MSxsPS0xLjU4NjEzNDM0MjA1OTkyNCxjPS0uMDUyOTgwMTE4NTcyOTYxLHU9Ljg4MjkxMTA3NTUzMDkzNCxmPS40NDM1MDY4NTIwNDM5NzEsaD0xLjIzMDE3NDEwNDkxNDAwMTtmb3Iobj0odHw9MCktMyxhPXMrNDthLS07bis9MillW25dKj0uODEyODkzMDY2MTE1OTYwOTtmb3IoaT1mKmVbKG49dC0yKS0xXSxhPXMrMzthLS0mJihvPWYqZVtuKzFdLGVbbl09aCplW25dLWktbyxhLS0pO24rPTIpaT1mKmVbKG4rPTIpKzFdLGVbbl09aCplW25dLWktbztmb3IoaT11KmVbKG49dC0xKS0xXSxhPXMrMjthLS0mJihvPXUqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT11KmVbKG4rPTIpKzFdLGVbbl0tPWkrbztmb3IoaT1jKmVbKG49dCktMV0sYT1zKzE7YS0tJiYobz1jKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9YyplWyhuKz0yKSsxXSxlW25dLT1pK287aWYoMCE9PXMpZm9yKGk9bCplWyhuPXQrMSktMV0sYT1zO2EtLSYmKG89bCplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPWwqZVsobis9MikrMV0sZVtuXS09aStvfSxlfSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Qy5jYWxsKHRoaXMpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaT1yPj4xO2ZvcihuPXR8PTAsYT1pKzE7YS0tO24rPTIpZVtuXS09ZVtuLTFdK2VbbisxXSsyPj4yO2ZvcihuPXQrMSxhPWk7YS0tO24rPTIpZVtuXSs9ZVtuLTFdK2VbbisxXT4+MX0sZX0oKTtyZXR1cm4gdH0oKTt0LkpweEltYWdlPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2FsY3VsYXRlU0hBNTEyPXQuY2FsY3VsYXRlU0hBMzg0PXQuY2FsY3VsYXRlU0hBMjU2PXQuY2FsY3VsYXRlTUQ1PXQuUERGMjA9dC5QREYxNz10LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9dC5BUkNGb3VyQ2lwaGVyPXQuQUVTMjU2Q2lwaGVyPXQuQUVTMTI4Q2lwaGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpLGk9cigxNTcpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09byh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGwoZSl7cmV0dXJuKGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4odT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksZX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5hPTAsdGhpcy5iPTA7dmFyIHQscixuPW5ldyBVaW50OEFycmF5KDI1NiksYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PDI1NjsrK3Qpblt0XT10O2Zvcih0PTA7dDwyNTY7Kyt0KWE9YSsocj1uW3RdKStlW3QlaV0mMjU1LG5bdF09blthXSxuW2FdPXI7dGhpcy5zPW59cmV0dXJuIGUucHJvdG90eXBlPXtlbmNyeXB0QmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9ZS5sZW5ndGgsaT10aGlzLmEsbz10aGlzLmIscz10aGlzLnMsbD1uZXcgVWludDhBcnJheShhKTtmb3IodD0wO3Q8YTsrK3Qpbj1zW289bysocj1zW2k9aSsxJjI1NV0pJjI1NV0sc1tpXT1uLHNbb109cixsW3RdPWVbdF1ec1tyK24mMjU1XTtyZXR1cm4gdGhpcy5hPWksdGhpcy5iPW8sbH19LGUucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1lLnByb3RvdHlwZS5lbmNyeXB0QmxvY2ssZX0oKTt0LkFSQ0ZvdXJDaXBoZXI9cDt2YXIgbSxnLHY9KG09bmV3IFVpbnQ4QXJyYXkoWzcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMV0pLGc9bmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsLTM4OTU2NDU4Niw2MDYxMDU4MTksLTEwNDQ1MjUzMzAsLTE3NjQxODg5NywxMjAwMDgwNDI2LC0xNDczMjMxMzQxLC00NTcwNTk4MywxNzcwMDM1NDE2LC0xOTU4NDE0NDE3LC00MjA2MywtMTk5MDQwNDE2MiwxODA0NjAzNjgyLC00MDM0MTEwMSwtMTUwMjAwMjI5MCwxMjM2NTM1MzI5LC0xNjU3OTY1MTAsLTEwNjk1MDE2MzIsNjQzNzE3NzEzLC0zNzM4OTczMDIsLTcwMTU1ODY5MSwzODAxNjA4MywtNjYwNDc4MzM1LC00MDU1Mzc4NDgsNTY4NDQ2NDM4LC0xMDE5ODAzNjkwLC0xODczNjM5NjEsMTE2MzUzMTUwMSwtMTQ0NDY4MTQ2NywtNTE0MDM3ODQsMTczNTMyODQ3MywtMTkyNjYwNzczNCwtMzc4NTU4LC0yMDIyNTc0NDYzLDE4MzkwMzA1NjIsLTM1MzA5NTU2LC0xNTMwOTkyMDYwLDEyNzI4OTMzNTMsLTE1NTQ5NzYzMiwtMTA5NDczMDY0MCw2ODEyNzkxNzQsLTM1ODUzNzIyMiwtNzIyNTIxOTc5LDc2MDI5MTg5LC02NDAzNjQ0ODcsLTQyMTgxNTgzNSw1MzA3NDI1MjAsLTk5NTMzODY1MSwtMTk4NjMwODQ0LDExMjY4OTE0MTUsLTE0MTYzNTQ5MDUsLTU3NDM0MDU1LDE3MDA0ODU1NzEsLTE4OTQ5ODY2MDYsLTEwNTE1MjMsLTIwNTQ5MjI3OTksMTg3MzMxMzM1OSwtMzA2MTE3NDQsLTE1NjAxOTgzODAsMTMwOTE1MTY0OSwtMTQ1NTIzMDcwLC0xMTIwMjEwMzc5LDcxODc4NzI1OSwtMzQzNDg1NTUxXSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPTE3MzI1ODQxOTMscz0tMjcxNzMzODc5LGw9LTE3MzI1ODQxOTQsYz0yNzE3MzM4NzgsdT1yKzcyJi02NCxmPW5ldyBVaW50OEFycmF5KHUpO2ZvcihuPTA7bjxyOysrbilmW25dPWVbdCsrXTtmb3IoZltuKytdPTEyOCxpPXUtODtuPGk7KWZbbisrXT0wO2ZbbisrXT1yPDwzJjI1NSxmW24rK109cj4+NSYyNTUsZltuKytdPXI+PjEzJjI1NSxmW24rK109cj4+MjEmMjU1LGZbbisrXT1yPj4+MjkmMjU1LGZbbisrXT0wLGZbbisrXT0wLGZbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWZbbl18ZltuKzFdPDw4fGZbbisyXTw8MTZ8ZltuKzNdPDwyNDt2YXIgZCxwLHY9byx5PXMsYj1sLHc9Yztmb3IoYT0wO2E8NjQ7KythKXthPDE2PyhkPXkmYnx+eSZ3LHA9YSk6YTwzMj8oZD13Jnl8fncmYixwPTUqYSsxJjE1KTphPDQ4PyhkPXleYl53LHA9MyphKzUmMTUpOihkPWJeKHl8fncpLHA9NyphJjE1KTt2YXIgaz13LFM9ditkK2dbYV0raFtwXXwwLF89bVthXTt3PWIsYj15LHk9eSsoUzw8X3xTPj4+MzItXyl8MCx2PWt9bz1vK3Z8MCxzPXMreXwwLGw9bCtifDAsYz1jK3d8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZsLGw+PjgmMjU1LGw+PjE2JjI1NSxsPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9KTt0LmNhbGN1bGF0ZU1ENT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuaGlnaD0wfGUsdGhpcy5sb3c9MHx0fXJldHVybiBlLnByb3RvdHlwZT17YW5kOmZ1bmN0aW9uKGUpe3RoaXMuaGlnaCY9ZS5oaWdoLHRoaXMubG93Jj1lLmxvd30seG9yOmZ1bmN0aW9uKGUpe3RoaXMuaGlnaF49ZS5oaWdoLHRoaXMubG93Xj1lLmxvd30sb3I6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fSxzaGlmdFJpZ2h0OmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDAsdGhpcy5oaWdoPTApOih0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lLHRoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDApfSxzaGlmdExlZnQ6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMuaGlnaD10aGlzLmxvdzw8ZS0zMix0aGlzLmxvdz0wKToodGhpcy5oaWdoPXRoaXMuaGlnaDw8ZXx0aGlzLmxvdz4+PjMyLWUsdGhpcy5sb3c9dGhpcy5sb3c8PGUpfSxyb3RhdGVSaWdodDpmdW5jdGlvbihlKXt2YXIgdCxyOzMyJmU/KHI9dGhpcy5sb3csdD10aGlzLmhpZ2gpOih0PXRoaXMubG93LHI9dGhpcy5oaWdoKSxlJj0zMSx0aGlzLmxvdz10Pj4+ZXxyPDwzMi1lLHRoaXMuaGlnaD1yPj4+ZXx0PDwzMi1lfSxub3Q6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9LGFkZDpmdW5jdGlvbihlKXt2YXIgdD0odGhpcy5sb3c+Pj4wKSsoZS5sb3c+Pj4wKSxyPSh0aGlzLmhpZ2g+Pj4wKSsoZS5oaWdoPj4+MCk7dD40Mjk0OTY3Mjk1JiYocis9MSksdGhpcy5sb3c9MHx0LHRoaXMuaGlnaD0wfHJ9LGNvcHlUbzpmdW5jdGlvbihlLHQpe2VbdF09dGhpcy5oaWdoPj4+MjQmMjU1LGVbdCsxXT10aGlzLmhpZ2g+PjE2JjI1NSxlW3QrMl09dGhpcy5oaWdoPj44JjI1NSxlW3QrM109MjU1JnRoaXMuaGlnaCxlW3QrNF09dGhpcy5sb3c+Pj4yNCYyNTUsZVt0KzVdPXRoaXMubG93Pj4xNiYyNTUsZVt0KzZdPXRoaXMubG93Pj44JjI1NSxlW3QrN109MjU1JnRoaXMubG93fSxhc3NpZ246ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319LGV9KCksYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH1mdW5jdGlvbiB0KGUsdCxyKXtyZXR1cm4gZSZ0Xn5lJnJ9ZnVuY3Rpb24gcihlLHQscil7cmV0dXJuIGUmdF5lJnJedCZyfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGUodCwyKV5lKHQsMTMpXmUodCwyMil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZSh0LDYpXmUodCwxMSleZSh0LDI1KX1mdW5jdGlvbiBpKHQpe3JldHVybiBlKHQsNyleZSh0LDE4KV50Pj4+M312YXIgbz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1LGYsaCxkPTE3NzkwMzM3MDMscD0zMTQ0MTM0Mjc3LG09MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxiPTUyODczNDYzNSx3PTE1NDE0NTkyMjUsaz02NCpNYXRoLmNlaWwoKGMrOSkvNjQpLFM9bmV3IFVpbnQ4QXJyYXkoayk7Zm9yKHU9MDt1PGM7Kyt1KVNbdV09c1tsKytdO2ZvcihTW3UrK109MTI4LGg9ay04O3U8aDspU1t1KytdPTA7U1t1KytdPTAsU1t1KytdPTAsU1t1KytdPTAsU1t1KytdPWM+Pj4yOSYyNTUsU1t1KytdPWM+PjIxJjI1NSxTW3UrK109Yz4+MTMmMjU1LFNbdSsrXT1jPj41JjI1NSxTW3UrK109Yzw8MyYyNTU7dmFyIF8seD1uZXcgVWludDMyQXJyYXkoNjQpO2Zvcih1PTA7dTxrOyl7Zm9yKGY9MDtmPDE2OysrZil4W2ZdPVNbdV08PDI0fFNbdSsxXTw8MTZ8U1t1KzJdPDw4fFNbdSszXSx1Kz00O2ZvcihmPTE2O2Y8NjQ7KytmKXhbZl09MHwoZShfPXhbZi0yXSwxNyleZShfLDE5KV5fPj4+MTApK3hbZi03XStpKHhbZi0xNV0pK3hbZi0xNl07dmFyIEEsQyxQPWQsRT1wLFQ9bSxSPWcsTz12LEk9eSxGPWIsTD13O2ZvcihmPTA7Zjw2NDsrK2YpQT1MK2EoTykrdChPLEksRikrb1tmXSt4W2ZdLEM9bihQKStyKFAsRSxUKSxMPUYsRj1JLEk9TyxPPVIrQXwwLFI9VCxUPUUsRT1QLFA9QStDfDA7ZD1kK1B8MCxwPXArRXwwLG09bStUfDAsZz1nK1J8MCx2PXYrT3wwLHk9eStJfDAsYj1iK0Z8MCx3PXcrTHwwfXJldHVybiBuZXcgVWludDhBcnJheShbZD4+MjQmMjU1LGQ+PjE2JjI1NSxkPj44JjI1NSwyNTUmZCxwPj4yNCYyNTUscD4+MTYmMjU1LHA+PjgmMjU1LDI1NSZwLG0+PjI0JjI1NSxtPj4xNiYyNTUsbT4+OCYyNTUsMjU1Jm0sZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksYj4+MjQmMjU1LGI+PjE2JjI1NSxiPj44JjI1NSwyNTUmYix3Pj4yNCYyNTUsdz4+MTYmMjU1LHc+PjgmMjU1LDI1NSZ3XSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyB5KDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IHkoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyB5KDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IHkoMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgeSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IHkoMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgeSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyB5KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IHkoMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgeSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IHkoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyB5KDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IHkoMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgeSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IHkoMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyB5KDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IHkoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgeSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IHkoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyB5KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgeSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IHkoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgeSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyB5KDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IHkoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgeSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IHkoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgeSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyB5KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IHkoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgeSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IHkoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IHkoNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyB5KDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgeSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyB5KDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IHkoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgeSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyB5KDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IHkoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyB5KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IHkoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgeSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyB5KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgeSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyB5KDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IHkoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgeSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgeSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IHkoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyB5KDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgeSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IHkoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyB5KDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IHkoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgeSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyB5KDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IHkoMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgeSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyB5KDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgeSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IHkoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgeSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyB5KDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IHkoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgeSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IHkoMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgeSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyB5KDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgeSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IHkoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyB5KDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyB5KDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyB5KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgeSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IHkoMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgeSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyB5KDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IHkoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyB5KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGwsYyx1KXt2YXIgZixoLGQscCxtLGcsdixiOyh1PSEhdSk/KGY9bmV3IHkoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxoPW5ldyB5KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxkPW5ldyB5KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxwPW5ldyB5KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxtPW5ldyB5KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksZz1uZXcgeSgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLHY9bmV3IHkoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxiPW5ldyB5KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCkpOihmPW5ldyB5KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCksaD1uZXcgeSgzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUpLGQ9bmV3IHkoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKSxwPW5ldyB5KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSksbT1uZXcgeSgxMzU5ODkzMTE5LDI5MTc1NjUxMzcpLGc9bmV3IHkoMjYwMDgyMjkyNCw3MjU1MTExOTkpLHY9bmV3IHkoNTI4NzM0NjM1LDQyMTUzODk1NDcpLGI9bmV3IHkoMTU0MTQ1OTIyNSwzMjcwMzMyMDkpKTt2YXIgdyxrLFMsXz0xMjgqTWF0aC5jZWlsKChjKzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoXyk7Zm9yKHc9MDt3PGM7Kyt3KXhbd109c1tsKytdO2Zvcih4W3crK109MTI4LFM9Xy0xNjt3PFM7KXhbdysrXT0wO3hbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT1jPj4+MjkmMjU1LHhbdysrXT1jPj4yMSYyNTUseFt3KytdPWM+PjEzJjI1NSx4W3crK109Yz4+NSYyNTUseFt3KytdPWM8PDMmMjU1O3ZhciBBPW5ldyBBcnJheSg4MCk7Zm9yKHc9MDt3PDgwO3crKylBW3ddPW5ldyB5KDAsMCk7dmFyIEMsUCxFPW5ldyB5KDAsMCksVD1uZXcgeSgwLDApLFI9bmV3IHkoMCwwKSxPPW5ldyB5KDAsMCksST1uZXcgeSgwLDApLEY9bmV3IHkoMCwwKSxMPW5ldyB5KDAsMCksRD1uZXcgeSgwLDApLE09bmV3IHkoMCwwKSxOPW5ldyB5KDAsMCksaj1uZXcgeSgwLDApLEI9bmV3IHkoMCwwKTtmb3Iodz0wO3c8Xzspe2ZvcihrPTA7azwxNjsrK2spQVtrXS5oaWdoPXhbd108PDI0fHhbdysxXTw8MTZ8eFt3KzJdPDw4fHhbdyszXSxBW2tdLmxvdz14W3crNF08PDI0fHhbdys1XTw8MTZ8eFt3KzZdPDw4fHhbdys3XSx3Kz04O2ZvcihrPTE2O2s8ODA7KytrKWkoQz1BW2tdLEFbay0yXSxCKSxDLmFkZChBW2stN10pLGEoaixBW2stMTVdLEIpLEMuYWRkKGopLEMuYWRkKEFbay0xNl0pO2ZvcihFLmFzc2lnbihmKSxULmFzc2lnbihoKSxSLmFzc2lnbihkKSxPLmFzc2lnbihwKSxJLmFzc2lnbihtKSxGLmFzc2lnbihnKSxMLmFzc2lnbih2KSxELmFzc2lnbihiKSxrPTA7azw4MDsrK2spTS5hc3NpZ24oRCksbihqLEksQiksTS5hZGQoaiksZShqLEksRixMLEIpLE0uYWRkKGopLE0uYWRkKG9ba10pLE0uYWRkKEFba10pLHIoTixFLEIpLHQoaixFLFQsUixCKSxOLmFkZChqKSxDPUQsRD1MLEw9RixGPUksTy5hZGQoTSksST1PLE89UixSPVQsVD1FLEMuYXNzaWduKE0pLEMuYWRkKE4pLEU9QztmLmFkZChFKSxoLmFkZChUKSxkLmFkZChSKSxwLmFkZChPKSxtLmFkZChJKSxnLmFkZChGKSx2LmFkZChMKSxiLmFkZChEKX1yZXR1cm4gdT8oUD1uZXcgVWludDhBcnJheSg0OCksZi5jb3B5VG8oUCwwKSxoLmNvcHlUbyhQLDgpLGQuY29weVRvKFAsMTYpLHAuY29weVRvKFAsMjQpLG0uY29weVRvKFAsMzIpLGcuY29weVRvKFAsNDApKTooUD1uZXcgVWludDhBcnJheSg2NCksZi5jb3B5VG8oUCwwKSxoLmNvcHlUbyhQLDgpLGQuY29weVRvKFAsMTYpLHAuY29weVRvKFAsMjQpLG0uY29weVRvKFAsMzIpLGcuY29weVRvKFAsNDApLHYuY29weVRvKFAsNDgpLGIuY29weVRvKFAsNTYpKSxQfX0oKTt0LmNhbGN1bGF0ZVNIQTUxMj13O3ZhciBrPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdyhlLHQsciwhMCl9O3QuY2FsY3VsYXRlU0hBMzg0PWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZT17ZGVjcnlwdEJsb2NrOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZX0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGw9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7bD49MTstLWwpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIGM9MDtjPDE2OysrYylpW2NdPXRoaXMuX2ludl9zW2lbY11dO2Zvcih2YXIgdT0wLGY9MTYqbDt1PDE2OysrdSwrK2YpaVt1XV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLG09dGhpcy5fbWl4W2lbaCsyXV0sZz10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjRebT4+PjE2Xm08PDE2Xmc+Pj4yNF5nPDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHY9MDt2PDE2OysrdilpW3ZdPXRoaXMuX2ludl9zW2lbdl1dLGlbdl1ePXRbdl07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBsPTE7bDx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247bCsrKXtmb3IodmFyIGM9MDtjPDE2OysrYylvW2NdPWlbb1tjXV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgdT0wO3U8MTY7dSs9NCl7dmFyIGY9b1t1KzBdLGg9b1t1KzFdLGQ9b1t1KzJdLHA9b1t1KzNdO3I9Zl5oXmRecCxvW3UrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1t1KzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bdSsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW3UrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBtPTAsZz0xNipsO208MTY7KyttLCsrZylvW21dXj10W2ddfWZvcih2YXIgdj0wO3Y8MTY7Kyt2KW9bdl09aVtvW3ZdXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciB5PTAsYj10aGlzLl9rZXlTaXplO3k8MTY7Kyt5LCsrYilvW3ldXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgbD10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSxjPTA7YzwxNjsrK2MpbFtjXV49b1tjXTtvPW4saS5wdXNoKGwpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHU9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aVtpLmxlbmd0aC0xXSxoPWZbMTVdO2lmKGg8PTE2KXtmb3IodmFyIGQ9MTUscD0xNi1oO2Q+PXA7LS1kKWlmKGZbZF0hPT1oKXtoPTA7YnJlYWt9dS09aCxpW2kubGVuZ3RoLTFdPWYuc3ViYXJyYXkoMCwxNi1oKX19Zm9yKHZhciBtPW5ldyBVaW50OEFycmF5KHUpLGc9MCx2PTAseT1pLmxlbmd0aDtnPHk7KytnLHYrPTE2KW0uc2V0KGlbZ10sdik7cmV0dXJuIG19fSx7a2V5OiJkZWNyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsbj1lLmxlbmd0aCxhPXRoaXMuYnVmZmVyLGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihyKXRoaXMuaXY9cjtlbHNle2Zvcih2YXIgbz0wO2k8MTYmJm88bjsrK28sKytpKWFbaV09ZVtvXTtpZihpPDE2KXJldHVybiB0aGlzLmJ1ZmZlckxlbmd0aD1pLG5ldyBVaW50OEFycmF5KDApO3RoaXMuaXY9YSxlPWUuc3ViYXJyYXkoMTYpfXJldHVybiB0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syLHRoaXMuZGVjcnlwdEJsb2NrKGUsdCl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W107dHx8KHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKTtmb3IodmFyIG89MDtvPHI7KytvKWlmKG5bYV09ZVtvXSwhKCsrYTwxNikpe2Zvcih2YXIgcz0wO3M8MTY7KytzKW5bc11ePXRbc107dmFyIGw9dGhpcy5fZW5jcnlwdChuLHRoaXMuX2tleSk7dD1sLGkucHVzaChsKSxuPW5ldyBVaW50OEFycmF5KDE2KSxhPTB9aWYodGhpcy5idWZmZXI9bix0aGlzLmJ1ZmZlckxlbmd0aD1hLHRoaXMuaXY9dCwwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2Zvcih2YXIgYz0xNippLmxlbmd0aCx1PW5ldyBVaW50OEFycmF5KGMpLGY9MCxoPTAsZD1pLmxlbmd0aDtmPGQ7KytmLGgrPTE2KXUuc2V0KGlbZl0saCk7cmV0dXJuIHV9fV0pLGV9KCkseD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBmKHRoaXMsdCksKHI9cyh0aGlzLGwodCkuY2FsbCh0aGlzKSkpLl9jeWNsZXNPZlJlcGV0aXRpb249MTAsci5fa2V5U2l6ZT0xNjAsci5fcmNvbj1uZXcgVWludDhBcnJheShbMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MV0pLHIuX2tleT1yLl9leHBhbmRLZXkoZSkscn1yZXR1cm4gYyh0LGUpLGQodCxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcyxyPXRoaXMuX3Jjb24sbj1uZXcgVWludDhBcnJheSgxNzYpO24uc2V0KGUpO2Zvcih2YXIgYT0xNixpPTE7YTwxNzY7KytpKXt2YXIgbz1uW2EtM10scz1uW2EtMl0sbD1uW2EtMV0sYz1uW2EtNF07bz10W29dLHM9dFtzXSxsPXRbbF0sYz10W2NdLG9ePXJbaV07Zm9yKHZhciB1PTA7dTw0OysrdSluW2FdPW9ePW5bYS0xNl0sblsrK2FdPXNePW5bYS0xNl0sblsrK2FdPWxePW5bYS0xNl0sblsrK2FdPWNePW5bYS0xNl0sYSsrfXJldHVybiBufX1dKSx0fShfKTt0LkFFUzEyOENpcGhlcj14O3ZhciBBPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIGYodGhpcyx0KSwocj1zKHRoaXMsbCh0KS5jYWxsKHRoaXMpKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xNCxyLl9rZXlTaXplPTIyNCxyLl9rZXk9ci5fZXhwYW5kS2V5KGUpLHJ9cmV0dXJuIGModCxlKSxkKHQsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj1uZXcgVWludDhBcnJheSgyNDApO3Iuc2V0KGUpO2Zvcih2YXIgbixhLGksbyxzPTEsbD0zMixjPTE7bDwyNDA7KytjKXtsJTMyPT0xNj8obj10W25dLGE9dFthXSxpPXRbaV0sbz10W29dKTpsJTMyPT0wJiYobj1yW2wtM10sYT1yW2wtMl0saT1yW2wtMV0sbz1yW2wtNF0sbj10W25dLGE9dFthXSxpPXRbaV0sbz10W29dLG5ePXMsKHM8PD0xKT49MjU2JiYocz0yNTUmKDI3XnMpKSk7Zm9yKHZhciB1PTA7dTw0OysrdSlyW2xdPW5ePXJbbC0zMl0sclsrK2xdPWFePXJbbC0zMl0sclsrK2xdPWlePXJbbC0zMl0sclsrK2xdPW9ePXJbbC0zMl0sbCsrfXJldHVybiByfX1dKSx0fShfKTt0LkFFUzI1NkNpcGhlcj1BO3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGU9e2NoZWNrT3duZXJQYXNzd29yZDpmdW5jdGlvbih0LHIsbixhKXt2YXIgaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7cmV0dXJuIGkuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCksZShiKGksMCxpLmxlbmd0aCksYSl9LGNoZWNrVXNlclBhc3N3b3JkOmZ1bmN0aW9uKHQscixuKXt2YXIgYT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs4KTtyZXR1cm4gYS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKSxlKGIoYSwwLGEubGVuZ3RoKSxuKX0sZ2V0T3duZXJLZXk6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCksYS5zZXQocixlLmxlbmd0aCt0Lmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybiBuZXcgQShpKS5kZWNyeXB0QmxvY2sobiwhMSxuZXcgVWludDhBcnJheSgxNikpfSxnZXRVc2VyS2V5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHR9KCk7dC5QREYxNz1DO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gci5zZXQoZSwwKSxyLnNldCh0LGUubGVuZ3RoKSxyfWZ1bmN0aW9uIHQodCxyLG4pe2Zvcih2YXIgYT1iKHIsMCxyLmxlbmd0aCkuc3ViYXJyYXkoMCwzMiksaT1bMF0sbz0wO288NjR8fGlbaS5sZW5ndGgtMV0+by0zMjspe3ZhciBzPXQubGVuZ3RoK2EubGVuZ3RoK24ubGVuZ3RoLGw9bmV3IFVpbnQ4QXJyYXkoNjQqcyksYz1lKHQsYSk7Yz1lKGMsbik7Zm9yKHZhciB1PTAsZj0wO3U8NjQ7dSsrLGYrPXMpbC5zZXQoYyxmKTtpPW5ldyB4KGEuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQobCxhLnN1YmFycmF5KDE2LDMyKSk7Zm9yKHZhciBoPTAsZD0wO2Q8MTY7ZCsrKWgqPTEsaCU9MyxoKz0oaVtkXT4+PjApJTMsaCU9MzswPT09aD9hPWIoaSwwLGkubGVuZ3RoKToxPT09aD9hPWsoaSwwLGkubGVuZ3RoKToyPT09aCYmKGE9dyhpLDAsaS5sZW5ndGgpKSxvKyt9cmV0dXJuIGEuc3ViYXJyYXkoMCwzMil9ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBuKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gci5wcm90b3R5cGU9e2hhc2g6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KGUscixuKX0sY2hlY2tPd25lclBhc3N3b3JkOmZ1bmN0aW9uKGUscixhLGkpe3ZhciBvPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtyZXR1cm4gby5zZXQoZSwwKSxvLnNldChyLGUubGVuZ3RoKSxvLnNldChhLGUubGVuZ3RoK3IubGVuZ3RoKSxuKHQoZSxvLGEpLGkpfSxjaGVja1VzZXJQYXNzd29yZDpmdW5jdGlvbihlLHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7cmV0dXJuIGkuc2V0KGUsMCksaS5zZXQocixlLmxlbmd0aCksbih0KGUsaSxbXSksYSl9LGdldE93bmVyS2V5OmZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtpLnNldChlLDApLGkuc2V0KHIsZS5sZW5ndGgpLGkuc2V0KG4sZS5sZW5ndGgrci5sZW5ndGgpO3ZhciBvPXQoZSxpLG4pO3JldHVybiBuZXcgQShvKS5kZWNyeXB0QmxvY2soYSwhMSxuZXcgVWludDhBcnJheSgxNikpfSxnZXRVc2VyS2V5OmZ1bmN0aW9uKGUscixuKXt2YXIgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTthLnNldChlLDApLGEuc2V0KHIsZS5sZW5ndGgpO3ZhciBpPXQoZSxhLFtdKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHJ9KCk7dC5QREYyMD1QO3ZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I9ZSx0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yPXR9cmV0dXJuIGUucHJvdG90eXBlPXtjcmVhdGVTdHJlYW06ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9LGRlY3J5cHRTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3Iscj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiByPXQuZGVjcnlwdEJsb2NrKHIsITApLCgwLG4uYnl0ZXNUb1N0cmluZykocil9fSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxsKXt2YXIgYyx1LGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IodT1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDx1OysrZCloW2RdPXJbZF07Zm9yKGM9MDtkPDMyOyloW2QrK109ZVtjKytdO2ZvcihjPTAsdT1uLmxlbmd0aDtjPHU7KytjKWhbZCsrXT1uW2NdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsYz0wLHU9dC5sZW5ndGg7Yzx1OysrYyloW2QrK109dFtjXTtvPj00JiYhbCYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBtPXYoaCwwLGQpLGc9cz4+MztpZihvPj0zKWZvcihjPTA7Yzw1MDsrK2MpbT12KG0sMCxnKTt2YXIgeSxiPW0uc3ViYXJyYXkoMCxnKTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IoYz0wLHU9dC5sZW5ndGg7Yzx1OysrYyloW2QrK109dFtjXTt5PW5ldyBwKGIpLmVuY3J5cHRCbG9jayh2KGgsMCxkKSksdT1iLmxlbmd0aDt2YXIgdyxrPW5ldyBVaW50OEFycmF5KHUpO2ZvcihjPTE7Yzw9MTk7KytjKXtmb3Iodz0wO3c8dTsrK3cpa1t3XT1iW3ddXmM7eT1uZXcgcChrKS5lbmNyeXB0QmxvY2soeSl9Zm9yKGM9MCx1PXkubGVuZ3RoO2M8dTsrK2MpaWYoYVtjXSE9PXlbY10pcmV0dXJuIG51bGx9ZWxzZSBmb3IoYz0wLHU9KHk9bmV3IHAoYikuZW5jcnlwdEJsb2NrKGUpKS5sZW5ndGg7Yzx1OysrYylpZihhW2NdIT09eVtjXSlyZXR1cm4gbnVsbDtyZXR1cm4gYn12YXIgcj1hLk5hbWUuZ2V0KCJJZGVudGl0eSIpO2Z1bmN0aW9uIGkoaSxvLHMpe3ZhciBsPWkuZ2V0KCJGaWx0ZXIiKTtpZighKDAsYS5pc05hbWUpKGwsIlN0YW5kYXJkIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gZW5jcnlwdGlvbiBtZXRob2QiKTt0aGlzLmRpY3Q9aTt2YXIgYz1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHwxIT09YyYmMiE9PWMmJjQhPT1jJiY1IT09Yyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1jO3ZhciB1PWkuZ2V0KCJMZW5ndGgiKTtpZighdSlpZihjPD0zKXU9NDA7ZWxzZXt2YXIgZj1pLmdldCgiQ0YiKSxoPWkuZ2V0KCJTdG1GIik7aWYoKDAsYS5pc0RpY3QpKGYpJiYoMCxhLmlzTmFtZSkoaCkpe2Yuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3ZhciBkPWYuZ2V0KGgubmFtZSk7KHU9ZCYmZC5nZXQoIkxlbmd0aCIpfHwxMjgpPDQwJiYodTw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcih1KXx8dTw0MHx8dSU4IT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgbT0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPIikpLnN1YmFycmF5KDAsMzIpLGc9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgwLDMyKSx5PWkuZ2V0KCJQIiksYj1pLmdldCgiUiIpLHc9KDQ9PT1jfHw1PT09YykmJiExIT09aS5nZXQoIkVuY3J5cHRNZXRhZGF0YSIpO3RoaXMuZW5jcnlwdE1ldGFkYXRhPXc7dmFyIGssUyxfPSgwLG4uc3RyaW5nVG9CeXRlcykobyk7aWYocyl7aWYoNj09PWIpdHJ5e3M9KDAsbi51dGY4U3RyaW5nVG9TdHJpbmcpKHMpfWNhdGNoKGUpeygwLG4ud2FybikoIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4iKX1rPSgwLG4uc3RyaW5nVG9CeXRlcykocyl9aWYoNSE9PWMpUz10KF8sayxtLGcseSxiLHUsdyk7ZWxzZXt2YXIgeD0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPIikpLnN1YmFycmF5KDMyLDQwKSxBPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoNDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgwLDQ4KSxUPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlUiKSkuc3ViYXJyYXkoMzIsNDApLFI9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSg0MCw0OCksTz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPRSIpKSxJPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlVFIikpOygwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlBlcm1zIikpLFM9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyxzLGwsYyx1LGYpe2lmKHQpe3ZhciBoPU1hdGgubWluKDEyNyx0Lmxlbmd0aCk7dD10LnN1YmFycmF5KDAsaCl9ZWxzZSB0PVtdO3ZhciBkO3JldHVybihkPTY9PT1lP25ldyBQOm5ldyBDKS5jaGVja1VzZXJQYXNzd29yZCh0LHMsbyk/ZC5nZXRVc2VyS2V5KHQsbCx1KTp0Lmxlbmd0aCYmZC5jaGVja093bmVyUGFzc3dvcmQodCxuLGkscik/ZC5nZXRPd25lcktleSh0LGEsaSxjKTpudWxsfShiLGssbSx4LEEsRSxnLFQsUixPLEkpfWlmKCFTJiYhcyl0aHJvdyBuZXcgbi5QYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLG4uUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7aWYoIVMmJnMmJihTPXQoXyxmdW5jdGlvbih0LHIsbixhKXt2YXIgaSxvLHM9bmV3IFVpbnQ4QXJyYXkoMzIpLGw9MDtmb3Iobz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bDxvOysrbClzW2xdPXRbbF07Zm9yKGk9MDtsPDMyOylzW2wrK109ZVtpKytdO3ZhciBjLHU9dihzLDAsbCksZj1hPj4zO2lmKG4+PTMpZm9yKGk9MDtpPDUwOysraSl1PXYodSwwLHUubGVuZ3RoKTtpZihuPj0zKXtjPXI7dmFyIGgsZD1uZXcgVWludDhBcnJheShmKTtmb3IoaT0xOTtpPj0wO2ktLSl7Zm9yKGg9MDtoPGY7KytoKWRbaF09dVtoXV5pO2M9bmV3IHAoZCkuZW5jcnlwdEJsb2NrKGMpfX1lbHNlIGM9bmV3IHAodS5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIGN9KGssbSxiLHUpLG0sZyx5LGIsdSx3KSksIVMpdGhyb3cgbmV3IG4uUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsbi5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO2lmKHRoaXMuZW5jcnlwdGlvbktleT1TLGM+PTQpe3ZhciBGPWkuZ2V0KCJDRiIpOygwLGEuaXNEaWN0KShGKSYmKEYuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKSx0aGlzLmNmPUYsdGhpcy5zdG1mPWkuZ2V0KCJTdG1GIil8fHIsdGhpcy5zdHJmPWkuZ2V0KCJTdHJGIil8fHIsdGhpcy5lZmY9aS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWZ1bmN0aW9uIG8oZSx0LHIsbil7dmFyIGEsaSxvPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKzkpO2ZvcihhPTAsaT1yLmxlbmd0aDthPGk7KythKW9bYV09clthXTtyZXR1cm4gb1thKytdPTI1NSZlLG9bYSsrXT1lPj44JjI1NSxvW2ErK109ZT4+MTYmMjU1LG9bYSsrXT0yNTUmdCxvW2ErK109dD4+OCYyNTUsbiYmKG9bYSsrXT0xMTUsb1thKytdPTY1LG9bYSsrXT0xMDgsb1thKytdPTg0KSx2KG8sMCxhKS5zdWJhcnJheSgwLE1hdGgubWluKHIubGVuZ3RoKzUsMTYpKX1mdW5jdGlvbiBzKGUsdCxyLGkscyl7aWYoISgwLGEuaXNOYW1lKSh0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTt2YXIgbCxjPWUuZ2V0KHQubmFtZSk7aWYobnVsbCE9YyYmKGw9Yy5nZXQoIkNGTSIpKSwhbHx8Ik5vbmUiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgU307aWYoIlYyIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAobyhyLGkscywhMSkpfTtpZigiQUVTVjIiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgeChvKHIsaSxzLCEwKSl9O2lmKCJBRVNWMyI9PT1sLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHMpfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBjcnlwdG8gbWV0aG9kIil9cmV0dXJuIGkucHJvdG90eXBlPXtjcmVhdGVDaXBoZXJUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0KXtpZig0PT09dGhpcy5hbGdvcml0aG18fDU9PT10aGlzLmFsZ29yaXRobSlyZXR1cm4gbmV3IEUocyh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSxzKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpKTt2YXIgcj1vKGUsdCx0aGlzLmVuY3J5cHRpb25LZXksITEpLG49ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAocil9O3JldHVybiBuZXcgRShuLG4pfX0saX0oKTt0LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9VH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2xvclNwYWNlPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09aSh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHMoZSl7cmV0dXJuKHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYyhlLHQpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4oYz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBoKGUsdCxyKXtyZXR1cm4gdCYmZihlLnByb3RvdHlwZSx0KSxyJiZmKGUsciksZX12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt1KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLiIpLHRoaXMubmFtZT10LHRoaXMubnVtQ29tcHM9cn1yZXR1cm4gaChlLFt7a2V5OiJnZXRSZ2IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3JldHVybiB0aGlzLmdldFJnYkl0ZW0oZSx0LHIsMCkscn19LHtrZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIil9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsaSxvLHMpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIil9fSx7a2V5OiJpc1Bhc3N0aHJvdWdoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5pc0RlZmF1bHREZWNvZGUodCx0aGlzLm51bUNvbXBzKX19LHtrZXk6ImZpbGxSZ2IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8scyxsKXt2YXIgYz10KnIsdT1udWxsLGY9MTw8byxoPXIhPT1hfHx0IT09bjtpZih0aGlzLmlzUGFzc3Rocm91Z2gobykpdT1zO2Vsc2UgaWYoMT09PXRoaXMubnVtQ29tcHMmJmM+ZiYmIkRldmljZUdyYXkiIT09dGhpcy5uYW1lJiYiRGV2aWNlUkdCIiE9PXRoaXMubmFtZSl7Zm9yKHZhciBkPW88PTg/bmV3IFVpbnQ4QXJyYXkoZik6bmV3IFVpbnQxNkFycmF5KGYpLHA9MDtwPGY7cCsrKWRbcF09cDt2YXIgbT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypmKTtpZih0aGlzLmdldFJnYkJ1ZmZlcihkLDAsZixtLDAsbywwKSxoKXt1PW5ldyBVaW50OEFycmF5KDMqYyk7Zm9yKHZhciBnPTAsdj0wO3Y8YzsrK3Ype3ZhciB5PTMqc1t2XTt1W2crK109bVt5XSx1W2crK109bVt5KzFdLHVbZysrXT1tW3krMl19fWVsc2UgZm9yKHZhciBiPTAsdz0wO3c8YzsrK3cpe3ZhciBrPTMqc1t3XTtlW2IrK109bVtrXSxlW2IrK109bVtrKzFdLGVbYisrXT1tW2srMl0sYis9bH19ZWxzZSBoPyh1PW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMpLHRoaXMuZ2V0UmdiQnVmZmVyKHMsMCxjLHUsMCxvLDApKTp0aGlzLmdldFJnYkJ1ZmZlcihzLDAsbippLGUsMCxvLGwpO2lmKHUpaWYoaCkhZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7bz0xIT09bz8wOm87Zm9yKHZhciBzLGw9ci9hLGM9bi9pLHU9MCxmPW5ldyBVaW50MTZBcnJheShhKSxoPTMqcixkPTA7ZDxhO2QrKylmW2RdPTMqTWF0aC5mbG9vcihkKmwpO2Zvcih2YXIgcD0wO3A8aTtwKyspZm9yKHZhciBtPU1hdGguZmxvb3IocCpjKSpoLGc9MDtnPGE7ZysrKXM9bStmW2ddLHRbdSsrXT1lW3MrK10sdFt1KytdPWVbcysrXSx0W3UrK109ZVtzKytdLHUrPW99KHUsZSx0LHIsbixhLGwpO2Vsc2UgZm9yKHZhciBTPTAsXz0wLHg9MCxBPW4qaTt4PEE7eCsrKWVbUysrXT11W18rK10sZVtTKytdPXVbXysrXSxlW1MrK109dVtfKytdLFMrPWx9fSx7a2V5OiJ1c2VzWmVyb1RvT25lUmFuZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ1c2VzWmVyb1RvT25lUmFuZ2UiLCEwKX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMucGFyc2VUb0lSKGUsdCxyLG4pO3JldHVybiB0aGlzLmZyb21JUihhKX19LHtrZXk6ImZyb21JUiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixhLGk9QXJyYXkuaXNBcnJheShlKT9lWzBdOmU7c3dpdGNoKGkpe2Nhc2UiRGV2aWNlR3JheUNTIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJEZXZpY2VSZ2JDUyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJEZXZpY2VDbXlrQ1MiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIkNhbEdyYXlDUyI6cmV0dXJuIHQ9ZVsxXSxyPWVbMl0sYT1lWzNdLG5ldyB3KHQscixhKTtjYXNlIkNhbFJHQkNTIjp0PWVbMV0scj1lWzJdLGE9ZVszXTt2YXIgbz1lWzRdO3JldHVybiBuZXcgayh0LHIsYSxvKTtjYXNlIlBhdHRlcm5DUyI6dmFyIHM9ZVsxXTtyZXR1cm4gcyYmKHM9dGhpcy5mcm9tSVIocykpLG5ldyBtKHMpO2Nhc2UiSW5kZXhlZENTIjp2YXIgbD1lWzFdLGM9ZVsyXSx1PWVbM107cmV0dXJuIG5ldyBnKHRoaXMuZnJvbUlSKGwpLGMsdSk7Y2FzZSJBbHRlcm5hdGVDUyI6dmFyIGY9ZVsxXSxoPWVbMl0sZD1lWzNdO3JldHVybiBuZXcgcChmLHRoaXMuZnJvbUlSKGgpLGQpO2Nhc2UiTGFiQ1MiOnQ9ZVsxXSxyPWVbMl07dmFyIHY9ZVszXTtyZXR1cm4gbmV3IFModCxyLHYpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY29sb3JzcGFjZSBuYW1lOiAiLmNvbmNhdChpKSl9fX0se2tleToicGFyc2VUb0lSIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoZT10LmZldGNoSWZSZWYoZSksKDAsYS5pc05hbWUpKGUpKXN3aXRjaChlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Y2FzZSJHIjpyZXR1cm4iRGV2aWNlR3JheUNTIjtjYXNlIkRldmljZVJHQiI6Y2FzZSJSR0IiOnJldHVybiJEZXZpY2VSZ2JDUyI7Y2FzZSJEZXZpY2VDTVlLIjpjYXNlIkNNWUsiOnJldHVybiJEZXZpY2VDbXlrQ1MiO2Nhc2UiUGF0dGVybiI6cmV0dXJuWyJQYXR0ZXJuQ1MiLG51bGxdO2RlZmF1bHQ6aWYoKDAsYS5pc0RpY3QpKHIpKXt2YXIgbz1yLmdldCgiQ29sb3JTcGFjZSIpO2lmKCgwLGEuaXNEaWN0KShvKSl7dmFyIHM9by5nZXQoZS5uYW1lKTtpZihzKXtpZigoMCxhLmlzTmFtZSkocykpcmV0dXJuIHRoaXMucGFyc2VUb0lSKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bnJlY29nbml6ZWQgY29sb3JzcGFjZSAiLmNvbmNhdChlLm5hbWUpKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbCxjLHUsZixoLGQscD10LmZldGNoSWZSZWYoZVswXSkubmFtZTtzd2l0Y2gocCl7Y2FzZSJEZXZpY2VHcmF5IjpjYXNlIkciOnJldHVybiJEZXZpY2VHcmF5Q1MiO2Nhc2UiRGV2aWNlUkdCIjpjYXNlIlJHQiI6cmV0dXJuIkRldmljZVJnYkNTIjtjYXNlIkRldmljZUNNWUsiOmNhc2UiQ01ZSyI6cmV0dXJuIkRldmljZUNteWtDUyI7Y2FzZSJDYWxHcmF5IjpyZXR1cm5bIkNhbEdyYXlDUyIsZj0oYz10LmZldGNoSWZSZWYoZVsxXSkpLmdldEFycmF5KCJXaGl0ZVBvaW50IiksaD1jLmdldEFycmF5KCJCbGFja1BvaW50IiksZD1jLmdldCgiR2FtbWEiKV07Y2FzZSJDYWxSR0IiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXRBcnJheSgiR2FtbWEiKTt2YXIgbT1jLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm5bIkNhbFJHQkNTIixmLGgsZCxtXTtjYXNlIklDQ0Jhc2VkIjp2YXIgZz10LmZldGNoSWZSZWYoZVsxXSksdj1nLmRpY3Q7aWYobD12LmdldCgiTiIpLHU9di5nZXQoIkFsdGVybmF0ZSIpKXt2YXIgeT10aGlzLnBhcnNlVG9JUih1LHQscixpKSxiPXRoaXMuZnJvbUlSKHksaSk7aWYoYi5udW1Db21wcz09PWwpcmV0dXJuIHk7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT1sKXJldHVybiJEZXZpY2VHcmF5Q1MiO2lmKDM9PT1sKXJldHVybiJEZXZpY2VSZ2JDUyI7aWYoND09PWwpcmV0dXJuIkRldmljZUNteWtDUyI7YnJlYWs7Y2FzZSJQYXR0ZXJuIjp2YXIgdz1lWzFdfHxudWxsO3JldHVybiB3JiYodz10aGlzLnBhcnNlVG9JUih3LHQscixpKSksWyJQYXR0ZXJuQ1MiLHddO2Nhc2UiSW5kZXhlZCI6Y2FzZSJJIjp2YXIgaz10aGlzLnBhcnNlVG9JUihlWzFdLHQscixpKSxTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLF89dC5mZXRjaElmUmVmKGVbM10pO3JldHVybigwLGEuaXNTdHJlYW0pKF8pJiYoXz1fLmdldEJ5dGVzKCkpLFsiSW5kZXhlZENTIixrLFMsX107Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciB4PXQuZmV0Y2hJZlJlZihlWzFdKTtsPUFycmF5LmlzQXJyYXkoeCk/eC5sZW5ndGg6MSx1PXRoaXMucGFyc2VUb0lSKGVbMl0sdCxyLGkpO3ZhciBBPWkuY3JlYXRlKHQuZmV0Y2hJZlJlZihlWzNdKSk7cmV0dXJuWyJBbHRlcm5hdGVDUyIsbCx1LEFdO2Nhc2UiTGFiIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTt2YXIgQz1jLmdldEFycmF5KCJSYW5nZSIpO3JldHVyblsiTGFiQ1MiLGYsaCxDXTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCd1bmltcGxlbWVudGVkIGNvbG9yIHNwYWNlIG9iamVjdCAiJy5jb25jYXQocCwnIicpKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ3VucmVjb2duaXplZCBjb2xvciBzcGFjZSBvYmplY3Q6ICInLmNvbmNhdChlLCciJykpfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIqdCE9PWUubGVuZ3RoKXJldHVybigwLG4ud2FybikoIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKSwhMDtmb3IodmFyIHI9MCxhPWUubGVuZ3RoO3I8YTtyKz0yKWlmKDAhPT1lW3JdfHwxIT09ZVtyKzFdKXJldHVybiExO3JldHVybiEwfX0se2tleToic2luZ2xldG9ucyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInNpbmdsZXRvbnMiLHtnZXQgZ3JheSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJncmF5IixuZXcgdil9LGdldCByZ2IoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmdiIixuZXcgeSl9LGdldCBjbXlrKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNteWsiLG5ldyBiKX19KX19XSksZX0oKTt0LkNvbG9yU3BhY2U9ZDt2YXIgcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHQpLChhPW8odGhpcyxzKHQpLmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkpLmJhc2U9cixhLnRpbnRGbj1uLGEudG1wQnVmPW5ldyBGbG9hdDMyQXJyYXkoci5udW1Db21wcyksYX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy50bXBCdWY7dGhpcy50aW50Rm4oZSx0LGEsMCksdGhpcy5iYXNlLmdldFJnYkl0ZW0oYSwwLHIsbil9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3ZhciBzLGwsYz10aGlzLnRpbnRGbix1PXRoaXMuYmFzZSxmPTEvKCgxPDxpKS0xKSxoPXUubnVtQ29tcHMsZD11LnVzZXNaZXJvVG9PbmVSYW5nZSxwPSh1LmlzUGFzc3Rocm91Z2goOCl8fCFkKSYmMD09PW8sbT1wP2E6MCxnPXA/bjpuZXcgVWludDhDbGFtcGVkQXJyYXkoaCpyKSx2PXRoaXMubnVtQ29tcHMseT1uZXcgRmxvYXQzMkFycmF5KHYpLGI9bmV3IEZsb2F0MzJBcnJheShoKTtmb3Iocz0wO3M8cjtzKyspe2ZvcihsPTA7bDx2O2wrKyl5W2xdPWVbdCsrXSpmO2lmKGMoeSwwLGIsMCksZClmb3IobD0wO2w8aDtsKyspZ1ttKytdPTI1NSpiW2xdO2Vsc2UgdS5nZXRSZ2JJdGVtKGIsMCxnLG0pLG0rPWh9cHx8dS5nZXRSZ2JCdWZmZXIoZywwLHIsbixhLDgsbyl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMvdGhpcy5udW1Db21wcyx0KX19XSksdH0oZCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiB1KHRoaXMsdCksKHI9byh0aGlzLHModCkuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkpLmJhc2U9ZSxyfXJldHVybiBsKHQsZSksaCh0LFt7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlIil9fV0pLHR9KGQpLGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGw7dSh0aGlzLHQpLChsPW8odGhpcyxzKHQpLmNhbGwodGhpcywiSW5kZXhlZCIsMSkpKS5iYXNlPWUsbC5oaWdoVmFsPXI7dmFyIGM9ZS5udW1Db21wcypyO2lmKCgwLGEuaXNTdHJlYW0pKGkpKXtsLmxvb2t1cD1uZXcgVWludDhBcnJheShjKTt2YXIgZj1pLmdldEJ5dGVzKGMpO2wubG9va3VwLnNldChmKX1lbHNlIGlmKCgwLG4uaXNTdHJpbmcpKGkpKXtsLmxvb2t1cD1uZXcgVWludDhBcnJheShjKTtmb3IodmFyIGg9MDtoPGM7KytoKWwubG9va3VwW2hdPWkuY2hhckNvZGVBdChoKX1lbHNle2lmKCEoaSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiAiLmNvbmNhdChpKSk7bC5sb29rdXA9aX1yZXR1cm4gbH1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGw9cy5udW1Db21wcyxjPXMuZ2V0T3V0cHV0TGVuZ3RoKGwsbyksdT10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmw7cy5nZXRSZ2JCdWZmZXIodSxoLDEsbixhLDgsbyksYSs9Y319fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSksdH0oZCksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHUodGhpcyx0KSxvKHRoaXMscyh0KS5jYWxsKHRoaXMsIkRldmljZUdyYXkiLDEpKX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxsPXQsYz1hLHU9MDt1PHI7Kyt1KXt2YXIgZj1zKmVbbCsrXTtuW2MrK109ZixuW2MrK109ZixuW2MrK109ZixjKz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSksdH0oZCkseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHUodGhpcyx0KSxvKHRoaXMscyh0KS5jYWxsKHRoaXMsIkRldmljZVJHQiIsMykpfXJldHVybiBsKHQsZSksaCh0LFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGw9dCxjPWEsdT0wO3U8cjsrK3UpbltjKytdPXMqZVtsKytdLG5bYysrXT1zKmVbbCsrXSxuW2MrK109cyplW2wrK10sYys9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSx0fShkKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsbD1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmwtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqbC01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypsKzE3LjUxMTkyNzA4NDE4MTMpK2wqKC0yMS44NjEyMjE0NzQ2MzYwNSpsLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmwtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipsLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpsLTI0Ljg2NzQxNTgyNTU1ODc4KStsKigtMjAuNzM3MzI1NDcxMTgxMDM0KmwtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpsLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpsLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmwtMTkzLjU4MjA5MzU2ODYxNTA1KStsKigtMjIuMzM4MTY4MDczMDk4ODYqbC0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSxvKHRoaXMscyhyKS5jYWxsKHRoaXMsIkRldmljZUNNWUsiLDQpKX1yZXR1cm4gbChyLHQpLGgocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGw9MS8oKDE8PG8pLTEpLGM9MDtjPG47YysrKWUodCxyLGwsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLHJ9KGQpfSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksbD1lLllXKnMsYz1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhsLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09YyxuW2ErMV09YyxuW2ErMl09Y31yZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHQsYSl7dmFyIGk7aWYodSh0aGlzLHIpLGk9byh0aGlzLHMocikuY2FsbCh0aGlzLCJDYWxHcmF5IiwxKSksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7aWYodD10fHxbMCwwLDBdLGE9YXx8MSxpLlhXPWVbMF0saS5ZVz1lWzFdLGkuWlc9ZVsyXSxpLlhCPXRbMF0saS5ZQj10WzFdLGkuWkI9dFsyXSxpLkc9YSxpLlhXPDB8fGkuWlc8MHx8MSE9PWkuWVcpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdChpLm5hbWUpKyIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihpLlhCPDB8fGkuWUI8MHx8aS5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQoaS5uYW1lLCIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LiIpKSxpLlhCPWkuWUI9aS5aQj0wKSwwPT09aS5YQiYmMD09PWkuWUImJjA9PT1pLlpCfHwoMCxuLndhcm4pKCIiLmNvbmNhdChpLm5hbWUsIiwgQmxhY2tQb2ludDogWEI6ICIpLmNvbmNhdChpLlhCLCIsIFlCOiAiKS5jb25jYXQoaS5ZQiwiLCAiKSsiWkI6ICIuY29uY2F0KGkuWkIsIiwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLiIpKSxpLkc8MSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWE6ICIuY29uY2F0KGkuRywiIGZvciAiKS5jb25jYXQoaS5uYW1lLCIsICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxpLkc9MSksaX1yZXR1cm4gbChyLHQpLGgocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgbD0xLygoMTw8byktMSksYz0wO2M8bjsrK2MpZSh0aGlzLHQscixhLGksbCkscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLHJ9KGQpfSgpLGs9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksYz1uZXcgRmxvYXQzMkFycmF5KDMpLGY9bmV3IEZsb2F0MzJBcnJheSgzKSxwPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIG0oZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHYoMCwxLGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gdihlLHQscil7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxyKSl9ZnVuY3Rpb24geShlKXtyZXR1cm4gZTwwPy15KC1lKTplPjg/TWF0aC5wb3coKGUrMTYpLzExNiwzKTplKnB9ZnVuY3Rpb24gYihuLG8scyxsLHUsaCl7dmFyIGQ9digwLDEsb1tzXSpoKSxwPXYoMCwxLG9bcysxXSpoKSxiPXYoMCwxLG9bcysyXSpoKSx3PU1hdGgucG93KGQsbi5HUiksaz1NYXRoLnBvdyhwLG4uR0cpLFM9TWF0aC5wb3coYixuLkdCKSxfPW4uTVhBKncrbi5NWEIqaytuLk1YQypTLHg9bi5NWUEqdytuLk1ZQiprK24uTVlDKlMsQT1uLk1aQSp3K24uTVpCKmsrbi5NWkMqUyxDPWM7Q1swXT1fLENbMV09eCxDWzJdPUE7dmFyIFA9ZjshZnVuY3Rpb24ocixuLGEpe2lmKDE9PT1yWzBdJiYxPT09clsyXSlyZXR1cm4gYVswXT1uWzBdLGFbMV09blsxXSx2b2lkKGFbMl09blsyXSk7dmFyIG89YTttKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0xKnRbMF0vZVswXSxyWzFdPTEqdFsxXS9lWzFdLHJbMl09MSp0WzJdL2VbMl19KHIsbyxzKSxtKHQscyxhKX0obi53aGl0ZVBvaW50LEMsUCk7dmFyIEU9YzshZnVuY3Rpb24oZSx0LHIpe2lmKDA9PT1lWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0pcmV0dXJuIHJbMF09dFswXSxyWzFdPXRbMV0sdm9pZChyWzJdPXRbMl0pO3ZhciBuPXkoMCksYT0oMS1uKS8oMS15KGVbMF0pKSxpPTEtYSxvPSgxLW4pLygxLXkoZVsxXSkpLHM9MS1vLGw9KDEtbikvKDEteShlWzJdKSksYz0xLWw7clswXT10WzBdKmEraSxyWzFdPXRbMV0qbytzLHJbMl09dFsyXSpsK2N9KG4uYmxhY2tQb2ludCxQLEUpO3ZhciBUPWY7IWZ1bmN0aW9uKHIsbixhKXt2YXIgbz1hO20oZSxuLG8pO3ZhciBzPWk7IWZ1bmN0aW9uKGUsdCxyKXtyWzBdPS45NTA0Nyp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEuMDg4ODMqdFsyXS9lWzJdfShyLG8scyksbSh0LHMsYSl9KGEsRSxUKTt2YXIgUj1jO20ocixULFIpLGxbdV09MjU1KmcoUlswXSksbFt1KzFdPTI1NSpnKFJbMV0pLGxbdSsyXT0yNTUqZyhSWzJdKX1yZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsYSxpKXt2YXIgbDtpZih1KHRoaXMsdCksbD1vKHRoaXMscyh0KS5jYWxsKHRoaXMsIkNhbFJHQiIsMykpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7cj1yfHxuZXcgRmxvYXQzMkFycmF5KDMpLGE9YXx8bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPWl8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7dmFyIGM9ZVswXSxmPWVbMV0saD1lWzJdO2wud2hpdGVQb2ludD1lO3ZhciBkPXJbMF0scD1yWzFdLG09clsyXTtpZihsLmJsYWNrUG9pbnQ9cixsLkdSPWFbMF0sbC5HRz1hWzFdLGwuR0I9YVsyXSxsLk1YQT1pWzBdLGwuTVlBPWlbMV0sbC5NWkE9aVsyXSxsLk1YQj1pWzNdLGwuTVlCPWlbNF0sbC5NWkI9aVs1XSxsLk1YQz1pWzZdLGwuTVlDPWlbN10sbC5NWkM9aVs4XSxjPDB8fGg8MHx8MSE9PWYpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdChsLm5hbWUpKyIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihkPDB8fHA8MHx8bTwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQobC5uYW1lLCIgWyIpLmNvbmNhdChkLCIsICIpLmNvbmNhdChwLCIsICIpLmNvbmNhdChtLCJdLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksbC5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMykpLChsLkdSPDB8fGwuR0c8MHx8bC5HQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWEgWyIuY29uY2F0KGwuR1IsIiwgIikuY29uY2F0KGwuR0csIiwgIikuY29uY2F0KGwuR0IsIl0gZm9yICIpKyIiLmNvbmNhdChsLm5hbWUsIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIikpLGwuR1I9bC5HRz1sLkdCPTEpLGx9cmV0dXJuIGwodCxlKSxoKHQsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2IodGhpcyxlLHQscixuLDEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9MS8oKDE8PGkpLTEpLGw9MDtsPHI7KytsKWIodGhpcyxlLHQsbixhLHMpLHQrPTMsYSs9MytvfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlKigzK3QpLzN8MH19XSksdH0oZCl9KCksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PTYvMjk/ZSplKmU6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgbD1uW2FdLGM9blthKzFdLHU9blthKzJdOyExIT09aSYmKGw9dChsLGksMCwxMDApLGM9dChjLGksci5hbWluLHIuYW1heCksdT10KHUsaSxyLmJtaW4sci5ibWF4KSk7dmFyIGYsaCxkLHA9KGwrMTYpLzExNixtPXArKGM9Yz5yLmFtYXg/ci5hbWF4OmM8ci5hbWluP3IuYW1pbjpjKS81MDAsZz1wLSh1PXU+ci5ibWF4P3IuYm1heDp1PHIuYm1pbj9yLmJtaW46dSkvMjAwLHY9ci5YVyplKG0pLHk9ci5ZVyplKHApLGI9ci5aVyplKGcpO3IuWlc8MT8oZj0zLjEzMzkqdistMS42MTcqeSstLjQ5MDYqYixoPS0uOTc4NSp2KzEuOTE2KnkrLjAzMzMqYixkPS4wNzIqdistLjIyOSp5KzEuNDA1NypiKTooZj0zLjI0MDYqdistMS41MzcyKnkrLS40OTg2KmIsaD0tLjk2ODkqdisxLjg3NTgqeSsuMDQxNSpiLGQ9LjA1NTcqdistLjIwNCp5KzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsYSl7dmFyIGk7aWYodSh0aGlzLHQpLGk9byh0aGlzLHModCkuY2FsbCh0aGlzLCJMYWIiLDMpKSwhZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYiIpO2lmKHI9cnx8WzAsMCwwXSxhPWF8fFstMTAwLDEwMCwtMTAwLDEwMF0saS5YVz1lWzBdLGkuWVc9ZVsxXSxpLlpXPWVbMl0saS5hbWluPWFbMF0saS5hbWF4PWFbMV0saS5ibWluPWFbMl0saS5ibWF4PWFbM10saS5YQj1yWzBdLGkuWUI9clsxXSxpLlpCPXJbMl0saS5YVzwwfHxpLlpXPDB8fDEhPT1pLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGkuWEI8MHx8aS5ZQjwwfHxpLlpCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpLGkuWEI9aS5ZQj1pLlpCPTApLChpLmFtaW4+aS5hbWF4fHxpLmJtaW4+aS5ibWF4KSYmKCgwLG4uaW5mbykoIkludmFsaWQgUmFuZ2UsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cyIpLGkuYW1pbj0tMTAwLGkuYW1heD0xMDAsaS5ibWluPS0xMDAsaS5ibWF4PTEwMCksaX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGw9KDE8PG8pLTEsYz0wO2M8bjtjKyspcih0aGlzLGUsdCxsLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLHR9KGQpfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFubm90YXRpb25GYWN0b3J5PXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPXQuQW5ub3RhdGlvbj12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU0KSxpPXIoMTU1KSxvPXIoMTY4KSxzPXIoMTcwKSxsPXIoMTU3KTtmdW5jdGlvbiBjKGUpe3JldHVybihjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWModCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBmKGUsdCxyKXtyZXR1cm4oZj0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9aChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwocik6YS52YWx1ZX19KShlLHQscnx8ZSl9ZnVuY3Rpb24gaChlKXtyZXR1cm4oaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gZChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZwKGUsdCl9ZnVuY3Rpb24gcChlLHQpe3JldHVybihwPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBtKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe20odGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHIuZW5zdXJlKHRoaXMsIl9jcmVhdGUiLFtlLHQscixuXSl9fSx7a2V5OiJfY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbz1lLmZldGNoSWZSZWYodCk7aWYoKDAsaS5pc0RpY3QpKG8pKXt2YXIgcz0oMCxpLmlzUmVmKSh0KT90LnRvU3RyaW5nKCk6ImFubm90XyIrYS5jcmVhdGVPYmpJZCgpLGw9by5nZXQoIlN1YnR5cGUiKTtsPSgwLGkuaXNOYW1lKShsKT9sLm5hbWU6bnVsbDt2YXIgYz17eHJlZjplLGRpY3Q6byxyZWY6KDAsaS5pc1JlZikodCk/dDpudWxsLHN1YnR5cGU6bCxpZDpzLHBkZk1hbmFnZXI6cn07c3dpdGNoKGwpe2Nhc2UiTGluayI6cmV0dXJuIG5ldyBDKGMpO2Nhc2UiVGV4dCI6cmV0dXJuIG5ldyBBKGMpO2Nhc2UiV2lkZ2V0Ijp2YXIgdT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJGVCJ9KTtzd2l0Y2godT0oMCxpLmlzTmFtZSkodSk/dS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgUyhjKTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBfKGMpO2Nhc2UiQ2giOnJldHVybiBuZXcgeChjKX1yZXR1cm4oMCxuLndhcm4pKCdVbmltcGxlbWVudGVkIHdpZGdldCBmaWVsZCB0eXBlICInK3UrJyIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuJyksbmV3IGsoYyk7Y2FzZSJQb3B1cCI6cmV0dXJuIG5ldyBQKGMpO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBFKGMpO2Nhc2UiU3F1YXJlIjpyZXR1cm4gbmV3IFQoYyk7Y2FzZSJDaXJjbGUiOnJldHVybiBuZXcgUihjKTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IE8oYyk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IEkoYyk7Y2FzZSJJbmsiOnJldHVybiBuZXcgRihjKTtjYXNlIkhpZ2hsaWdodCI6cmV0dXJuIG5ldyBMKGMpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IEQoYyk7Y2FzZSJTcXVpZ2dseSI6cmV0dXJuIG5ldyBNKGMpO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IE4oYyk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBqKGMpO2Nhc2UiRmlsZUF0dGFjaG1lbnQiOnJldHVybiBuZXcgQihjKTtkZWZhdWx0OnJldHVybiBsPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInK2wrJyIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uJyk6KDAsbi53YXJuKSgiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS4iKSxuZXcgYihjKX19fX1dKSxlfSgpO3QuQW5ub3RhdGlvbkZhY3Rvcnk9eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bSh0aGlzLGUpO3ZhciByPXQuZGljdDt0aGlzLnNldEZsYWdzKHIuZ2V0KCJGIikpLHRoaXMuc2V0UmVjdGFuZ2xlKHIuZ2V0QXJyYXkoIlJlY3QiKSksdGhpcy5zZXRDb2xvcihyLmdldEFycmF5KCJDIikpLHRoaXMuc2V0Qm9yZGVyU3R5bGUociksdGhpcy5zZXRBcHBlYXJhbmNlKHIpLHRoaXMuZGF0YT17YW5ub3RhdGlvbkZsYWdzOnRoaXMuZmxhZ3MsYm9yZGVyU3R5bGU6dGhpcy5ib3JkZXJTdHlsZSxjb2xvcjp0aGlzLmNvbG9yLGhhc0FwcGVhcmFuY2U6ISF0aGlzLmFwcGVhcmFuY2UsaWQ6dC5pZCxyZWN0OnRoaXMucmVjdGFuZ2xlLHN1YnR5cGU6dC5zdWJ0eXBlfX1yZXR1cm4gdihlLFt7a2V5OiJfaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIShlJnQpfX0se2tleToiX2lzVmlld2FibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpJiYhdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSElEREVOKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpJiYhdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSElEREVOKX19LHtrZXk6InNldEZsYWdzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjB9fSx7a2V5OiJoYXNGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLGUpfX0se2tleToic2V0UmVjdGFuZ2xlIix2YWx1ZTpmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/dGhpcy5yZWN0YW5nbGU9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoZSk6dGhpcy5yZWN0YW5nbGU9WzAsMCwwLDBdfX0se2tleToic2V0Q29sb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtpZihBcnJheS5pc0FycmF5KGUpKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnRoaXMuY29sb3I9bnVsbDticmVhaztjYXNlIDE6by5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGUsMCx0LDApLHRoaXMuY29sb3I9dDticmVhaztjYXNlIDM6by5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHQsMCksdGhpcy5jb2xvcj10O2JyZWFrO2Nhc2UgNDpvLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLHQsMCksdGhpcy5jb2xvcj10O2JyZWFrO2RlZmF1bHQ6dGhpcy5jb2xvcj10fWVsc2UgdGhpcy5jb2xvcj10fX0se2tleToic2V0Qm9yZGVyU3R5bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYm9yZGVyU3R5bGU9bmV3IHcsKDAsaS5pc0RpY3QpKGUpKWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLGkuaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0pLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKCgwLGkuaXNEaWN0KSh0KSl7dmFyIHI9dC5nZXQoIk4iKTtpZigoMCxpLmlzU3RyZWFtKShyKSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKCgwLGkuaXNEaWN0KShyKSl7dmFyIG49ZS5nZXQoIkFTIik7KDAsaS5pc05hbWUpKG4pJiZyLmhhcyhuLm5hbWUpJiYodGhpcy5hcHBlYXJhbmNlPXIuZ2V0KG4ubmFtZSkpfX19fSx7a2V5OiJfcHJlcGFyZVBvcHVwIix2YWx1ZTpmdW5jdGlvbihlKXtlLmhhcygiQyIpfHwodGhpcy5kYXRhLmNvbG9yPW51bGwpLHRoaXMuZGF0YS5oYXNQb3B1cD1lLmhhcygiUG9wdXAiKSx0aGlzLmRhdGEudGl0bGU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKXx8IiIpLHRoaXMuZGF0YS5jb250ZW50cz0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiQ29udGVudHMiKXx8IiIpfX0se2tleToibG9hZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXBwZWFyYW5jZS5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKChmdW5jdGlvbih0KXtpZih0KXJldHVybiBuZXcgYS5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzO2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgcy5PcGVyYXRvckxpc3QpO3ZhciBpPXRoaXMuZGF0YSxvPXRoaXMuYXBwZWFyYW5jZS5kaWN0LGw9dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSksYz1vLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx1PW8uZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLGY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9YVszXTtpZihpPT09c3x8bz09PWwpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgYz0oZVsyXS1lWzBdKS8ocy1pKSx1PShlWzNdLWVbMV0pLyhsLW8pO3JldHVybltjLDAsMCx1LGVbMF0taSpjLGVbMV0tbyp1XX0oaS5yZWN0LGMsdSk7cmV0dXJuIGwudGhlbigoZnVuY3Rpb24ocil7dmFyIG89bmV3IHMuT3BlcmF0b3JMaXN0O3JldHVybiBvLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbaS5yZWN0LGYsdV0pLGUuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06YS5hcHBlYXJhbmNlLHRhc2s6dCxyZXNvdXJjZXM6cixvcGVyYXRvckxpc3Q6b30pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRkT3Aobi5PUFMuZW5kQW5ub3RhdGlvbixbXSksYS5hcHBlYXJhbmNlLnJlc2V0KCksb30pKX0pKX19LHtrZXk6InZpZXdhYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmxhZ3N8fHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncyl9fSx7a2V5OiJwcmludGFibGUiLGdldDpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncyl9fV0pLGV9KCk7dC5Bbm5vdGF0aW9uPWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpLHRoaXMud2lkdGg9MSx0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRCx0aGlzLmRhc2hBcnJheT1bM10sdGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPTAsdGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz0wfXJldHVybiB2KGUsW3trZXk6InNldFdpZHRoIix2YWx1ZTpmdW5jdGlvbihlKXsoMCxpLmlzTmFtZSkoZSk/dGhpcy53aWR0aD0wOk51bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLndpZHRoPWUpfX0se2tleToic2V0U3R5bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCgwLGkuaXNOYW1lKShlKSlzd2l0Y2goZS5uYW1lKXtjYXNlIlMiOnRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEO2JyZWFrO2Nhc2UiRCI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEO2JyZWFrO2Nhc2UiQiI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDticmVhaztjYXNlIkkiOnRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUO2JyZWFrO2Nhc2UiVSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FfX19LHtrZXk6InNldERhc2hBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7Zm9yKHZhciB0PSEwLHI9ITAsbj0wLGE9ZS5sZW5ndGg7bjxhO24rKyl7dmFyIGk9ZVtuXTtpZighKCtpPj0wKSl7dD0hMTticmVha31pPjAmJihyPSExKX10JiYhcj90aGlzLmRhc2hBcnJheT1lOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT13O3ZhciBrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKTt2YXIgYT1lLmRpY3Qsbz1yLmRhdGE7by5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLldJREdFVCxvLmZpZWxkTmFtZT1yLl9jb25zdHJ1Y3RGaWVsZE5hbWUoYSksby5maWVsZFZhbHVlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IlYiLGdldEFycmF5OiEwfSksby5hbHRlcm5hdGl2ZVRleHQ9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYS5nZXQoIlRVIil8fCIiKSxvLmRlZmF1bHRBcHBlYXJhbmNlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IkRBIn0pfHwiIjt2YXIgcz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmEsa2V5OiJGVCJ9KTtyZXR1cm4gby5maWVsZFR5cGU9KDAsaS5pc05hbWUpKHMpP3MubmFtZTpudWxsLHIuZmllbGRSZXNvdXJjZXM9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiRFIifSl8fGkuRGljdC5lbXB0eSxvLmZpZWxkRmxhZ3M9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiRmYifSksKCFOdW1iZXIuaXNJbnRlZ2VyKG8uZmllbGRGbGFncyl8fG8uZmllbGRGbGFnczwwKSYmKG8uZmllbGRGbGFncz0wKSxvLnJlYWRPbmx5PXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRUFET05MWSksIlNpZyI9PT1vLmZpZWxkVHlwZSYmKG8uZmllbGRWYWx1ZT1udWxsLHIuc2V0RmxhZ3Mobi5Bbm5vdGF0aW9uRmxhZy5ISURERU4pKSxyfXJldHVybiBkKHQsZSksdih0LFt7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTtmb3IodmFyIHI9ZTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSwoMCxpLmlzRGljdCkocikpOylyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19LHtrZXk6Imhhc0ZpZWxkRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISEodGhpcy5kYXRhLmZpZWxkRmxhZ3MmZSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gbj9Qcm9taXNlLnJlc29sdmUobmV3IHMuT3BlcmF0b3JMaXN0KTpmKGgodC5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyxlLHIsbil9fV0pLHR9KGIpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCkscj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpO3ZhciBhPWUuZGljdDtyLmRhdGEuZmllbGRWYWx1ZT0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShyLmRhdGEuZmllbGRWYWx1ZXx8IiIpO3ZhciBpPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IlEifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPDB8fGk+MikmJihpPW51bGwpLHIuZGF0YS50ZXh0QWxpZ25tZW50PWk7dmFyIG89KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiTWF4TGVuIn0pO3JldHVybighTnVtYmVyLmlzSW50ZWdlcihvKXx8bzwwKSYmKG89bnVsbCksci5kYXRhLm1heExlbj1vLHIuZGF0YS5tdWx0aUxpbmU9ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSksci5kYXRhLmNvbWI9ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpJiYhci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkmJiFyLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpJiYhci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpJiZudWxsIT09ci5kYXRhLm1heExlbixyfXJldHVybiBkKHQsZSksdih0LFt7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUscixhKXtpZihhfHx0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIGYoaCh0LnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLGUscixhKTt2YXIgaT1uZXcgcy5PcGVyYXRvckxpc3Q7aWYoIXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO3ZhciBvPW5ldyBsLlN0cmVhbSgoMCxuLnN0cmluZ1RvQnl0ZXMpKHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZSkpO3JldHVybiBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOm8sdGFzazpyLHJlc291cmNlczp0aGlzLmZpZWxkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDppfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX19XSksdH0oayksXz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5jaGVja0JveD0hci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSxyLmRhdGEucmFkaW9CdXR0b249ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSxyLmRhdGEucHVzaEJ1dHRvbj1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksci5kYXRhLmNoZWNrQm94P3IuX3Byb2Nlc3NDaGVja0JveChlKTpyLmRhdGEucmFkaW9CdXR0b24/ci5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnIuZGF0YS5wdXNoQnV0dG9uP3IuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpOigwLG4ud2FybikoIkludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbiIpLHJ9cmV0dXJuIGQodCxlKSx2KHQsW3trZXk6Il9wcm9jZXNzQ2hlY2tCb3giLHZhbHVlOmZ1bmN0aW9uKGUpeygwLGkuaXNOYW1lKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLmRhdGEuZmllbGRWYWx1ZS5uYW1lKTt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCgwLGkuaXNEaWN0KSh0KSl7dmFyIHI9dC5nZXQoIkQiKTtpZigoMCxpLmlzRGljdCkocikpe3ZhciBuPXIuZ2V0S2V5cygpOzI9PT1uLmxlbmd0aCYmKHRoaXMuZGF0YS5leHBvcnRWYWx1ZT0iT2ZmIj09PW5bMF0/blsxXTpuWzBdKX19fX0se2tleToiX3Byb2Nlc3NSYWRpb0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7dmFyIHQ9ZS5kaWN0LmdldCgiUGFyZW50Iik7aWYoKDAsaS5pc0RpY3QpKHQpJiZ0LmhhcygiViIpKXt2YXIgcj10LmdldCgiViIpOygwLGkuaXNOYW1lKShyKSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXIubmFtZSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZigoMCxpLmlzRGljdCkobikpe3ZhciBhPW4uZ2V0KCJOIik7aWYoKDAsaS5pc0RpY3QpKGEpKWZvcih2YXIgbz1hLmdldEtleXMoKSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKWlmKCJPZmYiIT09b1tzXSl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW9bc107YnJlYWt9fX19LHtrZXk6Il9wcm9jZXNzUHVzaEJ1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5kaWN0LmhhcygiQSIpP2EuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsfSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX1dKSx0fShrKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEub3B0aW9ucz1bXTt2YXIgYT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6Ik9wdCJ9KTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgaT1lLnhyZWYsbz0wLHM9YS5sZW5ndGg7bzxzO28rKyl7dmFyIGw9aS5mZXRjaElmUmVmKGFbb10pLGM9QXJyYXkuaXNBcnJheShsKTtyLmRhdGEub3B0aW9uc1tvXT17ZXhwb3J0VmFsdWU6Yz9pLmZldGNoSWZSZWYobFswXSk6bCxkaXNwbGF5VmFsdWU6KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYz9pLmZldGNoSWZSZWYobFsxXSk6bCl9fXJldHVybiBBcnJheS5pc0FycmF5KHIuZGF0YS5maWVsZFZhbHVlKXx8KHIuZGF0YS5maWVsZFZhbHVlPVtyLmRhdGEuZmllbGRWYWx1ZV0pLHIuZGF0YS5jb21ibz1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pLHIuZGF0YS5tdWx0aVNlbGVjdD1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpLHJ9cmV0dXJuIGQodCxlKSx0fShrKSxBPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxyLmRhdGEuaGFzQXBwZWFyYW5jZT9yLmRhdGEubmFtZT0iTm9JY29uIjooci5kYXRhLnJlY3RbMV09ci5kYXRhLnJlY3RbM10tMjIsci5kYXRhLnJlY3RbMl09ci5kYXRhLnJlY3RbMF0rMjIsci5kYXRhLm5hbWU9ZS5kaWN0LmhhcygiTmFtZSIpP2UuZGljdC5nZXQoIk5hbWUiKS5uYW1lOiJOb3RlIiksci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5LLGEuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnIuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsfSkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLFA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPUFVQO3ZhciBhPWUuZGljdCxvPWEuZ2V0KCJQYXJlbnQiKTtpZighbylyZXR1cm4oMCxuLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKSx1KHIpO3ZhciBzPW8uZ2V0KCJTdWJ0eXBlIik7aWYoci5kYXRhLnBhcmVudFR5cGU9KDAsaS5pc05hbWUpKHMpP3MubmFtZTpudWxsLHIuZGF0YS5wYXJlbnRJZD1hLmdldFJhdygiUGFyZW50IikudG9TdHJpbmcoKSxyLmRhdGEudGl0bGU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoby5nZXQoIlQiKXx8IiIpLHIuZGF0YS5jb250ZW50cz0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShvLmdldCgiQ29udGVudHMiKXx8IiIpLG8uaGFzKCJDIik/KHIuc2V0Q29sb3Ioby5nZXRBcnJheSgiQyIpKSxyLmRhdGEuY29sb3I9ci5jb2xvcik6ci5kYXRhLmNvbG9yPW51bGwsIXIudmlld2FibGUpe3ZhciBsPW8uZ2V0KCJGIik7ci5faXNWaWV3YWJsZShsKSYmci5zZXRGbGFncyhsKX1yZXR1cm4gcn1yZXR1cm4gZCh0LGUpLHR9KGIpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkxJTkU7dmFyIGE9ZS5kaWN0O3JldHVybiByLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KGEuZ2V0QXJyYXkoIkwiKSksci5fcHJlcGFyZVBvcHVwKGEpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuU1FVQVJFLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxSPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxPPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt2YXIgYT1lLmRpY3QsaT1hLmdldEFycmF5KCJWZXJ0aWNlcyIpO3IuZGF0YS52ZXJ0aWNlcz1bXTtmb3IodmFyIG89MCxzPWkubGVuZ3RoO288cztvKz0yKXIuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4Omlbb10seTppW28rMV19KTtyZXR1cm4gci5fcHJlcGFyZVBvcHVwKGEpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxJPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTixyfXJldHVybiBkKHQsZSksdH0oTyksRj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LO3ZhciBhPWUuZGljdCxpPWUueHJlZixvPWEuZ2V0QXJyYXkoIklua0xpc3QiKTtyLmRhdGEuaW5rTGlzdHM9W107Zm9yKHZhciBzPTAsbD1vLmxlbmd0aDtzPGw7KytzKXtyLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBjPTAsZj1vW3NdLmxlbmd0aDtjPGY7Yys9MilyLmRhdGEuaW5rTGlzdHNbc10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tzXVtjXSkseTppLmZldGNoSWZSZWYob1tzXVtjKzFdKX0pfXJldHVybiByLl9wcmVwYXJlUG9wdXAoYSkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQsci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkUsci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLE09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxyLl9wcmVwYXJlUG9wdXAoZS5kaWN0KSxyfXJldHVybiBkKHQsZSksdH0oYiksTj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxyLl9wcmVwYXJlUG9wdXAoZS5kaWN0KSxyfXJldHVybiBkKHQsZSksdH0oYiksaj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUQU1QLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxCPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKTt2YXIgaT1uZXcgYS5GaWxlU3BlYyhlLmRpY3QuZ2V0KCJGUyIpLGUueHJlZik7cmV0dXJuIHIuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULHIuZGF0YS5maWxlPWkuc2VyaWFsaXphYmxlLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVyYXRvckxpc3Q9dm9pZCAwO3ZhciBuPXIoNiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBsPXRbb107aT1pW2xdfHwoaVtsXT1bXSl9aVt0W3QubGVuZ3RoLTFdXT17Y2hlY2tGbjpyLGl0ZXJhdGVGbjpuLHByb2Nlc3NGbjphfX12YXIgdD1bXTtmdW5jdGlvbiByKGUpe3RoaXMucXVldWU9ZSx0aGlzLnN0YXRlPW51bGwsdGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheX0sdGhpcy5tYXRjaD1udWxsLHRoaXMubGFzdFByb2Nlc3NlZD0wfXJldHVybiBlKHQsW24uT1BTLnNhdmUsbi5PUFMudHJhbnNmb3JtLG4uT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LG4uT1BTLnJlc3RvcmVdLG51bGwsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5O3N3aXRjaCgodC0oZS5pQ3Vyci0zKSklNCl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPWUuaUN1cnIsbz1pLTMscz1pLTIsbD1pLTEsYz1NYXRoLm1pbihNYXRoLmZsb29yKCh0LW8pLzQpLDIwMCk7aWYoYzwxMClyZXR1cm4gdC0odC1vKSU0O3ZhciB1LGY9MCxoPVtdLGQ9MCxwPTEsbT0xO2Zvcih1PTA7dTxjO3UrKyl7dmFyIGc9YVtzKyh1PDwyKV0sdj1hW2wrKHU8PDIpXVswXTtwK3Yud2lkdGg+MWUzJiYoZj1NYXRoLm1heChmLHApLG0rPWQrMixwPTAsZD0wKSxoLnB1c2goe3RyYW5zZm9ybTpnLHg6cCx5Om0sdzp2LndpZHRoLGg6di5oZWlnaHR9KSxwKz12LndpZHRoKzIsZD1NYXRoLm1heChkLHYuaGVpZ2h0KX12YXIgeT1NYXRoLm1heChmLHApKzEsYj1tK2QrMSx3PW5ldyBVaW50OENsYW1wZWRBcnJheSh5KmIqNCksaz15PDwyO2Zvcih1PTA7dTxjO3UrKyl7dmFyIFM9YVtsKyh1PDwyKV1bMF0uZGF0YSxfPWhbdV0udzw8Mix4PTAsQT1oW3VdLngraFt1XS55Knk8PDI7dy5zZXQoUy5zdWJhcnJheSgwLF8pLEEtayk7Zm9yKHZhciBDPTAsUD1oW3VdLmg7QzxQO0MrKyl3LnNldChTLnN1YmFycmF5KHgseCtfKSxBKSx4Kz1fLEErPWs7Zm9yKHcuc2V0KFMuc3ViYXJyYXkoeC1fLHgpLEEpO0E+PTA7KVNbQS00XT1TW0FdLFNbQS0zXT1TW0ErMV0sU1tBLTJdPVNbQSsyXSxTW0EtMV09U1tBKzNdLFNbQStfXT1TW0ErXy00XSxTW0ErXysxXT1TW0ErXy0zXSxTW0ErXysyXT1TW0ErXy0yXSxTW0ErXyszXT1TW0ErXy0xXSxBLT1rfXJldHVybiByLnNwbGljZShvLDQqYyxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKSxhLnNwbGljZShvLDQqYyxbe3dpZHRoOnksaGVpZ2h0OmIsa2luZDpuLkltYWdlS2luZC5SR0JBXzMyQlBQLGRhdGE6d30saF0pLG8rMX0pKSxlKHQsW24uT1BTLnNhdmUsbi5PUFMudHJhbnNmb3JtLG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheTtzd2l0Y2goKHQtKGUuaUN1cnItMykpJTQpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLnNhdmU7Y2FzZSAxOnJldHVybiByW3RdPT09bi5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfX0pLChmdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5mbkFycmF5LGk9ZS5hcmdzQXJyYXksbz1lLmlDdXJyLHM9by0zLGw9by0yLGM9by0xLHU9TWF0aC5mbG9vcigodC1zKS80KTtpZigodT1mdW5jdGlvbihlLHQscixhKXtmb3IodmFyIGk9ZSsyLG89MDtvPHQ7bysrKXt2YXIgcz1hW2krNCpvXSxsPTE9PT1zLmxlbmd0aCYmc1swXTtpZighbHx8MSE9PWwud2lkdGh8fDEhPT1sLmhlaWdodHx8bC5kYXRhLmxlbmd0aCYmKDEhPT1sLmRhdGEubGVuZ3RofHwwIT09bC5kYXRhWzBdKSlicmVhaztyW2krNCpvXT1uLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2t9cmV0dXJuIHQtb30ocyx1LGEsaSkpPDEwKXJldHVybiB0LSh0LXMpJTQ7dmFyIGYsaCxkPSExLHA9aVtjXVswXTtpZigwPT09aVtsXVsxXSYmMD09PWlbbF1bMl0pe2Q9ITA7dmFyIG09aVtsXVswXSxnPWlbbF1bM107Zj1sKzQ7dmFyIHY9Yys0O2ZvcihyPTE7cjx1O3IrKyxmKz00LHYrPTQpaWYoaD1pW2ZdLGlbdl1bMF0hPT1wfHxoWzBdIT09bXx8MCE9PWhbMV18fDAhPT1oWzJdfHxoWzNdIT09Zyl7cjwxMD9kPSExOnU9cjticmVha319aWYoZCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHk9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2ZvcihmPWwscj0wO3I8dTtyKyssZis9NCloPWlbZl0seVtyPDwxXT1oWzRdLHlbMSsocjw8MSldPWhbNV07YS5zcGxpY2Uocyw0KnUsbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KSxpLnNwbGljZShzLDQqdSxbcCxtLGcseV0pfWVsc2V7dT1NYXRoLm1pbih1LDEwMCk7dmFyIGI9W107Zm9yKHI9MDtyPHU7cisrKXtoPWlbbCsocjw8MildO3ZhciB3PWlbYysocjw8MildWzBdO2IucHVzaCh7ZGF0YTp3LmRhdGEsd2lkdGg6dy53aWR0aCxoZWlnaHQ6dy5oZWlnaHQsdHJhbnNmb3JtOmh9KX1hLnNwbGljZShzLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksaS5zcGxpY2Uocyw0KnUsW2JdKX1yZXR1cm4gcysxfSkpLGUodCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheTtzd2l0Y2goKHQtKGUuaUN1cnItMykpJTQpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLnNhdmU7Y2FzZSAxOmlmKHJbdF0hPT1uLk9QUy50cmFuc2Zvcm0pcmV0dXJuITE7dmFyIGk9ZS5pQ3Vyci0yLG89YVtpXVswXSxzPWFbaV1bM107cmV0dXJuIGFbdF1bMF09PT1vJiYwPT09YVt0XVsxXSYmMD09PWFbdF1bMl0mJmFbdF1bM109PT1zO2Nhc2UgMjppZihyW3RdIT09bi5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7dmFyIGw9YVtlLmlDdXJyLTFdWzBdO3JldHVybiBhW3RdWzBdPT09bDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixsPWFbaS0xXVswXSxjPWFbc11bMF0sdT1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBtPWFbZF07aFtwPDwxXT1tWzRdLGhbMSsocDw8MSldPW1bNV19dmFyIGc9W2wsYyx1LGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsZyksbysxfSkpLGUodCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5O3N3aXRjaCgodC0oZS5pQ3Vyci00KSklNSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoclt0XSE9PW4uT1BTLnNob3dUZXh0KXJldHVybiExO3ZhciBpPWUuaUN1cnItMyxvPWFbaV1bMF0scz1hW2ldWzFdO3JldHVybiBhW3RdWzBdPT09byYmYVt0XVsxXT09PXM7Y2FzZSA0OnJldHVybiByW3RdPT09bi5PUFMuZW5kVGV4dH19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsbD1hLTEsYz1hLHU9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2xdJiZyW2ktMV09PT1yW2NdJiZuW2ktNF1bMF09PT11JiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsbT0xO208aDttKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKSxyLnByb3RvdHlwZT17X29wdGltaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHI9dGhpcy5sYXN0UHJvY2Vzc2VkLG49ZS5sZW5ndGgsYT10aGlzLnN0YXRlLGk9dGhpcy5tYXRjaDtpZihhfHxpfHxyKzEhPT1ufHx0W2Vbcl1dKXtmb3IodmFyIG89dGhpcy5jb250ZXh0O3I8bjspe2lmKGkpe2lmKCgwLGkuaXRlcmF0ZUZuKShvLHIpKXtyKys7Y29udGludWV9aWYocj0oMCxpLnByb2Nlc3NGbikobyxyKzEpLGk9bnVsbCxhPW51bGwscj49KG49ZS5sZW5ndGgpKWJyZWFrfShhPShhfHx0KVtlW3JdXSkmJiFBcnJheS5pc0FycmF5KGEpPyhvLmlDdXJyPXIscisrLCFhLmNoZWNrRm58fCgwLGEuY2hlY2tGbikobyk/KGk9YSxhPW51bGwpOmE9bnVsbCk6cisrfXRoaXMuc3RhdGU9YSx0aGlzLm1hdGNoPWksdGhpcy5sYXN0UHJvY2Vzc2VkPXJ9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9bn0scHVzaDpmdW5jdGlvbihlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpLHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCksdGhpcy5fb3B0aW1pemUoKX0sZmx1c2g6ZnVuY3Rpb24oKXtmb3IoO3RoaXMubWF0Y2g7KXt2YXIgZT10aGlzLnF1ZXVlLmZuQXJyYXkubGVuZ3RoO3RoaXMubGFzdFByb2Nlc3NlZD0oMCx0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LGUpLHRoaXMubWF0Y2g9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5fb3B0aW1pemUoKX19LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1udWxsLHRoaXMubWF0Y2g9bnVsbCx0aGlzLmxhc3RQcm9jZXNzZWQ9MH19LHJ9KCksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5xdWV1ZT1lfXJldHVybiBlLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpLHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCl9LGZsdXNoOmZ1bmN0aW9uKCl7fX0sZX0oKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5tZXNzYWdlSGFuZGxlcj10LHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSx0JiYib3BsaXN0IiE9PXRoaXMuaW50ZW50P3RoaXMub3B0aW1pemVyPW5ldyBhKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBpKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLnBhZ2VJbmRleD1yLHRoaXMuaW50ZW50PWUsdGhpcy53ZWlnaHQ9MH1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RofSxnZXQgdG90YWxMZW5ndGgoKXtyZXR1cm4gdGhpcy5fdG90YWxMZW5ndGgrdGhpcy5sZW5ndGh9LGFkZE9wOmZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpbWl6ZXIucHVzaChlLHQpLHRoaXMud2VpZ2h0KyssdGhpcy5tZXNzYWdlSGFuZGxlciYmKHRoaXMud2VpZ2h0Pj0xZTM/dGhpcy5mbHVzaCgpOnRoaXMud2VpZ2h0Pj05OTUmJihlPT09bi5PUFMucmVzdG9yZXx8ZT09PW4uT1BTLmVuZFRleHQpJiZ0aGlzLmZsdXNoKCkpfSxhZGREZXBlbmRlbmN5OmZ1bmN0aW9uKGUpe2UgaW4gdGhpcy5kZXBlbmRlbmNpZXN8fCh0aGlzLmRlcGVuZGVuY2llc1tlXT0hMCx0aGlzLmFkZE9wKG4uT1BTLmRlcGVuZGVuY3ksW2VdKSl9LGFkZERlcGVuZGVuY2llczpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9LGFkZE9wTGlzdDpmdW5jdGlvbihlKXtPYmplY3QuYXNzaWduKHRoaXMuZGVwZW5kZW5jaWVzLGUuZGVwZW5kZW5jaWVzKTtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfSxnZXRJUjpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX0sZmx1c2g6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpbWl6ZXIuZmx1c2goKTt2YXIgdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXN3aXRjaChyW2ldKXtjYXNlIG4uT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDp2YXIgcz1hW2ldWzBdO3MuY2FjaGVkfHx0LnB1c2gocy5kYXRhLmJ1ZmZlcil9cmV0dXJuIHR9KHRoaXMpLHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kKCJSZW5kZXJQYWdlQ2h1bmsiLHtvcGVyYXRvckxpc3Q6e2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxsZW5ndGg6cn0scGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGludGVudDp0aGlzLmludGVudH0sdCksdGhpcy5kZXBlbmRlbmNpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmZuQXJyYXkubGVuZ3RoPTAsdGhpcy5hcmdzQXJyYXkubGVuZ3RoPTAsdGhpcy53ZWlnaHQ9MCx0aGlzLm9wdGltaXplci5yZXNldCgpfX0sZX0oKTt0Lk9wZXJhdG9yTGlzdD1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhcnRpYWxFdmFsdWF0b3I9dm9pZCAwO3ZhciBuLGE9KG49cigyKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cig2KSxvPXIoMTcyKSxzPXIoMTU3KSxsPXIoMTU1KSxjPXIoMTczKSx1PXIoMTc2KSxmPXIoMTc5KSxoPXIoMTc4KSxkPXIoMTgyKSxwPXIoMTU2KSxtPXIoMTgzKSxnPXIoMTY4KSx2PXIoMTc3KSx5PXIoMTg0KSxiPXIoMTg1KSx3PXIoMTYzKSxrPXIoMTg3KSxTPXIoMTcwKSxfPXIoMTg4KTtmdW5jdGlvbiB4KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9dmFyIEE9ZnVuY3Rpb24oKXt2YXIgZT17Zm9yY2VEYXRhU2NoZW1hOiExLG1heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDppLk5hdGl2ZUltYWdlRGVjb2RpbmcuREVDT0RFLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITB9O2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS54cmVmLHI9ZS5yZXNvdXJjZXMsbj1lLmhhbmRsZXIsYT1lLmZvcmNlRGF0YVNjaGVtYSxpPXZvaWQgMCE9PWEmJmEsbz1lLnBkZkZ1bmN0aW9uRmFjdG9yeTt0aGlzLnhyZWY9dCx0aGlzLnJlc291cmNlcz1yLHRoaXMuaGFuZGxlcj1uLHRoaXMuZm9yY2VEYXRhU2NoZW1hPWksdGhpcy5wZGZGdW5jdGlvbkZhY3Rvcnk9b31mdW5jdGlvbiByKHQpe3ZhciByPXRoaXMsbj10LnBkZk1hbmFnZXIsbz10LnhyZWYscz10LmhhbmRsZXIsbD10LnBhZ2VJbmRleCxjPXQuaWRGYWN0b3J5LHU9dC5mb250Q2FjaGUsZj10LmJ1aWx0SW5DTWFwQ2FjaGUsaD10Lm9wdGlvbnMsZD12b2lkIDA9PT1oP251bGw6aCxwPXQucGRmRnVuY3Rpb25GYWN0b3J5O3RoaXMucGRmTWFuYWdlcj1uLHRoaXMueHJlZj1vLHRoaXMuaGFuZGxlcj1zLHRoaXMucGFnZUluZGV4PWwsdGhpcy5pZEZhY3Rvcnk9Yyx0aGlzLmZvbnRDYWNoZT11LHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1mLHRoaXMub3B0aW9ucz1kfHxlLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5PXAsdGhpcy5mZXRjaEJ1aWx0SW5DTWFwPWZ1bmN0aW9uKCl7dmFyIGUsdD0oZT1hLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgbjtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCFyLmJ1aWx0SW5DTWFwQ2FjaGUuaGFzKHQpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5idWlsdEluQ01hcENhY2hlLmdldCh0KSk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaEJ1aWx0SW5DTWFwIix7bmFtZTp0fSk7Y2FzZSA0OnJldHVybihuPWUuc2VudCkuY29tcHJlc3Npb25UeXBlIT09aS5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUmJnIuYnVpbHRJbkNNYXBDYWNoZS5zZXQodCxuKSxlLmFicnVwdCgicmV0dXJuIixuKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7eChpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7eChpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX1mdW5jdGlvbiBuKCl7dGhpcy5yZXNldCgpfWZ1bmN0aW9uIHAoZSl7aWYoISgwLGwuaXNOYW1lKShlKSlyZXR1cm4ic291cmNlLW92ZXIiO3N3aXRjaChlLm5hbWUpe2Nhc2UiTm9ybWFsIjpjYXNlIkNvbXBhdGlibGUiOnJldHVybiJzb3VyY2Utb3ZlciI7Y2FzZSJNdWx0aXBseSI6cmV0dXJuIm11bHRpcGx5IjtjYXNlIlNjcmVlbiI6cmV0dXJuInNjcmVlbiI7Y2FzZSJPdmVybGF5IjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSJEYXJrZW4iOnJldHVybiJkYXJrZW4iO2Nhc2UiTGlnaHRlbiI6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UiQ29sb3JEb2RnZSI6cmV0dXJuImNvbG9yLWRvZGdlIjtjYXNlIkNvbG9yQnVybiI6cmV0dXJuImNvbG9yLWJ1cm4iO2Nhc2UiSGFyZExpZ2h0IjpyZXR1cm4iaGFyZC1saWdodCI7Y2FzZSJTb2Z0TGlnaHQiOnJldHVybiJzb2Z0LWxpZ2h0IjtjYXNlIkRpZmZlcmVuY2UiOnJldHVybiJkaWZmZXJlbmNlIjtjYXNlIkV4Y2x1c2lvbiI6cmV0dXJuImV4Y2x1c2lvbiI7Y2FzZSJIdWUiOnJldHVybiJodWUiO2Nhc2UiU2F0dXJhdGlvbiI6cmV0dXJuInNhdHVyYXRpb24iO2Nhc2UiQ29sb3IiOnJldHVybiJjb2xvciI7Y2FzZSJMdW1pbm9zaXR5IjpyZXR1cm4ibHVtaW5vc2l0eSJ9cmV0dXJuKDAsaS53YXJuKSgiVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogIitlLm5hbWUpLCJzb3VyY2Utb3ZlciJ9dC5wcm90b3R5cGU9e2NhbkRlY29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHcuSnBlZ1N0cmVhbSYmdC5pc0RlY29kYWJsZShlLHRoaXMueHJlZix0aGlzLnJlc291cmNlcyx0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSl9LGRlY29kZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJDb2xvclNwYWNlIiwiQ1MiKTtyZXR1cm4gdD1nLkNvbG9yU3BhY2UucGFyc2UodCx0aGlzLnhyZWYsdGhpcy5yZXNvdXJjZXMsdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkpLHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkpwZWdEZWNvZGUiLFtlLmdldElSKHRoaXMuZm9yY2VEYXRhU2NoZW1hKSx0Lm51bUNvbXBzXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhO3JldHVybiB0LndpZHRoLHQuaGVpZ2h0LG5ldyBzLlN0cmVhbShyLDAsci5sZW5ndGgsZS5kaWN0KX0pKX19LHQuaXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5kaWN0O2lmKGEuaGFzKCJEZWNvZGVQYXJtcyIpfHxhLmhhcygiRFAiKSlyZXR1cm4hMTt2YXIgaT1nLkNvbG9yU3BhY2UucGFyc2UoYS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpLHQscixuKTtyZXR1cm4oIkRldmljZUdyYXkiPT09aS5uYW1lfHwiRGV2aWNlUkdCIj09PWkubmFtZSkmJmkuaXNEZWZhdWx0RGVjb2RlKGEuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKSl9LHQuaXNEZWNvZGFibGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5kaWN0O2lmKGEuaGFzKCJEZWNvZGVQYXJtcyIpfHxhLmhhcygiRFAiKSlyZXR1cm4hMTt2YXIgaT1nLkNvbG9yU3BhY2UucGFyc2UoYS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpLHQscixuKSxvPWEuZ2V0KCJCaXRzUGVyQ29tcG9uZW50IiwiQlBDIil8fDE7cmV0dXJuKDE9PT1pLm51bUNvbXBzfHwzPT09aS5udW1Db21wcykmJmkuaXNEZWZhdWx0RGVjb2RlKGEuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKSxvKX0sbi5wcm90b3R5cGU9e2NoZWNrOmZ1bmN0aW9uKCl7cmV0dXJuISgrK3RoaXMuY2hlY2tlZDwxMDApJiYodGhpcy5jaGVja2VkPTAsdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmVuZFRpbWU9RGF0ZS5ub3coKSsyMCx0aGlzLmNoZWNrZWQ9MH19O3ZhciBBPVByb21pc2UucmVzb2x2ZSgpO3JldHVybiByLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZSxyPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHIub3B0aW9ucz10LHJ9LGhhc0JsZW5kTW9kZXM6ZnVuY3Rpb24oZSl7aWYoISgwLGwuaXNEaWN0KShlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Uub2JqSWQmJih0W2Uub2JqSWRdPSEwKTtmb3IodmFyIHI9W2VdLG49dGhpcy54cmVmO3IubGVuZ3RoOyl7dmFyIGEsaSxvLHM9ci5zaGlmdCgpLGM9cy5nZXQoIkV4dEdTdGF0ZSIpO2lmKCgwLGwuaXNEaWN0KShjKSl7dmFyIHU9Yy5nZXRLZXlzKCk7Zm9yKGk9MCxvPXUubGVuZ3RoO2k8bztpKyspe2E9dVtpXTt2YXIgZj1jLmdldChhKS5nZXQoIkJNIik7aWYoKDAsbC5pc05hbWUpKGYpJiYiTm9ybWFsIiE9PWYubmFtZSlyZXR1cm4hMH19dmFyIGg9cy5nZXQoIlhPYmplY3QiKTtpZigoMCxsLmlzRGljdCkoaCkpe3ZhciBkPWguZ2V0S2V5cygpO2ZvcihpPTAsbz1kLmxlbmd0aDtpPG87aSsrKXthPWRbaV07dmFyIHA9aC5nZXRSYXcoYSk7aWYoKDAsbC5pc1JlZikocCkpe2lmKHRbcC50b1N0cmluZygpXSljb250aW51ZTtwPW4uZmV0Y2gocCl9aWYoKDAsbC5pc1N0cmVhbSkocCkpe2lmKHAuZGljdC5vYmpJZCl7aWYodFtwLmRpY3Qub2JqSWRdKWNvbnRpbnVlO3RbcC5kaWN0Lm9iaklkXT0hMH12YXIgbT1wLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTshKDAsbC5pc0RpY3QpKG0pfHxtLm9iaklkJiZ0W20ub2JqSWRdfHwoci5wdXNoKG0pLG0ub2JqSWQmJih0W20ub2JqSWRdPSEwKSl9fX19cmV0dXJuITF9LGJ1aWxkRm9ybVhPYmplY3Q6ZnVuY3Rpb24oZSx0LHIsbixhLG8pe3ZhciBzPXQuZGljdCxjPXMuZ2V0QXJyYXkoIk1hdHJpeCIpLHU9cy5nZXRBcnJheSgiQkJveCIpO3U9QXJyYXkuaXNBcnJheSh1KSYmND09PXUubGVuZ3RoP2kuVXRpbC5ub3JtYWxpemVSZWN0KHUpOm51bGw7dmFyIGY9cy5nZXQoIkdyb3VwIik7aWYoZil7dmFyIGg9e21hdHJpeDpjLGJib3g6dSxzbWFzazpyLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfSxkPWYuZ2V0KCJTIikscD1udWxsOygwLGwuaXNOYW1lKShkLCJUcmFuc3BhcmVuY3kiKSYmKGguaXNvbGF0ZWQ9Zi5nZXQoIkkiKXx8ITEsaC5rbm9ja291dD1mLmdldCgiSyIpfHwhMSxmLmhhcygiQ1MiKSYmKHA9Zy5Db2xvclNwYWNlLnBhcnNlKGYuZ2V0KCJDUyIpLHRoaXMueHJlZixlLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSkpLHImJnIuYmFja2Ryb3AmJihwPXB8fGcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixyLmJhY2tkcm9wPXAuZ2V0UmdiKHIuYmFja2Ryb3AsMCkpLG4uYWRkT3AoaS5PUFMuYmVnaW5Hcm91cCxbaF0pfXJldHVybiBuLmFkZE9wKGkuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbixbYyx1XSksdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6cy5nZXQoIlJlc291cmNlcyIpfHxlLG9wZXJhdG9yTGlzdDpuLGluaXRpYWxTdGF0ZTpvfSkudGhlbigoZnVuY3Rpb24oKXtuLmFkZE9wKGkuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsW10pLGYmJm4uYWRkT3AoaS5PUFMuZW5kR3JvdXAsW2hdKX0pKX0sYnVpbGRQYWludEltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ZS5yZXNvdXJjZXMsYT1lLmltYWdlLG89ZS5pc0lubGluZSxsPXZvaWQgMCE9PW8mJm8sYz1lLm9wZXJhdG9yTGlzdCx1PWUuY2FjaGVLZXksZj1lLmltYWdlQ2FjaGUsaD1lLmZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlcixkPXZvaWQgMCE9PWgmJmgscD1hLmRpY3QsbT1wLmdldCgiV2lkdGgiLCJXIiksZz1wLmdldCgiSGVpZ2h0IiwiSCIpO2lmKCEobSYmKDAsaS5pc051bSkobSkmJmcmJigwLGkuaXNOdW0pKGcpKSlyZXR1cm4oMCxpLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxQcm9taXNlLnJlc29sdmUoKTt2YXIgdix5LGI9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWImJm0qZz5iKXJldHVybigwLGkud2FybikoIkltYWdlIGV4Y2VlZGVkIG1heGltdW0gYWxsb3dlZCBzaXplIGFuZCB3YXMgcmVtb3ZlZC4iKSxQcm9taXNlLnJlc29sdmUoKTtpZihwLmdldCgiSW1hZ2VNYXNrIiwiSU0iKSl7dmFyIGs9cC5nZXQoIldpZHRoIiwiVyIpLFM9cC5nZXQoIkhlaWdodCIsIkgiKSx4PWsrNz4+MyxBPWEuZ2V0Qnl0ZXMoeCpTLCEwKSxDPXAuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKTtyZXR1cm4odj1fLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5OkEsd2lkdGg6ayxoZWlnaHQ6UyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTphIGluc3RhbmNlb2Ygcy5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIUMmJkNbMF0+MH0pKS5jYWNoZWQ9ITAseT1bdl0sYy5hZGRPcChpLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QseSksdSYmKGZbdV09e2ZuOmkuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxhcmdzOnl9KSxQcm9taXNlLnJlc29sdmUoKX12YXIgUD1wLmdldCgiU01hc2siLCJTTSIpfHwhMSxFPXAuZ2V0KCJNYXNrIil8fCExO2lmKGwmJiFQJiYhRSYmIShhIGluc3RhbmNlb2Ygdy5KcGVnU3RyZWFtKSYmbStnPDIwMClyZXR1cm4gdj1uZXcgXy5QREZJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOm4saW1hZ2U6YSxpc0lubGluZTpsLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeX0pLmNyZWF0ZUltYWdlRGF0YSghMCksYy5hZGRPcChpLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxbdl0pLFByb21pc2UucmVzb2x2ZSgpO3ZhciBUPWQ/aS5OYXRpdmVJbWFnZURlY29kaW5nLk5PTkU6dGhpcy5vcHRpb25zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQsUj0iaW1nXyIrdGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtpZihUIT09aS5OYXRpdmVJbWFnZURlY29kaW5nLk5PTkUmJiFQJiYhRSYmYSBpbnN0YW5jZW9mIHcuSnBlZ1N0cmVhbSYmdC5pc1N1cHBvcnRlZChhLHRoaXMueHJlZixuLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSlyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgib2JqIixbUix0aGlzLnBhZ2VJbmRleCwiSnBlZ1N0cmVhbSIsYS5nZXRJUih0aGlzLm9wdGlvbnMuZm9yY2VEYXRhU2NoZW1hKV0pLnRoZW4oKGZ1bmN0aW9uKCl7Yy5hZGREZXBlbmRlbmN5KFIpLHk9W1IsbSxnXSxjLmFkZE9wKGkuT1BTLnBhaW50SnBlZ1hPYmplY3QseSksdSYmKGZbdV09e2ZuOmkuT1BTLnBhaW50SnBlZ1hPYmplY3QsYXJnczp5fSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS53YXJuKSgiTmF0aXZlIEpQRUcgZGVjb2RpbmcgZmFpbGVkIC0tIHRyeWluZyB0byByZWNvdmVyOiAiKyhlJiZlLm1lc3NhZ2UpKSxyLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczpuLGltYWdlOmEsaXNJbmxpbmU6bCxvcGVyYXRvckxpc3Q6YyxjYWNoZUtleTp1LGltYWdlQ2FjaGU6Zixmb3JjZURpc2FibGVOYXRpdmVJbWFnZURlY29kZXI6ITB9KX0pKTt2YXIgTz1udWxsO3JldHVybiBUPT09aS5OYXRpdmVJbWFnZURlY29kaW5nLkRFQ09ERSYmKGEgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW18fEUgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW18fFAgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW0pJiYoTz1uZXcgdCh7eHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOm4saGFuZGxlcjp0aGlzLmhhbmRsZXIsZm9yY2VEYXRhU2NoZW1hOnRoaXMub3B0aW9ucy5mb3JjZURhdGFTY2hlbWEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMucGRmRnVuY3Rpb25GYWN0b3J5fSkpLGMuYWRkRGVwZW5kZW5jeShSKSx5PVtSLG0sZ10sXy5QREZJbWFnZS5idWlsZEltYWdlKHtoYW5kbGVyOnRoaXMuaGFuZGxlcix4cmVmOnRoaXMueHJlZixyZXM6bixpbWFnZTphLGlzSW5saW5lOmwsbmF0aXZlRGVjb2RlcjpPLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeX0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3JlYXRlSW1hZ2VEYXRhKCExKTtyLmhhbmRsZXIuc2VuZCgib2JqIixbUixyLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLFt0LmRhdGEuYnVmZmVyXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLGkud2FybikoIlVuYWJsZSB0byBkZWNvZGUgaW1hZ2U6ICIrZSksci5oYW5kbGVyLnNlbmQoIm9iaiIsW1Isci5wYWdlSW5kZXgsIkltYWdlIixudWxsXSl9KSksYy5hZGRPcChpLk9QUy5wYWludEltYWdlWE9iamVjdCx5KSx1JiYoZlt1XT17Zm46aS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczp5fSksUHJvbWlzZS5yZXNvbHZlKCl9LGhhbmRsZVNNYXNrOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9ZS5nZXQoIkciKSxvPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0scz1lLmdldCgiVFIiKTtpZigoMCxiLmlzUERGRnVuY3Rpb24pKHMpKXtmb3IodmFyIGw9dGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHMpLGM9bmV3IFVpbnQ4QXJyYXkoMjU2KSx1PW5ldyBGbG9hdDMyQXJyYXkoMSksZj0wO2Y8MjU2O2YrKyl1WzBdPWYvMjU1LGwodSwwLHUsMCksY1tmXT0yNTUqdVswXXwwO28udHJhbnNmZXJNYXA9Y31yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsaSxvLHIsbixhLnN0YXRlLmNsb25lKCkpfSxoYW5kbGVUaWxpbmdUeXBlOmZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMpe3ZhciBjPXRoaXMsdT1uZXcgUy5PcGVyYXRvckxpc3QsZj1bYS5nZXQoIlJlc291cmNlcyIpLHJdLGg9bC5EaWN0Lm1lcmdlKHRoaXMueHJlZixmKTtyZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6cyxyZXNvdXJjZXM6aCxvcGVyYXRvckxpc3Q6dX0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuKDAsZC5nZXRUaWxpbmdQYXR0ZXJuSVIpKHtmbkFycmF5OnUuZm5BcnJheSxhcmdzQXJyYXk6dS5hcmdzQXJyYXl9LGEsdCl9KSkudGhlbigoZnVuY3Rpb24odCl7by5hZGREZXBlbmRlbmNpZXModS5kZXBlbmRlbmNpZXMpLG8uYWRkT3AoZSx0KX0pLChmdW5jdGlvbihlKXtpZihjLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBjLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93bn0pLHZvaWQoMCxpLndhcm4pKCdoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9KSl9LGhhbmRsZVNldEZvbnQ6ZnVuY3Rpb24oZSx0LHIsbixhLG8pe3ZhciBzLGw9dGhpcztyZXR1cm4gdCYmKHM9KHQ9dC5zbGljZSgpKVswXS5uYW1lKSx0aGlzLmxvYWRGb250KHMscixlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YShsLGUsbixhKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gbC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDppLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmZvbnR9KSxuZXcgQygiZ19mb250X2Vycm9yIixuZXcgYy5FcnJvckZvbnQoIlR5cGUzIGZvbnQgbG9hZCBlcnJvcjogIitlKSx0LmZvbnQpfSkpOnR9KSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG8uZm9udD1lLmZvbnQsZS5zZW5kKGwuaGFuZGxlciksZS5sb2FkZWROYW1lfSkpfSxoYW5kbGVUZXh0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mb250LGE9bi5jaGFyc1RvR2x5cGhzKGUpO3JldHVybiBuLmRhdGEmJih0LnRleHRSZW5kZXJpbmdNb2RlJmkuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09dC5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJnIuYnVpbGRGb250UGF0aHMobixhLHRoaXMuaGFuZGxlciksYX0sc2V0R1N0YXRlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7Zm9yKHZhciBvPXRoaXMscz1bXSxjPXQuZ2V0S2V5cygpLHU9UHJvbWlzZS5yZXNvbHZlKCksZj1mdW5jdGlvbigpe3ZhciBmPWNbaF0sZD10LmdldChmKTtzd2l0Y2goZil7Y2FzZSJUeXBlIjpicmVhaztjYXNlIkxXIjpjYXNlIkxDIjpjYXNlIkxKIjpjYXNlIk1MIjpjYXNlIkQiOmNhc2UiUkkiOmNhc2UiRkwiOmNhc2UiQ0EiOmNhc2UiY2EiOnMucHVzaChbZixkXSk7YnJlYWs7Y2FzZSJGb250Ijp1PXUudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5oYW5kbGVTZXRGb250KGUsbnVsbCxkWzBdLHIsbixhLnN0YXRlKS50aGVuKChmdW5jdGlvbihlKXtyLmFkZERlcGVuZGVuY3koZSkscy5wdXNoKFtmLFtlLGRbMV1dXSl9KSl9KSk7YnJlYWs7Y2FzZSJCTSI6cy5wdXNoKFtmLHAoZCldKTticmVhaztjYXNlIlNNYXNrIjppZigoMCxsLmlzTmFtZSkoZCwiTm9uZSIpKXtzLnB1c2goW2YsITFdKTticmVha30oMCxsLmlzRGljdCkoZCk/KHU9dS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvLmhhbmRsZVNNYXNrKGQsZSxyLG4sYSl9KSkscy5wdXNoKFtmLCEwXSkpOigwLGkud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsaS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2YpO2JyZWFrO2RlZmF1bHQ6KDAsaS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZil9fSxoPTAsZD1jLmxlbmd0aDtoPGQ7aCsrKWYoKTtyZXR1cm4gdS50aGVuKChmdW5jdGlvbigpe3MubGVuZ3RoPjAmJnIuYWRkT3AoaS5PUFMuc2V0R1N0YXRlLFtzXSl9KSl9LGxvYWRGb250OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzO2Z1bmN0aW9uIGEoKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBDKCJnX2ZvbnRfZXJyb3IiLG5ldyBjLkVycm9yRm9udCgiRm9udCAiK2UrIiBpcyBub3QgYXZhaWxhYmxlIiksdCkpfXZhciBvLHM9dGhpcy54cmVmO2lmKHQpe2lmKCEoMCxsLmlzUmVmKSh0KSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiZm9udCIgb2JqZWN0IHNob3VsZCBiZSBhIHJlZmVyZW5jZS4nKTtvPXR9ZWxzZXt2YXIgdT1yLmdldCgiRm9udCIpO2lmKCF1KXJldHVybigwLGkud2FybikoImZvbnRSZXMgbm90IGF2YWlsYWJsZSIpLGEoKTtvPXUuZ2V0UmF3KGUpfWlmKCFvKXJldHVybigwLGkud2FybikoImZvbnRSZWYgbm90IGF2YWlsYWJsZSIpLGEoKTtpZih0aGlzLmZvbnRDYWNoZS5oYXMobykpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChvKTtpZih0PXMuZmV0Y2hJZlJlZihvKSwhKDAsbC5pc0RpY3QpKHQpKXJldHVybiBhKCk7aWYodC50cmFuc2xhdGVkKXJldHVybiB0LnRyYW5zbGF0ZWQ7dmFyIGYsaCxkPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCkscD10aGlzLnByZUV2YWx1YXRlRm9udCh0KSxtPXAuZGVzY3JpcHRvcixnPSgwLGwuaXNSZWYpKG8pO2lmKGcmJihmPW8udG9TdHJpbmcoKSksKDAsbC5pc0RpY3QpKG0pKXttLmZvbnRBbGlhc2VzfHwobS5mb250QWxpYXNlcz1PYmplY3QuY3JlYXRlKG51bGwpKTt2YXIgdj1tLmZvbnRBbGlhc2VzLHk9cC5oYXNoO2lmKHZbeV0pe3ZhciBiPXZbeV0uYWxpYXNSZWY7aWYoZyYmYiYmdGhpcy5mb250Q2FjaGUuaGFzKGIpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5wdXRBbGlhcyhvLGIpLHRoaXMuZm9udENhY2hlLmdldChvKX1lbHNlIHZbeV09e2ZvbnRJRDpjLkZvbnQuZ2V0Rm9udElEKCl9O2cmJih2W3ldLmFsaWFzUmVmPW8pLGY9dlt5XS5mb250SUR9Zz90aGlzLmZvbnRDYWNoZS5wdXQobyxkLnByb21pc2UpOihmfHwoZj10aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSx0aGlzLmZvbnRDYWNoZS5wdXQoImlkXyIrZixkLnByb21pc2UpKSwoMCxpLmFzc2VydCkoZiwnVGhlICJmb250SUQiIG11c3QgYmUgZGVmaW5lZC4nKSx0LmxvYWRlZE5hbWU9ImdfIit0aGlzLnBkZk1hbmFnZXIuZG9jSWQrIl9mIitmLHQudHJhbnNsYXRlZD1kLnByb21pc2U7dHJ5e2g9dGhpcy50cmFuc2xhdGVGb250KHApfWNhdGNoKGUpe2g9UHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5mb250VHlwZSYmKHMuc3RhdHMuZm9udFR5cGVzW2UuZm9udFR5cGVdPSEwKSxkLnJlc29sdmUobmV3IEModC5sb2FkZWROYW1lLGUsdCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtuLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udH0pO3RyeXt2YXIgcj1wLmRlc2NyaXB0b3IsYT1yJiZyLmdldCgiRm9udEZpbGUzIiksbz1hJiZhLmdldCgiU3VidHlwZSIpLGw9KDAsYy5nZXRGb250VHlwZSkocC50eXBlLG8mJm8ubmFtZSk7cy5zdGF0cy5mb250VHlwZXNbbF09ITB9Y2F0Y2goZSl7fWQucmVzb2x2ZShuZXcgQyh0LmxvYWRlZE5hbWUsbmV3IGMuRXJyb3JGb250KGUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSksdCkpfSkpLGQucHJvbWlzZX0sYnVpbGRQYXRoOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aC0xO2lmKHJ8fChyPVtdKSxuPDB8fGUuZm5BcnJheVtuXSE9PWkuT1BTLmNvbnN0cnVjdFBhdGgpZS5hZGRPcChpLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0scl0pO2Vsc2V7dmFyIGE9ZS5hcmdzQXJyYXlbbl07YVswXS5wdXNoKHQpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFbMV0scil9fSxoYW5kbGVDb2xvck46ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsYz1yW3IubGVuZ3RoLTFdO2lmKCgwLGwuaXNOYW1lKShjKSYmKHM9YS5nZXQoYy5uYW1lKSkpe3ZhciB1PSgwLGwuaXNTdHJlYW0pKHMpP3MuZGljdDpzLGY9dS5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWYpe3ZhciBoPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsaCxpLHMsdSxlLG8pfWlmKDI9PT1mKXt2YXIgcD11LmdldCgiU2hhZGluZyIpLG09dS5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIHM9ZC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhwLG0sdGhpcy54cmVmLGksdGhpcy5oYW5kbGVyLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSxlLmFkZE9wKHQscy5nZXRJUigpKSxQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiK2YpKX1yZXR1cm4gZS5hZGRPcCh0LHIpLFByb21pc2UucmVzb2x2ZSgpfSxnZXRPcGVyYXRvckxpc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLGE9ZS50YXNrLG89ZS5yZXNvdXJjZXMscz1lLm9wZXJhdG9yTGlzdCxjPWUuaW5pdGlhbFN0YXRlLHU9dm9pZCAwPT09Yz9udWxsOmM7aWYobz1vfHxsLkRpY3QuZW1wdHksdT11fHxuZXcgVCwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgZj10aGlzLGg9dGhpcy54cmVmLHA9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW8uZ2V0KCJYT2JqZWN0Iil8fGwuRGljdC5lbXB0eSx2PW8uZ2V0KCJQYXR0ZXJuIil8fGwuRGljdC5lbXB0eSx5PW5ldyBQKHUpLGI9bmV3IFIocixoLHkpLHc9bmV3IG47ZnVuY3Rpb24gayhlKXtmb3IodmFyIHQ9MCxyPWIuc2F2ZWRTdGF0ZXNEZXB0aDt0PHI7dCsrKXMuYWRkT3AoaS5PUFMucmVzdG9yZSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBlKHQscil7dmFyIG49ZnVuY3Rpb24obil7bi50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07YS5lbnN1cmVOb3RUZXJtaW5hdGVkKCksdy5yZXNldCgpO2Zvcih2YXIgYyx1LFMsXyx4PXt9OyEoYz13LmNoZWNrKCkpJiYoeC5hcmdzPW51bGwsYi5yZWFkKHgpKTspe3ZhciBDPXguYXJncyxQPXguZm47c3dpdGNoKDB8UCl7Y2FzZSBpLk9QUy5wYWludFhPYmplY3Q6dmFyIEU9Q1swXS5uYW1lO2lmKEUmJnZvaWQgMCE9PXBbRV0pe3MuYWRkT3AocFtFXS5mbixwW0VdLmFyZ3MpLEM9bnVsbDtjb250aW51ZX1yZXR1cm4gdm9pZCBuKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFFKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj1tLmdldChFKTtpZighcilyZXR1cm4gcy5hZGRPcChQLEMpLHZvaWQgZSgpO2lmKCEoMCxsLmlzU3RyZWFtKShyKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTt2YXIgbj1yLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoISgwLGwuaXNOYW1lKShuKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIj09PW4ubmFtZSlyZXR1cm4geS5zYXZlKCksdm9pZCBmLmJ1aWxkRm9ybVhPYmplY3QobyxyLG51bGwscyxhLHkuc3RhdGUuY2xvbmUoKSkudGhlbigoZnVuY3Rpb24oKXt5LnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bi5uYW1lKXtpZigiUFMiIT09bi5uYW1lKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KG4ubmFtZSkpOygwLGkuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6byxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsaW1hZ2VDYWNoZTpwfSkudGhlbihlLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZihmLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBmLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93bn0pLHZvaWQoMCxpLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX0pKSk7Y2FzZSBpLk9QUy5zZXRGb250OnZhciBUPUNbMV07cmV0dXJuIHZvaWQgbihmLmhhbmRsZVNldEZvbnQobyxDLG51bGwscyxhLHkuc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3MuYWRkRGVwZW5kZW5jeShlKSxzLmFkZE9wKGkuT1BTLnNldEZvbnQsW2UsVF0pfSkpKTtjYXNlIGkuT1BTLmVuZElubGluZUltYWdlOnZhciBSPUNbMF0uY2FjaGVLZXk7aWYoUil7dmFyIE89cFtSXTtpZih2b2lkIDAhPT1PKXtzLmFkZE9wKE8uZm4sTy5hcmdzKSxDPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIG4oZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6byxpbWFnZTpDWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OlIsaW1hZ2VDYWNoZTpwfSkpO2Nhc2UgaS5PUFMuc2hvd1RleHQ6Q1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKTticmVhaztjYXNlIGkuT1BTLnNob3dTcGFjZWRUZXh0OnZhciBJPUNbMF0sRj1bXSxMPUkubGVuZ3RoLEQ9eS5zdGF0ZTtmb3IodT0wO3U8TDsrK3Upe3ZhciBNPUlbdV07KDAsaS5pc1N0cmluZykoTSk/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoRixmLmhhbmRsZVRleHQoTSxEKSk6KDAsaS5pc051bSkoTSkmJkYucHVzaChNKX1DWzBdPUYsUD1pLk9QUy5zaG93VGV4dDticmVhaztjYXNlIGkuT1BTLm5leHRMaW5lU2hvd1RleHQ6cy5hZGRPcChpLk9QUy5uZXh0TGluZSksQ1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKSxQPWkuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6cy5hZGRPcChpLk9QUy5uZXh0TGluZSkscy5hZGRPcChpLk9QUy5zZXRXb3JkU3BhY2luZyxbQy5zaGlmdCgpXSkscy5hZGRPcChpLk9QUy5zZXRDaGFyU3BhY2luZyxbQy5zaGlmdCgpXSksQ1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKSxQPWkuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgaS5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6eS5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1DWzBdO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2UucGFyc2UoQ1swXSxoLG8sZi5wZGZGdW5jdGlvbkZhY3RvcnkpO2NvbnRpbnVlO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnBhcnNlKENbMF0saCxvLGYucGRmRnVuY3Rpb25GYWN0b3J5KTtjb250aW51ZTtjYXNlIGkuT1BTLnNldEZpbGxDb2xvcjpfPXkuc3RhdGUuZmlsbENvbG9yU3BhY2UsQz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz15LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UsQz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsR3JheTp5LnN0YXRlLmZpbGxDb2xvclNwYWNlPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksQz1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlR3JheTp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKEMsMCksUD1pLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDTVlLQ29sb3I6eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLEM9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoQywwKSxQPWkuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKEMsMCksUD1pLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldEZpbGxSR0JDb2xvcjp5LnN0YXRlLmZpbGxDb2xvclNwYWNlPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoQywwKTticmVhaztjYXNlIGkuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnkuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsQz1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKEMsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShfPXkuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgbihmLmhhbmRsZUNvbG9yTihzLGkuT1BTLnNldEZpbGxDb2xvck4sQyxfLHYsbyxhKSk7Qz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShfPXkuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBuKGYuaGFuZGxlQ29sb3JOKHMsaS5PUFMuc2V0U3Ryb2tlQ29sb3JOLEMsXyx2LG8sYSkpO0M9Xy5nZXRSZ2IoQywwKSxQPWkuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2hhZGluZ0ZpbGw6dmFyIE49by5nZXQoIlNoYWRpbmciKTtpZighTil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBqPU4uZ2V0KENbMF0ubmFtZSk7aWYoIWopdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7dmFyIEI9ZC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhqLG51bGwsaCxvLGYuaGFuZGxlcixmLnBkZkZ1bmN0aW9uRmFjdG9yeSkuZ2V0SVIoKTtDPVtCXSxQPWkuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2UgaS5PUFMuc2V0R1N0YXRlOnZhciBVPUNbMF0scT1vLmdldCgiRXh0R1N0YXRlIik7aWYoISgwLGwuaXNEaWN0KShxKXx8IXEuaGFzKFUubmFtZSkpYnJlYWs7dmFyIHo9cS5nZXQoVS5uYW1lKTtyZXR1cm4gdm9pZCBuKGYuc2V0R1N0YXRlKG8seixzLGEseSkpO2Nhc2UgaS5PUFMubW92ZVRvOmNhc2UgaS5PUFMubGluZVRvOmNhc2UgaS5PUFMuY3VydmVUbzpjYXNlIGkuT1BTLmN1cnZlVG8yOmNhc2UgaS5PUFMuY3VydmVUbzM6Y2FzZSBpLk9QUy5jbG9zZVBhdGg6Y2FzZSBpLk9QUy5yZWN0YW5nbGU6Zi5idWlsZFBhdGgocyxQLEMpO2NvbnRpbnVlO2Nhc2UgaS5PUFMubWFya1BvaW50OmNhc2UgaS5PUFMubWFya1BvaW50UHJvcHM6Y2FzZSBpLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSBpLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczpjYXNlIGkuT1BTLmVuZE1hcmtlZENvbnRlbnQ6Y2FzZSBpLk9QUy5iZWdpbkNvbXBhdDpjYXNlIGkuT1BTLmVuZENvbXBhdDpjb250aW51ZTtkZWZhdWx0OmlmKG51bGwhPT1DKXtmb3IodT0wLFM9Qy5sZW5ndGg7dTxTJiYhKENbdV1pbnN0YW5jZW9mIGwuRGljdCk7dSsrKTtpZih1PFMpeygwLGkud2FybikoImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiAiK1ApO2NvbnRpbnVlfX19cy5hZGRPcChQLEMpfWM/bihBKTooaygpLHQoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIHQuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6aS5VTlNVUFBPUlRFRF9GRUFUVVJFUy51bmtub3dufSksKDAsaS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQoYS5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBrKCk7dGhyb3cgZX0pKX0sZ2V0VGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLGE9ZS50YXNrLG89ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5ub3JtYWxpemVXaGl0ZXNwYWNlLGg9dm9pZCAwIT09dSYmdSxkPWUuY29tYmluZVRleHRJdGVtcyxwPXZvaWQgMCE9PWQmJmQsZz1lLnNpbmssdj1lLnNlZW5TdHlsZXMseT12b2lkIDA9PT12P09iamVjdC5jcmVhdGUobnVsbCk6djtvPW98fGwuRGljdC5lbXB0eSxjPWN8fG5ldyBQKG5ldyBFKTt2YXIgYix3PS9ccy9nLGs9e2l0ZW1zOltdLHN0eWxlczpPYmplY3QuY3JlYXRlKG51bGwpfSxTPXtpbml0aWFsaXplZDohMSxzdHI6W10sd2lkdGg6MCxoZWlnaHQ6MCx2ZXJ0aWNhbDohMSxsYXN0QWR2YW5jZVdpZHRoOjAsbGFzdEFkdmFuY2VIZWlnaHQ6MCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VXaWR0aDowLGZha2VTcGFjZU1pbjoxLzAsZmFrZU11bHRpU3BhY2VNaW46MS8wLGZha2VNdWx0aVNwYWNlTWF4Oi0wLHRleHRSdW5CcmVha0FsbG93ZWQ6ITEsdHJhbnNmb3JtOm51bGwsZm9udE5hbWU6bnVsbH0sXz10aGlzLHg9dGhpcy54cmVmLEM9bnVsbCxUPU9iamVjdC5jcmVhdGUobnVsbCksTz1uZXcgUihyLHgsYyk7ZnVuY3Rpb24gSSgpe2lmKFMuaW5pdGlhbGl6ZWQpcmV0dXJuIFM7dmFyIGU9Yi5mb250O2UubG9hZGVkTmFtZSBpbiB5fHwoeVtlLmxvYWRlZE5hbWVdPSEwLGsuc3R5bGVzW2UubG9hZGVkTmFtZV09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOiEhZS52ZXJ0aWNhbH0pLFMuZm9udE5hbWU9ZS5sb2FkZWROYW1lO3ZhciB0PVtiLmZvbnRTaXplKmIudGV4dEhTY2FsZSwwLDAsYi5mb250U2l6ZSwwLGIudGV4dFJpc2VdO2lmKGUuaXNUeXBlM0ZvbnQmJmIuZm9udE1hdHJpeCE9PWkuRk9OVF9JREVOVElUWV9NQVRSSVgmJjE9PT1iLmZvbnRTaXplKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHIqPWIuZm9udE1hdHJpeFszXSx0WzNdKj1yKX12YXIgbj1pLlV0aWwudHJhbnNmb3JtKGIuY3RtLGkuVXRpbC50cmFuc2Zvcm0oYi50ZXh0TWF0cml4LHQpKTtTLnRyYW5zZm9ybT1uLGUudmVydGljYWw/KFMud2lkdGg9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0pLFMuaGVpZ2h0PTAsUy52ZXJ0aWNhbD0hMCk6KFMud2lkdGg9MCxTLmhlaWdodD1NYXRoLnNxcnQoblsyXSpuWzJdK25bM10qblszXSksUy52ZXJ0aWNhbD0hMSk7dmFyIGE9Yi50ZXh0TGluZU1hdHJpeFswXSxvPWIudGV4dExpbmVNYXRyaXhbMV0scz1NYXRoLnNxcnQoYSphK28qbyk7YT1iLmN0bVswXSxvPWIuY3RtWzFdO3ZhciBsPU1hdGguc3FydChhKmErbypvKTtTLnRleHRBZHZhbmNlU2NhbGU9bCpzLFMubGFzdEFkdmFuY2VXaWR0aD0wLFMubGFzdEFkdmFuY2VIZWlnaHQ9MDt2YXIgYz1lLnNwYWNlV2lkdGgvMWUzKmIuZm9udFNpemU7cmV0dXJuIGM/KFMuc3BhY2VXaWR0aD1jLFMuZmFrZVNwYWNlTWluPS4zKmMsUy5mYWtlTXVsdGlTcGFjZU1pbj0xLjUqYyxTLmZha2VNdWx0aVNwYWNlTWF4PTQqYyxTLnRleHRSdW5CcmVha0FsbG93ZWQ9IWUuaXNNb25vc3BhY2UpOihTLnNwYWNlV2lkdGg9MCxTLmZha2VTcGFjZU1pbj0xLzAsUy5mYWtlTXVsdGlTcGFjZU1pbj0xLzAsUy5mYWtlTXVsdGlTcGFjZU1heD0wLFMudGV4dFJ1bkJyZWFrQWxsb3dlZD0hMSksUy5pbml0aWFsaXplZD0hMCxTfWZ1bmN0aW9uIEYoZSl7Zm9yKHZhciB0LHI9MCxuPWUubGVuZ3RoO3I8biYmKHQ9ZS5jaGFyQ29kZUF0KHIpKT49MzImJnQ8PTEyNzspcisrO3JldHVybiByPG4/ZS5yZXBsYWNlKHcsIiAiKTplfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gXy5sb2FkRm9udChlLHQsbykudGhlbigoZnVuY3Rpb24oZSl7Yi5mb250PWUuZm9udCxiLmZvbnRNYXRyaXg9ZS5mb250LmZvbnRNYXRyaXh8fGkuRk9OVF9JREVOVElUWV9NQVRSSVh9KSl9ZnVuY3Rpb24gRChlKXtmb3IodmFyIHQ9Yi5mb250LHI9SSgpLG49MCxhPTAsaT10LmNoYXJzVG9HbHlwaHMoZSksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9bnVsbDtsPXQudmVydGljYWwmJnMudm1ldHJpYz9zLnZtZXRyaWNbMF06cy53aWR0aDt2YXIgYz1zLnVuaWNvZGUsdT0oMCxmLmdldE5vcm1hbGl6ZWRVbmljb2RlcykoKTt2b2lkIDAhPT11W2NdJiYoYz11W2NdKSxjPSgwLGYucmV2ZXJzZUlmUnRsKShjKTt2YXIgaD1iLmNoYXJTcGFjaW5nO2lmKHMuaXNTcGFjZSl7dmFyIGQ9Yi53b3JkU3BhY2luZztoKz1kLGQ+MCYmTShkLHIuc3RyKX12YXIgcD0wLG09MDt0LnZlcnRpY2FsP2ErPW09bCpiLmZvbnRNYXRyaXhbMF0qYi5mb250U2l6ZStoOm4rPXA9KGwqYi5mb250TWF0cml4WzBdKmIuZm9udFNpemUraCkqYi50ZXh0SFNjYWxlLGIudHJhbnNsYXRlVGV4dE1hdHJpeChwLG0pLHIuc3RyLnB1c2goYyl9cmV0dXJuIHQudmVydGljYWw/KHIubGFzdEFkdmFuY2VIZWlnaHQ9YSxyLmhlaWdodCs9TWF0aC5hYnMoYSkpOihyLmxhc3RBZHZhbmNlV2lkdGg9bixyLndpZHRoKz1uKSxyfWZ1bmN0aW9uIE0oZSx0KXtpZighKGU8Uy5mYWtlU3BhY2VNaW4pKWlmKGU8Uy5mYWtlTXVsdGlTcGFjZU1pbil0LnB1c2goIiAiKTtlbHNlIGZvcih2YXIgcj1NYXRoLnJvdW5kKGUvUy5zcGFjZVdpZHRoKTtyLS0gPjA7KXQucHVzaCgiICIpfWZ1bmN0aW9uIE4oKXt2YXIgZSx0LHI7Uy5pbml0aWFsaXplZCYmKFMudmVydGljYWw/Uy5oZWlnaHQqPVMudGV4dEFkdmFuY2VTY2FsZTpTLndpZHRoKj1TLnRleHRBZHZhbmNlU2NhbGUsay5pdGVtcy5wdXNoKCh0PShlPVMpLnN0ci5qb2luKCIiKSxyPSgwLG0uYmlkaSkodCwtMSxlLnZlcnRpY2FsKSx7c3RyOmg/RihyLnN0cik6ci5zdHIsZGlyOnIuZGlyLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHRyYW5zZm9ybTplLnRyYW5zZm9ybSxmb250TmFtZTplLmZvbnROYW1lfSkpLFMuaW5pdGlhbGl6ZWQ9ITEsUy5zdHIubGVuZ3RoPTApfWZ1bmN0aW9uIGooKXt2YXIgZT1rLml0ZW1zLmxlbmd0aDtlPjAmJihnLmVucXVldWUoayxlKSxrLml0ZW1zPVtdLGsuc3R5bGVzPU9iamVjdC5jcmVhdGUobnVsbCkpfXZhciBCPW5ldyBuO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBuPWZ1bmN0aW9uKG4pe2ooKSxQcm9taXNlLmFsbChbbixnLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O2EuZW5zdXJlTm90VGVybWluYXRlZCgpLEIucmVzZXQoKTtmb3IodmFyIHMsdT17fSxmPVtdOyEocz1CLmNoZWNrKCkpJiYoZi5sZW5ndGg9MCx1LmFyZ3M9ZixPLnJlYWQodSkpOyl7Yj1jLnN0YXRlO3ZhciBkLG09dS5mbjtzd2l0Y2goZj11LmFyZ3MsMHxtKXtjYXNlIGkuT1BTLnNldEZvbnQ6dmFyIHY9ZlswXS5uYW1lLHc9ZlsxXTtpZihiLmZvbnQmJnY9PT1iLmZvbnROYW1lJiZ3PT09Yi5mb250U2l6ZSlicmVhaztyZXR1cm4gTigpLGIuZm9udE5hbWU9dixiLmZvbnRTaXplPXcsdm9pZCBuKEwodixudWxsKSk7Y2FzZSBpLk9QUy5zZXRUZXh0UmlzZTpOKCksYi50ZXh0UmlzZT1mWzBdO2JyZWFrO2Nhc2UgaS5PUFMuc2V0SFNjYWxlOk4oKSxiLnRleHRIU2NhbGU9ZlswXS8xMDA7YnJlYWs7Y2FzZSBpLk9QUy5zZXRMZWFkaW5nOk4oKSxiLmxlYWRpbmc9ZlswXTticmVhaztjYXNlIGkuT1BTLm1vdmVUZXh0OnZhciB4PSEhYi5mb250JiYwPT09KGIuZm9udC52ZXJ0aWNhbD9mWzBdOmZbMV0pO2lmKGQ9ZlswXS1mWzFdLHAmJngmJlMuaW5pdGlhbGl6ZWQmJmQ+MCYmZDw9Uy5mYWtlTXVsdGlTcGFjZU1heCl7Yi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pLFMud2lkdGgrPWZbMF0tUy5sYXN0QWR2YW5jZVdpZHRoLFMuaGVpZ2h0Kz1mWzFdLVMubGFzdEFkdmFuY2VIZWlnaHQsTShmWzBdLVMubGFzdEFkdmFuY2VXaWR0aC0oZlsxXS1TLmxhc3RBZHZhbmNlSGVpZ2h0KSxTLnN0cik7YnJlYWt9TigpLGIudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoZlswXSxmWzFdKSxiLnRleHRNYXRyaXg9Yi50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok4oKSxiLmxlYWRpbmc9LWZbMV0sYi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pLGIudGV4dE1hdHJpeD1iLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBpLk9QUy5uZXh0TGluZTpOKCksYi5jYXJyaWFnZVJldHVybigpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0VGV4dE1hdHJpeDppZihkPWIuY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSkscCYmbnVsbCE9PWQmJlMuaW5pdGlhbGl6ZWQmJmQudmFsdWU+MCYmZC52YWx1ZTw9Uy5mYWtlTXVsdGlTcGFjZU1heCl7Yi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChkLndpZHRoLGQuaGVpZ2h0KSxTLndpZHRoKz1kLndpZHRoLVMubGFzdEFkdmFuY2VXaWR0aCxTLmhlaWdodCs9ZC5oZWlnaHQtUy5sYXN0QWR2YW5jZUhlaWdodCxNKGQud2lkdGgtUy5sYXN0QWR2YW5jZVdpZHRoLShkLmhlaWdodC1TLmxhc3RBZHZhbmNlSGVpZ2h0KSxTLnN0cik7YnJlYWt9TigpLGIuc2V0VGV4dE1hdHJpeChmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSksYi5zZXRUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRDaGFyU3BhY2luZzpiLmNoYXJTcGFjaW5nPWZbMF07YnJlYWs7Y2FzZSBpLk9QUy5zZXRXb3JkU3BhY2luZzpiLndvcmRTcGFjaW5nPWZbMF07YnJlYWs7Y2FzZSBpLk9QUy5iZWdpblRleHQ6TigpLGIudGV4dE1hdHJpeD1pLklERU5USVRZX01BVFJJWC5zbGljZSgpLGIudGV4dExpbmVNYXRyaXg9aS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGkuT1BTLnNob3dTcGFjZWRUZXh0OmZvcih2YXIgRSxSPWZbMF0sRj0wLFU9Ui5sZW5ndGg7RjxVO0YrKylpZigic3RyaW5nIj09dHlwZW9mIFJbRl0pRChSW0ZdKTtlbHNlIGlmKCgwLGkuaXNOdW0pKFJbRl0pKXtJKCksZD1SW0ZdKmIuZm9udFNpemUvMWUzO3ZhciBxPSExO2IuZm9udC52ZXJ0aWNhbD8oRT1kLGIudHJhbnNsYXRlVGV4dE1hdHJpeCgwLEUpLChxPVMudGV4dFJ1bkJyZWFrQWxsb3dlZCYmZD5TLmZha2VNdWx0aVNwYWNlTWF4KXx8KFMuaGVpZ2h0Kz1FKSk6KEU9KGQ9LWQpKmIudGV4dEhTY2FsZSxiLnRyYW5zbGF0ZVRleHRNYXRyaXgoRSwwKSwocT1TLnRleHRSdW5CcmVha0FsbG93ZWQmJmQ+Uy5mYWtlTXVsdGlTcGFjZU1heCl8fChTLndpZHRoKz1FKSkscT9OKCk6ZD4wJiZNKGQsUy5zdHIpfWJyZWFrO2Nhc2UgaS5PUFMuc2hvd1RleHQ6RChmWzBdKTticmVhaztjYXNlIGkuT1BTLm5leHRMaW5lU2hvd1RleHQ6TigpLGIuY2FycmlhZ2VSZXR1cm4oKSxEKGZbMF0pO2JyZWFrO2Nhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6TigpLGIud29yZFNwYWNpbmc9ZlswXSxiLmNoYXJTcGFjaW5nPWZbMV0sYi5jYXJyaWFnZVJldHVybigpLEQoZlsyXSk7YnJlYWs7Y2FzZSBpLk9QUy5wYWludFhPYmplY3Q6TigpLEN8fChDPW8uZ2V0KCJYT2JqZWN0Iil8fGwuRGljdC5lbXB0eSk7dmFyIHo9ZlswXS5uYW1lO2lmKHomJnZvaWQgMCE9PVRbel0pYnJlYWs7cmV0dXJuIHZvaWQgbihuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtpZigheil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9Qy5nZXQoeik7aWYocil7aWYoISgwLGwuaXNTdHJlYW0pKHIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBuPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKDAsbC5pc05hbWUpKG4pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09bi5uYW1lKXJldHVybiBUW3pdPSEwLHZvaWQgZSgpO3ZhciBzPWMuc3RhdGUuY2xvbmUoKSx1PW5ldyBQKHMpLGY9ci5kaWN0LmdldEFycmF5KCJNYXRyaXgiKTtBcnJheS5pc0FycmF5KGYpJiY2PT09Zi5sZW5ndGgmJnUudHJhbnNmb3JtKGYpLGooKTt2YXIgZD17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZy5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBnLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZy5yZWFkeX19O18uZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6YSxyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fG8sc3RhdGVNYW5hZ2VyOnUsbm9ybWFsaXplV2hpdGVzcGFjZTpoLGNvbWJpbmVUZXh0SXRlbXM6cCxzaW5rOmQsc2VlblN0eWxlczp5fSkudGhlbigoZnVuY3Rpb24oKXtkLmVucXVldWVJbnZva2VkfHwoVFt6XT0hMCksZSgpfSksdCl9ZWxzZSBlKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuQWJvcnRFeGNlcHRpb24pKXtpZighXy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGkud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpfX0pKSk7Y2FzZSBpLk9QUy5zZXRHU3RhdGU6TigpO3ZhciBXPWZbMF0sSD1vLmdldCgiRXh0R1N0YXRlIik7aWYoISgwLGwuaXNEaWN0KShIKXx8ISgwLGwuaXNOYW1lKShXKSlicmVhazt2YXIgRz1ILmdldChXLm5hbWUpO2lmKCEoMCxsLmlzRGljdCkoRykpYnJlYWs7dmFyIFY9Ry5nZXQoIkZvbnQiKTtpZihWKXJldHVybiBiLmZvbnROYW1lPW51bGwsYi5mb250U2l6ZT1WWzFdLHZvaWQgbihMKG51bGwsVlswXSkpfWlmKGsuaXRlbXMubGVuZ3RoPj1nLmRlc2lyZWRTaXplKXtzPSEwO2JyZWFrfX1zP24oQSk6KE4oKSxqKCksdCgpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgaS5BYm9ydEV4Y2VwdGlvbikpe2lmKHQub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuKDAsaS53YXJuKSgnZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICInLmNvbmNhdChhLm5hbWUsJyIgJykrJ3Rhc2s6ICInLmNvbmNhdChlLCciLicpKSxOKCksdm9pZCBqKCk7dGhyb3cgZX19KSl9LGV4dHJhY3REYXRhU3RydWN0dXJlczpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyxhPXRoaXMueHJlZixvPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpLHM9bz90aGlzLnJlYWRUb1VuaWNvZGUobyk6UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7KDAsbC5pc0RpY3QpKGYpJiYoci5jaWRTeXN0ZW1JbmZvPXtyZWdpc3RyeTooMCxpLnN0cmluZ1RvUERGU3RyaW5nKShmLmdldCgiUmVnaXN0cnkiKSksb3JkZXJpbmc6KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIk9yZGVyaW5nIikpLHN1cHBsZW1lbnQ6Zi5nZXQoIlN1cHBsZW1lbnQiKX0pO3ZhciBoPWUuZ2V0KCJDSURUb0dJRE1hcCIpOygwLGwuaXNTdHJlYW0pKGgpJiYoci5jaWRUb0dpZE1hcD10aGlzLnJlYWRDaWRUb0dpZE1hcChoKSl9dmFyIGQscD1bXSxtPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKGQ9ZS5nZXQoIkVuY29kaW5nIiksKDAsbC5pc0RpY3QpKGQpKXtpZihtPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSxtPSgwLGwuaXNOYW1lKShtKT9tLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSlmb3IodmFyIGc9ZC5nZXQoIkRpZmZlcmVuY2VzIiksdj0wLHk9MCxiPWcubGVuZ3RoO3k8Yjt5Kyspe3ZhciB3PWEuZmV0Y2hJZlJlZihnW3ldKTtpZigoMCxpLmlzTnVtKSh3KSl2PXc7ZWxzZXtpZighKDAsbC5pc05hbWUpKHcpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KHcpKTtwW3YrK109dy5uYW1lfX19ZWxzZXtpZighKDAsbC5pc05hbWUpKGQpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiKTttPWQubmFtZX0iTWFjUm9tYW5FbmNvZGluZyIhPT1tJiYiTWFjRXhwZXJ0RW5jb2RpbmciIT09bSYmIldpbkFuc2lFbmNvZGluZyIhPT1tJiYobT1udWxsKX1pZihtKXIuZGVmYXVsdEVuY29kaW5nPSgwLHUuZ2V0RW5jb2RpbmcpKG0pLnNsaWNlKCk7ZWxzZXt2YXIgaz0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxTPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fFN8fChkPXUuV2luQW5zaUVuY29kaW5nKSxrJiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlfHwoL1N5bWJvbC9pLnRlc3Qoci5uYW1lKT9kPXUuU3ltYm9sU2V0RW5jb2Rpbmc6L0RpbmdiYXRzL2kudGVzdChyLm5hbWUpJiYoZD11LlphcGZEaW5nYmF0c0VuY29kaW5nKSkpLHIuZGVmYXVsdEVuY29kaW5nPWR9cmV0dXJuIHIuZGlmZmVyZW5jZXM9cCxyLmJhc2VFbmNvZGluZ05hbWU9bSxyLmhhc0VuY29kaW5nPSEhbXx8cC5sZW5ndGg+MCxyLmRpY3Q9ZSxzLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLnRvVW5pY29kZT1lLG4uYnVpbGRUb1VuaWNvZGUocil9KSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUscn0pKX0sX2J1aWxkU2ltcGxlRm9udFRvVW5pY29kZTpmdW5jdGlvbihlKXsoMCxpLmFzc2VydCkoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7dmFyIHQscixuPVtdLGE9ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxvPWUuYmFzZUVuY29kaW5nTmFtZSxzPWUuZGlmZmVyZW5jZXM7Zm9yKHQgaW4gcykiLm5vdGRlZiIhPT0ocj1zW3RdKSYmKGFbdF09cik7dmFyIGw9KDAsdi5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih0IGluIGEpaWYoIiIhPT0ocj1hW3RdKSlpZih2b2lkIDAhPT1sW3JdKW5bdF09U3RyaW5nLmZyb21DaGFyQ29kZShsW3JdKTtlbHNle3ZhciBoPTA7c3dpdGNoKHJbMF0pe2Nhc2UiRyI6Mz09PXIubGVuZ3RoJiYoaD1wYXJzZUludChyLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiZyI6NT09PXIubGVuZ3RoJiYoaD1wYXJzZUludChyLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiQyI6Y2FzZSJjIjpyLmxlbmd0aD49MyYmKGg9K3Iuc3Vic3RyaW5nKDEpKTticmVhaztkZWZhdWx0OnZhciBkPSgwLGYuZ2V0VW5pY29kZUZvckdseXBoKShyLGwpOy0xIT09ZCYmKGg9ZCl9aWYoaCl7aWYobyYmaD09PSt0KXt2YXIgcD0oMCx1LmdldEVuY29kaW5nKShvKTtpZihwJiYocj1wW3RdKSl7blt0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbcl0pO2NvbnRpbnVlfX1uW3RdPVN0cmluZy5mcm9tQ29kZVBvaW50KGgpfX1yZXR1cm4gbmV3IGMuVG9Vbmljb2RlTWFwKG4pfSxidWlsZFRvVW5pY29kZTpmdW5jdGlvbihlKXtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwPSEhZS50b1VuaWNvZGUmJmUudG9Vbmljb2RlLmxlbmd0aD4wLGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuIWUuY29tcG9zaXRlJiZlLmhhc0VuY29kaW5nJiYoZS5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUoZSkpLFByb21pc2UucmVzb2x2ZShlLnRvVW5pY29kZSk7aWYoIWUuY29tcG9zaXRlKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBvLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7dmFyIHQ9ZS5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5LHI9ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nLG49bC5OYW1lLmdldCh0KyItIityKyItVUNTMiIpO3JldHVybiBvLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6bixmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1lLmNNYXAsbj1bXTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKHI+NjU1MzUpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTt2YXIgYT10Lmxvb2t1cChyKTthJiYobltlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChhLmNoYXJDb2RlQXQoMCk8PDgpK2EuY2hhckNvZGVBdCgxKSkpfSkpLG5ldyBjLlRvVW5pY29kZU1hcChuKX0pKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKGUuZmlyc3RDaGFyLGUubGFzdENoYXIpKX0scmVhZFRvVW5pY29kZTpmdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybigwLGwuaXNOYW1lKSh0KT9vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6dCxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG8uSWRlbnRpdHlDTWFwP25ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBjLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTooMCxsLmlzU3RyZWFtKSh0KT9vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6dCxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5JZGVudGl0eUNNYXApcmV0dXJuIG5ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpO3ZhciB0PW5ldyBBcnJheShlLmxlbmd0aCk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49W10sYT0wO2E8ci5sZW5ndGg7YSs9Mil7dmFyIGk9ci5jaGFyQ29kZUF0KGEpPDw4fHIuY2hhckNvZGVBdChhKzEpO2lmKDU1Mjk2PT0oNjM0ODgmaSkpe2ErPTI7dmFyIG89ci5jaGFyQ29kZUF0KGEpPDw4fHIuY2hhckNvZGVBdChhKzEpO24ucHVzaCgoKDEwMjMmaSk8PDEwKSsoMTAyMyZvKSs2NTUzNil9ZWxzZSBuLnB1c2goaSl9dFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsbil9KSksbmV3IGMuVG9Vbmljb2RlTWFwKHQpfSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0scmVhZENpZFRvR2lkTWFwOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmdldEJ5dGVzKCkscj1bXSxuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXt2YXIgaT10W24rK108PDh8dFtuXTswIT09aSYmKHJbbj4+MV09aSl9cmV0dXJuIHJ9LGV4dHJhY3RXaWR0aHM6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsdSxmLGgsZD10aGlzLnhyZWYscD1bXSxtPTAsZz1bXTtpZihyLmNvbXBvc2l0ZSl7aWYobT1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKHU9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iobz0wLHM9Zi5sZW5ndGg7bzxzO28rKylwW3UrK109ZC5mZXRjaElmUmVmKGZbb10pO2Vsc2V7dmFyIHY9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKG89dTtvPD1mO28rKylwW29dPXZ9aWYoci52ZXJ0aWNhbCl7dmFyIHk9ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1beVsxXSwuNSptLHlbMF1dLHk9ZS5nZXQoIlcyIikpZm9yKGE9MCxpPXkubGVuZ3RoO2E8aTthKyspaWYodT1kLmZldGNoSWZSZWYoeVthKytdKSxmPWQuZmV0Y2hJZlJlZih5W2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihvPTAscz1mLmxlbmd0aDtvPHM7bysrKWdbdSsrXT1bZC5mZXRjaElmUmVmKGZbbysrXSksZC5mZXRjaElmUmVmKGZbbysrXSksZC5mZXRjaElmUmVmKGZbb10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYoeVsrK2FdKSxkLmZldGNoSWZSZWYoeVsrK2FdKSxkLmZldGNoSWZSZWYoeVsrK2FdKV07Zm9yKG89dTtvPD1mO28rKylnW29dPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iobz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtvKytdPWQuZmV0Y2hJZlJlZihoW2FdKTttPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKCgwLGwuaXNOYW1lKShrKSl7dmFyIFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3Moay5uYW1lKTtwPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgoUy53aWR0aHMsciksbT1TLmRlZmF1bHRXaWR0aH19fXZhciBfPSEwLHg9bTtmb3IodmFyIEEgaW4gcCl7dmFyIEM9cFtBXTtpZihDKWlmKHgpe2lmKHghPT1DKXtfPSExO2JyZWFrfX1lbHNlIHg9Q31fJiYoci5mbGFnc3w9Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaCksci5kZWZhdWx0V2lkdGg9bSxyLndpZHRocz1wLHIuZGVmYXVsdFZNZXRyaWNzPW4sci52bWV0cmljcz1nfSxpc1NlcmlmRm9udDpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxoLmdldFNlcmlmRm9udHMpKCl8fC0xIT09dC5zZWFyY2goL3NlcmlmL2dpKX0sZ2V0QmFzZUZvbnRNZXRyaWNzOmZ1bmN0aW9uKGUpe3ZhciB0PTAscj1bXSxuPSExLGE9KDAsaC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLG89KDAseS5nZXRNZXRyaWNzKSgpO2EgaW4gb3x8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgcz1vW2FdO3JldHVybigwLGkuaXNOdW0pKHMpPyh0PXMsbj0hMCk6cj1zKCkse2RlZmF1bHRXaWR0aDp0LG1vbm9zcGFjZTpuLHdpZHRoczpyfX0sYnVpbGRDaGFyQ29kZVRvV2lkdGg6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn0scHJlRXZhbHVhdGVGb250OmZ1bmN0aW9uKGUpe3ZhciB0PWUscj1lLmdldCgiU3VidHlwZSIpO2lmKCEoMCxsLmlzTmFtZSkocikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7dmFyIG4sYT0hMTtpZigiVHlwZTAiPT09ci5uYW1lKXt2YXIgbz1lLmdldCgiRGVzY2VuZGFudEZvbnRzIik7aWYoIW8pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkRlc2NlbmRhbnQgZm9udHMgYXJlIG5vdCBzcGVjaWZpZWQiKTtpZihyPShlPUFycmF5LmlzQXJyYXkobyk/dGhpcy54cmVmLmZldGNoSWZSZWYob1swXSk6bykuZ2V0KCJTdWJ0eXBlIiksISgwLGwuaXNOYW1lKShyKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTthPSEwfXZhciBzPWUuZ2V0KCJGb250RGVzY3JpcHRvciIpO2lmKHMpe3ZhciBjPW5ldyBrLk11cm11ckhhc2gzXzY0LHU9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoKDAsbC5pc05hbWUpKHUpKWMudXBkYXRlKHUubmFtZSk7ZWxzZSBpZigoMCxsLmlzUmVmKSh1KSljLnVwZGF0ZSh1LnRvU3RyaW5nKCkpO2Vsc2UgaWYoKDAsbC5pc0RpY3QpKHUpKWZvcih2YXIgZj11LmdldEtleXMoKSxoPTAsZD1mLmxlbmd0aDtoPGQ7aCsrKXt2YXIgcD11LmdldFJhdyhmW2hdKTtpZigoMCxsLmlzTmFtZSkocCkpYy51cGRhdGUocC5uYW1lKTtlbHNlIGlmKCgwLGwuaXNSZWYpKHApKWMudXBkYXRlKHAudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHApKXtmb3IodmFyIG09cC5sZW5ndGgsZz1uZXcgQXJyYXkobSksdj0wO3Y8bTt2Kyspe3ZhciB5PXBbdl07KDAsbC5pc05hbWUpKHkpP2dbdl09eS5uYW1lOigoMCxpLmlzTnVtKSh5KXx8KDAsbC5pc1JlZikoeSkpJiYoZ1t2XT15LnRvU3RyaW5nKCkpfWMudXBkYXRlKGcuam9pbigpKX19dmFyIGI9ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIik7aWYoKDAsbC5pc1N0cmVhbSkoYikpe3ZhciB3PWIuc3RyfHxiO249dy5idWZmZXI/bmV3IFVpbnQ4QXJyYXkody5idWZmZXIuYnVmZmVyLDAsdy5idWZmZXJMZW5ndGgpOm5ldyBVaW50OEFycmF5KHcuYnl0ZXMuYnVmZmVyLHcuc3RhcnQsdy5lbmQtdy5zdGFydCksYy51cGRhdGUobil9ZWxzZSgwLGwuaXNOYW1lKShiKSYmYy51cGRhdGUoYi5uYW1lKTt2YXIgUz1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtTJiYobj1uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoUykuYnVmZmVyKSxjLnVwZGF0ZShuKSl9cmV0dXJue2Rlc2NyaXB0b3I6cyxkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6YSx0eXBlOnIubmFtZSxoYXNoOmM/Yy5oZXhkaWdlc3QoKToiIn19LHRyYW5zbGF0ZUZvbnQ6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLG49ZS5iYXNlRGljdCxhPWUuZGljdCxzPWUuY29tcG9zaXRlLHU9ZS5kZXNjcmlwdG9yLGY9ZS50eXBlLGQ9cz82NTUzNToyNTU7aWYoIXUpe2lmKCJUeXBlMyIhPT1mKXt2YXIgcD1hLmdldCgiQmFzZUZvbnQiKTtpZighKDAsbC5pc05hbWUpKHApKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO3A9cC5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpO3ZhciBtPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHApLGc9cC5zcGxpdCgiLSIpWzBdLHY9KHRoaXMuaXNTZXJpZkZvbnQoZyk/Yy5Gb250RmxhZ3MuU2VyaWY6MCl8KG0ubW9ub3NwYWNlP2MuRm9udEZsYWdzLkZpeGVkUGl0Y2g6MCl8KCgwLGguZ2V0U3ltYm9sc0ZvbnRzKSgpW2ddP2MuRm9udEZsYWdzLlN5bWJvbGljOmMuRm9udEZsYWdzLk5vbnN5bWJvbGljKTtyZXR1cm4gdD17dHlwZTpmLG5hbWU6cCx3aWR0aHM6bS53aWR0aHMsZGVmYXVsdFdpZHRoOm0uZGVmYXVsdFdpZHRoLGZsYWdzOnYsZmlyc3RDaGFyOjAsbGFzdENoYXI6ZH0sdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYSxhLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLndpZHRocz1yLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG0ud2lkdGhzLGUpLG5ldyBjLkZvbnQocCxudWxsLGUpfSkpfSh1PW5ldyBsLkRpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLGwuTmFtZS5nZXQoZikpLHUuc2V0KCJGb250QkJveCIsYS5nZXRBcnJheSgiRm9udEJCb3giKSl9dmFyIHk9YS5nZXQoIkZpcnN0Q2hhciIpfHwwLGI9YS5nZXQoIkxhc3RDaGFyIil8fGQsdz11LmdldCgiRm9udE5hbWUiKSxrPWEuZ2V0KCJCYXNlRm9udCIpO2lmKCgwLGkuaXNTdHJpbmcpKHcpJiYodz1sLk5hbWUuZ2V0KHcpKSwoMCxpLmlzU3RyaW5nKShrKSYmKGs9bC5OYW1lLmdldChrKSksIlR5cGUzIiE9PWYpe3ZhciBTPXcmJncubmFtZSxfPWsmJmsubmFtZTtTIT09XyYmKCgwLGkuaW5mbykoIlRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFwiIi5jb25jYXQoUywnIiBidXQgJykrInNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250IFwiIi5jb25jYXQoXywnIi4nKSksUyYmXyYmXy5zdGFydHNXaXRoKFMpJiYodz1rKSl9aWYodz13fHxrLCEoMCxsLmlzTmFtZSkodykpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7dmFyIHgsQT11LmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKTtpZihBJiZBLmRpY3Qpe3ZhciBDPUEuZGljdC5nZXQoIlN1YnR5cGUiKTtDJiYoQz1DLm5hbWUpO3ZhciBQPUEuZGljdC5nZXQoIkxlbmd0aDEiKSxFPUEuZGljdC5nZXQoIkxlbmd0aDIiKSxUPUEuZGljdC5nZXQoIkxlbmd0aDMiKX1pZih0PXt0eXBlOmYsbmFtZTp3Lm5hbWUsc3VidHlwZTpDLGZpbGU6QSxsZW5ndGgxOlAsbGVuZ3RoMjpFLGxlbmd0aDM6VCxsb2FkZWROYW1lOm4ubG9hZGVkTmFtZSxjb21wb3NpdGU6cyx3aWRlQ2hhcnM6cyxmaXhlZFBpdGNoOiExLGZvbnRNYXRyaXg6YS5nZXRBcnJheSgiRm9udE1hdHJpeCIpfHxpLkZPTlRfSURFTlRJVFlfTUFUUklYLGZpcnN0Q2hhcjp5fHwwLGxhc3RDaGFyOmJ8fGQsYmJveDp1LmdldEFycmF5KCJGb250QkJveCIpLGFzY2VudDp1LmdldCgiQXNjZW50IiksZGVzY2VudDp1LmdldCgiRGVzY2VudCIpLHhIZWlnaHQ6dS5nZXQoIlhIZWlnaHQiKSxjYXBIZWlnaHQ6dS5nZXQoIkNhcEhlaWdodCIpLGZsYWdzOnUuZ2V0KCJGbGFncyIpLGl0YWxpY0FuZ2xlOnUuZ2V0KCJJdGFsaWNBbmdsZSIpLGlzVHlwZTNGb250OiExfSxzKXt2YXIgUj1uLmdldCgiRW5jb2RpbmciKTsoMCxsLmlzTmFtZSkoUikmJih0LmNpZEVuY29kaW5nPVIubmFtZSkseD1vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6UixmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXt0LmNNYXA9ZSx0LnZlcnRpY2FsPXQuY01hcC52ZXJ0aWNhbH0pKX1lbHNlIHg9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHgudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gci5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYSxuLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLmV4dHJhY3RXaWR0aHMoYSx1LGUpLCJUeXBlMyI9PT1mJiYoZS5pc1R5cGUzRm9udD0hMCksbmV3IGMuRm9udCh3Lm5hbWUsQSxlKX0pKX19LHIuYnVpbGRGb250UGF0aHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4odCl7ZS5yZW5kZXJlci5oYXNCdWlsdFBhdGgodCl8fHIuc2VuZCgiY29tbW9ub2JqIixbIiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX12YXIgYT0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIHMsbD10W1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHM9bC5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBjPXMudmFsdWU7bihjLmZvbnRDaGFyKTt2YXIgdT1jLmFjY2VudDt1JiZ1LmZvbnRDaGFyJiZuKHUuZm9udENoYXIpfX1jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXthfHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319fSxyfSgpO3QuUGFydGlhbEV2YWx1YXRvcj1BO3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5sb2FkZWROYW1lPWUsdGhpcy5mb250PXQsdGhpcy5kaWN0PXIsdGhpcy50eXBlM0xvYWRlZD1udWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gZS5wcm90b3R5cGU9e3NlbmQ6ZnVuY3Rpb24oZSl7dGhpcy5zZW50fHwodGhpcy5zZW50PSEwLGUuc2VuZCgiY29tbW9ub2JqIixbdGhpcy5sb2FkZWROYW1lLCJGb250Iix0aGlzLmZvbnQuZXhwb3J0RGF0YSgpXSkpfSxmYWxsYmFjazpmdW5jdGlvbihlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDt2YXIgdD10aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcztBLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0LGUpfX0sbG9hZFR5cGUzRGF0YTpmdW5jdGlvbihlLHQscixuKXtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDt2YXIgYT1PYmplY3QuY3JlYXRlKGUub3B0aW9ucyk7YS5pZ25vcmVFcnJvcnM9ITE7Zm9yKHZhciBvPWUuY2xvbmUoYSkscz10aGlzLmZvbnQsbD1Qcm9taXNlLnJlc29sdmUoKSxjPXRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpLHU9dGhpcy5kaWN0LmdldCgiUmVzb3VyY2VzIil8fHQsZj1jLmdldEtleXMoKSxoPU9iamVjdC5jcmVhdGUobnVsbCksZD1mdW5jdGlvbigpe3ZhciBlPWZbcF07bD1sLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXQoZSksYT1uZXcgUy5PcGVyYXRvckxpc3Q7cmV0dXJuIG8uZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOm4scmVzb3VyY2VzOnUsb3BlcmF0b3JMaXN0OmF9KS50aGVuKChmdW5jdGlvbigpe2hbZV09YS5nZXRJUigpLHIuYWRkRGVwZW5kZW5jaWVzKGEuZGVwZW5kZW5jaWVzKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7KDAsaS53YXJuKSgnVHlwZTMgZm9udCByZXNvdXJjZSAiJy5jb25jYXQoZSwnIiBpcyBub3QgYXZhaWxhYmxlLicpKTt2YXIgcj1uZXcgUy5PcGVyYXRvckxpc3Q7aFtlXT1yLmdldElSKCl9KSl9KSl9LHA9MCxtPWYubGVuZ3RoO3A8bTsrK3ApZCgpO3JldHVybiB0aGlzLnR5cGUzTG9hZGVkPWwudGhlbigoZnVuY3Rpb24oKXtzLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWh9KSksdGhpcy50eXBlM0xvYWRlZH19LGV9KCksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zdGF0ZT1lLHRoaXMuc3RhdGVTdGFjaz1bXX1yZXR1cm4gZS5wcm90b3R5cGU9e3NhdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpLHRoaXMuc3RhdGU9ZS5jbG9uZSgpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dGhpcy5zdGF0ZS5jdG09aS5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19LGV9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGkuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnROYW1lPW51bGwsdGhpcy5mb250U2l6ZT0wLHRoaXMuZm9udD1udWxsLHRoaXMuZm9udE1hdHJpeD1pLkZPTlRfSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeD1pLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMudGV4dExpbmVNYXRyaXg9aS5JREVOVElUWV9NQVRSSVguc2xpY2UoKSx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMubGVhZGluZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJpc2U9MH1yZXR1cm4gZS5wcm90b3R5cGU9e3NldFRleHRNYXRyaXg6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dE1hdHJpeDtvWzBdPWUsb1sxXT10LG9bMl09cixvWzNdPW4sb1s0XT1hLG9bNV09aX0sc2V0VGV4dExpbmVNYXRyaXg6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9LHRyYW5zbGF0ZVRleHRNYXRyaXg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnRleHRNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19LHRyYW5zbGF0ZVRleHRMaW5lTWF0cml4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy50ZXh0TGluZU1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX0sY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZTpmdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG89dGhpcy5mb250O2lmKCFvKXJldHVybiBudWxsO3ZhciBzPXRoaXMudGV4dExpbmVNYXRyaXg7aWYoZSE9PXNbMF18fHQhPT1zWzFdfHxyIT09c1syXXx8biE9PXNbM10pcmV0dXJuIG51bGw7dmFyIGw9YS1zWzRdLGM9aS1zWzVdO2lmKG8udmVydGljYWwmJjAhPT1sfHwhby52ZXJ0aWNhbCYmMCE9PWMpcmV0dXJuIG51bGw7dmFyIHUsZixoPWUqbi10KnI7cmV0dXJuIG8udmVydGljYWw/KHU9LWMqci9oLGY9YyplL2gpOih1PWwqbi9oLGY9LWwqdC9oKSx7d2lkdGg6dSxoZWlnaHQ6Zix2YWx1ZTpvLnZlcnRpY2FsP2Y6dX19LGNhbGNSZW5kZXJNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9W3RoaXMuZm9udFNpemUqdGhpcy50ZXh0SFNjYWxlLDAsMCx0aGlzLmZvbnRTaXplLDAsdGhpcy50ZXh0UmlzZV07cmV0dXJuIGkuVXRpbC50cmFuc2Zvcm0oZSxpLlV0aWwudHJhbnNmb3JtKHRoaXMudGV4dE1hdHJpeCx0KSl9LGNhcnJpYWdlUmV0dXJuOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpLHRoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpLGUudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpLGUuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKSxlfX0sZX0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoaS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udD1udWxsLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMuZmlsbENvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSx0aGlzLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX1yZXR1cm4gZS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSxlfSgpLFI9ZnVuY3Rpb24oKXt2YXIgZT0oMCxpLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6aS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6aS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmkuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6aS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmkuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6aS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6aS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6aS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6aS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmkuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6aS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6aS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6aS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6aS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmkuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6aS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDppLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6aS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6aS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6aS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDppLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6aS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDppLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDppLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmkuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmkuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDppLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmkuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDppLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmkuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDppLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6aS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDppLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDppLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDppLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6aS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDppLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmkuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmkuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmkuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmkuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDppLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmkuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmkuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmkuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6aS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmkuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmkuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDppLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6aS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDppLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDppLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6aS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDppLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmkuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6aS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmkuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmkuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmkuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmkuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmkuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6aS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6aS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDppLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDppLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDppLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6aS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmkuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDppLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmkuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDppLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmkuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmkuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtmdW5jdGlvbiB0KHQscixuKXt0aGlzLm9wTWFwPWUoKSx0aGlzLnBhcnNlcj1uZXcgcC5QYXJzZXIobmV3IHAuTGV4ZXIodCx0aGlzLm9wTWFwKSwhMSxyKSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiB0LnByb3RvdHlwZT17Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuYXJnczs7KXt2YXIgcj10aGlzLnBhcnNlci5nZXRPYmooKTtpZigoMCxsLmlzQ21kKShyKSl7dmFyIG49ci5jbWQsYT10aGlzLm9wTWFwW25dO2lmKCFhKXsoMCxpLndhcm4pKCdVbmtub3duIGNvbW1hbmQgIicuY29uY2F0KG4sJyIuJykpO2NvbnRpbnVlfXZhciBvPWEuaWQscz1hLm51bUFyZ3MsYz1udWxsIT09dD90Lmxlbmd0aDowO2lmKGEudmFyaWFibGVBcmdzKWM+cyYmKDAsaS5pbmZvKSgiQ29tbWFuZCAiLmNvbmNhdChuLCI6IGV4cGVjdGVkIFswLCAiKS5jb25jYXQocywiXSBhcmdzLCAiKSsiYnV0IHJlY2VpdmVkICIuY29uY2F0KGMsIiBhcmdzLiIpKTtlbHNle2lmKGMhPT1zKXtmb3IodmFyIHU9dGhpcy5ub25Qcm9jZXNzZWRBcmdzO2M+czspdS5wdXNoKHQuc2hpZnQoKSksYy0tO2Zvcig7YzxzJiYwIT09dS5sZW5ndGg7KW51bGw9PT10JiYodD1bXSksdC51bnNoaWZ0KHUucG9wKCkpLGMrK31pZihjPHMpe3ZhciBmPSJjb21tYW5kICIuY29uY2F0KG4sIjogZXhwZWN0ZWQgIikuY29uY2F0KHMsIiBhcmdzLCAiKSsiYnV0IHJlY2VpdmVkICIuY29uY2F0KGMsIiBhcmdzLiIpO2lmKG8+PWkuT1BTLm1vdmVUbyYmbzw9aS5PUFMuZW5kUGF0aCYmKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz4yMCl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChmKSk7KDAsaS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoZikpLG51bGwhPT10JiYodC5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKG8sdCksZS5mbj1vLGUuYXJncz10LCEwfWlmKCgwLGwuaXNFT0YpKHIpKXJldHVybiExO2lmKG51bGwhPT1yJiYobnVsbD09PXQmJih0PVtdKSx0LnB1c2gociksdC5sZW5ndGg+MzMpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKX19LHByZXByb2Nlc3NDb21tYW5kOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBpLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGkuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgaS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fSx0fSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNNYXBGYWN0b3J5PXQuSWRlbnRpdHlDTWFwPXQuQ01hcD12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KSxpPXIoMTU2KSxvPXIoMTU3KTtmdW5jdGlvbiBzKGUpe3JldHVybihzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXModCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBjKGUpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLGV9dmFyIHA9WyJBZG9iZS1HQjEtVUNTMiIsIkFkb2JlLUNOUzEtVUNTMiIsIkFkb2JlLUphcGFuMS1VQ1MyIiwiQWRvYmUtS29yZWExLVVDUzIiLCI3OC1FVUMtSCIsIjc4LUVVQy1WIiwiNzgtSCIsIjc4LVJLU0otSCIsIjc4LVJLU0otViIsIjc4LVYiLCI3OG1zLVJLU0otSCIsIjc4bXMtUktTSi1WIiwiODNwdi1SS1NKLUgiLCI5MG1zLVJLU0otSCIsIjkwbXMtUktTSi1WIiwiOTBtc3AtUktTSi1IIiwiOTBtc3AtUktTSi1WIiwiOTBwdi1SS1NKLUgiLCI5MHB2LVJLU0otViIsIkFkZC1IIiwiQWRkLVJLU0otSCIsIkFkZC1SS1NKLVYiLCJBZGQtViIsIkFkb2JlLUNOUzEtMCIsIkFkb2JlLUNOUzEtMSIsIkFkb2JlLUNOUzEtMiIsIkFkb2JlLUNOUzEtMyIsIkFkb2JlLUNOUzEtNCIsIkFkb2JlLUNOUzEtNSIsIkFkb2JlLUNOUzEtNiIsIkFkb2JlLUdCMS0wIiwiQWRvYmUtR0IxLTEiLCJBZG9iZS1HQjEtMiIsIkFkb2JlLUdCMS0zIiwiQWRvYmUtR0IxLTQiLCJBZG9iZS1HQjEtNSIsIkFkb2JlLUphcGFuMS0wIiwiQWRvYmUtSmFwYW4xLTEiLCJBZG9iZS1KYXBhbjEtMiIsIkFkb2JlLUphcGFuMS0zIiwiQWRvYmUtSmFwYW4xLTQiLCJBZG9iZS1KYXBhbjEtNSIsIkFkb2JlLUphcGFuMS02IiwiQWRvYmUtS29yZWExLTAiLCJBZG9iZS1Lb3JlYTEtMSIsIkFkb2JlLUtvcmVhMS0yIiwiQjUtSCIsIkI1LVYiLCJCNXBjLUgiLCJCNXBjLVYiLCJDTlMtRVVDLUgiLCJDTlMtRVVDLVYiLCJDTlMxLUgiLCJDTlMxLVYiLCJDTlMyLUgiLCJDTlMyLVYiLCJFVEhLLUI1LUgiLCJFVEhLLUI1LVYiLCJFVGVuLUI1LUgiLCJFVGVuLUI1LVYiLCJFVGVubXMtQjUtSCIsIkVUZW5tcy1CNS1WIiwiRVVDLUgiLCJFVUMtViIsIkV4dC1IIiwiRXh0LVJLU0otSCIsIkV4dC1SS1NKLVYiLCJFeHQtViIsIkdCLUVVQy1IIiwiR0ItRVVDLVYiLCJHQi1IIiwiR0ItViIsIkdCSy1FVUMtSCIsIkdCSy1FVUMtViIsIkdCSzJLLUgiLCJHQksySy1WIiwiR0JLcC1FVUMtSCIsIkdCS3AtRVVDLVYiLCJHQlQtRVVDLUgiLCJHQlQtRVVDLVYiLCJHQlQtSCIsIkdCVC1WIiwiR0JUcGMtRVVDLUgiLCJHQlRwYy1FVUMtViIsIkdCcGMtRVVDLUgiLCJHQnBjLUVVQy1WIiwiSCIsIkhLZGxhLUI1LUgiLCJIS2RsYS1CNS1WIiwiSEtkbGItQjUtSCIsIkhLZGxiLUI1LVYiLCJIS2djY3MtQjUtSCIsIkhLZ2Njcy1CNS1WIiwiSEttMzE0LUI1LUgiLCJIS20zMTQtQjUtViIsIkhLbTQ3MS1CNS1IIiwiSEttNDcxLUI1LVYiLCJIS3Njcy1CNS1IIiwiSEtzY3MtQjUtViIsIkhhbmtha3UiLCJIaXJhZ2FuYSIsIktTQy1FVUMtSCIsIktTQy1FVUMtViIsIktTQy1IIiwiS1NDLUpvaGFiLUgiLCJLU0MtSm9oYWItViIsIktTQy1WIiwiS1NDbXMtVUhDLUgiLCJLU0Ntcy1VSEMtSFctSCIsIktTQ21zLVVIQy1IVy1WIiwiS1NDbXMtVUhDLVYiLCJLU0NwYy1FVUMtSCIsIktTQ3BjLUVVQy1WIiwiS2F0YWthbmEiLCJOV1AtSCIsIk5XUC1WIiwiUktTSi1IIiwiUktTSi1WIiwiUm9tYW4iLCJVbmlDTlMtVUNTMi1IIiwiVW5pQ05TLVVDUzItViIsIlVuaUNOUy1VVEYxNi1IIiwiVW5pQ05TLVVURjE2LVYiLCJVbmlDTlMtVVRGMzItSCIsIlVuaUNOUy1VVEYzMi1WIiwiVW5pQ05TLVVURjgtSCIsIlVuaUNOUy1VVEY4LVYiLCJVbmlHQi1VQ1MyLUgiLCJVbmlHQi1VQ1MyLVYiLCJVbmlHQi1VVEYxNi1IIiwiVW5pR0ItVVRGMTYtViIsIlVuaUdCLVVURjMyLUgiLCJVbmlHQi1VVEYzMi1WIiwiVW5pR0ItVVRGOC1IIiwiVW5pR0ItVVRGOC1WIiwiVW5pSklTLVVDUzItSCIsIlVuaUpJUy1VQ1MyLUhXLUgiLCJVbmlKSVMtVUNTMi1IVy1WIiwiVW5pSklTLVVDUzItViIsIlVuaUpJUy1VVEYxNi1IIiwiVW5pSklTLVVURjE2LVYiLCJVbmlKSVMtVVRGMzItSCIsIlVuaUpJUy1VVEYzMi1WIiwiVW5pSklTLVVURjgtSCIsIlVuaUpJUy1VVEY4LVYiLCJVbmlKSVMyMDA0LVVURjE2LUgiLCJVbmlKSVMyMDA0LVVURjE2LVYiLCJVbmlKSVMyMDA0LVVURjMyLUgiLCJVbmlKSVMyMDA0LVVURjMyLVYiLCJVbmlKSVMyMDA0LVVURjgtSCIsIlVuaUpJUzIwMDQtVVRGOC1WIiwiVW5pSklTUHJvLVVDUzItSFctViIsIlVuaUpJU1Byby1VQ1MyLVYiLCJVbmlKSVNQcm8tVVRGOC1WIiwiVW5pSklTWDAyMTMtVVRGMzItSCIsIlVuaUpJU1gwMjEzLVVURjMyLVYiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSCIsIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WIiwiVW5pS1MtVUNTMi1IIiwiVW5pS1MtVUNTMi1WIiwiVW5pS1MtVVRGMTYtSCIsIlVuaUtTLVVURjE2LVYiLCJVbmlLUy1VVEYzMi1IIiwiVW5pS1MtVVRGMzItViIsIlVuaUtTLVVURjgtSCIsIlVuaUtTLVVURjgtViIsIlYiLCJXUC1TeW1ib2wiXSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Zih0aGlzLGUpLHRoaXMuY29kZXNwYWNlUmFuZ2VzPVtbXSxbXSxbXSxbXV0sdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXM9MCx0aGlzLl9tYXA9W10sdGhpcy5uYW1lPSIiLHRoaXMudmVydGljYWw9ITEsdGhpcy51c2VDTWFwPW51bGwsdGhpcy5idWlsdEluQ01hcD10fXJldHVybiBkKGUsW3trZXk6ImFkZENvZGVzcGFjZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dGhpcy5jb2Rlc3BhY2VSYW5nZXNbZS0xXS5wdXNoKHQsciksdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrK319LHtrZXk6Im1hcENpZFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1yKyt9fSx7a2V5OiJtYXBCZlJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXIubGVuZ3RoLTE7ZTw9dDspdGhpcy5fbWFwW2UrK109cixyPXIuc3Vic3RyaW5nKDAsbikrU3RyaW5nLmZyb21DaGFyQ29kZShyLmNoYXJDb2RlQXQobikrMSl9fSx7a2V5OiJtYXBCZlJhbmdlVG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9ci5sZW5ndGg7ZTw9dCYmbjxhOyl0aGlzLl9tYXBbZV09cltuKytdLCsrZX19LHtrZXk6Im1hcE9uZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXBbZV09dH19LHtrZXk6Imxvb2t1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfX0se2tleToiZm9yRWFjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwLHI9dC5sZW5ndGg7aWYocjw9NjU1MzYpZm9yKHZhciBuPTA7bjxyO24rKyl2b2lkIDAhPT10W25dJiZlKG4sdFtuXSk7ZWxzZSBmb3IodmFyIGEgaW4gdCllKGEsdFthXSl9fSx7a2V5OiJjaGFyQ29kZU9mIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKHZhciByIGluIHQpaWYodFtyXT09PWUpcmV0dXJuIDB8cjtyZXR1cm4tMX19LHtrZXk6ImdldE1hcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwfX0se2tleToicmVhZENoYXJDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsYT10aGlzLmNvZGVzcGFjZVJhbmdlcyxpPTAsbz1hLmxlbmd0aDtpPG87aSsrKXtuPShuPDw4fGUuY2hhckNvZGVBdCh0K2kpKT4+PjA7Zm9yKHZhciBzPWFbaV0sbD0wLGM9cy5sZW5ndGg7bDxjOyl7dmFyIHU9c1tsKytdLGY9c1tsKytdO2lmKG4+PXUmJm48PWYpcmV0dXJuIHIuY2hhcmNvZGU9bix2b2lkKHIubGVuZ3RoPWkrMSl9fXIuY2hhcmNvZGU9MCxyLmxlbmd0aD0xfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9bTt2YXIgZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscil7dmFyIG47cmV0dXJuIGYodGhpcyx0KSwobj1sKHRoaXMsYyh0KS5jYWxsKHRoaXMpKSkudmVydGljYWw9ZSxuLmFkZENvZGVzcGFjZVJhbmdlKHIsMCw2NTUzNSksbn1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdShlLHQpfSh0LGUpLGQodCxbe2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9fSx7a2V5OiJtYXBCZlJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9fSx7a2V5OiJtYXBCZlJhbmdlVG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX19LHtrZXk6Im1hcE9uZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfX0se2tleToibG9va3VwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fX0se2tleToiZm9yRWFjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfX0se2tleToiZ2V0TWFwIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoNjU1MzYpLHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gNjU1MzZ9fSx7a2V5OiJpc0lkZW50aXR5Q01hcCIsZ2V0OmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX1dKSx0fShtKTt0LklkZW50aXR5Q01hcD1nO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wLG49MDtuPD10O24rKylyPXI8PDh8ZVtuXTtyZXR1cm4gcj4+PjB9ZnVuY3Rpb24gdChlLHQpe3JldHVybiAxPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSk6Mz09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0sZVsyXSxlWzNdKTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zdWJhcnJheSgwLHQrMSkpfWZ1bmN0aW9uIHIoZSx0LHIpe2Zvcih2YXIgbj0wLGE9cjthPj0wO2EtLSluKz1lW2FdK3RbYV0sZVthXT0yNTUmbixuPj49OH1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTEsbj10O24+PTAmJnI+MDtuLS0pcis9ZVtuXSxlW25dPTI1NSZyLHI+Pj04fWZ1bmN0aW9uIGkoZSl7dGhpcy5idWZmZXI9ZSx0aGlzLnBvcz0wLHRoaXMuZW5kPWUubGVuZ3RoLHRoaXMudG1wQnVmPW5ldyBVaW50OEFycmF5KDE5KX1mdW5jdGlvbiBvKCl7fXJldHVybiBpLnByb3RvdHlwZT17cmVhZEJ5dGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnVmZmVyW3RoaXMucG9zKytdfSxyZWFkTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fSxyZWFkU2lnbmVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX0scmVhZEhleDpmdW5jdGlvbihlLHQpe2Uuc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zLHRoaXMucG9zK3QrMSkpLHRoaXMucG9zKz10KzF9LHJlYWRIZXhOdW1iZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxsPTAsYz0wO3M+PTA7KXtmb3IoO2M8OCYmYS5sZW5ndGg+MDspbD1hWy0taV08PGN8bCxjKz03O2Vbc109MjU1Jmwscy0tLGw+Pj04LGMtPTh9fSxyZWFkSGV4U2lnbmVkOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZWFkSGV4TnVtYmVyKGUsdCk7Zm9yKHZhciByPTEmZVt0XT8yNTU6MCxuPTAsYT0wO2E8PXQ7YSsrKW49KDEmbik8PDh8ZVthXSxlW2FdPW4+PjFecn0scmVhZFN0cmluZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX0sby5wcm90b3R5cGU9e3Byb2Nlc3M6ZnVuY3Rpb24obixvLHMpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obCxjKXt2YXIgdT1uZXcgaShuKSxmPXUucmVhZEJ5dGUoKTtvLnZlcnRpY2FsPSEhKDEmZik7Zm9yKHZhciBoLGQscD1udWxsLG09bmV3IFVpbnQ4QXJyYXkoMTYpLGc9bmV3IFVpbnQ4QXJyYXkoMTYpLHY9bmV3IFVpbnQ4QXJyYXkoMTYpLHk9bmV3IFVpbnQ4QXJyYXkoMTYpLGI9bmV3IFVpbnQ4QXJyYXkoMTYpOyhkPXUucmVhZEJ5dGUoKSk+PTA7KXt2YXIgdz1kPj41O2lmKDchPT13KXt2YXIgaz0hISgxNiZkKSxTPTE1JmQ7aWYoUysxPjE2KXRocm93IG5ldyBFcnJvcigicHJvY2Vzc0JpbmFyeUNNYXA6IEludmFsaWQgZGF0YVNpemUuIik7dmFyIF8seD11LnJlYWROdW1iZXIoKTtzd2l0Y2godyl7Y2FzZSAwOmZvcih1LnJlYWRIZXgobSxTKSx1LnJlYWRIZXhOdW1iZXIoZyxTKSxyKGcsbSxTKSxvLmFkZENvZGVzcGFjZVJhbmdlKFMrMSxlKG0sUyksZShnLFMpKSxfPTE7Xzx4O18rKylhKGcsUyksdS5yZWFkSGV4TnVtYmVyKG0sUykscihtLGcsUyksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksby5hZGRDb2Rlc3BhY2VSYW5nZShTKzEsZShtLFMpLGUoZyxTKSk7YnJlYWs7Y2FzZSAxOmZvcih1LnJlYWRIZXgobSxTKSx1LnJlYWRIZXhOdW1iZXIoZyxTKSxyKGcsbSxTKSx1LnJlYWROdW1iZXIoKSxfPTE7Xzx4O18rKylhKGcsUyksdS5yZWFkSGV4TnVtYmVyKG0sUykscihtLGcsUyksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksdS5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSAyOmZvcih1LnJlYWRIZXgodixTKSxoPXUucmVhZE51bWJlcigpLG8ubWFwT25lKGUodixTKSxoKSxfPTE7Xzx4O18rKylhKHYsUyksa3x8KHUucmVhZEhleE51bWJlcihiLFMpLHIodixiLFMpKSxoPXUucmVhZFNpZ25lZCgpKyhoKzEpLG8ubWFwT25lKGUodixTKSxoKTticmVhaztjYXNlIDM6Zm9yKHUucmVhZEhleChtLFMpLHUucmVhZEhleE51bWJlcihnLFMpLHIoZyxtLFMpLGg9dS5yZWFkTnVtYmVyKCksby5tYXBDaWRSYW5nZShlKG0sUyksZShnLFMpLGgpLF89MTtfPHg7XysrKWEoZyxTKSxrP20uc2V0KGcpOih1LnJlYWRIZXhOdW1iZXIobSxTKSxyKG0sZyxTKSksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksaD11LnJlYWROdW1iZXIoKSxvLm1hcENpZFJhbmdlKGUobSxTKSxlKGcsUyksaCk7YnJlYWs7Y2FzZSA0OmZvcih1LnJlYWRIZXgodiwxKSx1LnJlYWRIZXgoeSxTKSxvLm1hcE9uZShlKHYsMSksdCh5LFMpKSxfPTE7Xzx4O18rKylhKHYsMSksa3x8KHUucmVhZEhleE51bWJlcihiLDEpLHIodixiLDEpKSxhKHksUyksdS5yZWFkSGV4U2lnbmVkKGIsUykscih5LGIsUyksby5tYXBPbmUoZSh2LDEpLHQoeSxTKSk7YnJlYWs7Y2FzZSA1OmZvcih1LnJlYWRIZXgobSwxKSx1LnJlYWRIZXhOdW1iZXIoZywxKSxyKGcsbSwxKSx1LnJlYWRIZXgoeSxTKSxvLm1hcEJmUmFuZ2UoZShtLDEpLGUoZywxKSx0KHksUykpLF89MTtfPHg7XysrKWEoZywxKSxrP20uc2V0KGcpOih1LnJlYWRIZXhOdW1iZXIobSwxKSxyKG0sZywxKSksdS5yZWFkSGV4TnVtYmVyKGcsMSkscihnLG0sMSksdS5yZWFkSGV4KHksUyksby5tYXBCZlJhbmdlKGUobSwxKSxlKGcsMSksdCh5LFMpKTticmVhaztkZWZhdWx0OnJldHVybiB2b2lkIGMobmV3IEVycm9yKCJwcm9jZXNzQmluYXJ5Q01hcDogVW5rbm93biB0eXBlOiAiK3cpKX19ZWxzZSBzd2l0Y2goMzEmZCl7Y2FzZSAwOnUucmVhZFN0cmluZygpO2JyZWFrO2Nhc2UgMTpwPXUucmVhZFN0cmluZygpfX1sKHA/cyhwKTpvKX0pKX19LG99KCkseT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoISgwLG4uaXNTdHJpbmcpKGUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gcyhyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShpKSlicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRiZmNoYXIiKSlyZXR1cm47dChpKTt2YXIgbz1lKGkpO3QoaT1uLmdldE9iaigpKTt2YXIgcz1pO3IubWFwT25lKG8scyl9fWZ1bmN0aW9uIGwocixpKXtmb3IoOzspe3ZhciBvPWkuZ2V0T2JqKCk7aWYoKDAsYS5pc0VPRikobykpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kYmZyYW5nZSIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7dChvPWkuZ2V0T2JqKCkpO3ZhciBsPWUobyk7aWYobz1pLmdldE9iaigpLE51bWJlci5pc0ludGVnZXIobyl8fCgwLG4uaXNTdHJpbmcpKG8pKXt2YXIgYz1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxsLGMpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciB1PVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJiEoMCxhLmlzRU9GKShvKTspdS5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsbCx1KX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gYyhuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShvKSlicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRjaWRjaGFyIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTtyKG89aS5nZXRPYmooKSk7dmFyIGw9bztuLm1hcE9uZShzLGwpfX1mdW5jdGlvbiB1KG4saSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKCgwLGEuaXNFT0YpKG8pKWJyZWFrO2lmKCgwLGEuaXNDbWQpKG8sImVuZGNpZHJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGw9ZShvKTtyKG89aS5nZXRPYmooKSk7dmFyIGM9bztuLm1hcENpZFJhbmdlKHMsbCxjKX19ZnVuY3Rpb24gZih0LHIpe2Zvcig7Oyl7dmFyIGk9ci5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShpKSlicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZighKDAsbi5pc1N0cmluZykoaSkpYnJlYWs7dmFyIG89ZShpKTtpZihpPXIuZ2V0T2JqKCksISgwLG4uaXNTdHJpbmcpKGkpKWJyZWFrO3ZhciBzPWUoaSk7dC5hZGRDb2Rlc3BhY2VSYW5nZShpLmxlbmd0aCxvLHMpfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9dC5nZXRPYmooKTtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoZS52ZXJ0aWNhbD0hIXIpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj10LmdldE9iaigpOygwLGEuaXNOYW1lKShyKSYmKDAsbi5pc1N0cmluZykoci5uYW1lKSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIHkoZSx0LHIsaSl7dmFyIG8scDtlOmZvcig7Oyl0cnl7dmFyIG09dC5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShtKSlicmVhaztpZigoMCxhLmlzTmFtZSkobSkpIldNb2RlIj09PW0ubmFtZT9oKGUsdCk6IkNNYXBOYW1lIj09PW0ubmFtZSYmZChlLHQpLG89bTtlbHNlIGlmKCgwLGEuaXNDbWQpKG0pKXN3aXRjaChtLmNtZCl7Y2FzZSJlbmRjbWFwIjpicmVhayBlO2Nhc2UidXNlY21hcCI6KDAsYS5pc05hbWUpKG8pJiYocD1vLm5hbWUpO2JyZWFrO2Nhc2UiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6ZihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZmNoYXIiOnMoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6YyhlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZnJhbmdlIjpsKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZHJhbmdlIjp1KGUsdCl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZSk7Y29udGludWV9cmV0dXJuIWkmJnAmJihpPXApLGk/YihlLHIsaSk6UHJvbWlzZS5yZXNvbHZlKGUpfWZ1bmN0aW9uIGIoZSx0LHIpe3JldHVybiB3KHIsdCkudGhlbigoZnVuY3Rpb24odCl7aWYoZS51c2VDTWFwPXQsMD09PWUubnVtQ29kZXNwYWNlUmFuZ2VzKXtmb3IodmFyIHI9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxuPTA7bjxyLmxlbmd0aDtuKyspZS5jb2Rlc3BhY2VSYW5nZXNbbl09cltuXS5zbGljZSgpO2UubnVtQ29kZXNwYWNlUmFuZ2VzPWUudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIGUudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsZS51c2VDTWFwLmxvb2t1cCh0KSl9KSksZX0pKX1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIklkZW50aXR5LUgiPT09ZT9Qcm9taXNlLnJlc29sdmUobmV3IGcoITEsMikpOiJJZGVudGl0eS1WIj09PWU/UHJvbWlzZS5yZXNvbHZlKG5ldyBnKCEwLDIpKTpwLmluY2x1ZGVzKGUpP3Q/dChlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1lLmNNYXBEYXRhLGE9ZS5jb21wcmVzc2lvblR5cGUscz1uZXcgbSghMCk7aWYoYT09PW4uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpcmV0dXJuKG5ldyB2KS5wcm9jZXNzKHIscywoZnVuY3Rpb24oZSl7cmV0dXJuIGIocyx0LGUpfSkpO2lmKGE9PT1uLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSl7dmFyIGw9bmV3IGkuTGV4ZXIobmV3IG8uU3RyZWFtKHIpKTtyZXR1cm4geShzLGwsdCxudWxsKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJUT0RPOiBPbmx5IEJJTkFSWS9OT05FIENNYXAgY29tcHJlc3Npb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC4iKSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKSl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmVuY29kaW5nLHI9ZS5mZXRjaEJ1aWx0SW5DTWFwLG49ZS51c2VDTWFwO3JldHVybigwLGEuaXNOYW1lKSh0KT93KHQubmFtZSxyKTooMCxhLmlzU3RyZWFtKSh0KT95KG5ldyBtLG5ldyBpLkxleGVyKHQpLHIsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNJZGVudGl0eUNNYXA/dyhlLm5hbWUscik6ZX0pKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpKX19fSgpO3QuQ01hcEZhY3Rvcnk9eX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRGb250VHlwZT15LHQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dC5Ub1VuaWNvZGVNYXA9dC5Gb250RmxhZ3M9dC5Gb250PXQuRXJyb3JGb250PXQuU0VBQ19BTkFMWVNJU19FTkFCTEVEPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNzQpLGk9cigxNzcpLG89cigxNzYpLHM9cigxNzgpLGw9cigxNzkpLGM9cigxODApLHU9cigxNzIpLGY9cigxNTcpLGg9cigxODEpO2Z1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBwPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD0hMDt2YXIgbT17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTt0LkZvbnRGbGFncz1tO3ZhciBnPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiB2KGUpe2lmKGUuZm9udE1hdHJpeCYmZS5mb250TWF0cml4WzBdIT09bi5GT05UX0lERU5USVRZX01BVFJJWFswXSl7dmFyIHQ9LjAwMS9lLmZvbnRNYXRyaXhbMF0scj1lLndpZHRocztmb3IodmFyIGEgaW4gcilyW2FdKj10O2UuZGVmYXVsdFdpZHRoKj10fX1mdW5jdGlvbiB5KGUsdCl7c3dpdGNoKGUpe2Nhc2UiVHlwZTEiOnJldHVybiJUeXBlMUMiPT09dD9uLkZvbnRUeXBlLlRZUEUxQzpuLkZvbnRUeXBlLlRZUEUxO2Nhc2UiQ0lERm9udFR5cGUwIjpyZXR1cm4iQ0lERm9udFR5cGUwQyI9PT10P24uRm9udFR5cGUuQ0lERk9OVFRZUEUwQzpuLkZvbnRUeXBlLkNJREZPTlRUWVBFMDtjYXNlIk9wZW5UeXBlIjpyZXR1cm4gbi5Gb250VHlwZS5PUEVOVFlQRTtjYXNlIlRydWVUeXBlIjpyZXR1cm4gbi5Gb250VHlwZS5UUlVFVFlQRTtjYXNlIkNJREZvbnRUeXBlMiI6cmV0dXJuIG4uRm9udFR5cGUuQ0lERk9OVFRZUEUyO2Nhc2UiTU1UeXBlMSI6cmV0dXJuIG4uRm9udFR5cGUuTU1UWVBFMTtjYXNlIlR5cGUwIjpyZXR1cm4gbi5Gb250VHlwZS5UWVBFMDtkZWZhdWx0OnJldHVybiBuLkZvbnRUeXBlLlVOS05PV059fWZ1bmN0aW9uIGIoZSx0KXtpZih2b2lkIDAhPT10W2VdKXJldHVybiBlO3ZhciByPSgwLGwuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09cilmb3IodmFyIGEgaW4gdClpZih0W2FdPT09cilyZXR1cm4gYTtyZXR1cm4oMCxuLmluZm8pKCJVbmFibGUgdG8gcmVjb3ZlciBhIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yOiAiK2UpLGV9dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpLG8scyl7dGhpcy5mb250Q2hhcj1lLHRoaXMudW5pY29kZT10LHRoaXMuYWNjZW50PXIsdGhpcy53aWR0aD1uLHRoaXMudm1ldHJpYz1hLHRoaXMub3BlcmF0b3JMaXN0SWQ9aSx0aGlzLmlzU3BhY2U9byx0aGlzLmlzSW5Gb250PXN9cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNGb3JDYWNoZT1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMpe3JldHVybiB0aGlzLmZvbnRDaGFyPT09ZSYmdGhpcy51bmljb2RlPT09dCYmdGhpcy5hY2NlbnQ9PT1yJiZ0aGlzLndpZHRoPT09biYmdGhpcy52bWV0cmljPT09YSYmdGhpcy5vcGVyYXRvckxpc3RJZD09PWkmJnRoaXMuaXNTcGFjZT09PW8mJnRoaXMuaXNJbkZvbnQ9PT1zfSxlfSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3RoaXMuX21hcD1lfXJldHVybiBlLnByb3RvdHlwZT17Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfSxjaGFyQ29kZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfSxhbWVuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl0aGlzLl9tYXBbdF09ZVt0XX19LGV9KCk7dC5Ub1VuaWNvZGVNYXA9azt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmZpcnN0Q2hhcj1lLHRoaXMubGFzdENoYXI9dH1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sYXN0Q2hhcisxLXRoaXMuZmlyc3RDaGFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9LGNoYXJDb2RlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9LGFtZW5kOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYW1lbmQoKSIpfX0sZX0oKTt0LklkZW50aXR5VG9Vbmljb2RlTWFwPVM7dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtlW3RdPXI+PjgmMjU1LGVbdCsxXT0yNTUmcn1mdW5jdGlvbiB0KGUsdCxyKXtlW3RdPXI+PjI0JjI1NSxlW3QrMV09cj4+MTYmMjU1LGVbdCsyXT1yPj44JjI1NSxlW3QrM109MjU1JnJ9ZnVuY3Rpb24gcihlLHQscil7dmFyIG4sYTtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheSllLnNldChyLHQpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiByKWZvcihuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2UgZm9yKG49MCxhPXIubGVuZ3RoO248YTtuKyspZVt0KytdPTI1NSZyW25dfWZ1bmN0aW9uIGEoZSl7dGhpcy5zZm50PWUsdGhpcy50YWJsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gYS5nZXRTZWFyY2hQYXJhbXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fSxhLnByb3RvdHlwZT17dG9BcnJheTpmdW5jdGlvbigpe3ZhciBpPXRoaXMuc2ZudCxvPXRoaXMudGFibGVzLHM9T2JqZWN0LmtleXMobyk7cy5zb3J0KCk7dmFyIGwsYyx1LGYsaCxkPXMubGVuZ3RoLHA9MTIrMTYqZCxtPVtwXTtmb3IobD0wO2w8ZDtsKyspcCs9KChmPW9bc1tsXV0pLmxlbmd0aCszJi00KT4+PjAsbS5wdXNoKHApO3ZhciBnPW5ldyBVaW50OEFycmF5KHApO2ZvcihsPTA7bDxkO2wrKylmPW9bc1tsXV0scihnLG1bbF0sZik7InRydWUiPT09aSYmKGk9KDAsbi5zdHJpbmczMikoNjU1MzYpKSxnWzBdPTI1NSZpLmNoYXJDb2RlQXQoMCksZ1sxXT0yNTUmaS5jaGFyQ29kZUF0KDEpLGdbMl09MjU1JmkuY2hhckNvZGVBdCgyKSxnWzNdPTI1NSZpLmNoYXJDb2RlQXQoMyksZShnLDQsZCk7dmFyIHY9YS5nZXRTZWFyY2hQYXJhbXMoZCwxNik7Zm9yKGUoZyw2LHYucmFuZ2UpLGUoZyw4LHYuZW50cnkpLGUoZywxMCx2LnJhbmdlU2hpZnQpLHA9MTIsbD0wO2w8ZDtsKyspe2g9c1tsXSxnW3BdPTI1NSZoLmNoYXJDb2RlQXQoMCksZ1twKzFdPTI1NSZoLmNoYXJDb2RlQXQoMSksZ1twKzJdPTI1NSZoLmNoYXJDb2RlQXQoMiksZ1twKzNdPTI1NSZoLmNoYXJDb2RlQXQoMyk7dmFyIHk9MDtmb3IoYz1tW2xdLHU9bVtsKzFdO2M8dTtjKz00KXk9eSsoMCxuLnJlYWRVaW50MzIpKGcsYyk+Pj4wO3QoZyxwKzQseSksdChnLHArOCxtW2xdKSx0KGcscCsxMixvW2hdLmxlbmd0aCkscCs9MTZ9cmV0dXJuIGd9LGFkZFRhYmxlOmZ1bmN0aW9uKGUsdCl7aWYoZSBpbiB0aGlzLnRhYmxlcyl0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIrZSsiIGFscmVhZHkgZXhpc3RzIik7dGhpcy50YWJsZXNbZV09dH19LGF9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBhO3RoaXMubmFtZT1lLHRoaXMubG9hZGVkTmFtZT1yLmxvYWRlZE5hbWUsdGhpcy5pc1R5cGUzRm9udD1yLmlzVHlwZTNGb250LHRoaXMuc2l6ZXM9W10sdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmdseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmlzU2VyaWZGb250PSEhKHIuZmxhZ3MmbS5TZXJpZiksdGhpcy5pc1N5bWJvbGljRm9udD0hIShyLmZsYWdzJm0uU3ltYm9saWMpLHRoaXMuaXNNb25vc3BhY2U9ISEoci5mbGFncyZtLkZpeGVkUGl0Y2gpO3ZhciBpPXIudHlwZSxvPXIuc3VidHlwZTtpZih0aGlzLnR5cGU9aSx0aGlzLnN1YnR5cGU9byx0aGlzLmZhbGxiYWNrTmFtZT10aGlzLmlzTW9ub3NwYWNlPyJtb25vc3BhY2UiOnRoaXMuaXNTZXJpZkZvbnQ/InNlcmlmIjoic2Fucy1zZXJpZiIsdGhpcy5kaWZmZXJlbmNlcz1yLmRpZmZlcmVuY2VzLHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMuY29tcG9zaXRlPXIuY29tcG9zaXRlLHRoaXMud2lkZUNoYXJzPXIud2lkZUNoYXJzLHRoaXMuY01hcD1yLmNNYXAsdGhpcy5hc2NlbnQ9ci5hc2NlbnQvMWUzLHRoaXMuZGVzY2VudD1yLmRlc2NlbnQvMWUzLHRoaXMuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXgsdGhpcy5iYm94PXIuYmJveCx0aGlzLmRlZmF1bHRFbmNvZGluZz1yLmRlZmF1bHRFbmNvZGluZyx0aGlzLnRvVW5pY29kZT1yLnRvVW5pY29kZSx0aGlzLmZhbGxiYWNrVG9Vbmljb2RlPXIuZmFsbGJhY2tUb1VuaWNvZGV8fG5ldyBrLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09ci50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPXIuY2lkRW5jb2RpbmcsdGhpcy52ZXJ0aWNhbD1yLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPXIudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9ci5kZWZhdWx0Vk1ldHJpY3MpLCF0fHx0LmlzRW1wdHkpcmV0dXJuIHQmJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udCgpO3ZhciBzPWQoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLG4ucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fEMoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHQsciksMik7aT1zWzBdLG89c1sxXSxpPT09dGhpcy50eXBlJiZvPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChpLCIvIikuY29uY2F0KG8sIi4iKSk7dHJ5e3ZhciBsO3N3aXRjaChpKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIitlKyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBjPSJUeXBlMUMiPT09b3x8IkNJREZvbnRUeXBlMEMiPT09bz9uZXcgRSh0LHIpOm5ldyBQKGUsdCxyKTt2KHIpLGw9dGhpcy5jb252ZXJ0KGUsYyxyKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsbD10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxyKSx0aGlzLmlzT3BlblR5cGUmJih2KHIpLGk9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChpLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKX10aGlzLmRhdGE9bCx0aGlzLmZvbnRUeXBlPXkoaSxvKSx0aGlzLmZvbnRNYXRyaXg9ci5mb250TWF0cml4LHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPXIudG9Vbmljb2RlLHRoaXMuZW5jb2Rpbmc9ci5iYXNlRW5jb2RpbmcsdGhpcy5zZWFjTWFwPXIuc2VhY01hcH1lbHNle2ZvcihhPTA7YTwyNTY7YSsrKXRoaXMudG9Gb250Q2hhclthXT10aGlzLmRpZmZlcmVuY2VzW2FdfHxyLmRlZmF1bHRFbmNvZGluZ1thXTt0aGlzLmZvbnRUeXBlPW4uRm9udFR5cGUuVFlQRTN9fXZhciB0O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oZTw8OCkrdH1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGU9ZT4zMjc2Nz8zMjc2NzplPC0zMjc2OD8tMzI3Njg6ZSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gVChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyktMSE9PShuPSgwLGwuZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBzIGluIHIpLTEhPT0obj0oMCxsLmdldFVuaWNvZGVGb3JHbHlwaCkocltzXSx0KSkmJihhWytzXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBSKGUsdCxyKXt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpLGk9W10sbz0wLHM9cFtvXVswXSxsPXBbb11bMV07Zm9yKHZhciBjIGluIGUpe3ZhciB1PWVbY3w9MF07aWYodCh1KSl7aWYocz5sKXtpZigrK28+PXAubGVuZ3RoKXsoMCxuLndhcm4pKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha31zPXBbb11bMF0sbD1wW29dWzFdfXZhciBmPXMrKzswPT09dSYmKHU9ciksYVtmXT11LGlbY109Zn19cmV0dXJue3RvRm9udENoYXI6aSxjaGFyQ29kZVRvR2x5cGhJZDphLG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6c319ZnVuY3Rpb24gTyhlLHQpe3ZhciByLGEsaSxvLHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gZSllW25dPj10fHxyLnB1c2goe2ZvbnRDaGFyQ29kZTowfG4sZ2x5cGhJZDplW25dfSk7MD09PXIubGVuZ3RoJiZyLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLHIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBhPVtdLGk9ci5sZW5ndGgsbz0wO288aTspe3ZhciBzPXJbb10uZm9udENoYXJDb2RlLGw9W3Jbb10uZ2x5cGhJZF07KytvO2Zvcih2YXIgYz1zO288aSYmYysxPT09cltvXS5mb250Q2hhckNvZGUmJihsLnB1c2gocltvXS5nbHlwaElkKSwrK28sNjU1MzUhPSsrYyk7KTthLnB1c2goW3MsYyxsXSl9cmV0dXJuIGF9KGUsdCksbD1zW3MubGVuZ3RoLTFdWzFdPjY1NTM1PzI6MSxjPSJcMFwwIit4KGwpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCpsKTtmb3Iocj1zLmxlbmd0aC0xO3I+PTAmJiEoc1tyXVswXTw9NjU1MzUpOy0tcik7dmFyIHU9cisxO3Nbcl1bMF08NjU1MzUmJjY1NTM1PT09c1tyXVsxXSYmKHNbcl1bMV09NjU1MzQpO3ZhciBmLGgsZCxwLG09c1tyXVsxXTw2NTUzNT8xOjAsZz11K20sdj1fLmdldFNlYXJjaFBhcmFtcyhnLDIpLHk9IiIsYj0iIix3PSIiLGs9IiIsUz0iIixBPTA7Zm9yKHI9MCxhPXU7cjxhO3IrKyl7aD0oZj1zW3JdKVswXSxkPWZbMV0seSs9eChoKSxiKz14KGQpO3ZhciBDPSEwO2ZvcihpPTEsbz0ocD1mWzJdKS5sZW5ndGg7aTxvOysraSlpZihwW2ldIT09cFtpLTFdKzEpe0M9ITE7YnJlYWt9aWYoQyl3Kz14KHBbMF0taCY2NTUzNSksays9eCgwKTtlbHNle3ZhciBQPTIqKGctcikrMipBO2ZvcihBKz1kLWgrMSx3Kz14KDApLGsrPXgoUCksaT0wLG89cC5sZW5ndGg7aTxvOysraSlTKz14KHBbaV0pfX1tPjAmJihiKz0iw7/DvyIseSs9IsO/w78iLHcrPSJcMAEiLGsrPSJcMFwwIik7dmFyIEU9IlwwXDAiK3goMipnKSt4KHYucmFuZ2UpK3godi5lbnRyeSkreCh2LnJhbmdlU2hpZnQpK2IrIlwwXDAiK3krdytrK1MsVD0iIixSPSIiO2lmKGw+MSl7Zm9yKGMrPSJcMANcMFxuIisoMCxuLnN0cmluZzMyKSg0KzgqbCs0K0UubGVuZ3RoKSxUPSIiLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe2g9KGY9c1tyXSlbMF07dmFyIE89KHA9ZlsyXSlbMF07Zm9yKGk9MSxvPXAubGVuZ3RoO2k8bzsrK2kpcFtpXSE9PXBbaS0xXSsxJiYoZD1mWzBdK2ktMSxUKz0oMCxuLnN0cmluZzMyKShoKSsoMCxuLnN0cmluZzMyKShkKSsoMCxuLnN0cmluZzMyKShPKSxoPWQrMSxPPXBbaV0pO1QrPSgwLG4uc3RyaW5nMzIpKGgpKygwLG4uc3RyaW5nMzIpKGZbMV0pKygwLG4uc3RyaW5nMzIpKE8pfVI9IlwwXGZcMFwwIisoMCxuLnN0cmluZzMyKShULmxlbmd0aCsxNikrIlwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShULmxlbmd0aC8xMil9cmV0dXJuIGMrIlwwBCIreChFLmxlbmd0aCs0KStFK1IrVH1mdW5jdGlvbiBJKGUsdCxyKXtyPXJ8fHt1bml0c1BlckVtOjAseU1heDowLHlNaW46MCxhc2NlbnQ6MCxkZXNjZW50OjB9O3ZhciBhPTAsaT0wLG89MCxzPTAsYz1udWxsLHU9MDtpZih0KXtmb3IodmFyIGYgaW4gdCl7KGM+KGZ8PTApfHwhYykmJihjPWYpLHU8ZiYmKHU9Zik7dmFyIGg9KDAsbC5nZXRVbmljb2RlUmFuZ2VGb3IpKGYpO2lmKGg8MzIpYXw9MTw8aDtlbHNlIGlmKGg8NjQpaXw9MTw8aC0zMjtlbHNlIGlmKGg8OTYpb3w9MTw8aC02NDtlbHNle2lmKCEoaDwxMjMpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UiKTtzfD0xPDxoLTk2fX11PjY1NTM1JiYodT02NTUzNSl9ZWxzZSBjPTAsdT0yNTU7dmFyIGQ9ZS5iYm94fHxbMCwwLDAsMF0scD1yLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWClbMF0sbT1lLmFzY2VudFNjYWxlZD8xOnAvMWUzLGc9ci5hc2NlbnR8fE1hdGgucm91bmQobSooZS5hc2NlbnR8fGRbM10pKSx2PXIuZGVzY2VudHx8TWF0aC5yb3VuZChtKihlLmRlc2NlbnR8fGRbMV0pKTt2PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih2PS12KTt2YXIgeT1yLnlNYXh8fGcsYj0tci55TWlufHwtdjtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShvKSsoMCxuLnN0cmluZzMyKShzKSsiKjIxKiIreChlLml0YWxpY0FuZ2xlPzE6MCkreChjfHxlLmZpcnN0Q2hhcikreCh1fHxlLmxhc3RDaGFyKSt4KGcpK3godikrIlwwZCIreCh5KSt4KGIpKyJcMFwwXDBcMFwwXDBcMFwwIit4KGUueEhlaWdodCkreChlLmNhcEhlaWdodCkreCgwKSt4KGN8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBGKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifWZ1bmN0aW9uIEwoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8IiIsdFswXVs3XXx8IlVua25vd24iLHRbMF1bOF18fCJVbmtub3duIix0WzBdWzldfHwiVW5rbm93biJdLGw9W107Zm9yKHI9MCxuPXMubGVuZ3RoO3I8bjtyKyspe3ZhciBjPVtdO2ZvcihhPTAsaT0obz10WzFdW3JdfHxzW3JdKS5sZW5ndGg7YTxpO2ErKyljLnB1c2goeChvLmNoYXJDb2RlQXQoYSkpKTtsLnB1c2goYy5qb2luKCIiKSl9dmFyIHU9W3MsbF0sZj1bIlwwASIsIlwwAyJdLGg9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxwPXMubGVuZ3RoKmYubGVuZ3RoLG09IlwwXDAiK3gocCkreCgxMipwKzYpLGc9MDtmb3Iocj0wLG49Zi5sZW5ndGg7cjxuO3IrKyl7dmFyIHY9dVtyXTtmb3IoYT0wLGk9di5sZW5ndGg7YTxpO2ErKylvPXZbYV0sbSs9ZltyXStoW3JdK2Rbcl0reChhKSt4KG8ubGVuZ3RoKSt4KGcpLGcrPW8ubGVuZ3RofXJldHVybiBtKz1zLmpvaW4oIiIpK2wuam9pbigiIil9cmV0dXJuIGUuZ2V0Rm9udElEPSh0PTEsZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHQrKyl9KSxlLnByb3RvdHlwZT17bmFtZTpudWxsLGZvbnQ6bnVsbCxtaW1ldHlwZTpudWxsLGVuY29kaW5nOm51bGwsZGlzYWJsZUZvbnRGYWNlOiExLGdldCByZW5kZXJlcigpe3ZhciBlPWMuRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcywhMCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX0sZXhwb3J0RGF0YTpmdW5jdGlvbigpe3ZhciBlPXt9O2Zvcih2YXIgdCBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkodCkmJihlW3RdPXRoaXNbdF0pO3JldHVybiBlfSxmYWxsYmFja1RvU3lzdGVtRm9udDpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzO3RoaXMubWlzc2luZ0ZpbGU9ITA7dmFyIGE9dGhpcy5uYW1lLGM9dGhpcy50eXBlLHU9dGhpcy5zdWJ0eXBlLGY9YS5yZXBsYWNlKC9bLF9dL2csIi0iKSxoPSgwLHMuZ2V0U3RkRm9udE1hcCkoKSxkPSgwLHMuZ2V0Tm9uU3RkRm9udE1hcCkoKSxwPSEhaFtmXXx8ISghZFtmXXx8IWhbZFtmXV0pO2lmKGY9aFtmXXx8ZFtmXXx8Zix0aGlzLmJvbGQ9LTEhPT1mLnNlYXJjaCgvYm9sZC9naSksdGhpcy5pdGFsaWM9LTEhPT1mLnNlYXJjaCgvb2JsaXF1ZS9naSl8fC0xIT09Zi5zZWFyY2goL2l0YWxpYy9naSksdGhpcy5ibGFjaz0tMSE9PWEuc2VhcmNoKC9CbGFjay9nKSx0aGlzLnJlbWVhc3VyZT1PYmplY3Qua2V5cyh0aGlzLndpZHRocykubGVuZ3RoPjAscCYmIkNJREZvbnRUeXBlMiI9PT1jJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXt2YXIgbT0oMCxzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSxnPVtdO2ZvcihlIGluIG0pZ1srZV09bVtlXTtpZigvQXJpYWwtP0JsYWNrL2kudGVzdChhKSl7dmFyIHY9KDAscy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spKCk7Zm9yKGUgaW4gdilnWytlXT12W2VdfWVsc2UgaWYoL0NhbGlicmkvaS50ZXN0KGEpKXt2YXIgYj0oMCxzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKTtmb3IoZSBpbiBiKWdbK2VdPWJbZV19dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBTfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2dbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWcsdGhpcy50b1VuaWNvZGU9bmV3IGsoZyl9ZWxzZSBpZigvU3ltYm9sL2kudGVzdChmKSl0aGlzLnRvRm9udENoYXI9VChvLlN5bWJvbFNldEVuY29kaW5nLCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKC9EaW5nYmF0cy9pLnRlc3QoZikpL1dpbmdkaW5ncy9pLnRlc3QoYSkmJigwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBXaW5nZGluZ3MgZm9udCwgZmFsbGluZyBiYWNrIHRvIFphcGZEaW5nYmF0cy4iKSx0aGlzLnRvRm9udENoYXI9VChvLlphcGZEaW5nYmF0c0VuY29kaW5nLCgwLGkuZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYocCl0aGlzLnRvRm9udENoYXI9VCh0aGlzLmRlZmF1bHRFbmNvZGluZywoMCxpLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZXt2YXIgdz0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtpZighci5jb21wb3NpdGUpe3ZhciBhPXIuZGlmZmVyZW5jZXNbZV18fHIuZGVmYXVsdEVuY29kaW5nW2VdOy0xIT09KHQ9KDAsbC5nZXRVbmljb2RlRm9yR2x5cGgpKGEsdykpJiYobj10KX1yLnRvRm9udENoYXJbZV09bn0pKX10aGlzLmxvYWRlZE5hbWU9Zi5zcGxpdCgiLSIpWzBdLHRoaXMuZm9udFR5cGU9eShjLHUpfSxjaGVja0FuZFJlcGFpcjpmdW5jdGlvbihlLHQscyl7dmFyIGw9WyJPUy8yIiwiY21hcCIsImhlYWQiLCJoaGVhIiwiaG10eCIsIm1heHAiLCJuYW1lIiwicG9zdCIsImxvY2EiLCJnbHlmIiwiZnBnbSIsInByZXAiLCJjdnQgIiwiQ0ZGICJdO2Z1bmN0aW9uIGMoZSxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO25bIk9TLzIiXT1udWxsLG4uY21hcD1udWxsLG4uaGVhZD1udWxsLG4uaGhlYT1udWxsLG4uaG10eD1udWxsLG4ubWF4cD1udWxsLG4ubmFtZT1udWxsLG4ucG9zdD1udWxsO2Zvcih2YXIgYT0wO2E8cjthKyspe3ZhciBpPWQodCk7bC5pbmNsdWRlcyhpLnRhZykmJjAhPT1pLmxlbmd0aCYmKG5baS50YWddPWkpfXJldHVybiBufWZ1bmN0aW9uIGQoZSl7dmFyIHQ9KDAsbi5ieXRlc1RvU3RyaW5nKShlLmdldEJ5dGVzKDQpKSxyPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5nZXRJbnQzMigpPj4+MCxvPWUucG9zO2UucG9zPWUuc3RhcnQ/ZS5zdGFydDowLGUuc2tpcChhKTt2YXIgcz1lLmdldEJ5dGVzKGkpO3JldHVybiBlLnBvcz1vLCJoZWFkIj09PXQmJihzWzhdPXNbOV09c1sxMF09c1sxMV09MCxzWzE3XXw9MzIpLHt0YWc6dCxjaGVja3N1bTpyLGxlbmd0aDppLG9mZnNldDphLGRhdGE6c319ZnVuY3Rpb24gcChlKXtyZXR1cm57dmVyc2lvbjooMCxuLmJ5dGVzVG9TdHJpbmcpKGUuZ2V0Qnl0ZXMoNCkpLG51bVRhYmxlczplLmdldFVpbnQxNigpLHNlYXJjaFJhbmdlOmUuZ2V0VWludDE2KCksZW50cnlTZWxlY3RvcjplLmdldFVpbnQxNigpLHJhbmdlU2hpZnQ6ZS5nZXRVaW50MTYoKX19ZnVuY3Rpb24gbShlLHQscixuLGEsaSl7dmFyIG89e2xlbmd0aDowLHNpemVPZkluc3RydWN0aW9uczowfTtpZihyLXQ8PTEyKXJldHVybiBvO3ZhciBzLGwsYyx1PWUuc3ViYXJyYXkodCxyKSxmPWgodVswXSx1WzFdKTtpZihmPDApcmV0dXJuIGM9Zj0tMSwocz11KVsxKyhsPTApXT1jLHNbbF09Yz4+Pjgsbi5zZXQodSxhKSxvLmxlbmd0aD11Lmxlbmd0aCxvO3ZhciBkLHA9MTAsbT0wO2ZvcihkPTA7ZDxmO2QrKyltPTErKHVbcF08PDh8dVtwKzFdKSxwKz0yO3ZhciBnPXAsdj11W3BdPDw4fHVbcCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz12O3ZhciB5PXArPTIrdixiPTA7Zm9yKGQ9MDtkPG07ZCsrKXt2YXIgdz11W3ArK107MTkyJncmJih1W3AtMV09NjMmdyk7dmFyIGs9KDImdz8xOjE2Jnc/MDoyKSsoNCZ3PzE6MzImdz8wOjIpO2lmKGIrPWssOCZ3KXt2YXIgUz11W3ArK107ZCs9UyxiKz1TKmt9fWlmKDA9PT1iKXJldHVybiBvO3ZhciBfPXArYjtyZXR1cm4gXz51Lmxlbmd0aD9vOiFpJiZ2PjA/KG4uc2V0KHUuc3ViYXJyYXkoMCxnKSxhKSxuLnNldChbMCwwXSxhK2cpLG4uc2V0KHUuc3ViYXJyYXkoeSxfKSxhK2crMiksXy09dix1Lmxlbmd0aC1fPjMmJihfPV8rMyYtNCksby5sZW5ndGg9XyxvKTp1Lmxlbmd0aC1fPjM/KF89XyszJi00LG4uc2V0KHUuc3ViYXJyYXkoMCxfKSxhKSxvLmxlbmd0aD1fLG8pOihuLnNldCh1LGEpLG8ubGVuZ3RoPXUubGVuZ3RoLG8pfWZ1bmN0aW9uIHkoZSl7dmFyIHI9KHQuc3RhcnQ/dC5zdGFydDowKStlLm9mZnNldDt0LnBvcz1yO3ZhciBhPVtbXSxbXV0saT1lLmxlbmd0aCxvPXIraTtpZigwIT09dC5nZXRVaW50MTYoKXx8aTw2KXJldHVybiBhO3ZhciBzLGwsYz10LmdldFVpbnQxNigpLHU9dC5nZXRVaW50MTYoKSxmPVtdO2ZvcihzPTA7czxjJiZ0LnBvcysxMjw9bztzKyspe3ZhciBoPXtwbGF0Zm9ybTp0LmdldFVpbnQxNigpLGVuY29kaW5nOnQuZ2V0VWludDE2KCksbGFuZ3VhZ2U6dC5nZXRVaW50MTYoKSxuYW1lOnQuZ2V0VWludDE2KCksbGVuZ3RoOnQuZ2V0VWludDE2KCksb2Zmc2V0OnQuZ2V0VWludDE2KCl9OygxPT09aC5wbGF0Zm9ybSYmMD09PWguZW5jb2RpbmcmJjA9PT1oLmxhbmd1YWdlfHwzPT09aC5wbGF0Zm9ybSYmMT09PWguZW5jb2RpbmcmJjEwMzM9PT1oLmxhbmd1YWdlKSYmZi5wdXNoKGgpfWZvcihzPTAsbD1mLmxlbmd0aDtzPGw7cysrKXt2YXIgZD1mW3NdO2lmKCEoZC5sZW5ndGg8PTApKXt2YXIgcD1yK3UrZC5vZmZzZXQ7aWYoIShwK2QubGVuZ3RoPm8pKXt0LnBvcz1wO3ZhciBtPWQubmFtZTtpZihkLmVuY29kaW5nKXtmb3IodmFyIGc9IiIsdj0wLHk9ZC5sZW5ndGg7djx5O3YrPTIpZys9U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldFVpbnQxNigpKTthWzFdW21dPWd9ZWxzZSBhWzBdW21dPSgwLG4uYnl0ZXNUb1N0cmluZykodC5nZXRCeXRlcyhkLmxlbmd0aCkpfX19cmV0dXJuIGF9dmFyIHcsayxTLHgsQT1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIFAoZSx0KXtmb3IodmFyIHIsYSxpLG8scyxsPWUuZGF0YSxjPTAsdT0wLGY9MCxoPVtdLGQ9W10scD1bXSxtPXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zLGc9ITEsdj0wLHk9MCxiPWwubGVuZ3RoO2M8Yjspe3ZhciB3PWxbYysrXTtpZig2ND09PXcpaWYoYT1sW2MrK10sZ3x8eSljKz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChsW2MrK10pO2Vsc2UgaWYoNjU9PT13KWlmKGE9bFtjKytdLGd8fHkpYys9MiphO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWk9bFtjKytdLGgucHVzaChpPDw4fGxbYysrXSk7ZWxzZSBpZigxNzY9PSgyNDgmdykpaWYoYT13LTE3NisxLGd8fHkpYys9YTtlbHNlIGZvcihyPTA7cjxhO3IrKyloLnB1c2gobFtjKytdKTtlbHNlIGlmKDE4ND09KDI0OCZ3KSlpZihhPXctMTg0KzEsZ3x8eSljKz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1sW2MrK10saC5wdXNoKGk8PDh8bFtjKytdKTtlbHNlIGlmKDQzIT09d3x8bSlpZig0NCE9PXd8fG0pe2lmKDQ1PT09dylpZihnKWc9ITEsdT1jO2Vsc2V7aWYoIShzPWQucG9wKCkpKXJldHVybigwLG4ud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtvPXAucG9wKCksbD1zLmRhdGEsYz1zLmksdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tvXT1oLmxlbmd0aC1zLnN0YWNrVG9wfWVsc2UgaWYoMTM3PT09dykoZ3x8eSkmJigoMCxuLndhcm4pKCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkIiksbT0hMCksZz0hMCxmPWM7ZWxzZSBpZig4OD09PXcpKyt2O2Vsc2UgaWYoMjc9PT13KXk9djtlbHNlIGlmKDg5PT09dyl5PT09diYmKHk9MCksLS12O2Vsc2UgaWYoMjg9PT13JiYhZyYmIXkpe3ZhciBrPWhbaC5sZW5ndGgtMV07az4wJiYoYys9ay0xKX19ZWxzZShnfHx5KSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxtPSEwKSxnPSEwLGY9YyxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmwsaTpjfTtlbHNlIGlmKCFnJiYheSlpZihvPWhbaC5sZW5ndGgtMV0saXNOYU4obykpKDAsbi5pbmZvKSgiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2UgaWYodC5mdW5jdGlvbnNVc2VkW29dPSEwLG8gaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7dmFyIFM9aC5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tvXTtpZihTPDApcmV0dXJuKDAsbi53YXJuKSgiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO2gubGVuZ3RoPVN9ZWxzZSBpZihvIGluIHQuZnVuY3Rpb25zRGVmaW5lZCYmIXAuaW5jbHVkZXMobykpe2lmKGQucHVzaCh7ZGF0YTpsLGk6YyxzdGFja1RvcDpoLmxlbmd0aC0xfSkscC5wdXNoKG8pLCEocz10LmZ1bmN0aW9uc0RlZmluZWRbb10pKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtsPXMuZGF0YSxjPXMuaX1pZighZyYmIXkpe3ZhciBfPXc8PTE0Mj9BW3ddOnc+PTE5MiYmdzw9MjIzPy0xOnc+PTIyND8tMjowO2Zvcih3Pj0xMTMmJnc8PTExNyYmKGE9aC5wb3AoKSxpc05hTihhKXx8KF89MiotYSkpO188MCYmaC5sZW5ndGg+MDspaC5wb3AoKSxfKys7Zm9yKDtfPjA7KWgucHVzaChOYU4pLF8tLX19dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM9bTt2YXIgeD1bbF07Yz5sLmxlbmd0aCYmeC5wdXNoKG5ldyBVaW50OEFycmF5KGMtbC5sZW5ndGgpKSxmPnUmJigoMCxuLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpLHgucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSkpLGZ1bmN0aW9uKGUsdCl7aWYodC5sZW5ndGg+MSl7dmFyIHIsbixhPTA7Zm9yKHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspYSs9dFtyXS5sZW5ndGg7YT1hKzMmLTQ7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWkuc2V0KHRbcl0sbyksbys9dFtyXS5sZW5ndGg7ZS5kYXRhPWksZS5sZW5ndGg9YX19KGUseCl9aWYoQyh0PW5ldyBmLlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe3ZhciBUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG4uYnl0ZXNUb1N0cmluZykoZS5nZXRCeXRlcyg0KSk7KDAsbi5hc3NlcnQpKCJ0dGNmIj09PXQsIk11c3QgYmUgYSBUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQuIik7Zm9yKHZhciByPWUuZ2V0VWludDE2KCksYT1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxvPVtdLHM9MDtzPGk7cysrKW8ucHVzaChlLmdldEludDMyKCk+Pj4wKTt2YXIgbD17dHRjVGFnOnQsbWFqb3JWZXJzaW9uOnIsbWlub3JWZXJzaW9uOmEsbnVtRm9udHM6aSxvZmZzZXRUYWJsZTpvfTtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBsO2Nhc2UgMjpyZXR1cm4gbC5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjAsbC5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjAsbC5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjAsbH10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogIi5jb25jYXQociwiLiIpKX0oZSksYT1yLm51bUZvbnRzLGk9ci5vZmZzZXRUYWJsZSxvPTA7bzxhO28rKyl7ZS5wb3M9KGUuc3RhcnR8fDApK2lbb107dmFyIHM9cChlKSxsPWMoMCxzLm51bVRhYmxlcyk7aWYoIWwubmFtZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhICJuYW1lIiB0YWJsZS4nKTtmb3IodmFyIHU9eShsLm5hbWUpLGY9MCxoPXUubGVuZ3RoO2Y8aDtmKyspZm9yKHZhciBkPTAsbT11W2ZdLmxlbmd0aDtkPG07ZCsrKXt2YXIgZz11W2ZdW2RdO2lmKGcmJmcucmVwbGFjZSgvXHMvZywiIik9PT10KXJldHVybntoZWFkZXI6cyx0YWJsZXM6bH19fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIicuY29uY2F0KHQsJyIgZm9udC4nKSl9KHQsdGhpcy5uYW1lKTt3PVQuaGVhZGVyLGs9VC50YWJsZXN9ZWxzZSBrPWMoMCwodz1wKHQpKS5udW1UYWJsZXMpO3ZhciBEPSFrWyJDRkYgIl07aWYoRCl7aWYoIWsubG9jYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImxvY2EiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO2suZ2x5Znx8KCgwLG4ud2FybikoJ1JlcXVpcmVkICJnbHlmIiB0YWJsZSBpcyBub3QgZm91bmQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyksay5nbHlmPXt0YWc6ImdseWYiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSx0aGlzLmlzT3BlblR5cGU9ITF9ZWxzZXt2YXIgTT1zLmNvbXBvc2l0ZSYmKChzLmNpZFRvR2lkTWFwfHxbXSkubGVuZ3RoPjB8fCEocy5jTWFwIGluc3RhbmNlb2YgdS5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT13LnZlcnNpb24mJiFNfHwhay5oZWFkfHwhay5oaGVhfHwhay5tYXhwfHwhay5wb3N0KXJldHVybiB4PW5ldyBmLlN0cmVhbShrWyJDRkYgIl0uZGF0YSksUz1uZXcgRSh4LHMpLHYocyksdGhpcy5jb252ZXJ0KGUsUyxzKTtkZWxldGUgay5nbHlmLGRlbGV0ZSBrLmxvY2EsZGVsZXRlIGsuZnBnbSxkZWxldGUgay5wcmVwLGRlbGV0ZSBrWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFrLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkray5tYXhwLm9mZnNldDt2YXIgTj10LmdldEludDMyKCksaj10LmdldFVpbnQxNigpLEI9aisxLFU9ITA7Qj42NTUzNSYmKFU9ITEsQj1qLCgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpKTt2YXIgcT0wLHo9MDtOPj02NTUzNiYmay5tYXhwLmxlbmd0aD49MjImJih0LnBvcys9OCx0LmdldFVpbnQxNigpPjImJihrLm1heHAuZGF0YVsxNF09MCxrLm1heHAuZGF0YVsxNV09MiksdC5wb3MrPTQscT10LmdldFVpbnQxNigpLHQucG9zKz00LHo9dC5nZXRVaW50MTYoKSksay5tYXhwLmRhdGFbNF09Qj4+OCxrLm1heHAuZGF0YVs1XT0yNTUmQjt2YXIgVz1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZQKGUsaSksdCYmUCh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KGsuZnBnbSxrLnByZXAsa1siY3Z0ICJdLHEpO2lmKFd8fChkZWxldGUgay5mcGdtLGRlbGV0ZSBrLnByZXAsZGVsZXRlIGtbImN2dCAiXSksZnVuY3Rpb24oZSx0LHIsYSl7aWYodCl7ZS5wb3M9KGUuc3RhcnQ/ZS5zdGFydDowKSt0Lm9mZnNldCxlLnBvcys9NCxlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9OCxlLnBvcys9Mjt2YXIgaT1lLmdldFVpbnQxNigpO2k+YSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIraSsiKSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzICgiK2ErIikiKSxpPWEsdC5kYXRhWzM0XT0oNjUyODAmaSk+PjgsdC5kYXRhWzM1XT0yNTUmaSk7dmFyIG89YS1pLShyLmxlbmd0aC00Kmk+PjEpO2lmKG8+MCl7dmFyIHM9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrMipvKTtzLnNldChyLmRhdGEpLHIuZGF0YT1zfX1lbHNlIHImJihyLmRhdGE9bnVsbCl9KHQsay5oaGVhLGsuaG10eCxCKSwhay5oZWFkKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGVhZCIgdGFibGUgaXMgbm90IGZvdW5kJyk7IWZ1bmN0aW9uKGUsdCxhKXt2YXIgaSxvLHMsbCxjPWUuZGF0YSx1PShpPWNbMF0sbz1jWzFdLHM9Y1syXSxsPWNbM10sKGk8PDI0KSsobzw8MTYpKyhzPDw4KStsKTt1Pj4xNiE9MSYmKCgwLG4uaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiAiK3UpLGNbMF09MCxjWzFdPTEsY1syXT0wLGNbM109MCk7dmFyIGY9cihjWzUwXSxjWzUxXSk7aWYoZjwwfHxmPjEpeygwLG4uaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiAiK2YpO3ZhciBoPXQrMTtpZihhPT09aDw8MSljWzUwXT0wLGNbNTFdPTA7ZWxzZXtpZihhIT09aDw8Mil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiAiK2YpO2NbNTBdPTAsY1s1MV09MX19fShrLmhlYWQsaixEP2subG9jYS5sZW5ndGg6MCk7dmFyIEg9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihEKXt2YXIgRz1yKGsuaGVhZC5kYXRhWzUwXSxrLmhlYWQuZGF0YVs1MV0pLFY9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsbCxjO24/KHM9NCxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX0sYz1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj4+MjQmMjU1LGVbdCsxXT1yPj4xNiYyNTUsZVt0KzJdPXI+PjgmMjU1LGVbdCszXT0yNTUmcn0pOihzPTIsbD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDw5fGVbdCsxXTw8MX0sYz1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj45JjI1NSxlW3QrMV09cj4+MSYyNTV9KTt2YXIgdT1pP3IrMTpyLGY9ZS5kYXRhLGg9cyooMSt1KTsoZj1uZXcgVWludDhBcnJheShoKSkuc2V0KGUuZGF0YS5zdWJhcnJheSgwLGgpKSxlLmRhdGE9Zjt2YXIgZCxwLGc9dC5kYXRhLHY9Zy5sZW5ndGgseT1uZXcgVWludDhBcnJheSh2KSxiPWwoZiwwKSx3PTAsaz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihjKGYsMCx3KSxkPTAscD1zO2Q8cjtkKysscCs9cyl7dmFyIFM9bChmLHApOzA9PT1TJiYoUz1iKSxTPnYmJih2KzMmLTQpPT09UyYmKFM9diksUz52JiYoYj1TKTt2YXIgXz1tKGcsYixTLHksdyxhKSx4PV8ubGVuZ3RoOzA9PT14JiYoa1tkXT0hMCksXy5zaXplT2ZJbnN0cnVjdGlvbnM+byYmKG89Xy5zaXplT2ZJbnN0cnVjdGlvbnMpLGMoZixwLHcrPXgpLGI9U31pZigwPT09dyl7dmFyIEE9bmV3IFVpbnQ4QXJyYXkoWzAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0OSwwXSk7Zm9yKGQ9MCxwPXM7ZDx1O2QrKyxwKz1zKWMoZixwLEEubGVuZ3RoKTt0LmRhdGE9QX1lbHNlIGlmKGkpe3ZhciBDPWwoZixzKTt5Lmxlbmd0aD5DK3c/dC5kYXRhPXkuc3ViYXJyYXkoMCxDK3cpOih0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQyt3KSx0LmRhdGEuc2V0KHkuc3ViYXJyYXkoMCx3KSkpLHQuZGF0YS5zZXQoeS5zdWJhcnJheSgwLEMpLHcpLGMoZS5kYXRhLGYubGVuZ3RoLXMsdytDKX1lbHNlIHQuZGF0YT15LnN1YmFycmF5KDAsdyk7cmV0dXJue21pc3NpbmdHbHlwaHM6ayxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6b319KGsubG9jYSxrLmdseWYsaixHLFcsVSx6KTtIPVYubWlzc2luZ0dseXBocyxOPj02NTUzNiYmay5tYXhwLmxlbmd0aD49MjImJihrLm1heHAuZGF0YVsyNl09Vi5tYXhTaXplT2ZJbnN0cnVjdGlvbnM+Pjgsay5tYXhwLmRhdGFbMjddPTI1NSZWLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIWsuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1rLmhoZWEuZGF0YVsxMF0mJjA9PT1rLmhoZWEuZGF0YVsxMV0mJihrLmhoZWEuZGF0YVsxMF09MjU1LGsuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBYPXt1bml0c1BlckVtOnIoay5oZWFkLmRhdGFbMThdLGsuaGVhZC5kYXRhWzE5XSkseU1heDpyKGsuaGVhZC5kYXRhWzQyXSxrLmhlYWQuZGF0YVs0M10pLHlNaW46aChrLmhlYWQuZGF0YVszOF0say5oZWFkLmRhdGFbMzldKSxhc2NlbnQ6cihrLmhoZWEuZGF0YVs0XSxrLmhoZWEuZGF0YVs1XSksZGVzY2VudDpoKGsuaGhlYS5kYXRhWzZdLGsuaGhlYS5kYXRhWzddKX07dGhpcy5hc2NlbnQ9WC5hc2NlbnQvWC51bml0c1BlckVtLHRoaXMuZGVzY2VudD1YLmRlc2NlbnQvWC51bml0c1BlckVtLGsucG9zdCYmZnVuY3Rpb24oZSxyLGEpe3ZhciBpPSh0LnN0YXJ0P3Quc3RhcnQ6MCkrZS5vZmZzZXQ7dC5wb3M9aTt2YXIgbyxzPWkrZS5sZW5ndGgsbD10LmdldEludDMyKCk7dC5nZXRCeXRlcygyOCk7dmFyIGMsdT0hMDtzd2l0Y2gobCl7Y2FzZSA2NTUzNjpvPWc7YnJlYWs7Y2FzZSAxMzEwNzI6dmFyIGY9dC5nZXRVaW50MTYoKTtpZihmIT09YSl7dT0hMTticmVha312YXIgaD1bXTtmb3IoYz0wO2M8ZjsrK2Mpe3ZhciBkPXQuZ2V0VWludDE2KCk7aWYoZD49MzI3Njgpe3U9ITE7YnJlYWt9aC5wdXNoKGQpfWlmKCF1KWJyZWFrO2Zvcih2YXIgcD1bXSxtPVtdO3QucG9zPHM7KXt2YXIgdj10LmdldEJ5dGUoKTtmb3IobS5sZW5ndGg9dixjPTA7Yzx2OysrYyltW2NdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO3AucHVzaChtLmpvaW4oIiIpKX1mb3Iobz1bXSxjPTA7YzxmOysrYyl7dmFyIHk9aFtjXTt5PDI1OD9vLnB1c2goZ1t5XSk6by5wdXNoKHBbeS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0OigwLG4ud2FybikoIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrbCksdT0hMSxyLmRlZmF1bHRFbmNvZGluZyYmKG89ci5kZWZhdWx0RW5jb2RpbmcpfXIuZ2x5cGhOYW1lcz1vfShrLnBvc3QscyxqKSxrLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTpGKHMpfTt2YXIgWSxLPVtdO2Z1bmN0aW9uIEooZSl7cmV0dXJuIUhbZV19aWYocy5jb21wb3NpdGUpe3ZhciBRPXMuY2lkVG9HaWRNYXB8fFtdLFo9MD09PVEubGVuZ3RoO3MuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHQ+NjU1MzUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTt2YXIgcj0tMTtaP3I9dDp2b2lkIDAhPT1RW3RdJiYocj1RW3RdKSxyPj0wJiZyPGomJkoocikmJihLW2VdPXIpfSkpfWVsc2V7dmFyICQ9ZnVuY3Rpb24oZSx0LHIsYSl7aWYoIWUpcmV0dXJuKDAsbi53YXJuKSgiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuIikse3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9O3ZhciBpLG89KHQuc3RhcnQ/dC5zdGFydDowKStlLm9mZnNldDt0LnBvcz1vLHQuZ2V0VWludDE2KCk7Zm9yKHZhciBzLGw9dC5nZXRVaW50MTYoKSxjPSExLHU9MDt1PGw7dSsrKXt2YXIgZj10LmdldFVpbnQxNigpLGg9dC5nZXRVaW50MTYoKSxkPXQuZ2V0SW50MzIoKT4+PjAscD0hMTtpZigoIXN8fHMucGxhdGZvcm1JZCE9PWZ8fHMuZW5jb2RpbmdJZCE9PWgpJiYoMD09PWYmJjA9PT1oP3A9ITA6MT09PWYmJjA9PT1oP3A9ITA6MyE9PWZ8fDEhPT1ofHwhYSYmcz9yJiYzPT09ZiYmMD09PWgmJihwPSEwLGM9ITApOihwPSEwLHJ8fChjPSEwKSkscCYmKHM9e3BsYXRmb3JtSWQ6ZixlbmNvZGluZ0lkOmgsb2Zmc2V0OmR9KSxjKSlicmVha31pZihzJiYodC5wb3M9bytzLm9mZnNldCksIXN8fC0xPT09dC5wZWVrQnl0ZSgpKXJldHVybigwLG4ud2FybikoIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuIikse3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9O3ZhciBtPXQuZ2V0VWludDE2KCk7dC5nZXRVaW50MTYoKSx0LmdldFVpbnQxNigpO3ZhciBnLHYseT0hMSxiPVtdO2lmKDA9PT1tKXtmb3IoZz0wO2c8MjU2O2crKyl7dmFyIHc9dC5nZXRCeXRlKCk7dyYmYi5wdXNoKHtjaGFyQ29kZTpnLGdseXBoSWQ6d30pfXk9ITB9ZWxzZSBpZig0PT09bSl7dmFyIGs9dC5nZXRVaW50MTYoKT4+MTt0LmdldEJ5dGVzKDYpO3ZhciBTLF89W107Zm9yKFM9MDtTPGs7UysrKV8ucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTtmb3IodC5nZXRVaW50MTYoKSxTPTA7UzxrO1MrKylfW1NdLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKFM9MDtTPGs7UysrKV9bU10uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgeD0wO2ZvcihTPTA7UzxrO1MrKyl7aT1fW1NdO3ZhciBBPXQuZ2V0VWludDE2KCk7aWYoQSl7dmFyIEM9KEE+PjEpLShrLVMpO2kub2Zmc2V0SW5kZXg9Qyx4PU1hdGgubWF4KHgsQytpLmVuZC1pLnN0YXJ0KzEpfWVsc2UgaS5vZmZzZXRJbmRleD0tMX12YXIgUD1bXTtmb3IoZz0wO2c8eDtnKyspUC5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihTPTA7UzxrO1MrKyl7bz0oaT1fW1NdKS5zdGFydDt2YXIgRT1pLmVuZCxUPWkuZGVsdGE7Zm9yKEM9aS5vZmZzZXRJbmRleCxnPW87Zzw9RTtnKyspNjU1MzUhPT1nJiYodj0odj1DPDA/ZzpQW0MrZy1vXSkrVCY2NTUzNSxiLnB1c2goe2NoYXJDb2RlOmcsZ2x5cGhJZDp2fSkpfX1lbHNle2lmKDYhPT1tKXJldHVybigwLG4ud2FybikoImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIittKSx7cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX07dmFyIFI9dC5nZXRVaW50MTYoKSxPPXQuZ2V0VWludDE2KCk7Zm9yKGc9MDtnPE87ZysrKXt2PXQuZ2V0VWludDE2KCk7dmFyIEk9UitnO2IucHVzaCh7Y2hhckNvZGU6SSxnbHlwaElkOnZ9KX19Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpLHU9MTt1PGIubGVuZ3RoO3UrKyliW3UtMV0uY2hhckNvZGU9PT1iW3VdLmNoYXJDb2RlJiYoYi5zcGxpY2UodSwxKSx1LS0pO3JldHVybntwbGF0Zm9ybUlkOnMucGxhdGZvcm1JZCxlbmNvZGluZ0lkOnMuZW5jb2RpbmdJZCxtYXBwaW5nczpiLGhhc1Nob3J0Q21hcDp5fX0oay5jbWFwLHQsdGhpcy5pc1N5bWJvbGljRm9udCxzLmhhc0VuY29kaW5nKSxlZT0kLnBsYXRmb3JtSWQsdGU9JC5lbmNvZGluZ0lkLHJlPSQubWFwcGluZ3MsbmU9cmUubGVuZ3RoO2lmKHMuaGFzRW5jb2RpbmcmJigzPT09ZWUmJjE9PT10ZXx8MT09PWVlJiYwPT09dGUpfHwtMT09PWVlJiYtMT09PXRlJiYoMCxvLmdldEVuY29kaW5nKShzLmJhc2VFbmNvZGluZ05hbWUpKXt2YXIgYWU9W107Ik1hY1JvbWFuRW5jb2RpbmciIT09cy5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXMuYmFzZUVuY29kaW5nTmFtZXx8KGFlPSgwLG8uZ2V0RW5jb2RpbmcpKHMuYmFzZUVuY29kaW5nTmFtZSkpO3ZhciBpZT0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKFk9MDtZPDI1NjtZKyspe3ZhciBvZSxzZTtpZihvZT10aGlzLmRpZmZlcmVuY2VzJiZZIGluIHRoaXMuZGlmZmVyZW5jZXM/dGhpcy5kaWZmZXJlbmNlc1tZXTpZIGluIGFlJiYiIiE9PWFlW1ldP2FlW1ldOm8uU3RhbmRhcmRFbmNvZGluZ1tZXSl7dmFyIGxlO3NlPWIob2UsaWUpLDM9PT1lZSYmMT09PXRlP2xlPWllW3NlXToxPT09ZWUmJjA9PT10ZSYmKGxlPW8uTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKHNlKSk7Zm9yKHZhciBjZT0hMSx1ZT0wO3VlPG5lOysrdWUpaWYocmVbdWVdLmNoYXJDb2RlPT09bGUpe0tbWV09cmVbdWVdLmdseXBoSWQsY2U9ITA7YnJlYWt9aWYoIWNlJiZzLmdseXBoTmFtZXMpe3ZhciBmZT1zLmdseXBoTmFtZXMuaW5kZXhPZihvZSk7LTE9PT1mZSYmc2UhPT1vZSYmKGZlPXMuZ2x5cGhOYW1lcy5pbmRleE9mKHNlKSksZmU+MCYmSihmZSkmJihLW1ldPWZlKX19fX1lbHNlIGlmKDA9PT1lZSYmMD09PXRlKWZvcih2YXIgaGU9MDtoZTxuZTsrK2hlKUtbcmVbaGVdLmNoYXJDb2RlXT1yZVtoZV0uZ2x5cGhJZDtlbHNlIGZvcih2YXIgZGU9MDtkZTxuZTsrK2RlKVk9cmVbZGVdLmNoYXJDb2RlLDM9PT1lZSYmWT49NjE0NDAmJlk8PTYxNjk1JiYoWSY9MjU1KSxLW1ldPXJlW2RlXS5nbHlwaElkfTA9PT1LLmxlbmd0aCYmKEtbMF09MCk7dmFyIHBlPUItMTtVfHwocGU9MCk7dmFyIG1lPVIoSyxKLHBlKTtpZih0aGlzLnRvRm9udENoYXI9bWUudG9Gb250Q2hhcixrLmNtYXA9e3RhZzoiY21hcCIsZGF0YTpPKG1lLmNoYXJDb2RlVG9HbHlwaElkLEIpfSxrWyJPUy8yIl0mJmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBmLlN0cmVhbShlLmRhdGEpLHI9dC5nZXRVaW50MTYoKTt0LmdldEJ5dGVzKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5nZXRCeXRlcyg2KSwwPT09dC5nZXRVaW50MTYoKXx8KGUuZGF0YVs4XT1lLmRhdGFbOV09MCwwKSkpfShrWyJPUy8yIl0pfHwoa1siT1MvMiJdPXt0YWc6Ik9TLzIiLGRhdGE6SShzLG1lLmNoYXJDb2RlVG9HbHlwaElkLFgpfSksIUQpdHJ5e3g9bmV3IGYuU3RyZWFtKGtbIkNGRiAiXS5kYXRhKSwoUz1uZXcgYS5DRkZQYXJzZXIoeCxzLCEwKS5wYXJzZSgpKS5kdXBsaWNhdGVGaXJzdEdseXBoKCk7dmFyIGdlPW5ldyBhLkNGRkNvbXBpbGVyKFMpO2tbIkNGRiAiXS5kYXRhPWdlLmNvbXBpbGUoKX1jYXRjaChlKXsoMCxuLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrcy5sb2FkZWROYW1lKX1pZihrLm5hbWUpe3ZhciB2ZT15KGsubmFtZSk7ay5uYW1lLmRhdGE9TChlLHZlKX1lbHNlIGsubmFtZT17dGFnOiJuYW1lIixkYXRhOkwodGhpcy5uYW1lKX07dmFyIHllPW5ldyBfKHcudmVyc2lvbik7Zm9yKHZhciBiZSBpbiBrKXllLmFkZFRhYmxlKGJlLGtbYmVdLmRhdGEpO3JldHVybiB5ZS50b0FycmF5KCl9LGNvbnZlcnQ6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmIShlLmhhc0VuY29kaW5nfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgUykpe3ZhciByPVtdLG49KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KXt2YXIgbz10W2FdLHM9KDAsbC5nZXRVbmljb2RlRm9yR2x5cGgpKG8sbik7LTEhPT1zJiYoclthXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKX1lLnRvVW5pY29kZS5hbWVuZChyKX19KHIsci5idWlsdEluRW5jb2RpbmcpO3ZhciBhPTE7dCBpbnN0YW5jZW9mIEUmJihhPXQubnVtR2x5cGhzLTEpO3ZhciBzPXQuZ2V0R2x5cGhNYXBwaW5nKHIpLGM9UihzLHQuaGFzR2x5cGhJZC5iaW5kKHQpLGEpO3RoaXMudG9Gb250Q2hhcj1jLnRvRm9udENoYXI7dmFyIHU9dC5udW1HbHlwaHM7ZnVuY3Rpb24gZihlLHQpe3ZhciByPW51bGw7Zm9yKHZhciBuIGluIGUpdD09PWVbbl0mJihyfHwocj1bXSksci5wdXNoKDB8bikpO3JldHVybiByfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHIgaW4gZSlpZih0PT09ZVtyXSlyZXR1cm4gMHxyO3JldHVybiBjLmNoYXJDb2RlVG9HbHlwaElkW2MubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dCxjLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrK312YXIgZD10LnNlYWNzO2lmKGQmJmQubGVuZ3RoKXt2YXIgcD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsbT10LmdldENoYXJzZXQoKSxnPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciB2IGluIGQpe3ZhciB5PWRbdnw9MF0sYj1vLlN0YW5kYXJkRW5jb2RpbmdbeVsyXV0sdz1vLlN0YW5kYXJkRW5jb2RpbmdbeVszXV0saz1tLmluZGV4T2YoYiksQz1tLmluZGV4T2Yodyk7aWYoIShrPDB8fEM8MCkpe3ZhciBQPXt4OnlbMF0qcFswXSt5WzFdKnBbMl0rcFs0XSx5OnlbMF0qcFsxXSt5WzFdKnBbM10rcFs1XX0sVD1mKHMsdik7aWYoVClmb3IodmFyIEQ9MCxNPVQubGVuZ3RoO0Q8TTtEKyspe3ZhciBOPVRbRF0saj1jLmNoYXJDb2RlVG9HbHlwaElkLEI9aChqLGspLFU9aChqLEMpO2dbTl09e2Jhc2VGb250Q2hhckNvZGU6QixhY2NlbnRGb250Q2hhckNvZGU6VSxhY2NlbnRPZmZzZXQ6UH19fX1yLnNlYWNNYXA9Z312YXIgcT0xLyhyLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgpWzBdLHo9bmV3IF8oIk9UVE8iKTtyZXR1cm4gei5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSx6LmFkZFRhYmxlKCJPUy8yIixJKHIsYy5jaGFyQ29kZVRvR2x5cGhJZCkpLHouYWRkVGFibGUoImNtYXAiLE8oYy5jaGFyQ29kZVRvR2x5cGhJZCx1KSksei5hZGRUYWJsZSgiaGVhZCIsIlwwAVwwXDBcMFwwEFwwXDBcMFwwXDBfDzzDtVwwXDAiK0EocSkrIlwwXDBcMFwwwp5cdn4nXDBcMFwwXDDCnlx2fidcMFwwIitBKHIuZGVzY2VudCkrIg/DvyIrQShyLmFzY2VudCkreChyLml0YWxpY0FuZ2xlPzI6MCkrIlwwEVwwXDBcMFwwXDBcMCIpLHouYWRkVGFibGUoImhoZWEiLCJcMAFcMFwwIitBKHIuYXNjZW50KStBKHIuZGVzY2VudCkrIlwwXDDDv8O/XDBcMFwwXDBcMFwwIitBKHIuY2FwSGVpZ2h0KStBKE1hdGgudGFuKHIuaXRhbGljQW5nbGUpKnIueEhlaWdodCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIreCh1KSksei5hZGRUYWJsZSgiaG10eCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jaGFyc3RyaW5ncyxyPXQuY2ZmP3QuY2ZmLndpZHRoczpudWxsLG49IlwwXDBcMFwwIixhPTEsaT11O2E8aTthKyspe3ZhciBvPTA7aWYoZSl7dmFyIHM9ZVthLTFdO289IndpZHRoImluIHM/cy53aWR0aDowfWVsc2UgciYmKG89TWF0aC5jZWlsKHJbYV18fDApKTtuKz14KG8pK3goMCl9cmV0dXJuIG59KCkpLHouYWRkVGFibGUoIm1heHAiLCJcMFwwUFwwIit4KHUpKSx6LmFkZFRhYmxlKCJuYW1lIixMKGUpKSx6LmFkZFRhYmxlKCJwb3N0IixGKHIpKSx6LnRvQXJyYXkoKX0sZ2V0IHNwYWNlV2lkdGgoKXtpZigiX3NoYWRvd1dpZHRoImluIHRoaXMpcmV0dXJuIHRoaXMuX3NoYWRvd1dpZHRoO2Zvcih2YXIgZSx0PVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl0scj0wLG49dC5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9dFtyXTtpZihhIGluIHRoaXMud2lkdGhzKXtlPXRoaXMud2lkdGhzW2FdO2JyZWFrfXZhciBvPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKVthXSxzPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhvKSYmKHM9dGhpcy5jTWFwLmxvb2t1cChvKSksIXMmJnRoaXMudG9Vbmljb2RlJiYocz10aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKG8pKSxzPD0wJiYocz1vKSxlPXRoaXMud2lkdGhzW3NdKWJyZWFrfXJldHVybiBlPWV8fHRoaXMuZGVmYXVsdFdpZHRoLHRoaXMuX3NoYWRvd1dpZHRoPWUsZX0sY2hhclRvR2x5cGg6ZnVuY3Rpb24oZSx0KXt2YXIgcixhLGksbz1lO3RoaXMuY01hcCYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpJiYobz10aGlzLmNNYXAubG9va3VwKGUpKSxhPXRoaXMud2lkdGhzW29dLGE9KDAsbi5pc051bSkoYSk/YTp0aGlzLmRlZmF1bHRXaWR0aDt2YXIgcz10aGlzLnZtZXRyaWNzJiZ0aGlzLnZtZXRyaWNzW29dLGM9dGhpcy50b1VuaWNvZGUuZ2V0KGUpfHx0aGlzLmZhbGxiYWNrVG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGMmJihjPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpO3ZhciB1PWUgaW4gdGhpcy50b0ZvbnRDaGFyO3I9dGhpcy50b0ZvbnRDaGFyW2VdfHxlLHRoaXMubWlzc2luZ0ZpbGUmJihyPSgwLGwubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHIpKSx0aGlzLmlzVHlwZTNGb250JiYoaT1yKTt2YXIgZj1udWxsO2lmKHRoaXMuc2VhY01hcCYmdGhpcy5zZWFjTWFwW2VdKXt1PSEwO3ZhciBoPXRoaXMuc2VhY01hcFtlXTtyPWguYmFzZUZvbnRDaGFyQ29kZSxmPXtmb250Q2hhcjpTdHJpbmcuZnJvbUNvZGVQb2ludChoLmFjY2VudEZvbnRDaGFyQ29kZSksb2Zmc2V0OmguYWNjZW50T2Zmc2V0fX12YXIgZD0ibnVtYmVyIj09dHlwZW9mIHI/U3RyaW5nLmZyb21Db2RlUG9pbnQocik6IiIscD10aGlzLmdseXBoQ2FjaGVbZV07cmV0dXJuIHAmJnAubWF0Y2hlc0ZvckNhY2hlKGQsYyxmLGEscyxpLHQsdSl8fChwPW5ldyB3KGQsYyxmLGEscyxpLHQsdSksdGhpcy5nbHlwaENhY2hlW2VdPXApLHB9LGNoYXJzVG9HbHlwaHM6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9dGhpcy5jaGFyc0NhY2hlO2lmKGEmJih0PWFbZV0pKXJldHVybiB0O2F8fChhPXRoaXMuY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpKSx0PVtdO3ZhciBpLG89ZSxzPTA7aWYodGhpcy5jTWFwKWZvcih2YXIgbD1PYmplY3QuY3JlYXRlKG51bGwpO3M8ZS5sZW5ndGg7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUscyxsKSxuPWwuY2hhcmNvZGU7dmFyIGM9bC5sZW5ndGg7cys9Yzt2YXIgdT0xPT09YyYmMzI9PT1lLmNoYXJDb2RlQXQocy0xKTtyPXRoaXMuY2hhclRvR2x5cGgobix1KSx0LnB1c2gocil9ZWxzZSBmb3Iocz0wLGk9ZS5sZW5ndGg7czxpOysrcyluPWUuY2hhckNvZGVBdChzKSxyPXRoaXMuY2hhclRvR2x5cGgobiwzMj09PW4pLHQucHVzaChyKTtyZXR1cm4gYVtvXT10fSxnZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ2x5cGhDYWNoZSl9fSxlfSgpO3QuRm9udD14O3ZhciBBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVycm9yPWUsdGhpcy5sb2FkZWROYW1lPSJnX2ZvbnRfZXJyb3IiLHRoaXMubWlzc2luZ0ZpbGU9ITB9cmV0dXJuIGUucHJvdG90eXBlPXtjaGFyc1RvR2x5cGhzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGV4cG9ydERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6dGhpcy5lcnJvcn19fSxlfSgpO2Z1bmN0aW9uIEMoZSx0LHIpe3ZhciBuLGEscyxsPU9iamVjdC5jcmVhdGUobnVsbCksYz0hIShlLmZsYWdzJm0uU3ltYm9saWMpO2lmKGUuYmFzZUVuY29kaW5nTmFtZSlmb3Iocz0oMCxvLmdldEVuY29kaW5nKShlLmJhc2VFbmNvZGluZ05hbWUpLGE9MDthPHMubGVuZ3RoO2ErKyluPXIuaW5kZXhPZihzW2FdKSxsW2FdPW4+PTA/bjowO2Vsc2UgaWYoYylmb3IoYSBpbiB0KWxbYV09dFthXTtlbHNlIGZvcihzPW8uU3RhbmRhcmRFbmNvZGluZyxhPTA7YTxzLmxlbmd0aDthKyspbj1yLmluZGV4T2Yoc1thXSksbFthXT1uPj0wP246MDt2YXIgdSxmPWUuZGlmZmVyZW5jZXM7aWYoZilmb3IoYSBpbiBmKXt2YXIgaD1mW2FdO2lmKC0xPT09KG49ci5pbmRleE9mKGgpKSl7dXx8KHU9KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpKTt2YXIgZD1iKGgsdSk7ZCE9PWgmJihuPXIuaW5kZXhPZihkKSl9bFthXT1uPj0wP246MH1yZXR1cm4gbH10LkVycm9yRm9udD1BO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7Zm9yKHZhciBhLGk9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPWktbyxsPXIsYz0hMTtsPHM7KXtmb3IoYT0wO2E8byYmZVtsK2FdPT09dFthXTspYSsrO2lmKGE+PW8pe2ZvcihsKz1hO2w8aSYmKDAsbi5pc1NwYWNlKShlW2xdKTspbCsrO2M9ITA7YnJlYWt9bCsrfXJldHVybntmb3VuZDpjLGxlbmd0aDpsfX1mdW5jdGlvbiB0KHQscixhKXt2YXIgaT1hLmxlbmd0aDEsbz0oYS5sZW5ndGgyLHIucGVla0J5dGVzKDYpKSxzPTEyOD09PW9bMF0mJjE9PT1vWzFdO3MmJihyLnNraXAoNiksaT1vWzVdPDwyNHxvWzRdPDwxNnxvWzNdPDw4fG9bMl0pO3ZhciBsPWZ1bmN0aW9uKHQscil7dmFyIGEsaSxvLHMsbD1bMTAxLDEwMSwxMjAsMTAxLDk5XSxjPXQucG9zO3RyeXtpPShhPXQuZ2V0Qnl0ZXMocikpLmxlbmd0aH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlfWlmKGk9PT1yJiYobz1lKGEsbCxyLTIqbC5sZW5ndGgpKS5mb3VuZCYmby5sZW5ndGg9PT1yKXJldHVybntzdHJlYW06bmV3IGYuU3RyZWFtKGEpLGxlbmd0aDpyfTtmb3IoKDAsbi53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSx0LnBvcz1jOzAhPT0obz1lKHQucGVla0J5dGVzKDIwNDgpLGwsMCkpLmxlbmd0aDspaWYodC5wb3MrPW8ubGVuZ3RoLG8uZm91bmQpe3M9dC5wb3MtYzticmVha31yZXR1cm4gdC5wb3M9YyxzP3tzdHJlYW06bmV3IGYuU3RyZWFtKHQuZ2V0Qnl0ZXMocykpLGxlbmd0aDpzfTooKDAsbi53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgZi5TdHJlYW0odC5nZXRCeXRlcyhyKSksbGVuZ3RoOnJ9KX0ocixpKTtuZXcgaC5UeXBlMVBhcnNlcihsLnN0cmVhbSwhMSwhMCkuZXh0cmFjdEZvbnRIZWFkZXIoYSkscyYmKChvPXIuZ2V0Qnl0ZXMoNikpWzVdLG9bNF0sb1szXSxvWzJdKTt2YXIgYyx1PShjPXIuZ2V0Qnl0ZXMoKSx7c3RyZWFtOm5ldyBmLlN0cmVhbShjKSxsZW5ndGg6Yy5sZW5ndGh9KSxkPW5ldyBoLlR5cGUxUGFyc2VyKHUuc3RyZWFtLCEwLCEwKS5leHRyYWN0Rm9udFByb2dyYW0oKTtmb3IodmFyIHAgaW4gZC5wcm9wZXJ0aWVzKWFbcF09ZC5wcm9wZXJ0aWVzW3BdO3ZhciBtPWQuY2hhcnN0cmluZ3MsZz10aGlzLmdldFR5cGUyQ2hhcnN0cmluZ3MobSksdj10aGlzLmdldFR5cGUyU3VicnMoZC5zdWJycyk7dGhpcy5jaGFyc3RyaW5ncz1tLHRoaXMuZGF0YT10aGlzLndyYXAodCxnLHRoaXMuY2hhcnN0cmluZ3MsdixhKSx0aGlzLnNlYWNzPXRoaXMuZ2V0U2VhY3MoZC5jaGFyc3RyaW5ncyl9cmV0dXJuIHQucHJvdG90eXBlPXtnZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9LGdldENoYXJzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9WyIubm90ZGVmIl0sdD10aGlzLmNoYXJzdHJpbmdzLHI9MDtyPHQubGVuZ3RoO3IrKyllLnB1c2godFtyXS5nbHlwaE5hbWUpO3JldHVybiBlfSxnZXRHbHlwaE1hcHBpbmc6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLmNoYXJzdHJpbmdzLG49WyIubm90ZGVmIl07Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluLnB1c2goclt0XS5nbHlwaE5hbWUpO3ZhciBhPWUuYnVpbHRJbkVuY29kaW5nO2lmKGEpe3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBvIGluIGEpKHQ9bi5pbmRleE9mKGFbb10pKT49MCYmKGlbb109dCl9cmV0dXJuIEMoZSxpLG4pfSxoYXNHbHlwaElkOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLm51bUdseXBocykmJigwPT09ZXx8dGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjApfSxnZXRTZWFjczpmdW5jdGlvbihlKXt2YXIgdCxyLG49W107Zm9yKHQ9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspe3ZhciBhPWVbdF07YS5zZWFjJiYoblt0KzFdPWEuc2VhYyl9cmV0dXJuIG59LGdldFR5cGUyQ2hhcnN0cmluZ3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspdC5wdXNoKGVbcl0uY2hhcnN0cmluZyk7cmV0dXJuIHR9LGdldFR5cGUyU3VicnM6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxyPWUubGVuZ3RoO3Q9cjwxMTMzPzEwNzpyPDMzNzY5PzExMzE6MzI3Njg7dmFyIG4sYT1bXTtmb3Iobj0wO248dDtuKyspYS5wdXNoKFsxMV0pO2ZvcihuPTA7bjxyO24rKylhLnB1c2goZVtuXSk7cmV0dXJuIGF9LHdyYXA6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1uZXcgYS5DRkY7by5oZWFkZXI9bmV3IGEuQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBhLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGw9bmV3IGEuQ0ZGU3RyaW5ncztsLmFkZCgiVmVyc2lvbiAwLjExIiksbC5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxsLmFkZChlKSxsLmFkZChlKSxsLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWwsby5nbG9iYWxTdWJySW5kZXg9bmV3IGEuQ0ZGSW5kZXg7dmFyIGMsdSxmPXQubGVuZ3RoLGg9WzBdO2ZvcihjPTA7YzxmO2MrKyl7dmFyIGQ9YS5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihyW2NdLmdseXBoTmFtZSk7LTE9PT1kJiYoZD0wKSxoLnB1c2goZD4+OCYyNTUsMjU1JmQpfW8uY2hhcnNldD1uZXcgYS5DRkZDaGFyc2V0KCExLDAsW10saCk7dmFyIHA9bmV3IGEuQ0ZGSW5kZXg7Zm9yKHAuYWRkKFsxMzksMTRdKSxjPTA7YzxmO2MrKylwLmFkZCh0W2NdKTtvLmNoYXJTdHJpbmdzPXA7dmFyIG09bmV3IGEuQ0ZGUHJpdmF0ZURpY3Q7bS5zZXRCeU5hbWUoIlN1YnJzIixudWxsKTt2YXIgZz1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2ZvcihjPTAsdT1nLmxlbmd0aDtjPHU7YysrKXt2YXIgdj1nW2NdO2lmKHYgaW4gaS5wcml2YXRlRGF0YSl7dmFyIHk9aS5wcml2YXRlRGF0YVt2XTtpZihBcnJheS5pc0FycmF5KHkpKWZvcih2YXIgYj15Lmxlbmd0aC0xO2I+MDtiLS0peVtiXS09eVtiLTFdO20uc2V0QnlOYW1lKHYseSl9fW8udG9wRGljdC5wcml2YXRlRGljdD1tO3ZhciB3PW5ldyBhLkNGRkluZGV4O2ZvcihjPTAsdT1uLmxlbmd0aDtjPHU7YysrKXcuYWRkKG5bY10pO3JldHVybiBtLnN1YnJzSW5kZXg9dyxuZXcgYS5DRkZDb21waWxlcihvKS5jb21waWxlKCl9fSx0fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7dmFyIHI9bmV3IGEuQ0ZGUGFyc2VyKGUsdCwhMCk7dGhpcy5jZmY9ci5wYXJzZSgpLHRoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgaT1uZXcgYS5DRkZDb21waWxlcih0aGlzLmNmZik7dGhpcy5zZWFjcz10aGlzLmNmZi5zZWFjczt0cnl7dGhpcy5kYXRhPWkuY29tcGlsZSgpfWNhdGNoKHIpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIit0LmxvYWRlZE5hbWUpLHRoaXMuZGF0YT1lfX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnR9LGdldENoYXJzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fSxnZXRHbHlwaE1hcHBpbmc6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsYT1yLmNoYXJzZXQuY2hhcnNldDtpZihuLmNvbXBvc2l0ZSl7aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxhLmxlbmd0aDt0Kyspe3ZhciBpPWFbdF07ZVtuLmNNYXAuY2hhckNvZGVPZihpKV09dH1lbHNlIGZvcih0PTA7dDxyLmNoYXJTdHJpbmdzLmNvdW50O3QrKyllW3RdPXQ7cmV0dXJuIGV9cmV0dXJuIGU9QyhuLHIuZW5jb2Rpbmc/ci5lbmNvZGluZy5lbmNvZGluZzpudWxsLGEpfSxoYXNHbHlwaElkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfX0sZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGUHJpdmF0ZURpY3Q9dC5DRkZUb3BEaWN0PXQuQ0ZGQ2hhcnNldD10LkNGRkluZGV4PXQuQ0ZGU3RyaW5ncz10LkNGRkhlYWRlcj10LkNGRj10LkNGRlBhcnNlcj10LkNGRlN0YW5kYXJkU3RyaW5ncz12b2lkIDA7dmFyIG49cig2KSxhPXIoMTc1KSxpPXIoMTc2KSxvPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCIsIjAwMS4wMDAiLCIwMDEuMDAxIiwiMDAxLjAwMiIsIjAwMS4wMDMiLCJCbGFjayIsIkJvbGQiLCJCb29rIiwiTGlnaHQiLCJNZWRpdW0iLCJSZWd1bGFyIiwiUm9tYW4iLCJTZW1pYm9sZCJdO3QuQ0ZGU3RhbmRhcmRTdHJpbmdzPW87dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT1bbnVsbCx7aWQ6ImhzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LG51bGwse2lkOiJ2c3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InZtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicmxpbmV0byIsbWluOjIscmVzZXRTdGFjazohMH0se2lkOiJobGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InZsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoicnJjdXJ2ZXRvIixtaW46NixyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbHN1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoicmV0dXJuIixtaW46MCx1bmRlZlN0YWNrOiEwfSxudWxsLG51bGwse2lkOiJlbmRjaGFyIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJoaW50bWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJjbnRybWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybW92ZXRvIixtaW46MixzdGFja0NsZWFyaW5nOiEwfSx7aWQ6Imhtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoidnN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InJjdXJ2ZWxpbmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoicmxpbmVjdXJ2ZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJ2dmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaGhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbGdzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InZoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJodmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9XSx0PVtudWxsLG51bGwsbnVsbCx7aWQ6ImFuZCIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJvciIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJub3QiLG1pbjoxLHN0YWNrRGVsdGE6MH0sbnVsbCxudWxsLG51bGwse2lkOiJhYnMiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJhZGQiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0rZVt0LTFdfX0se2lkOiJzdWIiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0tZVt0LTFdfX0se2lkOiJkaXYiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0vZVt0LTFdfX0sbnVsbCx7aWQ6Im5lZyIsbWluOjEsc3RhY2tEZWx0YTowLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMV09LWVbdC0xXX19LHtpZDoiZXEiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LG51bGwsbnVsbCx7aWQ6ImRyb3AiLG1pbjoxLHN0YWNrRGVsdGE6LTF9LG51bGwse2lkOiJwdXQiLG1pbjoyLHN0YWNrRGVsdGE6LTJ9LHtpZDoiZ2V0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiaWZlbHNlIixtaW46NCxzdGFja0RlbHRhOi0zfSx7aWQ6InJhbmRvbSIsbWluOjAsc3RhY2tEZWx0YToxfSx7aWQ6Im11bCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXSplW3QtMV19fSxudWxsLHtpZDoic3FydCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImR1cCIsbWluOjEsc3RhY2tEZWx0YToxfSx7aWQ6ImV4Y2giLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJpbmRleCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6InJvbGwiLG1pbjozLHN0YWNrRGVsdGE6LTJ9LG51bGwsbnVsbCxudWxsLHtpZDoiaGZsZXgiLG1pbjo3LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleCIsbWluOjEzLHJlc2V0U3RhY2s6ITB9LHtpZDoiaGZsZXgxIixtaW46OSxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgxIixtaW46MTEscmVzZXRTdGFjazohMH1dO2Z1bmN0aW9uIHIoZSx0LHIpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpLHRoaXMucHJvcGVydGllcz10LHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIXJ9cmV0dXJuIHIucHJvdG90eXBlPXtwYXJzZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBsO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoZCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGY9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixoPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7aCYmKGUuZm9udE1hdHJpeD1oKTt2YXIgcCxtLGc9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYoZyYmKGUuYXNjZW50PU1hdGgubWF4KGdbM10sZ1sxXSksZS5kZXNjZW50PU1hdGgubWluKGdbMV0sZ1szXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIHY9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix5PTAsYj12LmNvdW50O3k8YjsrK3kpe3ZhciB3PXYuZ2V0KHkpLGs9dGhpcy5jcmVhdGVEaWN0KGQsdGhpcy5wYXJzZURpY3QodyksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoayksdC5mZEFycmF5LnB1c2goayl9bT1udWxsLHA9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksZi5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGYuY291bnQpfWVsc2UgcD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxmLmNvdW50LHQuc3RyaW5ncywhMSksbT10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MscC5jaGFyc2V0KTt0LmNoYXJzZXQ9cCx0LmVuY29kaW5nPW07dmFyIFM9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpmLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9Uy5jaGFyU3RyaW5ncyx0LnNlYWNzPVMuc2VhY3MsdC53aWR0aHM9Uy53aWR0aHMsdH0scGFyc2VIZWFkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5ieXRlcyx0PWUubGVuZ3RoLHI9MDtyPHQmJjEhPT1lW3JdOykrK3I7aWYocj49dCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBDRkYgaGVhZGVyIik7MCE9PXImJigoMCxuLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIiksZT1lLnN1YmFycmF5KHIpLHRoaXMuYnl0ZXM9ZSk7dmFyIGE9ZVswXSxpPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm57b2JqOm5ldyBjKGEsaSxvLHMpLGVuZFBvczpvfX0scGFyc2VEaWN0OmZ1bmN0aW9uKGUpe3ZhciB0PTA7ZnVuY3Rpb24gcigpe3ZhciByPWVbdCsrXTtyZXR1cm4gMzA9PT1yP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pfXZhciBhPVtdLGk9W107dD0wO2Zvcih2YXIgbz1lLmxlbmd0aDt0PG87KXt2YXIgcz1lW3RdO3M8PTIxPygxMj09PXMmJihzPXM8PDh8ZVsrK3RdKSxpLnB1c2goW3MsYV0pLGE9W10sKyt0KTphLnB1c2gocigpKX1yZXR1cm4gaX0scGFyc2VJbmRleDpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IGYsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGw9YVtlKytdLGM9ZSsoaSsxKSpsLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIHU9MCxoPTA7aDxsOysraCl1PDw9OCx1Kz1hW2UrK107by5wdXNoKGMrdSl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBkPW9bdF0scD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShkLHApKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fSxwYXJzZU5hbWVJbmRleDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5jb3VudDtyPGE7KytyKXt2YXIgaT1lLmdldChyKTt0LnB1c2goKDAsbi5ieXRlc1RvU3RyaW5nKShpKSl9cmV0dXJuIHR9LHBhcnNlU3RyaW5nSW5kZXg6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyB1LHI9MCxhPWUuY291bnQ7cjxhOysrcil7dmFyIGk9ZS5nZXQocik7dC5hZGQoKDAsbi5ieXRlc1RvU3RyaW5nKShpKSl9cmV0dXJuIHR9LGNyZWF0ZURpY3Q6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1uZXcgZShyKSxhPTAsaT10Lmxlbmd0aDthPGk7KythKXt2YXIgbz10W2FdLHM9b1swXSxsPW9bMV07bi5zZXRCeUtleShzLGwpfXJldHVybiBufSxwYXJzZUNoYXJTdHJpbmc6ZnVuY3Rpb24ocixhLGksbyl7aWYoIWF8fHIuY2FsbERlcHRoPjEwKXJldHVybiExO2Zvcih2YXIgcz1yLnN0YWNrU2l6ZSxsPXIuc3RhY2ssYz1hLmxlbmd0aCx1PTA7dTxjOyl7dmFyIGY9YVt1KytdLGg9bnVsbDtpZigxMj09PWYpe3ZhciBkPWFbdSsrXTswPT09ZD8oYVt1LTJdPTEzOSxhW3UtMV09MjIscz0wKTpoPXRbZF19ZWxzZSBpZigyOD09PWYpbFtzXT0oYVt1XTw8MjR8YVt1KzFdPDwxNik+PjE2LHUrPTIscysrO2Vsc2UgaWYoMTQ9PT1mKXtpZihzPj00JiYocy09NCx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpKXJldHVybiByLnNlYWM9bC5zbGljZShzLHMrNCksITE7aD1lW2ZdfWVsc2UgaWYoZj49MzImJmY8PTI0NilsW3NdPWYtMTM5LHMrKztlbHNlIGlmKGY+PTI0NyYmZjw9MjU0KWxbc109ZjwyNTE/KGYtMjQ3PDw4KSthW3VdKzEwODotKGYtMjUxPDw4KS1hW3VdLTEwOCx1KysscysrO2Vsc2UgaWYoMjU1PT09ZilsW3NdPShhW3VdPDwyNHxhW3UrMV08PDE2fGFbdSsyXTw8OHxhW3UrM10pLzY1NTM2LHUrPTQscysrO2Vsc2UgaWYoMTk9PT1mfHwyMD09PWYpci5oaW50cys9cz4+MSx1Kz1yLmhpbnRzKzc+PjMscyU9MixoPWVbZl07ZWxzZXtpZigxMD09PWZ8fDI5PT09Zil7dmFyIHA7aWYoIShwPTEwPT09Zj9pOm8pKXJldHVybiBoPWVbZl0sKDAsbi53YXJuKSgiTWlzc2luZyBzdWJyc0luZGV4IGZvciAiK2guaWQpLCExO3ZhciBtPTMyNzY4O3AuY291bnQ8MTI0MD9tPTEwNzpwLmNvdW50PDMzOTAwJiYobT0xMTMxKTt2YXIgZz1sWy0tc10rbTtpZihnPDB8fGc+PXAuY291bnR8fGlzTmFOKGcpKXJldHVybiBoPWVbZl0sKDAsbi53YXJuKSgiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yICIraC5pZCksITE7aWYoci5zdGFja1NpemU9cyxyLmNhbGxEZXB0aCsrLCF0aGlzLnBhcnNlQ2hhclN0cmluZyhyLHAuZ2V0KGcpLGksbykpcmV0dXJuITE7ci5jYWxsRGVwdGgtLSxzPXIuc3RhY2tTaXplO2NvbnRpbnVlfWlmKDExPT09ZilyZXR1cm4gci5zdGFja1NpemU9cywhMDtoPWVbZl19aWYoaCl7aWYoaC5zdGVtJiYoci5oaW50cys9cz4+MSwzPT09Znx8MjM9PT1mP3IuaGFzVlN0ZW1zPSEwOiFyLmhhc1ZTdGVtc3x8MSE9PWYmJjE4IT09Znx8KCgwLG4ud2FybikoIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpLGFbdS0xXT0xPT09Zj8zOjIzKSksIm1pbiJpbiBoJiYhci51bmRlZlN0YWNrJiZzPGgubWluKXJldHVybigwLG4ud2FybikoIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIitoLmlkKyI7IGFjdHVhbDogIitzKyIsIGV4cGVjdGVkOiAiK2gubWluKSwhMTtyLmZpcnN0U3RhY2tDbGVhcmluZyYmaC5zdGFja0NsZWFyaW5nJiYoci5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKHMtPWgubWluKT49MiYmaC5zdGVtP3MlPTI6cz4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIikscz4wJiZsW3MtMV0+PTAmJihyLndpZHRoPWxbcy0xXSkpLCJzdGFja0RlbHRhImluIGg/KCJzdGFja0ZuImluIGgmJmguc3RhY2tGbihsLHMpLHMrPWguc3RhY2tEZWx0YSk6aC5zdGFja0NsZWFyaW5nP3M9MDpoLnJlc2V0U3RhY2s/KHM9MCxyLnVuZGVmU3RhY2s9ITEpOmgudW5kZWZTdGFjayYmKHM9MCxyLnVuZGVmU3RhY2s9ITAsci5maXJzdFN0YWNrQ2xlYXJpbmc9ITEpfX1yZXR1cm4gci5zdGFja1NpemU9cywhMH0scGFyc2VDaGFyU3RyaW5nczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGFyU3RyaW5ncyxyPWUubG9jYWxTdWJySW5kZXgsYT1lLmdsb2JhbFN1YnJJbmRleCxpPWUuZmRTZWxlY3Qsbz1lLmZkQXJyYXkscz1lLnByaXZhdGVEaWN0LGw9W10sYz1bXSx1PXQuY291bnQsZj0wO2Y8dTtmKyspe3ZhciBoPXQuZ2V0KGYpLGQ9e2NhbGxEZXB0aDowLHN0YWNrU2l6ZTowLHN0YWNrOltdLHVuZGVmU3RhY2s6ITAsaGludHM6MCxmaXJzdFN0YWNrQ2xlYXJpbmc6ITAsc2VhYzpudWxsLHdpZHRoOm51bGwsaGFzVlN0ZW1zOiExfSxwPSEwLG09bnVsbCxnPXM7aWYoaSYmby5sZW5ndGgpe3ZhciB2PWkuZ2V0RkRJbmRleChmKTstMT09PXYmJigoMCxuLndhcm4pKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpLHA9ITEpLHY+PW8ubGVuZ3RoJiYoKDAsbi53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIikscD0hMSkscCYmKG09KGc9b1t2XS5wcml2YXRlRGljdCkuc3VicnNJbmRleCl9ZWxzZSByJiYobT1yKTtpZihwJiYocD10aGlzLnBhcnNlQ2hhclN0cmluZyhkLGgsbSxhKSksbnVsbCE9PWQud2lkdGgpe3ZhciB5PWcuZ2V0QnlOYW1lKCJub21pbmFsV2lkdGhYIik7Y1tmXT15K2Qud2lkdGh9ZWxzZXt2YXIgYj1nLmdldEJ5TmFtZSgiZGVmYXVsdFdpZHRoWCIpO2NbZl09Yn1udWxsIT09ZC5zZWFjJiYobFtmXT1kLnNlYWMpLHB8fHQuc2V0KGYsbmV3IFVpbnQ4QXJyYXkoWzE0XSkpfXJldHVybntjaGFyU3RyaW5nczp0LHNlYWNzOmwsd2lkdGhzOmN9fSxlbXB0eVByaXZhdGVEaWN0aW9uYXJ5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChwLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fSxwYXJzZVByaXZhdGVEaWN0OmZ1bmN0aW9uKGUpe2lmKGUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt2YXIgdD1lLmdldEJ5TmFtZSgiUHJpdmF0ZSIpO2lmKEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCl7dmFyIHI9dFswXSxuPXRbMV07aWYoMD09PXJ8fG4+PXRoaXMuYnl0ZXMubGVuZ3RoKXRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtlbHNle3ZhciBhPW4rcixpPXRoaXMuYnl0ZXMuc3ViYXJyYXkobixhKSxvPXRoaXMucGFyc2VEaWN0KGkpLHM9dGhpcy5jcmVhdGVEaWN0KHAsbyxlLnN0cmluZ3MpO2lmKGUucHJpdmF0ZURpY3Q9cyxzLmdldEJ5TmFtZSgiU3VicnMiKSl7dmFyIGw9cy5nZXRCeU5hbWUoIlN1YnJzIiksYz1uK2w7aWYoMD09PWx8fGM+PXRoaXMuYnl0ZXMubGVuZ3RoKXRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtlbHNle3ZhciB1PXRoaXMucGFyc2VJbmRleChjKTtzLnN1YnJzSW5kZXg9dS5vYmp9fX19ZWxzZSBlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpfWVsc2UgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpfSxwYXJzZUNoYXJzZXRzOmZ1bmN0aW9uKGUsdCxyLGkpe2lmKDA9PT1lKXJldHVybiBuZXcgZyghMCxtLklTT19BRE9CRSxhLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBnKCEwLG0uRVhQRVJULGEuRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBnKCEwLG0uRVhQRVJUX1NVQlNFVCxhLkV4cGVydFN1YnNldENoYXJzZXQpO3ZhciBvLHMsbCxjPXRoaXMuYnl0ZXMsdT1lLGY9Y1tlKytdLGg9WyIubm90ZGVmIl07c3dpdGNoKHQtPTEsZil7Y2FzZSAwOmZvcihsPTA7bDx0O2wrKylvPWNbZSsrXTw8OHxjW2UrK10saC5wdXNoKGk/bzpyLmdldChvKSk7YnJlYWs7Y2FzZSAxOmZvcig7aC5sZW5ndGg8PXQ7KWZvcihvPWNbZSsrXTw8OHxjW2UrK10scz1jW2UrK10sbD0wO2w8PXM7bCsrKWgucHVzaChpP28rKzpyLmdldChvKyspKTticmVhaztjYXNlIDI6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89Y1tlKytdPDw4fGNbZSsrXSxzPWNbZSsrXTw8OHxjW2UrK10sbD0wO2w8PXM7bCsrKWgucHVzaChpP28rKzpyLmdldChvKyspKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iil9dmFyIGQ9ZSxwPWMuc3ViYXJyYXkodSxkKTtyZXR1cm4gbmV3IGcoITEsZixoLHApfSxwYXJzZUVuY29kaW5nOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBvLHMsbCxjPU9iamVjdC5jcmVhdGUobnVsbCksdT10aGlzLmJ5dGVzLGY9ITEsaD1udWxsO2lmKDA9PT1lfHwxPT09ZSl7Zj0hMCxvPWU7dmFyIGQ9ZT9pLkV4cGVydEVuY29kaW5nOmkuU3RhbmRhcmRFbmNvZGluZztmb3Iocz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIHA9ZC5pbmRleE9mKGFbc10pOy0xIT09cCYmKGNbcF09cyl9fWVsc2V7dmFyIG09ZTtzd2l0Y2goMTI3JihvPXVbZSsrXSkpe2Nhc2UgMDp2YXIgZz11W2UrK107Zm9yKHM9MTtzPD1nO3MrKyljW3VbZSsrXV09czticmVhaztjYXNlIDE6dmFyIHk9dVtlKytdLGI9MTtmb3Iocz0wO3M8eTtzKyspZm9yKHZhciB3PXVbZSsrXSxrPXVbZSsrXSxTPXc7Uzw9dytrO1MrKyljW1NdPWIrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGVuY29kaW5nIGZvcm1hdDogIi5jb25jYXQobywiIGluIENGRiIpKX12YXIgXz1lOzEyOCZvJiYodVttXSY9MTI3LGZ1bmN0aW9uKCl7dmFyIHQ9dVtlKytdO2ZvcihzPTA7czx0O3MrKyl7dmFyIG49dVtlKytdLGk9KHVbZSsrXTw8OCkrKDI1NSZ1W2UrK10pO2Nbbl09YS5pbmRleE9mKHIuZ2V0KGkpKX19KCkpLGg9dS5zdWJhcnJheShtLF8pfXJldHVybiBuZXcgdihmLG8mPTEyNyxjLGgpfSxwYXJzZUZEU2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBsPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGw7KytyKXt2YXIgYz1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09YyYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSxjPTApO2Zvcih2YXIgdT1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPWM7aDxmOysraClvLnB1c2godSl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IHkoaSxvKX19LHJ9KCk7dC5DRkZQYXJzZXI9czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyB1LHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiBlLnByb3RvdHlwZT17ZHVwbGljYXRlRmlyc3RHbHlwaDpmdW5jdGlvbigpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KSgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpO2Vsc2V7dmFyIGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSksdGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX19LGhhc0dseXBoSWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMuY2hhclN0cmluZ3MuY291bnQpJiZ0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19LGV9KCk7dC5DRkY9bDt2YXIgYz1mdW5jdGlvbihlLHQscixuKXt0aGlzLm1ham9yPWUsdGhpcy5taW5vcj10LHRoaXMuaGRyU2l6ZT1yLHRoaXMub2ZmU2l6ZT1ufTt0LkNGRkhlYWRlcj1jO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc3RyaW5ncz1bXX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MzkwP29bZV06ZS0zOTE8PXRoaXMuc3RyaW5ncy5sZW5ndGg/dGhpcy5zdHJpbmdzW2UtMzkxXTpvWzBdfSxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9LGdldCBjb3VudCgpe3JldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RofX0sZX0oKTt0LkNGRlN0cmluZ3M9dTt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9iamVjdHM9W10sdGhpcy5sZW5ndGg9MH1yZXR1cm4gZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5vYmplY3RzLnB1c2goZSl9LHNldDpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX0sZ2V0IGNvdW50KCl7cmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGh9fSxlfSgpO3QuQ0ZGSW5kZXg9Zjt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmtleVRvTmFtZU1hcD1lLmtleVRvTmFtZU1hcCx0aGlzLm5hbWVUb0tleU1hcD1lLm5hbWVUb0tleU1hcCx0aGlzLmRlZmF1bHRzPWUuZGVmYXVsdHMsdGhpcy50eXBlcz1lLnR5cGVzLHRoaXMub3Bjb2Rlcz1lLm9wY29kZXMsdGhpcy5vcmRlcj1lLm9yZGVyLHRoaXMuc3RyaW5ncz10LHRoaXMudmFsdWVzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlPXtzZXRCeUtleTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTxyO2ErKylpZihpc05hTih0W2FdKSlyZXR1cm4oMCxuLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6ICInK3QrJyIgZm9yIGtleSAiJytlKyciLicpLCEwO3ZhciBpPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1pJiYic2lkIiE9PWkmJiJvZmZzZXQiIT09aXx8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH0sc2V0QnlOYW1lOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIicuY29uY2F0KGUsJyInKSk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9LGhhc05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW2VdaW4gdGhpcy52YWx1ZXN9LGdldEJ5TmFtZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19LHJlbW92ZUJ5TmFtZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dfX0sZS5jcmVhdGVUYWJsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119LHI9MCxuPWUubGVuZ3RoO3I8bjsrK3Ipe3ZhciBhPWVbcl0saT1BcnJheS5pc0FycmF5KGFbMF0pPyhhWzBdWzBdPDw4KSthWzBdWzFdOmFbMF07dC5rZXlUb05hbWVNYXBbaV09YVsxXSx0Lm5hbWVUb0tleU1hcFthWzFdXT1pLHQudHlwZXNbaV09YVsyXSx0LmRlZmF1bHRzW2ldPWFbM10sdC5vcGNvZGVzW2ldPUFycmF5LmlzQXJyYXkoYVswXSk/YVswXTpbYVswXV0sdC5vcmRlci5wdXNoKGkpfXJldHVybiB0fSxlfSgpLGQ9ZnVuY3Rpb24oKXt2YXIgZT1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLHQ9bnVsbDtmdW5jdGlvbiByKHIpe251bGw9PT10JiYodD1oLmNyZWF0ZVRhYmxlcyhlKSksaC5jYWxsKHRoaXMsdCxyKSx0aGlzLnByaXZhdGVEaWN0PW51bGx9cmV0dXJuIHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLHJ9KCk7dC5DRkZUb3BEaWN0PWQ7dmFyIHA9ZnVuY3Rpb24oKXt2YXIgZT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dLHQ9bnVsbDtmdW5jdGlvbiByKHIpe251bGw9PT10JiYodD1oLmNyZWF0ZVRhYmxlcyhlKSksaC5jYWxsKHRoaXMsdCxyKSx0aGlzLnN1YnJzSW5kZXg9bnVsbH1yZXR1cm4gci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSkscn0oKTt0LkNGRlByaXZhdGVEaWN0PXA7dmFyIG09e0lTT19BRE9CRTowLEVYUEVSVDoxLEVYUEVSVF9TVUJTRVQ6Mn0sZz1mdW5jdGlvbihlLHQscixuKXt0aGlzLnByZWRlZmluZWQ9ZSx0aGlzLmZvcm1hdD10LHRoaXMuY2hhcnNldD1yLHRoaXMucmF3PW59O3QuQ0ZGQ2hhcnNldD1nO3ZhciB2PWZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMucHJlZGVmaW5lZD1lLHRoaXMuZm9ybWF0PXQsdGhpcy5lbmNvZGluZz1yLHRoaXMucmF3PW59LHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5mb3JtYXQ9ZSx0aGlzLmZkU2VsZWN0PXR9cmV0dXJuIGUucHJvdG90eXBlPXtnZXRGREluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fSxlfSgpO3QuQ0ZGRkRTZWxlY3Q9eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9mZnNldHM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGU9e2lzVHJhY2tpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfSx0cmFjazpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH0sb2Zmc2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfSxzZXRFbnRyeUxvY2F0aW9uOmZ1bmN0aW9uKGUsdCxyKXtpZighKGUgaW4gdGhpcy5vZmZzZXRzKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTtmb3IodmFyIGE9ci5kYXRhLGk9dGhpcy5vZmZzZXRzW2VdLG89MCxzPXQubGVuZ3RoO288czsrK28pe3ZhciBsPTUqbytpLGM9bCsxLHU9bCsyLGY9bCszLGg9bCs0O2lmKDI5IT09YVtsXXx8MCE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtmXXx8MCE9PWFbaF0pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Iik7dmFyIGQ9dFtvXTthW2xdPTI5LGFbY109ZD4+MjQmMjU1LGFbdV09ZD4+MTYmMjU1LGFbZl09ZD4+OCYyNTUsYVtoXT0yNTUmZH19fSxlfSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuY2ZmPWV9cmV0dXJuIGUucHJvdG90eXBlPXtjb21waWxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7Zm9yKHZhciBvPTAscz1lLmZkQXJyYXkubGVuZ3RoO288cztvKyspe3ZhciBsPWUuZmRBcnJheVtvXSxjPWkuc2xpY2UoMCk7bC5oYXNOYW1lKCJGb250TWF0cml4IikmJihjPW4uVXRpbC50cmFuc2Zvcm0oYyxsLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSksbC5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGMpfX1lLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgdT10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQodS5vdXRwdXQpO3ZhciBmPXUudHJhY2tlcnNbMF0saD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQoaCk7dmFyIGQ9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGQpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClmLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHA9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7Zi5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZChwKX12YXIgbT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCk7Zi5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKG0pO3ZhciBnPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGYuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQoZyksZS5pc0NJREZvbnQpe2Yuc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIHY9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQodiksdT10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGYuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZCh1Lm91dHB1dCk7dmFyIHk9dS50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHksdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZl0sdCksdC5hZGQoWzBdKSx0LmRhdGF9LGVuY29kZU51bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VGbG9hdChlKSE9PXBhcnNlSW50KGUsMTApfHxpc05hTihlKT90aGlzLmVuY29kZUZsb2F0KGUpOnRoaXMuZW5jb2RlSW50ZWdlcihlKX0sZW5jb2RlRmxvYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLHI9L1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8uZXhlYyh0KTtpZihyKXt2YXIgbj1wYXJzZUZsb2F0KCIxZSIrKChyWzJdPytyWzJdOjApK3JbMV0ubGVuZ3RoKSk7dD0oTWF0aC5yb3VuZChlKm4pL24pLnRvU3RyaW5nKCl9dmFyIGEsaSxvPSIiO2ZvcihhPTAsaT10Lmxlbmd0aDthPGk7KythKXt2YXIgcz10W2FdO28rPSJlIj09PXM/Ii0iPT09dFsrK2FdPyJjIjoiYiI6Ii4iPT09cz8iYSI6Ii0iPT09cz8iZSI6c312YXIgbD1bMzBdO2ZvcihhPTAsaT0obys9MSZvLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2E8aTthKz0yKWwucHVzaChwYXJzZUludChvLnN1YnN0cmluZyhhLGErMiksMTYpKTtyZXR1cm4gbH0sZW5jb2RlSW50ZWdlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTEwNyYmZTw9MTA3P1tlKzEzOV06ZT49MTA4JiZlPD0xMTMxP1syNDcrKChlLT0xMDgpPj44KSwyNTUmZV06ZT49LTExMzEmJmU8PS0xMDg/WzI1MSsoKGU9LWUtMTA4KT4+OCksMjU1JmVdOmU+PS0zMjc2OCYmZTw9MzI3Njc/WzI4LGU+PjgmMjU1LDI1NSZlXTpbMjksZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV19LGNvbXBpbGVIZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuW2UubWFqb3IsZS5taW5vcixlLmhkclNpemUsZS5vZmZTaXplXX0sY29tcGlsZU5hbWVJbmRleDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IGYscj0wLGE9ZS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBpPWVbcl0sbz1NYXRoLm1pbihpLmxlbmd0aCwxMjcpLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87bCsrKXt2YXIgYz1pW2xdOyhjPCIhInx8Yz4ifiJ8fCJbIj09PWN8fCJdIj09PWN8fCIoIj09PWN8fCIpIj09PWN8fCJ7Ij09PWN8fCJ9Ij09PWN8fCI8Ij09PWN8fCI+Ij09PWN8fCIvIj09PWN8fCIlIj09PWMpJiYoYz0iXyIpLHNbbF09Y30iIj09PShzPXMuam9pbigiIikpJiYocz0iQmFkX0ZvbnRfTmFtZSIpLHQuYWRkKCgwLG4uc3RyaW5nVG9CeXRlcykocykpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX0sY29tcGlsZVRvcERpY3RzOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49W10sYT1uZXcgZixpPTAsbz1lLmxlbmd0aDtpPG87KytpKXt2YXIgcz1lW2ldO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGw9bmV3IGIsYz10aGlzLmNvbXBpbGVEaWN0KHMsbCk7bi5wdXNoKGwpLGEuYWRkKGMpLGwub2Zmc2V0KHQpfXJldHVybnt0cmFja2VyczpuLG91dHB1dDphPXRoaXMuY29tcGlsZUluZGV4KGEsbil9fSxjb21waWxlUHJpdmF0ZURpY3RzOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGw9bmV3IGIsYz10aGlzLmNvbXBpbGVEaWN0KHMsbCksdT1yLmxlbmd0aDtpZihsLm9mZnNldCh1KSxjLmxlbmd0aHx8KHU9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbYy5sZW5ndGgsdV0sciksci5hZGQoYykscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7bC5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW2MubGVuZ3RoXSxyKSxyLmFkZChmKX19fSxjb21waWxlRGljdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxhPWUub3JkZXIsaT0wO2k8YS5sZW5ndGg7KytpKXt2YXIgbz1hW2ldO2lmKG8gaW4gZS52YWx1ZXMpe3ZhciBzPWUudmFsdWVzW29dLGw9ZS50eXBlc1tvXTtpZihBcnJheS5pc0FycmF5KGwpfHwobD1bbF0pLEFycmF5LmlzQXJyYXkocyl8fChzPVtzXSksMCE9PXMubGVuZ3RoKXtmb3IodmFyIGM9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpe3ZhciBmPWxbY10saD1zW2NdO3N3aXRjaChmKXtjYXNlIm51bSI6Y2FzZSJzaWQiOnI9ci5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIoaCkpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijp2YXIgZD1lLmtleVRvTmFtZU1hcFtvXTt0LmlzVHJhY2tpbmcoZCl8fHQudHJhY2soZCxyLmxlbmd0aCkscj1yLmNvbmNhdChbMjksMCwwLDAsMF0pO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2UiZGVsdGEiOnI9ci5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIoaCkpO2Zvcih2YXIgcD0xLG09cy5sZW5ndGg7cDxtOysrcClyPXIuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHNbcF0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChmKSl9fXI9ci5jb25jYXQoZS5vcGNvZGVzW29dKX19fXJldHVybiByfSxjb21waWxlU3RyaW5nSW5kZXg6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBmLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpdC5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShlW3JdKSk7cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfSxjb21waWxlR2xvYmFsU3VickluZGV4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O3RoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGUpKX0sY29tcGlsZUNoYXJTdHJpbmdzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgZixyPTA7cjxlLmNvdW50O3IrKyl7dmFyIG49ZS5nZXQocik7MCE9PW4ubGVuZ3RoP3QuYWRkKG4pOnQuYWRkKG5ldyBVaW50OEFycmF5KFsxMzksMTRdKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfSxjb21waWxlQ2hhcnNldDpmdW5jdGlvbihlKXt2YXIgdD0xKzIqKHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50LTEpLHI9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkocil9LGNvbXBpbGVFbmNvZGluZzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9LGNvbXBpbGVGRFNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS5mb3JtYXQ7c3dpdGNoKG4pe2Nhc2UgMDpmb3IoKHQ9bmV3IFVpbnQ4QXJyYXkoMStlLmZkU2VsZWN0Lmxlbmd0aCkpWzBdPW4scj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXRbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzp2YXIgYT1lLmZkU2VsZWN0WzBdLGk9W24sMCwwLDAsMCxhXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXt2YXIgbz1lLmZkU2VsZWN0W3JdO28hPT1hJiYoaS5wdXNoKHI+PjgmMjU1LDI1NSZyLG8pLGE9byl9dmFyIHM9KGkubGVuZ3RoLTMpLzM7aVsxXT1zPj44JjI1NSxpWzJdPTI1NSZzLGkucHVzaChyPj44JjI1NSwyNTUmciksdD1uZXcgVWludDhBcnJheShpKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheSh0KX0sY29tcGlsZVR5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpdFtyXT1lW3JdO3JldHVybiB0fSxjb21waWxlSW5kZXg6ZnVuY3Rpb24oZSx0KXt0PXR8fFtdO3ZhciByPWUub2JqZWN0cyxuPXIubGVuZ3RoO2lmKDA9PT1uKXJldHVyblswLDAsMF07dmFyIGEsaSxvPVtuPj44JjI1NSwyNTUmbl0scz0xO2ZvcihhPTA7YTxuOysrYSlzKz1yW2FdLmxlbmd0aDtpPXM8MjU2PzE6czw2NTUzNj8yOnM8MTY3NzcyMTY/Mzo0LG8ucHVzaChpKTt2YXIgbD0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP28ucHVzaCgyNTUmbCk6Mj09PWk/by5wdXNoKGw+PjgmMjU1LDI1NSZsKTozPT09aT9vLnB1c2gobD4+MTYmMjU1LGw+PjgmMjU1LDI1NSZsKTpvLnB1c2gobD4+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwpLHJbYV0mJihsKz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXt0W2FdJiZ0W2FdLm9mZnNldChvLmxlbmd0aCk7Zm9yKHZhciBjPTAsdT1yW2FdLmxlbmd0aDtjPHU7YysrKW8ucHVzaChyW2FdW2NdKX1yZXR1cm4gb319LGV9KCk7dC5DRkZDb21waWxlcj13fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXQuSVNPQWRvYmVDaGFyc2V0PXZvaWQgMCx0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdLHQuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXSx0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBvO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIGk7Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIGw7Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHQuRXhwZXJ0RW5jb2Rpbmc9dC5aYXBmRGluZ2JhdHNFbmNvZGluZz10LlN5bWJvbFNldEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dm9pZCAwO3ZhciBuPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiIiwiIiwiIiwiaXN1cGVyaW9yIiwiIiwiIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwiIiwiIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIiIsIkRvdGFjY2VudHNtYWxsIiwiIiwiIiwiTWFjcm9uc21hbGwiLCIiLCIiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCIiLCIiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl07dC5FeHBlcnRFbmNvZGluZz1uO3ZhciBhPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiY2VudG9sZHN0eWxlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsIiIsInRocmVlcXVhcnRlcnNlbWRhc2giLCIiLCJxdWVzdGlvbnNtYWxsIiwiIiwiIiwiIiwiIiwiRXRoc21hbGwiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiIiwiIiwiIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5pbmZlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsImFzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIkFhY3V0ZXNtYWxsIiwiQWdyYXZlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBdGlsZGVzbWFsbCIsIkFyaW5nc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWdyYXZlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPdGlsZGVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWdyYXZlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCIiLCJlaWdodHN1cGVyaW9yIiwiZm91cmluZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJTY2Fyb25zbWFsbCIsIiIsImNlbnRpbmZlcmlvciIsInR3b2luZmVyaW9yIiwiIiwiRGllcmVzaXNzbWFsbCIsIiIsIkNhcm9uc21hbGwiLCJvc3VwZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCIiLCJjb21tYWluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJZYWN1dGVzbWFsbCIsIiIsImRvbGxhcmluZmVyaW9yIiwiIiwiIiwiVGhvcm5zbWFsbCIsIiIsIm5pbmVpbmZlcmlvciIsInplcm9pbmZlcmlvciIsIlpjYXJvbnNtYWxsIiwiQUVzbWFsbCIsIk9zbGFzaHNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVpbmZlcmlvciIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiT0VzbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5zdXBlcmlvciIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsIiIsIllkaWVyZXNpc3NtYWxsIiwiIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvc3VwZXJpb3IiLCIiLCJlc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCIiLCJpc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJkc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCIiLCJsc3VwZXJpb3IiLCJPZ29uZWtzbWFsbCIsIkJyZXZlc21hbGwiLCJNYWNyb25zbWFsbCIsImJzdXBlcmlvciIsIm5zdXBlcmlvciIsIm1zdXBlcmlvciIsImNvbW1hc3VwZXJpb3IiLCJwZXJpb2RzdXBlcmlvciIsIkRvdGFjY2VudHNtYWxsIiwiUmluZ3NtYWxsIiwiIiwiIiwiIiwiIl0saT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwic3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiJdO3QuTWFjUm9tYW5FbmNvZGluZz1pO3ZhciBvPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9bzt2YXIgcz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJidWxsZXQiLCJFdXJvIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJmbG9yaW4iLCJxdW90ZWRibGJhc2UiLCJlbGxpcHNpcyIsImRhZ2dlciIsImRhZ2dlcmRibCIsImNpcmN1bWZsZXgiLCJwZXJ0aG91c2FuZCIsIlNjYXJvbiIsImd1aWxzaW5nbGxlZnQiLCJPRSIsImJ1bGxldCIsIlpjYXJvbiIsImJ1bGxldCIsImJ1bGxldCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwiYnVsbGV0IiwiZW5kYXNoIiwiZW1kYXNoIiwidGlsZGUiLCJ0cmFkZW1hcmsiLCJzY2Fyb24iLCJndWlsc2luZ2xyaWdodCIsIm9lIiwiYnVsbGV0IiwiemNhcm9uIiwiWWRpZXJlc2lzIiwic3BhY2UiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiY3VycmVuY3kiLCJ5ZW4iLCJicm9rZW5iYXIiLCJzZWN0aW9uIiwiZGllcmVzaXMiLCJjb3B5cmlnaHQiLCJvcmRmZW1pbmluZSIsImd1aWxsZW1vdGxlZnQiLCJsb2dpY2Fsbm90IiwiaHlwaGVuIiwicmVnaXN0ZXJlZCIsIm1hY3JvbiIsImRlZ3JlZSIsInBsdXNtaW51cyIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImFjdXRlIiwibXUiLCJwYXJhZ3JhcGgiLCJwZXJpb2RjZW50ZXJlZCIsImNlZGlsbGEiLCJvbmVzdXBlcmlvciIsIm9yZG1hc2N1bGluZSIsImd1aWxsZW1vdHJpZ2h0Iiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkFFIiwiQ2NlZGlsbGEiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiRXRoIiwiTnRpbGRlIiwiT2dyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPdGlsZGUiLCJPZGllcmVzaXMiLCJtdWx0aXBseSIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiWWFjdXRlIiwiVGhvcm4iLCJnZXJtYW5kYmxzIiwiYWdyYXZlIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhdGlsZGUiLCJhZGllcmVzaXMiLCJhcmluZyIsImFlIiwiY2NlZGlsbGEiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvdGlsZGUiLCJvZGllcmVzaXMiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInlhY3V0ZSIsInRob3JuIiwieWRpZXJlc2lzIl07dC5XaW5BbnNpRW5jb2Rpbmc9czt2YXIgbD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwidW5pdmVyc2FsIiwibnVtYmVyc2lnbiIsImV4aXN0ZW50aWFsIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInN1Y2h0aGF0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrbWF0aCIsInBsdXMiLCJjb21tYSIsIm1pbnVzIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJjb25ncnVlbnQiLCJBbHBoYSIsIkJldGEiLCJDaGkiLCJEZWx0YSIsIkVwc2lsb24iLCJQaGkiLCJHYW1tYSIsIkV0YSIsIklvdGEiLCJ0aGV0YTEiLCJLYXBwYSIsIkxhbWJkYSIsIk11IiwiTnUiLCJPbWljcm9uIiwiUGkiLCJUaGV0YSIsIlJobyIsIlNpZ21hIiwiVGF1IiwiVXBzaWxvbiIsInNpZ21hMSIsIk9tZWdhIiwiWGkiLCJQc2kiLCJaZXRhIiwiYnJhY2tldGxlZnQiLCJ0aGVyZWZvcmUiLCJicmFja2V0cmlnaHQiLCJwZXJwZW5kaWN1bGFyIiwidW5kZXJzY29yZSIsInJhZGljYWxleCIsImFscGhhIiwiYmV0YSIsImNoaSIsImRlbHRhIiwiZXBzaWxvbiIsInBoaSIsImdhbW1hIiwiZXRhIiwiaW90YSIsInBoaTEiLCJrYXBwYSIsImxhbWJkYSIsIm11IiwibnUiLCJvbWljcm9uIiwicGkiLCJ0aGV0YSIsInJobyIsInNpZ21hIiwidGF1IiwidXBzaWxvbiIsIm9tZWdhMSIsIm9tZWdhIiwieGkiLCJwc2kiLCJ6ZXRhIiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsInNpbWlsYXIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJFdXJvIiwiVXBzaWxvbjEiLCJtaW51dGUiLCJsZXNzZXF1YWwiLCJmcmFjdGlvbiIsImluZmluaXR5IiwiZmxvcmluIiwiY2x1YiIsImRpYW1vbmQiLCJoZWFydCIsInNwYWRlIiwiYXJyb3dib3RoIiwiYXJyb3dsZWZ0IiwiYXJyb3d1cCIsImFycm93cmlnaHQiLCJhcnJvd2Rvd24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJzZWNvbmQiLCJncmVhdGVyZXF1YWwiLCJtdWx0aXBseSIsInByb3BvcnRpb25hbCIsInBhcnRpYWxkaWZmIiwiYnVsbGV0IiwiZGl2aWRlIiwibm90ZXF1YWwiLCJlcXVpdmFsZW5jZSIsImFwcHJveGVxdWFsIiwiZWxsaXBzaXMiLCJhcnJvd3ZlcnRleCIsImFycm93aG9yaXpleCIsImNhcnJpYWdlcmV0dXJuIiwiYWxlcGgiLCJJZnJha3R1ciIsIlJmcmFrdHVyIiwid2VpZXJzdHJhc3MiLCJjaXJjbGVtdWx0aXBseSIsImNpcmNsZXBsdXMiLCJlbXB0eXNldCIsImludGVyc2VjdGlvbiIsInVuaW9uIiwicHJvcGVyc3VwZXJzZXQiLCJyZWZsZXhzdXBlcnNldCIsIm5vdHN1YnNldCIsInByb3BlcnN1YnNldCIsInJlZmxleHN1YnNldCIsImVsZW1lbnQiLCJub3RlbGVtZW50IiwiYW5nbGUiLCJncmFkaWVudCIsInJlZ2lzdGVyc2VyaWYiLCJjb3B5cmlnaHRzZXJpZiIsInRyYWRlbWFya3NlcmlmIiwicHJvZHVjdCIsInJhZGljYWwiLCJkb3RtYXRoIiwibG9naWNhbG5vdCIsImxvZ2ljYWxhbmQiLCJsb2dpY2Fsb3IiLCJhcnJvd2RibGJvdGgiLCJhcnJvd2RibGxlZnQiLCJhcnJvd2RibHVwIiwiYXJyb3dkYmxyaWdodCIsImFycm93ZGJsZG93biIsImxvemVuZ2UiLCJhbmdsZWxlZnQiLCJyZWdpc3RlcnNhbnMiLCJjb3B5cmlnaHRzYW5zIiwidHJhZGVtYXJrc2FucyIsInN1bW1hdGlvbiIsInBhcmVubGVmdHRwIiwicGFyZW5sZWZ0ZXgiLCJwYXJlbmxlZnRidCIsImJyYWNrZXRsZWZ0dHAiLCJicmFja2V0bGVmdGV4IiwiYnJhY2tldGxlZnRidCIsImJyYWNlbGVmdHRwIiwiYnJhY2VsZWZ0bWlkIiwiYnJhY2VsZWZ0YnQiLCJicmFjZWV4IiwiIiwiYW5nbGVyaWdodCIsImludGVncmFsIiwiaW50ZWdyYWx0cCIsImludGVncmFsZXgiLCJpbnRlZ3JhbGJ0IiwicGFyZW5yaWdodHRwIiwicGFyZW5yaWdodGV4IiwicGFyZW5yaWdodGJ0IiwiYnJhY2tldHJpZ2h0dHAiLCJicmFja2V0cmlnaHRleCIsImJyYWNrZXRyaWdodGJ0IiwiYnJhY2VyaWdodHRwIiwiYnJhY2VyaWdodG1pZCIsImJyYWNlcmlnaHRidCIsIiJdO3QuU3ltYm9sU2V0RW5jb2Rpbmc9bDt2YXIgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNikuZ2V0TG9va3VwVGFibGVGYWN0b3J5LGE9bigoZnVuY3Rpb24oZSl7ZS5BPTY1LGUuQUU9MTk4LGUuQUVhY3V0ZT01MDgsZS5BRW1hY3Jvbj00ODIsZS5BRXNtYWxsPTYzNDYyLGUuQWFjdXRlPTE5MyxlLkFhY3V0ZXNtYWxsPTYzNDU3LGUuQWJyZXZlPTI1OCxlLkFicmV2ZWFjdXRlPTc4NTQsZS5BYnJldmVjeXJpbGxpYz0xMjMyLGUuQWJyZXZlZG90YmVsb3c9Nzg2MixlLkFicmV2ZWdyYXZlPTc4NTYsZS5BYnJldmVob29rYWJvdmU9Nzg1OCxlLkFicmV2ZXRpbGRlPTc4NjAsZS5BY2Fyb249NDYxLGUuQWNpcmNsZT05Mzk4LGUuQWNpcmN1bWZsZXg9MTk0LGUuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0LGUuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyLGUuQWNpcmN1bWZsZXhncmF2ZT03ODQ2LGUuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0OCxlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTgsZS5BY2lyY3VtZmxleHRpbGRlPTc4NTAsZS5BY3V0ZT02MzE3NyxlLkFjdXRlc21hbGw9NjM0MTIsZS5BY3lyaWxsaWM9MTA0MCxlLkFkYmxncmF2ZT01MTIsZS5BZGllcmVzaXM9MTk2LGUuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNCxlLkFkaWVyZXNpc21hY3Jvbj00NzgsZS5BZGllcmVzaXNzbWFsbD02MzQ2MCxlLkFkb3RiZWxvdz03ODQwLGUuQWRvdG1hY3Jvbj00ODAsZS5BZ3JhdmU9MTkyLGUuQWdyYXZlc21hbGw9NjM0NTYsZS5BaG9va2Fib3ZlPTc4NDIsZS5BaWVjeXJpbGxpYz0xMjM2LGUuQWludmVydGVkYnJldmU9NTE0LGUuQWxwaGE9OTEzLGUuQWxwaGF0b25vcz05MDIsZS5BbWFjcm9uPTI1NixlLkFtb25vc3BhY2U9NjUzMTMsZS5Bb2dvbmVrPTI2MCxlLkFyaW5nPTE5NyxlLkFyaW5nYWN1dGU9NTA2LGUuQXJpbmdiZWxvdz03NjgwLGUuQXJpbmdzbWFsbD02MzQ2MSxlLkFzbWFsbD02MzMyOSxlLkF0aWxkZT0xOTUsZS5BdGlsZGVzbWFsbD02MzQ1OSxlLkF5YmFybWVuaWFuPTEzMjksZS5CPTY2LGUuQmNpcmNsZT05Mzk5LGUuQmRvdGFjY2VudD03NjgyLGUuQmRvdGJlbG93PTc2ODQsZS5CZWN5cmlsbGljPTEwNDEsZS5CZW5hcm1lbmlhbj0xMzMwLGUuQmV0YT05MTQsZS5CaG9vaz0zODUsZS5CbGluZWJlbG93PTc2ODYsZS5CbW9ub3NwYWNlPTY1MzE0LGUuQnJldmVzbWFsbD02MzIyMCxlLkJzbWFsbD02MzMzMCxlLkJ0b3BiYXI9Mzg2LGUuQz02NyxlLkNhYXJtZW5pYW49MTM0MixlLkNhY3V0ZT0yNjIsZS5DYXJvbj02MzE3OCxlLkNhcm9uc21hbGw9NjMyMjEsZS5DY2Fyb249MjY4LGUuQ2NlZGlsbGE9MTk5LGUuQ2NlZGlsbGFhY3V0ZT03Njg4LGUuQ2NlZGlsbGFzbWFsbD02MzQ2MyxlLkNjaXJjbGU9OTQwMCxlLkNjaXJjdW1mbGV4PTI2NCxlLkNkb3Q9MjY2LGUuQ2RvdGFjY2VudD0yNjYsZS5DZWRpbGxhc21hbGw9NjM0MTYsZS5DaGFhcm1lbmlhbj0xMzUzLGUuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMixlLkNoZWN5cmlsbGljPTEwNjMsZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0LGUuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNixlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2OCxlLkNoZWhhcm1lbmlhbj0xMzQ3LGUuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjcsZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDgsZS5DaGk9OTM1LGUuQ2hvb2s9MzkxLGUuQ2lyY3VtZmxleHNtYWxsPTYzMjIyLGUuQ21vbm9zcGFjZT02NTMxNSxlLkNvYXJtZW5pYW49MTM2MSxlLkNzbWFsbD02MzMzMSxlLkQ9NjgsZS5EWj00OTcsZS5EWmNhcm9uPTQ1MixlLkRhYXJtZW5pYW49MTMzMixlLkRhZnJpY2FuPTM5MyxlLkRjYXJvbj0yNzAsZS5EY2VkaWxsYT03Njk2LGUuRGNpcmNsZT05NDAxLGUuRGNpcmN1bWZsZXhiZWxvdz03Njk4LGUuRGNyb2F0PTI3MixlLkRkb3RhY2NlbnQ9NzY5MCxlLkRkb3RiZWxvdz03NjkyLGUuRGVjeXJpbGxpYz0xMDQ0LGUuRGVpY29wdGljPTEwMDYsZS5EZWx0YT04NzEwLGUuRGVsdGFncmVlaz05MTYsZS5EaG9vaz0zOTQsZS5EaWVyZXNpcz02MzE3OSxlLkRpZXJlc2lzQWN1dGU9NjMxODAsZS5EaWVyZXNpc0dyYXZlPTYzMTgxLGUuRGllcmVzaXNzbWFsbD02MzQwMCxlLkRpZ2FtbWFncmVlaz05ODgsZS5EamVjeXJpbGxpYz0xMDI2LGUuRGxpbmViZWxvdz03Njk0LGUuRG1vbm9zcGFjZT02NTMxNixlLkRvdGFjY2VudHNtYWxsPTYzMjIzLGUuRHNsYXNoPTI3MixlLkRzbWFsbD02MzMzMixlLkR0b3BiYXI9Mzk1LGUuRHo9NDk4LGUuRHpjYXJvbj00NTMsZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4LGUuRHplY3lyaWxsaWM9MTAyOSxlLkR6aGVjeXJpbGxpYz0xMDM5LGUuRT02OSxlLkVhY3V0ZT0yMDEsZS5FYWN1dGVzbWFsbD02MzQ2NSxlLkVicmV2ZT0yNzYsZS5FY2Fyb249MjgyLGUuRWNlZGlsbGFicmV2ZT03NzA4LGUuRWNoYXJtZW5pYW49MTMzMyxlLkVjaXJjbGU9OTQwMixlLkVjaXJjdW1mbGV4PTIwMixlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MCxlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNCxlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3OCxlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MixlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQsZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2LGUuRWNpcmN1bWZsZXh0aWxkZT03ODc2LGUuRWN5cmlsbGljPTEwMjgsZS5FZGJsZ3JhdmU9NTE2LGUuRWRpZXJlc2lzPTIwMyxlLkVkaWVyZXNpc3NtYWxsPTYzNDY3LGUuRWRvdD0yNzgsZS5FZG90YWNjZW50PTI3OCxlLkVkb3RiZWxvdz03ODY0LGUuRWZjeXJpbGxpYz0xMDYwLGUuRWdyYXZlPTIwMCxlLkVncmF2ZXNtYWxsPTYzNDY0LGUuRWhhcm1lbmlhbj0xMzM1LGUuRWhvb2thYm92ZT03ODY2LGUuRWlnaHRyb21hbj04NTUxLGUuRWludmVydGVkYnJldmU9NTE4LGUuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNCxlLkVsY3lyaWxsaWM9MTA1MSxlLkVsZXZlbnJvbWFuPTg1NTQsZS5FbWFjcm9uPTI3NCxlLkVtYWNyb25hY3V0ZT03NzAyLGUuRW1hY3JvbmdyYXZlPTc3MDAsZS5FbWN5cmlsbGljPTEwNTIsZS5FbW9ub3NwYWNlPTY1MzE3LGUuRW5jeXJpbGxpYz0xMDUzLGUuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2LGUuRW5nPTMzMCxlLkVuZ2hlY3lyaWxsaWM9MTE4OCxlLkVuaG9va2N5cmlsbGljPTEyMjMsZS5Fb2dvbmVrPTI4MCxlLkVvcGVuPTQwMCxlLkVwc2lsb249OTE3LGUuRXBzaWxvbnRvbm9zPTkwNCxlLkVyY3lyaWxsaWM9MTA1NixlLkVyZXZlcnNlZD0zOTgsZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5LGUuRXNjeXJpbGxpYz0xMDU3LGUuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0LGUuRXNoPTQyNSxlLkVzbWFsbD02MzMzMyxlLkV0YT05MTksZS5FdGFybWVuaWFuPTEzMzYsZS5FdGF0b25vcz05MDUsZS5FdGg9MjA4LGUuRXRoc21hbGw9NjM0NzIsZS5FdGlsZGU9Nzg2OCxlLkV0aWxkZWJlbG93PTc3MDYsZS5FdXJvPTgzNjQsZS5Femg9NDM5LGUuRXpoY2Fyb249NDk0LGUuRXpocmV2ZXJzZWQ9NDQwLGUuRj03MCxlLkZjaXJjbGU9OTQwMyxlLkZkb3RhY2NlbnQ9NzcxMCxlLkZlaGFybWVuaWFuPTEzNjYsZS5GZWljb3B0aWM9OTk2LGUuRmhvb2s9NDAxLGUuRml0YWN5cmlsbGljPTExMzgsZS5GaXZlcm9tYW49ODU0OCxlLkZtb25vc3BhY2U9NjUzMTgsZS5Gb3Vycm9tYW49ODU0NyxlLkZzbWFsbD02MzMzNCxlLkc9NzEsZS5HQnNxdWFyZT0xMzE5MSxlLkdhY3V0ZT01MDAsZS5HYW1tYT05MTUsZS5HYW1tYWFmcmljYW49NDA0LGUuR2FuZ2lhY29wdGljPTEwMDIsZS5HYnJldmU9Mjg2LGUuR2Nhcm9uPTQ4NixlLkdjZWRpbGxhPTI5MCxlLkdjaXJjbGU9OTQwNCxlLkdjaXJjdW1mbGV4PTI4NCxlLkdjb21tYWFjY2VudD0yOTAsZS5HZG90PTI4OCxlLkdkb3RhY2NlbnQ9Mjg4LGUuR2VjeXJpbGxpYz0xMDQzLGUuR2hhZGFybWVuaWFuPTEzNDYsZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MixlLkdoZXN0cm9rZWN5cmlsbGljPTExNzAsZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4LGUuR2hvb2s9NDAzLGUuR2ltYXJtZW5pYW49MTMzMSxlLkdqZWN5cmlsbGljPTEwMjcsZS5HbWFjcm9uPTc3MTIsZS5HbW9ub3NwYWNlPTY1MzE5LGUuR3JhdmU9NjMxODIsZS5HcmF2ZXNtYWxsPTYzMzI4LGUuR3NtYWxsPTYzMzM1LGUuR3NtYWxsaG9vaz02NjcsZS5Hc3Ryb2tlPTQ4NCxlLkg9NzIsZS5IMTg1MzM9OTY3OSxlLkgxODU0Mz05NjQyLGUuSDE4NTUxPTk2NDMsZS5IMjIwNzM9OTYzMyxlLkhQc3F1YXJlPTEzMjU5LGUuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyLGUuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyLGUuSGFyZHNpZ25jeXJpbGxpYz0xMDY2LGUuSGJhcj0yOTQsZS5IYnJldmViZWxvdz03NzIyLGUuSGNlZGlsbGE9NzcyMCxlLkhjaXJjbGU9OTQwNSxlLkhjaXJjdW1mbGV4PTI5MixlLkhkaWVyZXNpcz03NzE4LGUuSGRvdGFjY2VudD03NzE0LGUuSGRvdGJlbG93PTc3MTYsZS5IbW9ub3NwYWNlPTY1MzIwLGUuSG9hcm1lbmlhbj0xMzQ0LGUuSG9yaWNvcHRpYz0xZTMsZS5Ic21hbGw9NjMzMzYsZS5IdW5nYXJ1bWxhdXQ9NjMxODMsZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNCxlLkh6c3F1YXJlPTEzMjAwLGUuST03MyxlLklBY3lyaWxsaWM9MTA3MSxlLklKPTMwNixlLklVY3lyaWxsaWM9MTA3MCxlLklhY3V0ZT0yMDUsZS5JYWN1dGVzbWFsbD02MzQ2OSxlLklicmV2ZT0zMDAsZS5JY2Fyb249NDYzLGUuSWNpcmNsZT05NDA2LGUuSWNpcmN1bWZsZXg9MjA2LGUuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MCxlLkljeXJpbGxpYz0xMDMwLGUuSWRibGdyYXZlPTUyMCxlLklkaWVyZXNpcz0yMDcsZS5JZGllcmVzaXNhY3V0ZT03NzI2LGUuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MixlLklkaWVyZXNpc3NtYWxsPTYzNDcxLGUuSWRvdD0zMDQsZS5JZG90YWNjZW50PTMwNCxlLklkb3RiZWxvdz03ODgyLGUuSWVicmV2ZWN5cmlsbGljPTEyMzgsZS5JZWN5cmlsbGljPTEwNDUsZS5JZnJha3R1cj04NDY1LGUuSWdyYXZlPTIwNCxlLklncmF2ZXNtYWxsPTYzNDY4LGUuSWhvb2thYm92ZT03ODgwLGUuSWljeXJpbGxpYz0xMDQ4LGUuSWludmVydGVkYnJldmU9NTIyLGUuSWlzaG9ydGN5cmlsbGljPTEwNDksZS5JbWFjcm9uPTI5OCxlLkltYWNyb25jeXJpbGxpYz0xMjUwLGUuSW1vbm9zcGFjZT02NTMyMSxlLkluaWFybWVuaWFuPTEzMzksZS5Jb2N5cmlsbGljPTEwMjUsZS5Jb2dvbmVrPTMwMixlLklvdGE9OTIxLGUuSW90YWFmcmljYW49NDA2LGUuSW90YWRpZXJlc2lzPTkzOCxlLklvdGF0b25vcz05MDYsZS5Jc21hbGw9NjMzMzcsZS5Jc3Ryb2tlPTQwNyxlLkl0aWxkZT0yOTYsZS5JdGlsZGViZWxvdz03NzI0LGUuSXpoaXRzYWN5cmlsbGljPTExNDAsZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyLGUuSj03NCxlLkphYXJtZW5pYW49MTM0NSxlLkpjaXJjbGU9OTQwNyxlLkpjaXJjdW1mbGV4PTMwOCxlLkplY3lyaWxsaWM9MTAzMixlLkpoZWhhcm1lbmlhbj0xMzU1LGUuSm1vbm9zcGFjZT02NTMyMixlLkpzbWFsbD02MzMzOCxlLks9NzUsZS5LQnNxdWFyZT0xMzE4OSxlLktLc3F1YXJlPTEzMjYxLGUuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NCxlLkthY3V0ZT03NzI4LGUuS2FjeXJpbGxpYz0xMDUwLGUuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4LGUuS2Fob29rY3lyaWxsaWM9MTIxOSxlLkthcHBhPTkyMixlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MixlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwLGUuS2Nhcm9uPTQ4OCxlLktjZWRpbGxhPTMxMCxlLktjaXJjbGU9OTQwOCxlLktjb21tYWFjY2VudD0zMTAsZS5LZG90YmVsb3c9NzczMCxlLktlaGFybWVuaWFuPTEzNjQsZS5LZW5hcm1lbmlhbj0xMzQzLGUuS2hhY3lyaWxsaWM9MTA2MSxlLktoZWljb3B0aWM9OTk4LGUuS2hvb2s9NDA4LGUuS2plY3lyaWxsaWM9MTAzNixlLktsaW5lYmVsb3c9NzczMixlLkttb25vc3BhY2U9NjUzMjMsZS5Lb3BwYWN5cmlsbGljPTExNTIsZS5Lb3BwYWdyZWVrPTk5MCxlLktzaWN5cmlsbGljPTExMzQsZS5Lc21hbGw9NjMzMzksZS5MPTc2LGUuTEo9NDU1LGUuTEw9NjMxNjcsZS5MYWN1dGU9MzEzLGUuTGFtYmRhPTkyMyxlLkxjYXJvbj0zMTcsZS5MY2VkaWxsYT0zMTUsZS5MY2lyY2xlPTk0MDksZS5MY2lyY3VtZmxleGJlbG93PTc3NDAsZS5MY29tbWFhY2NlbnQ9MzE1LGUuTGRvdD0zMTksZS5MZG90YWNjZW50PTMxOSxlLkxkb3RiZWxvdz03NzM0LGUuTGRvdGJlbG93bWFjcm9uPTc3MzYsZS5MaXduYXJtZW5pYW49MTM0MCxlLkxqPTQ1NixlLkxqZWN5cmlsbGljPTEwMzMsZS5MbGluZWJlbG93PTc3MzgsZS5MbW9ub3NwYWNlPTY1MzI0LGUuTHNsYXNoPTMyMSxlLkxzbGFzaHNtYWxsPTYzMjI1LGUuTHNtYWxsPTYzMzQwLGUuTT03NyxlLk1Cc3F1YXJlPTEzMTkwLGUuTWFjcm9uPTYzMTg0LGUuTWFjcm9uc21hbGw9NjM0MDcsZS5NYWN1dGU9Nzc0MixlLk1jaXJjbGU9OTQxMCxlLk1kb3RhY2NlbnQ9Nzc0NCxlLk1kb3RiZWxvdz03NzQ2LGUuTWVuYXJtZW5pYW49MTM0OCxlLk1tb25vc3BhY2U9NjUzMjUsZS5Nc21hbGw9NjMzNDEsZS5NdHVybmVkPTQxMixlLk11PTkyNCxlLk49NzgsZS5OSj00NTgsZS5OYWN1dGU9MzIzLGUuTmNhcm9uPTMyNyxlLk5jZWRpbGxhPTMyNSxlLk5jaXJjbGU9OTQxMSxlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NCxlLk5jb21tYWFjY2VudD0zMjUsZS5OZG90YWNjZW50PTc3NDgsZS5OZG90YmVsb3c9Nzc1MCxlLk5ob29rbGVmdD00MTMsZS5OaW5lcm9tYW49ODU1MixlLk5qPTQ1OSxlLk5qZWN5cmlsbGljPTEwMzQsZS5ObGluZWJlbG93PTc3NTIsZS5ObW9ub3NwYWNlPTY1MzI2LGUuTm93YXJtZW5pYW49MTM1MCxlLk5zbWFsbD02MzM0MixlLk50aWxkZT0yMDksZS5OdGlsZGVzbWFsbD02MzQ3MyxlLk51PTkyNSxlLk89NzksZS5PRT0zMzgsZS5PRXNtYWxsPTYzMjI2LGUuT2FjdXRlPTIxMSxlLk9hY3V0ZXNtYWxsPTYzNDc1LGUuT2JhcnJlZGN5cmlsbGljPTEyNTYsZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4LGUuT2JyZXZlPTMzNCxlLk9jYXJvbj00NjUsZS5PY2VudGVyZWR0aWxkZT00MTUsZS5PY2lyY2xlPTk0MTIsZS5PY2lyY3VtZmxleD0yMTIsZS5PY2lyY3VtZmxleGFjdXRlPTc4ODgsZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTYsZS5PY2lyY3VtZmxleGdyYXZlPTc4OTAsZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyLGUuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NixlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NCxlLk9jeXJpbGxpYz0xMDU0LGUuT2RibGFjdXRlPTMzNixlLk9kYmxncmF2ZT01MjQsZS5PZGllcmVzaXM9MjE0LGUuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NCxlLk9kaWVyZXNpc3NtYWxsPTYzNDc4LGUuT2RvdGJlbG93PTc4ODQsZS5PZ29uZWtzbWFsbD02MzIyNyxlLk9ncmF2ZT0yMTAsZS5PZ3JhdmVzbWFsbD02MzQ3NCxlLk9oYXJtZW5pYW49MTM2NSxlLk9obT04NDg2LGUuT2hvb2thYm92ZT03ODg2LGUuT2hvcm49NDE2LGUuT2hvcm5hY3V0ZT03ODk4LGUuT2hvcm5kb3RiZWxvdz03OTA2LGUuT2hvcm5ncmF2ZT03OTAwLGUuT2hvcm5ob29rYWJvdmU9NzkwMixlLk9ob3JudGlsZGU9NzkwNCxlLk9odW5nYXJ1bWxhdXQ9MzM2LGUuT2k9NDE4LGUuT2ludmVydGVkYnJldmU9NTI2LGUuT21hY3Jvbj0zMzIsZS5PbWFjcm9uYWN1dGU9Nzc2MixlLk9tYWNyb25ncmF2ZT03NzYwLGUuT21lZ2E9ODQ4NixlLk9tZWdhY3lyaWxsaWM9MTEyMCxlLk9tZWdhZ3JlZWs9OTM3LGUuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDYsZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0OCxlLk9tZWdhdG9ub3M9OTExLGUuT21pY3Jvbj05MjcsZS5PbWljcm9udG9ub3M9OTA4LGUuT21vbm9zcGFjZT02NTMyNyxlLk9uZXJvbWFuPTg1NDQsZS5Pb2dvbmVrPTQ5MCxlLk9vZ29uZWttYWNyb249NDkyLGUuT29wZW49MzkwLGUuT3NsYXNoPTIxNixlLk9zbGFzaGFjdXRlPTUxMCxlLk9zbGFzaHNtYWxsPTYzNDgwLGUuT3NtYWxsPTYzMzQzLGUuT3N0cm9rZWFjdXRlPTUxMCxlLk90Y3lyaWxsaWM9MTE1MCxlLk90aWxkZT0yMTMsZS5PdGlsZGVhY3V0ZT03NzU2LGUuT3RpbGRlZGllcmVzaXM9Nzc1OCxlLk90aWxkZXNtYWxsPTYzNDc3LGUuUD04MCxlLlBhY3V0ZT03NzY0LGUuUGNpcmNsZT05NDEzLGUuUGRvdGFjY2VudD03NzY2LGUuUGVjeXJpbGxpYz0xMDU1LGUuUGVoYXJtZW5pYW49MTM1NCxlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTAsZS5QaGk9OTM0LGUuUGhvb2s9NDIwLGUuUGk9OTI4LGUuUGl3cmFybWVuaWFuPTEzNjMsZS5QbW9ub3NwYWNlPTY1MzI4LGUuUHNpPTkzNixlLlBzaWN5cmlsbGljPTExMzYsZS5Qc21hbGw9NjMzNDQsZS5RPTgxLGUuUWNpcmNsZT05NDE0LGUuUW1vbm9zcGFjZT02NTMyOSxlLlFzbWFsbD02MzM0NSxlLlI9ODIsZS5SYWFybWVuaWFuPTEzNTYsZS5SYWN1dGU9MzQwLGUuUmNhcm9uPTM0NCxlLlJjZWRpbGxhPTM0MixlLlJjaXJjbGU9OTQxNSxlLlJjb21tYWFjY2VudD0zNDIsZS5SZGJsZ3JhdmU9NTI4LGUuUmRvdGFjY2VudD03NzY4LGUuUmRvdGJlbG93PTc3NzAsZS5SZG90YmVsb3dtYWNyb249Nzc3MixlLlJlaGFybWVuaWFuPTEzNjAsZS5SZnJha3R1cj04NDc2LGUuUmhvPTkyOSxlLlJpbmdzbWFsbD02MzIyOCxlLlJpbnZlcnRlZGJyZXZlPTUzMCxlLlJsaW5lYmVsb3c9Nzc3NCxlLlJtb25vc3BhY2U9NjUzMzAsZS5Sc21hbGw9NjMzNDYsZS5Sc21hbGxpbnZlcnRlZD02NDEsZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NCxlLlM9ODMsZS5TRjAxMDAwMD05NDg0LGUuU0YwMjAwMDA9OTQ5MixlLlNGMDMwMDAwPTk0ODgsZS5TRjA0MDAwMD05NDk2LGUuU0YwNTAwMDA9OTUzMixlLlNGMDYwMDAwPTk1MTYsZS5TRjA3MDAwMD05NTI0LGUuU0YwODAwMDA9OTUwMCxlLlNGMDkwMDAwPTk1MDgsZS5TRjEwMDAwMD05NDcyLGUuU0YxMTAwMDA9OTQ3NCxlLlNGMTkwMDAwPTk1NjksZS5TRjIwMDAwMD05NTcwLGUuU0YyMTAwMDA9OTU1OCxlLlNGMjIwMDAwPTk1NTcsZS5TRjIzMDAwMD05NTcxLGUuU0YyNDAwMDA9OTU1MyxlLlNGMjUwMDAwPTk1NTksZS5TRjI2MDAwMD05NTY1LGUuU0YyNzAwMDA9OTU2NCxlLlNGMjgwMDAwPTk1NjMsZS5TRjM2MDAwMD05NTY2LGUuU0YzNzAwMDA9OTU2NyxlLlNGMzgwMDAwPTk1NjIsZS5TRjM5MDAwMD05NTU2LGUuU0Y0MDAwMDA9OTU3NyxlLlNGNDEwMDAwPTk1NzQsZS5TRjQyMDAwMD05NTY4LGUuU0Y0MzAwMDA9OTU1MixlLlNGNDQwMDAwPTk1ODAsZS5TRjQ1MDAwMD05NTc1LGUuU0Y0NjAwMDA9OTU3NixlLlNGNDcwMDAwPTk1NzIsZS5TRjQ4MDAwMD05NTczLGUuU0Y0OTAwMDA9OTU2MSxlLlNGNTAwMDAwPTk1NjAsZS5TRjUxMDAwMD05NTU0LGUuU0Y1MjAwMDA9OTU1NSxlLlNGNTMwMDAwPTk1NzksZS5TRjU0MDAwMD05NTc4LGUuU2FjdXRlPTM0NixlLlNhY3V0ZWRvdGFjY2VudD03NzgwLGUuU2FtcGlncmVlaz05OTIsZS5TY2Fyb249MzUyLGUuU2Nhcm9uZG90YWNjZW50PTc3ODIsZS5TY2Fyb25zbWFsbD02MzIyOSxlLlNjZWRpbGxhPTM1MCxlLlNjaHdhPTM5OSxlLlNjaHdhY3lyaWxsaWM9MTI0MCxlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyLGUuU2NpcmNsZT05NDE2LGUuU2NpcmN1bWZsZXg9MzQ4LGUuU2NvbW1hYWNjZW50PTUzNixlLlNkb3RhY2NlbnQ9Nzc3NixlLlNkb3RiZWxvdz03Nzc4LGUuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQsZS5TZWhhcm1lbmlhbj0xMzU3LGUuU2V2ZW5yb21hbj04NTUwLGUuU2hhYXJtZW5pYW49MTM1MSxlLlNoYWN5cmlsbGljPTEwNjQsZS5TaGNoYWN5cmlsbGljPTEwNjUsZS5TaGVpY29wdGljPTk5NCxlLlNoaGFjeXJpbGxpYz0xMjEwLGUuU2hpbWFjb3B0aWM9MTAwNCxlLlNpZ21hPTkzMSxlLlNpeHJvbWFuPTg1NDksZS5TbW9ub3NwYWNlPTY1MzMxLGUuU29mdHNpZ25jeXJpbGxpYz0xMDY4LGUuU3NtYWxsPTYzMzQ3LGUuU3RpZ21hZ3JlZWs9OTg2LGUuVD04NCxlLlRhdT05MzIsZS5UYmFyPTM1OCxlLlRjYXJvbj0zNTYsZS5UY2VkaWxsYT0zNTQsZS5UY2lyY2xlPTk0MTcsZS5UY2lyY3VtZmxleGJlbG93PTc3OTIsZS5UY29tbWFhY2NlbnQ9MzU0LGUuVGRvdGFjY2VudD03Nzg2LGUuVGRvdGJlbG93PTc3ODgsZS5UZWN5cmlsbGljPTEwNTgsZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTYsZS5UZW5yb21hbj04NTUzLGUuVGV0c2VjeXJpbGxpYz0xMjA0LGUuVGhldGE9OTIwLGUuVGhvb2s9NDI4LGUuVGhvcm49MjIyLGUuVGhvcm5zbWFsbD02MzQ4NixlLlRocmVlcm9tYW49ODU0NixlLlRpbGRlc21hbGw9NjMyMzAsZS5UaXduYXJtZW5pYW49MTM1OSxlLlRsaW5lYmVsb3c9Nzc5MCxlLlRtb25vc3BhY2U9NjUzMzIsZS5Ub2FybWVuaWFuPTEzMzcsZS5Ub25lZml2ZT00NDQsZS5Ub25lc2l4PTM4OCxlLlRvbmV0d289NDIzLGUuVHJldHJvZmxleGhvb2s9NDMwLGUuVHNlY3lyaWxsaWM9MTA2MixlLlRzaGVjeXJpbGxpYz0xMDM1LGUuVHNtYWxsPTYzMzQ4LGUuVHdlbHZlcm9tYW49ODU1NSxlLlR3b3JvbWFuPTg1NDUsZS5VPTg1LGUuVWFjdXRlPTIxOCxlLlVhY3V0ZXNtYWxsPTYzNDgyLGUuVWJyZXZlPTM2NCxlLlVjYXJvbj00NjcsZS5VY2lyY2xlPTk0MTgsZS5VY2lyY3VtZmxleD0yMTksZS5VY2lyY3VtZmxleGJlbG93PTc3OTgsZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzLGUuVWN5cmlsbGljPTEwNTksZS5VZGJsYWN1dGU9MzY4LGUuVWRibGdyYXZlPTUzMixlLlVkaWVyZXNpcz0yMjAsZS5VZGllcmVzaXNhY3V0ZT00NzEsZS5VZGllcmVzaXNiZWxvdz03Nzk0LGUuVWRpZXJlc2lzY2Fyb249NDczLGUuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NCxlLlVkaWVyZXNpc2dyYXZlPTQ3NSxlLlVkaWVyZXNpc21hY3Jvbj00NjksZS5VZGllcmVzaXNzbWFsbD02MzQ4NCxlLlVkb3RiZWxvdz03OTA4LGUuVWdyYXZlPTIxNyxlLlVncmF2ZXNtYWxsPTYzNDgxLGUuVWhvb2thYm92ZT03OTEwLGUuVWhvcm49NDMxLGUuVWhvcm5hY3V0ZT03OTEyLGUuVWhvcm5kb3RiZWxvdz03OTIwLGUuVWhvcm5ncmF2ZT03OTE0LGUuVWhvcm5ob29rYWJvdmU9NzkxNixlLlVob3JudGlsZGU9NzkxOCxlLlVodW5nYXJ1bWxhdXQ9MzY4LGUuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjYsZS5VaW52ZXJ0ZWRicmV2ZT01MzQsZS5Va2N5cmlsbGljPTExNDQsZS5VbWFjcm9uPTM2MixlLlVtYWNyb25jeXJpbGxpYz0xMjYyLGUuVW1hY3JvbmRpZXJlc2lzPTc4MDIsZS5VbW9ub3NwYWNlPTY1MzMzLGUuVW9nb25laz0zNzAsZS5VcHNpbG9uPTkzMyxlLlVwc2lsb24xPTk3OCxlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05NzksZS5VcHNpbG9uYWZyaWNhbj00MzMsZS5VcHNpbG9uZGllcmVzaXM9OTM5LGUuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MCxlLlVwc2lsb25ob29rc3ltYm9sPTk3OCxlLlVwc2lsb250b25vcz05MTAsZS5VcmluZz0zNjYsZS5Vc2hvcnRjeXJpbGxpYz0xMDM4LGUuVXNtYWxsPTYzMzQ5LGUuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5OCxlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDAsZS5VdGlsZGU9MzYwLGUuVXRpbGRlYWN1dGU9NzgwMCxlLlV0aWxkZWJlbG93PTc3OTYsZS5WPTg2LGUuVmNpcmNsZT05NDE5LGUuVmRvdGJlbG93PTc4MDYsZS5WZWN5cmlsbGljPTEwNDIsZS5WZXdhcm1lbmlhbj0xMzU4LGUuVmhvb2s9NDM0LGUuVm1vbm9zcGFjZT02NTMzNCxlLlZvYXJtZW5pYW49MTM1MixlLlZzbWFsbD02MzM1MCxlLlZ0aWxkZT03ODA0LGUuVz04NyxlLldhY3V0ZT03ODEwLGUuV2NpcmNsZT05NDIwLGUuV2NpcmN1bWZsZXg9MzcyLGUuV2RpZXJlc2lzPTc4MTIsZS5XZG90YWNjZW50PTc4MTQsZS5XZG90YmVsb3c9NzgxNixlLldncmF2ZT03ODA4LGUuV21vbm9zcGFjZT02NTMzNSxlLldzbWFsbD02MzM1MSxlLlg9ODgsZS5YY2lyY2xlPTk0MjEsZS5YZGllcmVzaXM9NzgyMCxlLlhkb3RhY2NlbnQ9NzgxOCxlLlhlaGFybWVuaWFuPTEzNDEsZS5YaT05MjYsZS5YbW9ub3NwYWNlPTY1MzM2LGUuWHNtYWxsPTYzMzUyLGUuWT04OSxlLllhY3V0ZT0yMjEsZS5ZYWN1dGVzbWFsbD02MzQ4NSxlLllhdGN5cmlsbGljPTExMjIsZS5ZY2lyY2xlPTk0MjIsZS5ZY2lyY3VtZmxleD0zNzQsZS5ZZGllcmVzaXM9Mzc2LGUuWWRpZXJlc2lzc21hbGw9NjM0ODcsZS5ZZG90YWNjZW50PTc4MjIsZS5ZZG90YmVsb3c9NzkyNCxlLlllcmljeXJpbGxpYz0xMDY3LGUuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MixlLllncmF2ZT03OTIyLGUuWWhvb2s9NDM1LGUuWWhvb2thYm92ZT03OTI2LGUuWWlhcm1lbmlhbj0xMzQ5LGUuWWljeXJpbGxpYz0xMDMxLGUuWWl3bmFybWVuaWFuPTEzNjIsZS5ZbW9ub3NwYWNlPTY1MzM3LGUuWXNtYWxsPTYzMzUzLGUuWXRpbGRlPTc5MjgsZS5ZdXNiaWdjeXJpbGxpYz0xMTMwLGUuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyLGUuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNixlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOCxlLlo9OTAsZS5aYWFybWVuaWFuPTEzMzQsZS5aYWN1dGU9Mzc3LGUuWmNhcm9uPTM4MSxlLlpjYXJvbnNtYWxsPTYzMjMxLGUuWmNpcmNsZT05NDIzLGUuWmNpcmN1bWZsZXg9NzgyNCxlLlpkb3Q9Mzc5LGUuWmRvdGFjY2VudD0zNzksZS5aZG90YmVsb3c9NzgyNixlLlplY3lyaWxsaWM9MTA0NyxlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NixlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2LGUuWmV0YT05MTgsZS5aaGVhcm1lbmlhbj0xMzM4LGUuWmhlYnJldmVjeXJpbGxpYz0xMjE3LGUuWmhlY3lyaWxsaWM9MTA0NixlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQsZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQsZS5abGluZWJlbG93PTc4MjgsZS5abW9ub3NwYWNlPTY1MzM4LGUuWnNtYWxsPTYzMzU0LGUuWnN0cm9rZT00MzcsZS5hPTk3LGUuYWFiZW5nYWxpPTI0MzgsZS5hYWN1dGU9MjI1LGUuYWFkZXZhPTIzMTAsZS5hYWd1amFyYXRpPTI2OTQsZS5hYWd1cm11a2hpPTI1NjYsZS5hYW1hdHJhZ3VybXVraGk9MjYyMixlLmFhcnVzcXVhcmU9MTMwNTksZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NCxlLmFhdm93ZWxzaWduZGV2YT0yMzY2LGUuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwLGUuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzUsZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2LGUuYWJlbmdhbGk9MjQzNyxlLmFib3BvbW9mbz0xMjU3MCxlLmFicmV2ZT0yNTksZS5hYnJldmVhY3V0ZT03ODU1LGUuYWJyZXZlY3lyaWxsaWM9MTIzMyxlLmFicmV2ZWRvdGJlbG93PTc4NjMsZS5hYnJldmVncmF2ZT03ODU3LGUuYWJyZXZlaG9va2Fib3ZlPTc4NTksZS5hYnJldmV0aWxkZT03ODYxLGUuYWNhcm9uPTQ2MixlLmFjaXJjbGU9OTQyNCxlLmFjaXJjdW1mbGV4PTIyNixlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NSxlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MyxlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NyxlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDksZS5hY2lyY3VtZmxleHRpbGRlPTc4NTEsZS5hY3V0ZT0xODAsZS5hY3V0ZWJlbG93Y21iPTc5MSxlLmFjdXRlY21iPTc2OSxlLmFjdXRlY29tYj03NjksZS5hY3V0ZWRldmE9MjM4OCxlLmFjdXRlbG93bW9kPTcxOSxlLmFjdXRldG9uZWNtYj04MzMsZS5hY3lyaWxsaWM9MTA3MixlLmFkYmxncmF2ZT01MTMsZS5hZGRha2d1cm11a2hpPTI2NzMsZS5hZGV2YT0yMzA5LGUuYWRpZXJlc2lzPTIyOCxlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzUsZS5hZGllcmVzaXNtYWNyb249NDc5LGUuYWRvdGJlbG93PTc4NDEsZS5hZG90bWFjcm9uPTQ4MSxlLmFlPTIzMCxlLmFlYWN1dGU9NTA5LGUuYWVrb3JlYW49MTI2MjQsZS5hZW1hY3Jvbj00ODMsZS5hZmlpMDAyMDg9ODIxMyxlLmFmaWkwODk0MT04MzU2LGUuYWZpaTEwMDE3PTEwNDAsZS5hZmlpMTAwMTg9MTA0MSxlLmFmaWkxMDAxOT0xMDQyLGUuYWZpaTEwMDIwPTEwNDMsZS5hZmlpMTAwMjE9MTA0NCxlLmFmaWkxMDAyMj0xMDQ1LGUuYWZpaTEwMDIzPTEwMjUsZS5hZmlpMTAwMjQ9MTA0NixlLmFmaWkxMDAyNT0xMDQ3LGUuYWZpaTEwMDI2PTEwNDgsZS5hZmlpMTAwMjc9MTA0OSxlLmFmaWkxMDAyOD0xMDUwLGUuYWZpaTEwMDI5PTEwNTEsZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzLGUuYWZpaTEwMDMyPTEwNTQsZS5hZmlpMTAwMzM9MTA1NSxlLmFmaWkxMDAzND0xMDU2LGUuYWZpaTEwMDM1PTEwNTcsZS5hZmlpMTAwMzY9MTA1OCxlLmFmaWkxMDAzNz0xMDU5LGUuYWZpaTEwMDM4PTEwNjAsZS5hZmlpMTAwMzk9MTA2MSxlLmFmaWkxMDA0MD0xMDYyLGUuYWZpaTEwMDQxPTEwNjMsZS5hZmlpMTAwNDI9MTA2NCxlLmFmaWkxMDA0Mz0xMDY1LGUuYWZpaTEwMDQ0PTEwNjYsZS5hZmlpMTAwNDU9MTA2NyxlLmFmaWkxMDA0Nj0xMDY4LGUuYWZpaTEwMDQ3PTEwNjksZS5hZmlpMTAwNDg9MTA3MCxlLmFmaWkxMDA0OT0xMDcxLGUuYWZpaTEwMDUwPTExNjgsZS5hZmlpMTAwNTE9MTAyNixlLmFmaWkxMDA1Mj0xMDI3LGUuYWZpaTEwMDUzPTEwMjgsZS5hZmlpMTAwNTQ9MTAyOSxlLmFmaWkxMDA1NT0xMDMwLGUuYWZpaTEwMDU2PTEwMzEsZS5hZmlpMTAwNTc9MTAzMixlLmFmaWkxMDA1OD0xMDMzLGUuYWZpaTEwMDU5PTEwMzQsZS5hZmlpMTAwNjA9MTAzNSxlLmFmaWkxMDA2MT0xMDM2LGUuYWZpaTEwMDYyPTEwMzgsZS5hZmlpMTAwNjM9NjMxNzIsZS5hZmlpMTAwNjQ9NjMxNzMsZS5hZmlpMTAwNjU9MTA3MixlLmFmaWkxMDA2Nj0xMDczLGUuYWZpaTEwMDY3PTEwNzQsZS5hZmlpMTAwNjg9MTA3NSxlLmFmaWkxMDA2OT0xMDc2LGUuYWZpaTEwMDcwPTEwNzcsZS5hZmlpMTAwNzE9MTEwNSxlLmFmaWkxMDA3Mj0xMDc4LGUuYWZpaTEwMDczPTEwNzksZS5hZmlpMTAwNzQ9MTA4MCxlLmFmaWkxMDA3NT0xMDgxLGUuYWZpaTEwMDc2PTEwODIsZS5hZmlpMTAwNzc9MTA4MyxlLmFmaWkxMDA3OD0xMDg0LGUuYWZpaTEwMDc5PTEwODUsZS5hZmlpMTAwODA9MTA4NixlLmFmaWkxMDA4MT0xMDg3LGUuYWZpaTEwMDgyPTEwODgsZS5hZmlpMTAwODM9MTA4OSxlLmFmaWkxMDA4ND0xMDkwLGUuYWZpaTEwMDg1PTEwOTEsZS5hZmlpMTAwODY9MTA5MixlLmFmaWkxMDA4Nz0xMDkzLGUuYWZpaTEwMDg4PTEwOTQsZS5hZmlpMTAwODk9MTA5NSxlLmFmaWkxMDA5MD0xMDk2LGUuYWZpaTEwMDkxPTEwOTcsZS5hZmlpMTAwOTI9MTA5OCxlLmFmaWkxMDA5Mz0xMDk5LGUuYWZpaTEwMDk0PTExMDAsZS5hZmlpMTAwOTU9MTEwMSxlLmFmaWkxMDA5Nj0xMTAyLGUuYWZpaTEwMDk3PTExMDMsZS5hZmlpMTAwOTg9MTE2OSxlLmFmaWkxMDA5OT0xMTA2LGUuYWZpaTEwMTAwPTExMDcsZS5hZmlpMTAxMDE9MTEwOCxlLmFmaWkxMDEwMj0xMTA5LGUuYWZpaTEwMTAzPTExMTAsZS5hZmlpMTAxMDQ9MTExMSxlLmFmaWkxMDEwNT0xMTEyLGUuYWZpaTEwMTA2PTExMTMsZS5hZmlpMTAxMDc9MTExNCxlLmFmaWkxMDEwOD0xMTE1LGUuYWZpaTEwMTA5PTExMTYsZS5hZmlpMTAxMTA9MTExOCxlLmFmaWkxMDE0NT0xMDM5LGUuYWZpaTEwMTQ2PTExMjIsZS5hZmlpMTAxNDc9MTEzOCxlLmFmaWkxMDE0OD0xMTQwLGUuYWZpaTEwMTkyPTYzMTc0LGUuYWZpaTEwMTkzPTExMTksZS5hZmlpMTAxOTQ9MTEyMyxlLmFmaWkxMDE5NT0xMTM5LGUuYWZpaTEwMTk2PTExNDEsZS5hZmlpMTA4MzE9NjMxNzUsZS5hZmlpMTA4MzI9NjMxNzYsZS5hZmlpMTA4NDY9MTI0MSxlLmFmaWkyOTk9ODIwNixlLmFmaWkzMDA9ODIwNyxlLmFmaWkzMDE9ODIwNSxlLmFmaWk1NzM4MT0xNjQyLGUuYWZpaTU3Mzg4PTE1NDgsZS5hZmlpNTczOTI9MTYzMixlLmFmaWk1NzM5Mz0xNjMzLGUuYWZpaTU3Mzk0PTE2MzQsZS5hZmlpNTczOTU9MTYzNSxlLmFmaWk1NzM5Nj0xNjM2LGUuYWZpaTU3Mzk3PTE2MzcsZS5hZmlpNTczOTg9MTYzOCxlLmFmaWk1NzM5OT0xNjM5LGUuYWZpaTU3NDAwPTE2NDAsZS5hZmlpNTc0MDE9MTY0MSxlLmFmaWk1NzQwMz0xNTYzLGUuYWZpaTU3NDA3PTE1NjcsZS5hZmlpNTc0MDk9MTU2OSxlLmFmaWk1NzQxMD0xNTcwLGUuYWZpaTU3NDExPTE1NzEsZS5hZmlpNTc0MTI9MTU3MixlLmFmaWk1NzQxMz0xNTczLGUuYWZpaTU3NDE0PTE1NzQsZS5hZmlpNTc0MTU9MTU3NSxlLmFmaWk1NzQxNj0xNTc2LGUuYWZpaTU3NDE3PTE1NzcsZS5hZmlpNTc0MTg9MTU3OCxlLmFmaWk1NzQxOT0xNTc5LGUuYWZpaTU3NDIwPTE1ODAsZS5hZmlpNTc0MjE9MTU4MSxlLmFmaWk1NzQyMj0xNTgyLGUuYWZpaTU3NDIzPTE1ODMsZS5hZmlpNTc0MjQ9MTU4NCxlLmFmaWk1NzQyNT0xNTg1LGUuYWZpaTU3NDI2PTE1ODYsZS5hZmlpNTc0Mjc9MTU4NyxlLmFmaWk1NzQyOD0xNTg4LGUuYWZpaTU3NDI5PTE1ODksZS5hZmlpNTc0MzA9MTU5MCxlLmFmaWk1NzQzMT0xNTkxLGUuYWZpaTU3NDMyPTE1OTIsZS5hZmlpNTc0MzM9MTU5MyxlLmFmaWk1NzQzND0xNTk0LGUuYWZpaTU3NDQwPTE2MDAsZS5hZmlpNTc0NDE9MTYwMSxlLmFmaWk1NzQ0Mj0xNjAyLGUuYWZpaTU3NDQzPTE2MDMsZS5hZmlpNTc0NDQ9MTYwNCxlLmFmaWk1NzQ0NT0xNjA1LGUuYWZpaTU3NDQ2PTE2MDYsZS5hZmlpNTc0NDg9MTYwOCxlLmFmaWk1NzQ0OT0xNjA5LGUuYWZpaTU3NDUwPTE2MTAsZS5hZmlpNTc0NTE9MTYxMSxlLmFmaWk1NzQ1Mj0xNjEyLGUuYWZpaTU3NDUzPTE2MTMsZS5hZmlpNTc0NTQ9MTYxNCxlLmFmaWk1NzQ1NT0xNjE1LGUuYWZpaTU3NDU2PTE2MTYsZS5hZmlpNTc0NTc9MTYxNyxlLmFmaWk1NzQ1OD0xNjE4LGUuYWZpaTU3NDcwPTE2MDcsZS5hZmlpNTc1MDU9MTcwMCxlLmFmaWk1NzUwNj0xNjYyLGUuYWZpaTU3NTA3PTE2NzAsZS5hZmlpNTc1MDg9MTY4OCxlLmFmaWk1NzUwOT0xNzExLGUuYWZpaTU3NTExPTE2NTcsZS5hZmlpNTc1MTI9MTY3MixlLmFmaWk1NzUxMz0xNjgxLGUuYWZpaTU3NTE0PTE3MjIsZS5hZmlpNTc1MTk9MTc0NixlLmFmaWk1NzUzND0xNzQ5LGUuYWZpaTU3NjM2PTgzNjIsZS5hZmlpNTc2NDU9MTQ3MCxlLmFmaWk1NzY1OD0xNDc1LGUuYWZpaTU3NjY0PTE0ODgsZS5hZmlpNTc2NjU9MTQ4OSxlLmFmaWk1NzY2Nj0xNDkwLGUuYWZpaTU3NjY3PTE0OTEsZS5hZmlpNTc2Njg9MTQ5MixlLmFmaWk1NzY2OT0xNDkzLGUuYWZpaTU3NjcwPTE0OTQsZS5hZmlpNTc2NzE9MTQ5NSxlLmFmaWk1NzY3Mj0xNDk2LGUuYWZpaTU3NjczPTE0OTcsZS5hZmlpNTc2NzQ9MTQ5OCxlLmFmaWk1NzY3NT0xNDk5LGUuYWZpaTU3Njc2PTE1MDAsZS5hZmlpNTc2Nzc9MTUwMSxlLmFmaWk1NzY3OD0xNTAyLGUuYWZpaTU3Njc5PTE1MDMsZS5hZmlpNTc2ODA9MTUwNCxlLmFmaWk1NzY4MT0xNTA1LGUuYWZpaTU3NjgyPTE1MDYsZS5hZmlpNTc2ODM9MTUwNyxlLmFmaWk1NzY4ND0xNTA4LGUuYWZpaTU3Njg1PTE1MDksZS5hZmlpNTc2ODY9MTUxMCxlLmFmaWk1NzY4Nz0xNTExLGUuYWZpaTU3Njg4PTE1MTIsZS5hZmlpNTc2ODk9MTUxMyxlLmFmaWk1NzY5MD0xNTE0LGUuYWZpaTU3Njk0PTY0Mjk4LGUuYWZpaTU3Njk1PTY0Mjk5LGUuYWZpaTU3NzAwPTY0MzMxLGUuYWZpaTU3NzA1PTY0Mjg3LGUuYWZpaTU3NzE2PTE1MjAsZS5hZmlpNTc3MTc9MTUyMSxlLmFmaWk1NzcxOD0xNTIyLGUuYWZpaTU3NzIzPTY0MzA5LGUuYWZpaTU3NzkzPTE0NjAsZS5hZmlpNTc3OTQ9MTQ2MSxlLmFmaWk1Nzc5NT0xNDYyLGUuYWZpaTU3Nzk2PTE0NjcsZS5hZmlpNTc3OTc9MTQ2NCxlLmFmaWk1Nzc5OD0xNDYzLGUuYWZpaTU3Nzk5PTE0NTYsZS5hZmlpNTc4MDA9MTQ1OCxlLmFmaWk1NzgwMT0xNDU3LGUuYWZpaTU3ODAyPTE0NTksZS5hZmlpNTc4MDM9MTQ3NCxlLmFmaWk1NzgwND0xNDczLGUuYWZpaTU3ODA2PTE0NjUsZS5hZmlpNTc4MDc9MTQ2OCxlLmFmaWk1NzgzOT0xNDY5LGUuYWZpaTU3ODQxPTE0NzEsZS5hZmlpNTc4NDI9MTQ3MixlLmFmaWk1NzkyOT03MDAsZS5hZmlpNjEyNDg9ODQ1MyxlLmFmaWk2MTI4OT04NDY3LGUuYWZpaTYxMzUyPTg0NzAsZS5hZmlpNjE1NzM9ODIzNixlLmFmaWk2MTU3ND04MjM3LGUuYWZpaTYxNTc1PTgyMzgsZS5hZmlpNjE2NjQ9ODIwNCxlLmFmaWk2MzE2Nz0xNjQ1LGUuYWZpaTY0OTM3PTcwMSxlLmFncmF2ZT0yMjQsZS5hZ3VqYXJhdGk9MjY5MyxlLmFndXJtdWtoaT0yNTY1LGUuYWhpcmFnYW5hPTEyMzU0LGUuYWhvb2thYm92ZT03ODQzLGUuYWliZW5nYWxpPTI0NDgsZS5haWJvcG9tb2ZvPTEyNTc0LGUuYWlkZXZhPTIzMjAsZS5haWVjeXJpbGxpYz0xMjM3LGUuYWlndWphcmF0aT0yNzA0LGUuYWlndXJtdWtoaT0yNTc2LGUuYWltYXRyYWd1cm11a2hpPTI2MzIsZS5haW5hcmFiaWM9MTU5MyxlLmFpbmZpbmFsYXJhYmljPTY1MjI2LGUuYWluaW5pdGlhbGFyYWJpYz02NTIyNyxlLmFpbm1lZGlhbGFyYWJpYz02NTIyOCxlLmFpbnZlcnRlZGJyZXZlPTUxNSxlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0LGUuYWl2b3dlbHNpZ25kZXZhPTIzNzYsZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjAsZS5ha2F0YWthbmE9MTI0NTAsZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTMsZS5ha29yZWFuPTEyNjIzLGUuYWxlZj0xNDg4LGUuYWxlZmFyYWJpYz0xNTc1LGUuYWxlZmRhZ2VzaGhlYnJldz02NDMwNCxlLmFsZWZmaW5hbGFyYWJpYz02NTE2NixlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzEsZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2LGUuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MyxlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjAsZS5hbGVmaGVicmV3PTE0ODgsZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzUsZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwLGUuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NCxlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDksZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0LGUuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3LGUuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjgsZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDIsZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzLGUuYWxlcGg9ODUwMSxlLmFsbGVxdWFsPTg3ODAsZS5hbHBoYT05NDUsZS5hbHBoYXRvbm9zPTk0MCxlLmFtYWNyb249MjU3LGUuYW1vbm9zcGFjZT02NTM0NSxlLmFtcGVyc2FuZD0zOCxlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NixlLmFtcGVyc2FuZHNtYWxsPTYzMjcwLGUuYW1zcXVhcmU9MTMyNTAsZS5hbmJvcG9tb2ZvPTEyNTc4LGUuYW5nYm9wb21vZm89MTI1ODAsZS5hbmdicmFja2V0bGVmdD0xMjI5NixlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NyxlLmFuZ2toYW5raHV0aGFpPTM2NzQsZS5hbmdsZT04NzM2LGUuYW5nbGVicmFja2V0bGVmdD0xMjI5NixlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NyxlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3LGUuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4OCxlLmFuZ2xlbGVmdD05MDAxLGUuYW5nbGVyaWdodD05MDAyLGUuYW5nc3Ryb209ODQ5MSxlLmFub3RlbGVpYT05MDMsZS5hbnVkYXR0YWRldmE9MjM4NixlLmFudXN2YXJhYmVuZ2FsaT0yNDM0LGUuYW51c3ZhcmFkZXZhPTIzMDYsZS5hbnVzdmFyYWd1amFyYXRpPTI2OTAsZS5hb2dvbmVrPTI2MSxlLmFwYWF0b3NxdWFyZT0xMzA1NixlLmFwYXJlbj05MzcyLGUuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzAsZS5hcG9zdHJvcGhlbW9kPTcwMCxlLmFwcGxlPTYzNzQzLGUuYXBwcm9hY2hlcz04Nzg0LGUuYXBwcm94ZXF1YWw9ODc3NixlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2LGUuYXBwcm94aW1hdGVseWVxdWFsPTg3NzMsZS5hcmFlYWVrb3JlYW49MTI2ODYsZS5hcmFlYWtvcmVhbj0xMjY4NSxlLmFyYz04OTc4LGUuYXJpZ2h0aGFsZnJpbmc9NzgzNCxlLmFyaW5nPTIyOSxlLmFyaW5nYWN1dGU9NTA3LGUuYXJpbmdiZWxvdz03NjgxLGUuYXJyb3dib3RoPTg1OTYsZS5hcnJvd2Rhc2hkb3duPTg2NzUsZS5hcnJvd2Rhc2hsZWZ0PTg2NzIsZS5hcnJvd2Rhc2hyaWdodD04Njc0LGUuYXJyb3dkYXNodXA9ODY3MyxlLmFycm93ZGJsYm90aD04NjYwLGUuYXJyb3dkYmxkb3duPTg2NTksZS5hcnJvd2RibGxlZnQ9ODY1NixlLmFycm93ZGJscmlnaHQ9ODY1OCxlLmFycm93ZGJsdXA9ODY1NyxlLmFycm93ZG93bj04NTk1LGUuYXJyb3dkb3dubGVmdD04NjAxLGUuYXJyb3dkb3ducmlnaHQ9ODYwMCxlLmFycm93ZG93bndoaXRlPTg2ODEsZS5hcnJvd2hlYWRkb3dubW9kPTcwOSxlLmFycm93aGVhZGxlZnRtb2Q9NzA2LGUuYXJyb3doZWFkcmlnaHRtb2Q9NzA3LGUuYXJyb3doZWFkdXBtb2Q9NzA4LGUuYXJyb3dob3JpemV4PTYzNzE5LGUuYXJyb3dsZWZ0PTg1OTIsZS5hcnJvd2xlZnRkYmw9ODY1NixlLmFycm93bGVmdGRibHN0cm9rZT04NjUzLGUuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDYsZS5hcnJvd2xlZnR3aGl0ZT04Njc4LGUuYXJyb3dyaWdodD04NTk0LGUuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1LGUuYXJyb3dyaWdodGhlYXZ5PTEwMTQyLGUuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQsZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MCxlLmFycm93dGFibGVmdD04Njc2LGUuYXJyb3d0YWJyaWdodD04Njc3LGUuYXJyb3d1cD04NTkzLGUuYXJyb3d1cGRuPTg1OTcsZS5hcnJvd3VwZG5ic2U9ODYxNixlLmFycm93dXBkb3duYmFzZT04NjE2LGUuYXJyb3d1cGxlZnQ9ODU5OCxlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDUsZS5hcnJvd3VwcmlnaHQ9ODU5OSxlLmFycm93dXB3aGl0ZT04Njc5LGUuYXJyb3d2ZXJ0ZXg9NjM3MTgsZS5hc2NpaWNpcmN1bT05NCxlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyLGUuYXNjaWl0aWxkZT0xMjYsZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0LGUuYXNjcmlwdD01OTMsZS5hc2NyaXB0dHVybmVkPTU5NCxlLmFzbWFsbGhpcmFnYW5hPTEyMzUzLGUuYXNtYWxsa2F0YWthbmE9MTI0NDksZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MyxlLmFzdGVyaXNrPTQyLGUuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NSxlLmFzdGVyaXNrYXJhYmljPTE2NDUsZS5hc3Rlcmlza21hdGg9ODcyNyxlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwLGUuYXN0ZXJpc2tzbWFsbD02NTEyMSxlLmFzdGVyaXNtPTgyNTgsZS5hc3VwZXJpb3I9NjMyMDksZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzEsZS5hdD02NCxlLmF0aWxkZT0yMjcsZS5hdG1vbm9zcGFjZT02NTMxMixlLmF0c21hbGw9NjUxMzEsZS5hdHVybmVkPTU5MixlLmF1YmVuZ2FsaT0yNDUyLGUuYXVib3BvbW9mbz0xMjU3NixlLmF1ZGV2YT0yMzI0LGUuYXVndWphcmF0aT0yNzA4LGUuYXVndXJtdWtoaT0yNTgwLGUuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5LGUuYXVtYXRyYWd1cm11a2hpPTI2MzYsZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwOCxlLmF1dm93ZWxzaWduZGV2YT0yMzgwLGUuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0LGUuYXZhZ3JhaGFkZXZhPTIzNjUsZS5heWJhcm1lbmlhbj0xMzc3LGUuYXlpbj0xNTA2LGUuYXlpbmFsdG9uZWhlYnJldz02NDI4OCxlLmF5aW5oZWJyZXc9MTUwNixlLmI9OTgsZS5iYWJlbmdhbGk9MjQ3NixlLmJhY2tzbGFzaD05MixlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MCxlLmJhZGV2YT0yMzQ4LGUuYmFndWphcmF0aT0yNzMyLGUuYmFndXJtdWtoaT0yNjA0LGUuYmFoaXJhZ2FuYT0xMjQwMCxlLmJhaHR0aGFpPTM2NDcsZS5iYWthdGFrYW5hPTEyNDk2LGUuYmFyPTEyNCxlLmJhcm1vbm9zcGFjZT02NTM3MixlLmJib3BvbW9mbz0xMjU0OSxlLmJjaXJjbGU9OTQyNSxlLmJkb3RhY2NlbnQ9NzY4MyxlLmJkb3RiZWxvdz03Njg1LGUuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNixlLmJlY2F1c2U9ODc1NyxlLmJlY3lyaWxsaWM9MTA3MyxlLmJlaGFyYWJpYz0xNTc2LGUuYmVoZmluYWxhcmFiaWM9NjUxNjgsZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5LGUuYmVoaXJhZ2FuYT0xMjQwOSxlLmJlaG1lZGlhbGFyYWJpYz02NTE3MCxlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxLGUuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwLGUuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxLGUuYmVrYXRha2FuYT0xMjUwNSxlLmJlbmFybWVuaWFuPTEzNzgsZS5iZXQ9MTQ4OSxlLmJldGE9OTQ2LGUuYmV0YXN5bWJvbGdyZWVrPTk3NixlLmJldGRhZ2VzaD02NDMwNSxlLmJldGRhZ2VzaGhlYnJldz02NDMwNSxlLmJldGhlYnJldz0xNDg5LGUuYmV0cmFmZWhlYnJldz02NDMzMixlLmJoYWJlbmdhbGk9MjQ3NyxlLmJoYWRldmE9MjM0OSxlLmJoYWd1amFyYXRpPTI3MzMsZS5iaGFndXJtdWtoaT0yNjA1LGUuYmhvb2s9NTk1LGUuYmloaXJhZ2FuYT0xMjQwMyxlLmJpa2F0YWthbmE9MTI0OTksZS5iaWxhYmlhbGNsaWNrPTY2NCxlLmJpbmRpZ3VybXVraGk9MjU2MixlLmJpcnVzcXVhcmU9MTMxMDUsZS5ibGFja2NpcmNsZT05Njc5LGUuYmxhY2tkaWFtb25kPTk2NzAsZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjAsZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2OCxlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NCxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0LGUuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MyxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNSxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0LGUuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5LGUuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5OCxlLmJsYWNrcmVjdGFuZ2xlPTk2NDQsZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTgsZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0LGUuYmxhY2tzbWFsbHNxdWFyZT05NjQyLGUuYmxhY2tzbWlsaW5nZmFjZT05Nzg3LGUuYmxhY2tzcXVhcmU9OTYzMixlLmJsYWNrc3Rhcj05NzMzLGUuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwLGUuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMSxlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MixlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTAsZS5ibGFuaz05MjUxLGUuYmxpbmViZWxvdz03Njg3LGUuYmxvY2s9OTYwOCxlLmJtb25vc3BhY2U9NjUzNDYsZS5ib2JhaW1haXRoYWk9MzYxMCxlLmJvaGlyYWdhbmE9MTI0MTIsZS5ib2thdGFrYW5hPTEyNTA4LGUuYnBhcmVuPTkzNzMsZS5icXNxdWFyZT0xMzI1MSxlLmJyYWNlZXg9NjM3MzIsZS5icmFjZWxlZnQ9MTIzLGUuYnJhY2VsZWZ0YnQ9NjM3MzEsZS5icmFjZWxlZnRtaWQ9NjM3MzAsZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzEsZS5icmFjZWxlZnRzbWFsbD02NTExNSxlLmJyYWNlbGVmdHRwPTYzNzI5LGUuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzksZS5icmFjZXJpZ2h0PTEyNSxlLmJyYWNlcmlnaHRidD02Mzc0MixlLmJyYWNlcmlnaHRtaWQ9NjM3NDEsZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczLGUuYnJhY2VyaWdodHNtYWxsPTY1MTE2LGUuYnJhY2VyaWdodHRwPTYzNzQwLGUuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwLGUuYnJhY2tldGxlZnQ9OTEsZS5icmFja2V0bGVmdGJ0PTYzNzI4LGUuYnJhY2tldGxlZnRleD02MzcyNyxlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5LGUuYnJhY2tldGxlZnR0cD02MzcyNixlLmJyYWNrZXRyaWdodD05MyxlLmJyYWNrZXRyaWdodGJ0PTYzNzM5LGUuYnJhY2tldHJpZ2h0ZXg9NjM3MzgsZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDEsZS5icmFja2V0cmlnaHR0cD02MzczNyxlLmJyZXZlPTcyOCxlLmJyZXZlYmVsb3djbWI9ODE0LGUuYnJldmVjbWI9Nzc0LGUuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNSxlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1LGUuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjUsZS5icmlkZ2ViZWxvd2NtYj04MTAsZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNixlLmJyb2tlbmJhcj0xNjYsZS5ic3Ryb2tlPTM4NCxlLmJzdXBlcmlvcj02MzIxMCxlLmJ0b3BiYXI9Mzg3LGUuYnVoaXJhZ2FuYT0xMjQwNixlLmJ1a2F0YWthbmE9MTI1MDIsZS5idWxsZXQ9ODIyNixlLmJ1bGxldGludmVyc2U9OTY4OCxlLmJ1bGxldG9wZXJhdG9yPTg3MjksZS5idWxsc2V5ZT05Njc4LGUuYz05OSxlLmNhYXJtZW5pYW49MTM5MCxlLmNhYmVuZ2FsaT0yNDU4LGUuY2FjdXRlPTI2MyxlLmNhZGV2YT0yMzMwLGUuY2FndWphcmF0aT0yNzE0LGUuY2FndXJtdWtoaT0yNTg2LGUuY2Fsc3F1YXJlPTEzMTkyLGUuY2FuZHJhYmluZHViZW5nYWxpPTI0MzMsZS5jYW5kcmFiaW5kdWNtYj03ODQsZS5jYW5kcmFiaW5kdWRldmE9MjMwNSxlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OSxlLmNhcHNsb2NrPTg2ODIsZS5jYXJlb2Y9ODQ1MyxlLmNhcm9uPTcxMSxlLmNhcm9uYmVsb3djbWI9ODEyLGUuY2Fyb25jbWI9NzgwLGUuY2FycmlhZ2VyZXR1cm49ODYyOSxlLmNib3BvbW9mbz0xMjU2OCxlLmNjYXJvbj0yNjksZS5jY2VkaWxsYT0yMzEsZS5jY2VkaWxsYWFjdXRlPTc2ODksZS5jY2lyY2xlPTk0MjYsZS5jY2lyY3VtZmxleD0yNjUsZS5jY3VybD01OTcsZS5jZG90PTI2NyxlLmNkb3RhY2NlbnQ9MjY3LGUuY2RzcXVhcmU9MTMyNTMsZS5jZWRpbGxhPTE4NCxlLmNlZGlsbGFjbWI9ODA3LGUuY2VudD0xNjIsZS5jZW50aWdyYWRlPTg0NTEsZS5jZW50aW5mZXJpb3I9NjMxOTksZS5jZW50bW9ub3NwYWNlPTY1NTA0LGUuY2VudG9sZHN0eWxlPTYzMzk0LGUuY2VudHN1cGVyaW9yPTYzMjAwLGUuY2hhYXJtZW5pYW49MTQwMSxlLmNoYWJlbmdhbGk9MjQ1OSxlLmNoYWRldmE9MjMzMSxlLmNoYWd1amFyYXRpPTI3MTUsZS5jaGFndXJtdWtoaT0yNTg3LGUuY2hib3BvbW9mbz0xMjU2NCxlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTMsZS5jaGVja21hcms9MTAwMDMsZS5jaGVjeXJpbGxpYz0xMDk1LGUuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNSxlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDcsZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjksZS5jaGVoYXJtZW5pYW49MTM5NSxlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4LGUuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5LGUuY2hpPTk2NyxlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5LGUuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMyxlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDUsZS5jaGlldWNoa29yZWFuPTEyNjE4LGUuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5LGUuY2hvY2hhbmd0aGFpPTM1OTQsZS5jaG9jaGFudGhhaT0zNTkyLGUuY2hvY2hpbmd0aGFpPTM1OTMsZS5jaG9jaG9ldGhhaT0zNTk2LGUuY2hvb2s9MzkyLGUuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4LGUuY2lldWNhcGFyZW5rb3JlYW49MTI4MjIsZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNCxlLmNpZXVja29yZWFuPTEyNjE2LGUuY2lldWNwYXJlbmtvcmVhbj0xMjgwOCxlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4LGUuY2lyY2xlPTk2NzUsZS5jaXJjbGVjb3B5cnQ9MTY5LGUuY2lyY2xlbXVsdGlwbHk9ODg1NSxlLmNpcmNsZW90PTg4NTcsZS5jaXJjbGVwbHVzPTg4NTMsZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyLGUuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MCxlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxLGUuY2lyY3VtZmxleD03MTAsZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzLGUuY2lyY3VtZmxleGNtYj03NzAsZS5jbGVhcj04OTk5LGUuY2xpY2thbHZlb2xhcj00NTAsZS5jbGlja2RlbnRhbD00NDgsZS5jbGlja2xhdGVyYWw9NDQ5LGUuY2xpY2tyZXRyb2ZsZXg9NDUxLGUuY2x1Yj05ODI3LGUuY2x1YnN1aXRibGFjaz05ODI3LGUuY2x1YnN1aXR3aGl0ZT05ODMxLGUuY21jdWJlZHNxdWFyZT0xMzIyMCxlLmNtb25vc3BhY2U9NjUzNDcsZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTYsZS5jb2FybWVuaWFuPTE0MDksZS5jb2xvbj01OCxlLmNvbG9ubW9uZXRhcnk9ODM1MyxlLmNvbG9ubW9ub3NwYWNlPTY1MzA2LGUuY29sb25zaWduPTgzNTMsZS5jb2xvbnNtYWxsPTY1MTA5LGUuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjEsZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwLGUuY29tbWE9NDQsZS5jb21tYWFib3ZlY21iPTc4NyxlLmNvbW1hYWJvdmVyaWdodGNtYj03ODksZS5jb21tYWFjY2VudD02MzE3MSxlLmNvbW1hYXJhYmljPTE1NDgsZS5jb21tYWFybWVuaWFuPTEzNzMsZS5jb21tYWluZmVyaW9yPTYzMjAxLGUuY29tbWFtb25vc3BhY2U9NjUyOTIsZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4LGUuY29tbWFyZXZlcnNlZG1vZD03MDEsZS5jb21tYXNtYWxsPTY1MTA0LGUuY29tbWFzdXBlcmlvcj02MzIwMixlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2LGUuY29tbWF0dXJuZWRtb2Q9Njk5LGUuY29tcGFzcz05Nzg4LGUuY29uZ3J1ZW50PTg3NzMsZS5jb250b3VyaW50ZWdyYWw9ODc1MCxlLmNvbnRyb2w9ODk2MyxlLmNvbnRyb2xBQ0s9NixlLmNvbnRyb2xCRUw9NyxlLmNvbnRyb2xCUz04LGUuY29udHJvbENBTj0yNCxlLmNvbnRyb2xDUj0xMyxlLmNvbnRyb2xEQzE9MTcsZS5jb250cm9sREMyPTE4LGUuY29udHJvbERDMz0xOSxlLmNvbnRyb2xEQzQ9MjAsZS5jb250cm9sREVMPTEyNyxlLmNvbnRyb2xETEU9MTYsZS5jb250cm9sRU09MjUsZS5jb250cm9sRU5RPTUsZS5jb250cm9sRU9UPTQsZS5jb250cm9sRVNDPTI3LGUuY29udHJvbEVUQj0yMyxlLmNvbnRyb2xFVFg9MyxlLmNvbnRyb2xGRj0xMixlLmNvbnRyb2xGUz0yOCxlLmNvbnRyb2xHUz0yOSxlLmNvbnRyb2xIVD05LGUuY29udHJvbExGPTEwLGUuY29udHJvbE5BSz0yMSxlLmNvbnRyb2xOVUxMPTAsZS5jb250cm9sUlM9MzAsZS5jb250cm9sU0k9MTUsZS5jb250cm9sU089MTQsZS5jb250cm9sU09UPTIsZS5jb250cm9sU1RYPTEsZS5jb250cm9sU1VCPTI2LGUuY29udHJvbFNZTj0yMixlLmNvbnRyb2xVUz0zMSxlLmNvbnRyb2xWVD0xMSxlLmNvcHlyaWdodD0xNjksZS5jb3B5cmlnaHRzYW5zPTYzNzIxLGUuY29weXJpZ2h0c2VyaWY9NjMxOTMsZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMCxlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4LGUuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OSxlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMSxlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OSxlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwLGUuY29ycG9yYXRpb25zcXVhcmU9MTMxODMsZS5jb3NxdWFyZT0xMzI1NSxlLmNvdmVya2dzcXVhcmU9MTMyNTQsZS5jcGFyZW49OTM3NCxlLmNydXplaXJvPTgzNTQsZS5jc3RyZXRjaGVkPTY2MyxlLmN1cmx5YW5kPTg5MTEsZS5jdXJseW9yPTg5MTAsZS5jdXJyZW5jeT0xNjQsZS5jeXJCcmV2ZT02MzE4NSxlLmN5ckZsZXg9NjMxODYsZS5jeXJicmV2ZT02MzE4OCxlLmN5cmZsZXg9NjMxODksZS5kPTEwMCxlLmRhYXJtZW5pYW49MTM4MCxlLmRhYmVuZ2FsaT0yNDcwLGUuZGFkYXJhYmljPTE1OTAsZS5kYWRldmE9MjM0MixlLmRhZGZpbmFsYXJhYmljPTY1MjE0LGUuZGFkaW5pdGlhbGFyYWJpYz02NTIxNSxlLmRhZG1lZGlhbGFyYWJpYz02NTIxNixlLmRhZ2VzaD0xNDY4LGUuZGFnZXNoaGVicmV3PTE0NjgsZS5kYWdnZXI9ODIyNCxlLmRhZ2dlcmRibD04MjI1LGUuZGFndWphcmF0aT0yNzI2LGUuZGFndXJtdWtoaT0yNTk4LGUuZGFoaXJhZ2FuYT0xMjM4NCxlLmRha2F0YWthbmE9MTI0ODAsZS5kYWxhcmFiaWM9MTU4MyxlLmRhbGV0PTE0OTEsZS5kYWxldGRhZ2VzaD02NDMwNyxlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3LGUuZGFsZXRoZWJyZXc9MTQ5MSxlLmRhbGZpbmFsYXJhYmljPTY1MTk0LGUuZGFtbWFhcmFiaWM9MTYxNSxlLmRhbW1hbG93YXJhYmljPTE2MTUsZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyLGUuZGFtbWF0YW5hcmFiaWM9MTYxMixlLmRhbmRhPTI0MDQsZS5kYXJnYWhlYnJldz0xNDQ3LGUuZGFyZ2FsZWZ0aGVicmV3PTE0NDcsZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NyxlLmRibEdyYXZlPTYzMTg3LGUuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5OCxlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NSxlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5LGUuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NixlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMSxlLmRibGFycm93bGVmdD04NjYwLGUuZGJsYXJyb3dyaWdodD04NjU4LGUuZGJsZGFuZGE9MjQwNSxlLmRibGdyYXZlPTYzMTkwLGUuZGJsZ3JhdmVjbWI9NzgzLGUuZGJsaW50ZWdyYWw9ODc0OCxlLmRibGxvd2xpbmU9ODIxNSxlLmRibGxvd2xpbmVjbWI9ODE5LGUuZGJsb3ZlcmxpbmVjbWI9ODMxLGUuZGJscHJpbWVtb2Q9Njk4LGUuZGJsdmVydGljYWxiYXI9ODIxNCxlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MixlLmRib3BvbW9mbz0xMjU1MyxlLmRic3F1YXJlPTEzMjU2LGUuZGNhcm9uPTI3MSxlLmRjZWRpbGxhPTc2OTcsZS5kY2lyY2xlPTk0MjcsZS5kY2lyY3VtZmxleGJlbG93PTc2OTksZS5kY3JvYXQ9MjczLGUuZGRhYmVuZ2FsaT0yNDY1LGUuZGRhZGV2YT0yMzM3LGUuZGRhZ3VqYXJhdGk9MjcyMSxlLmRkYWd1cm11a2hpPTI1OTMsZS5kZGFsYXJhYmljPTE2NzIsZS5kZGFsZmluYWxhcmFiaWM9NjQzOTMsZS5kZGRoYWRldmE9MjM5NixlLmRkaGFiZW5nYWxpPTI0NjYsZS5kZGhhZGV2YT0yMzM4LGUuZGRoYWd1amFyYXRpPTI3MjIsZS5kZGhhZ3VybXVraGk9MjU5NCxlLmRkb3RhY2NlbnQ9NzY5MSxlLmRkb3RiZWxvdz03NjkzLGUuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzLGUuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MyxlLmRlY3lyaWxsaWM9MTA3NixlLmRlZ3JlZT0xNzYsZS5kZWhpaGVicmV3PTE0NTMsZS5kZWhpcmFnYW5hPTEyMzkxLGUuZGVpY29wdGljPTEwMDcsZS5kZWthdGFrYW5hPTEyNDg3LGUuZGVsZXRlbGVmdD05MDAzLGUuZGVsZXRlcmlnaHQ9ODk5OCxlLmRlbHRhPTk0OCxlLmRlbHRhdHVybmVkPTM5NyxlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTIsZS5kZXpoPTY3NixlLmRoYWJlbmdhbGk9MjQ3MSxlLmRoYWRldmE9MjM0MyxlLmRoYWd1amFyYXRpPTI3MjcsZS5kaGFndXJtdWtoaT0yNTk5LGUuZGhvb2s9NTk5LGUuZGlhbHl0aWthdG9ub3M9OTAxLGUuZGlhbHl0aWthdG9ub3NjbWI9ODM2LGUuZGlhbW9uZD05ODMwLGUuZGlhbW9uZHN1aXR3aGl0ZT05ODI2LGUuZGllcmVzaXM9MTY4LGUuZGllcmVzaXNhY3V0ZT02MzE5MSxlLmRpZXJlc2lzYmVsb3djbWI9ODA0LGUuZGllcmVzaXNjbWI9Nzc2LGUuZGllcmVzaXNncmF2ZT02MzE5MixlLmRpZXJlc2lzdG9ub3M9OTAxLGUuZGloaXJhZ2FuYT0xMjM4NixlLmRpa2F0YWthbmE9MTI0ODIsZS5kaXR0b21hcms9MTIyOTEsZS5kaXZpZGU9MjQ3LGUuZGl2aWRlcz04NzM5LGUuZGl2aXNpb25zbGFzaD04NzI1LGUuZGplY3lyaWxsaWM9MTEwNixlLmRrc2hhZGU9OTYxOSxlLmRsaW5lYmVsb3c9NzY5NSxlLmRsc3F1YXJlPTEzMjA3LGUuZG1hY3Jvbj0yNzMsZS5kbW9ub3NwYWNlPTY1MzQ4LGUuZG5ibG9jaz05NjA0LGUuZG9jaGFkYXRoYWk9MzU5OCxlLmRvZGVrdGhhaT0zNjA0LGUuZG9oaXJhZ2FuYT0xMjM5MyxlLmRva2F0YWthbmE9MTI0ODksZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMyxlLmRvbGxhcm1vbm9zcGFjZT02NTI4NCxlLmRvbGxhcm9sZHN0eWxlPTYzMjY4LGUuZG9sbGFyc21hbGw9NjUxMjksZS5kb2xsYXJzdXBlcmlvcj02MzIwNCxlLmRvbmc9ODM2MyxlLmRvcnVzcXVhcmU9MTMwOTQsZS5kb3RhY2NlbnQ9NzI5LGUuZG90YWNjZW50Y21iPTc3NSxlLmRvdGJlbG93Y21iPTgwMyxlLmRvdGJlbG93Y29tYj04MDMsZS5kb3RrYXRha2FuYT0xMjUzOSxlLmRvdGxlc3NpPTMwNSxlLmRvdGxlc3NqPTYzMTY2LGUuZG90bGVzc2pzdHJva2Vob29rPTY0NCxlLmRvdG1hdGg9ODkwMSxlLmRvdHRlZGNpcmNsZT05Njc2LGUuZG91YmxleW9kcGF0YWg9NjQyODcsZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NyxlLmRvd250YWNrYmVsb3djbWI9Nzk4LGUuZG93bnRhY2ttb2Q9NzI1LGUuZHBhcmVuPTkzNzUsZS5kc3VwZXJpb3I9NjMyMTEsZS5kdGFpbD01OTgsZS5kdG9wYmFyPTM5NixlLmR1aGlyYWdhbmE9MTIzODksZS5kdWthdGFrYW5hPTEyNDg1LGUuZHo9NDk5LGUuZHphbHRvbmU9Njc1LGUuZHpjYXJvbj00NTQsZS5kemN1cmw9Njc3LGUuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OSxlLmR6ZWN5cmlsbGljPTExMDksZS5kemhlY3lyaWxsaWM9MTExOSxlLmU9MTAxLGUuZWFjdXRlPTIzMyxlLmVhcnRoPTk3OTMsZS5lYmVuZ2FsaT0yNDQ3LGUuZWJvcG9tb2ZvPTEyNTcyLGUuZWJyZXZlPTI3NyxlLmVjYW5kcmFkZXZhPTIzMTcsZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMSxlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzMsZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NyxlLmVjYXJvbj0yODMsZS5lY2VkaWxsYWJyZXZlPTc3MDksZS5lY2hhcm1lbmlhbj0xMzgxLGUuZWNoeWl3bmFybWVuaWFuPTE0MTUsZS5lY2lyY2xlPTk0MjgsZS5lY2lyY3VtZmxleD0yMzQsZS5lY2lyY3VtZmxleGFjdXRlPTc4NzEsZS5lY2lyY3VtZmxleGJlbG93PTc3MDUsZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4NzksZS5lY2lyY3VtZmxleGdyYXZlPTc4NzMsZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1LGUuZWNpcmN1bWZsZXh0aWxkZT03ODc3LGUuZWN5cmlsbGljPTExMDgsZS5lZGJsZ3JhdmU9NTE3LGUuZWRldmE9MjMxOSxlLmVkaWVyZXNpcz0yMzUsZS5lZG90PTI3OSxlLmVkb3RhY2NlbnQ9Mjc5LGUuZWRvdGJlbG93PTc4NjUsZS5lZWd1cm11a2hpPTI1NzUsZS5lZW1hdHJhZ3VybXVraGk9MjYzMSxlLmVmY3lyaWxsaWM9MTA5MixlLmVncmF2ZT0yMzIsZS5lZ3VqYXJhdGk9MjcwMyxlLmVoYXJtZW5pYW49MTM4MyxlLmVoYm9wb21vZm89MTI1NzMsZS5laGlyYWdhbmE9MTIzNjAsZS5laG9va2Fib3ZlPTc4NjcsZS5laWJvcG9tb2ZvPTEyNTc1LGUuZWlnaHQ9NTYsZS5laWdodGFyYWJpYz0xNjQwLGUuZWlnaHRiZW5nYWxpPTI1NDIsZS5laWdodGNpcmNsZT05MzE5LGUuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5LGUuZWlnaHRkZXZhPTI0MTQsZS5laWdodGVlbmNpcmNsZT05MzI5LGUuZWlnaHRlZW5wYXJlbj05MzQ5LGUuZWlnaHRlZW5wZXJpb2Q9OTM2OSxlLmVpZ2h0Z3VqYXJhdGk9Mjc5OCxlLmVpZ2h0Z3VybXVraGk9MjY3MCxlLmVpZ2h0aGFja2FyYWJpYz0xNjQwLGUuZWlnaHRoYW5nemhvdT0xMjMyOCxlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNSxlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOSxlLmVpZ2h0aW5mZXJpb3I9ODMyOCxlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0LGUuZWlnaHRvbGRzdHlsZT02MzI4OCxlLmVpZ2h0cGFyZW49OTMzOSxlLmVpZ2h0cGVyaW9kPTkzNTksZS5laWdodHBlcnNpYW49MTc4NCxlLmVpZ2h0cm9tYW49ODU2NyxlLmVpZ2h0c3VwZXJpb3I9ODMxMixlLmVpZ2h0dGhhaT0zNjcyLGUuZWludmVydGVkYnJldmU9NTE5LGUuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNSxlLmVrYXRha2FuYT0xMjQ1NixlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NixlLmVrb25rYXJndXJtdWtoaT0yNjc2LGUuZWtvcmVhbj0xMjYyOCxlLmVsY3lyaWxsaWM9MTA4MyxlLmVsZW1lbnQ9ODcxMixlLmVsZXZlbmNpcmNsZT05MzIyLGUuZWxldmVucGFyZW49OTM0MixlLmVsZXZlbnBlcmlvZD05MzYyLGUuZWxldmVucm9tYW49ODU3MCxlLmVsbGlwc2lzPTgyMzAsZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDIsZS5lbWFjcm9uPTI3NSxlLmVtYWNyb25hY3V0ZT03NzAzLGUuZW1hY3JvbmdyYXZlPTc3MDEsZS5lbWN5cmlsbGljPTEwODQsZS5lbWRhc2g9ODIxMixlLmVtZGFzaHZlcnRpY2FsPTY1MDczLGUuZW1vbm9zcGFjZT02NTM0OSxlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzEsZS5lbXB0eXNldD04NzA5LGUuZW5ib3BvbW9mbz0xMjU3OSxlLmVuY3lyaWxsaWM9MTA4NSxlLmVuZGFzaD04MjExLGUuZW5kYXNodmVydGljYWw9NjUwNzQsZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODcsZS5lbmc9MzMxLGUuZW5nYm9wb21vZm89MTI1ODEsZS5lbmdoZWN5cmlsbGljPTExODksZS5lbmhvb2tjeXJpbGxpYz0xMjI0LGUuZW5zcGFjZT04MTk0LGUuZW9nb25laz0yODEsZS5lb2tvcmVhbj0xMjYyNyxlLmVvcGVuPTYwMyxlLmVvcGVuY2xvc2VkPTY2NixlLmVvcGVucmV2ZXJzZWQ9NjA0LGUuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDYsZS5lb3BlbnJldmVyc2VkaG9vaz02MDUsZS5lcGFyZW49OTM3NixlLmVwc2lsb249OTQ5LGUuZXBzaWxvbnRvbm9zPTk0MSxlLmVxdWFsPTYxLGUuZXF1YWxtb25vc3BhY2U9NjUzMDksZS5lcXVhbHNtYWxsPTY1MTI2LGUuZXF1YWxzdXBlcmlvcj04MzE2LGUuZXF1aXZhbGVuY2U9ODgwMSxlLmVyYm9wb21vZm89MTI1ODIsZS5lcmN5cmlsbGljPTEwODgsZS5lcmV2ZXJzZWQ9NjAwLGUuZXJldmVyc2VkY3lyaWxsaWM9MTEwMSxlLmVzY3lyaWxsaWM9MTA4OSxlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NSxlLmVzaD02NDMsZS5lc2hjdXJsPTY0NixlLmVzaG9ydGRldmE9MjMxOCxlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NCxlLmVzaHJldmVyc2VkbG9vcD00MjYsZS5lc2hzcXVhdHJldmVyc2VkPTY0NSxlLmVzbWFsbGhpcmFnYW5hPTEyMzU5LGUuZXNtYWxsa2F0YWthbmE9MTI0NTUsZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NixlLmVzdGltYXRlZD04NDk0LGUuZXN1cGVyaW9yPTYzMjEyLGUuZXRhPTk1MSxlLmV0YXJtZW5pYW49MTM4NCxlLmV0YXRvbm9zPTk0MixlLmV0aD0yNDAsZS5ldGlsZGU9Nzg2OSxlLmV0aWxkZWJlbG93PTc3MDcsZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNSxlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNSxlLmV0bmFodGFoZWJyZXc9MTQyNSxlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjUsZS5ldHVybmVkPTQ3NyxlLmV1a29yZWFuPTEyNjQxLGUuZXVybz04MzY0LGUuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMyxlLmV2b3dlbHNpZ25kZXZhPTIzNzUsZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OSxlLmV4Y2xhbT0zMyxlLmV4Y2xhbWFybWVuaWFuPTEzNzIsZS5leGNsYW1kYmw9ODI1MixlLmV4Y2xhbWRvd249MTYxLGUuZXhjbGFtZG93bnNtYWxsPTYzMzkzLGUuZXhjbGFtbW9ub3NwYWNlPTY1MjgxLGUuZXhjbGFtc21hbGw9NjMyNjUsZS5leGlzdGVudGlhbD04NzA3LGUuZXpoPTY1OCxlLmV6aGNhcm9uPTQ5NSxlLmV6aGN1cmw9NjU5LGUuZXpocmV2ZXJzZWQ9NDQxLGUuZXpodGFpbD00NDIsZS5mPTEwMixlLmZhZGV2YT0yMzk4LGUuZmFndXJtdWtoaT0yNjU0LGUuZmFocmVuaGVpdD04NDU3LGUuZmF0aGFhcmFiaWM9MTYxNCxlLmZhdGhhbG93YXJhYmljPTE2MTQsZS5mYXRoYXRhbmFyYWJpYz0xNjExLGUuZmJvcG9tb2ZvPTEyNTUyLGUuZmNpcmNsZT05NDI5LGUuZmRvdGFjY2VudD03NzExLGUuZmVoYXJhYmljPTE2MDEsZS5mZWhhcm1lbmlhbj0xNDE0LGUuZmVoZmluYWxhcmFiaWM9NjUyMzQsZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1LGUuZmVobWVkaWFsYXJhYmljPTY1MjM2LGUuZmVpY29wdGljPTk5NyxlLmZlbWFsZT05NzkyLGUuZmY9NjQyNTYsZS5mZmk9NjQyNTksZS5mZmw9NjQyNjAsZS5maT02NDI1NyxlLmZpZnRlZW5jaXJjbGU9OTMyNixlLmZpZnRlZW5wYXJlbj05MzQ2LGUuZmlmdGVlbnBlcmlvZD05MzY2LGUuZmlndXJlZGFzaD04MjEwLGUuZmlsbGVkYm94PTk2MzIsZS5maWxsZWRyZWN0PTk2NDQsZS5maW5hbGthZj0xNDk4LGUuZmluYWxrYWZkYWdlc2g9NjQzMTQsZS5maW5hbGthZmRhZ2VzaGhlYnJldz02NDMxNCxlLmZpbmFsa2FmaGVicmV3PTE0OTgsZS5maW5hbG1lbT0xNTAxLGUuZmluYWxtZW1oZWJyZXc9MTUwMSxlLmZpbmFsbnVuPTE1MDMsZS5maW5hbG51bmhlYnJldz0xNTAzLGUuZmluYWxwZT0xNTA3LGUuZmluYWxwZWhlYnJldz0xNTA3LGUuZmluYWx0c2FkaT0xNTA5LGUuZmluYWx0c2FkaWhlYnJldz0xNTA5LGUuZmlyc3R0b25lY2hpbmVzZT03MTMsZS5maXNoZXllPTk2NzMsZS5maXRhY3lyaWxsaWM9MTEzOSxlLmZpdmU9NTMsZS5maXZlYXJhYmljPTE2MzcsZS5maXZlYmVuZ2FsaT0yNTM5LGUuZml2ZWNpcmNsZT05MzE2LGUuZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjYsZS5maXZlZGV2YT0yNDExLGUuZml2ZWVpZ2h0aHM9ODU0MSxlLmZpdmVndWphcmF0aT0yNzk1LGUuZml2ZWd1cm11a2hpPTI2NjcsZS5maXZlaGFja2FyYWJpYz0xNjM3LGUuZml2ZWhhbmd6aG91PTEyMzI1LGUuZml2ZWlkZW9ncmFwaGljcGFyZW49MTI4MzYsZS5maXZlaW5mZXJpb3I9ODMyNSxlLmZpdmVtb25vc3BhY2U9NjUzMDEsZS5maXZlb2xkc3R5bGU9NjMyODUsZS5maXZlcGFyZW49OTMzNixlLmZpdmVwZXJpb2Q9OTM1NixlLmZpdmVwZXJzaWFuPTE3ODEsZS5maXZlcm9tYW49ODU2NCxlLmZpdmVzdXBlcmlvcj04MzA5LGUuZml2ZXRoYWk9MzY2OSxlLmZsPTY0MjU4LGUuZmxvcmluPTQwMixlLmZtb25vc3BhY2U9NjUzNTAsZS5mbXNxdWFyZT0xMzIwOSxlLmZvZmFudGhhaT0zNjE1LGUuZm9mYXRoYWk9MzYxMyxlLmZvbmdtYW50aGFpPTM2NjMsZS5mb3JhbGw9ODcwNCxlLmZvdXI9NTIsZS5mb3VyYXJhYmljPTE2MzYsZS5mb3VyYmVuZ2FsaT0yNTM4LGUuZm91cmNpcmNsZT05MzE1LGUuZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjUsZS5mb3VyZGV2YT0yNDEwLGUuZm91cmd1amFyYXRpPTI3OTQsZS5mb3VyZ3VybXVraGk9MjY2NixlLmZvdXJoYWNrYXJhYmljPTE2MzYsZS5mb3VyaGFuZ3pob3U9MTIzMjQsZS5mb3VyaWRlb2dyYXBoaWNwYXJlbj0xMjgzNSxlLmZvdXJpbmZlcmlvcj04MzI0LGUuZm91cm1vbm9zcGFjZT02NTMwMCxlLmZvdXJudW1lcmF0b3JiZW5nYWxpPTI1NTEsZS5mb3Vyb2xkc3R5bGU9NjMyODQsZS5mb3VycGFyZW49OTMzNSxlLmZvdXJwZXJpb2Q9OTM1NSxlLmZvdXJwZXJzaWFuPTE3ODAsZS5mb3Vycm9tYW49ODU2MyxlLmZvdXJzdXBlcmlvcj04MzA4LGUuZm91cnRlZW5jaXJjbGU9OTMyNSxlLmZvdXJ0ZWVucGFyZW49OTM0NSxlLmZvdXJ0ZWVucGVyaW9kPTkzNjUsZS5mb3VydGhhaT0zNjY4LGUuZm91cnRodG9uZWNoaW5lc2U9NzE1LGUuZnBhcmVuPTkzNzcsZS5mcmFjdGlvbj04MjYwLGUuZnJhbmM9ODM1NSxlLmc9MTAzLGUuZ2FiZW5nYWxpPTI0NTUsZS5nYWN1dGU9NTAxLGUuZ2FkZXZhPTIzMjcsZS5nYWZhcmFiaWM9MTcxMSxlLmdhZmZpbmFsYXJhYmljPTY0NDAzLGUuZ2FmaW5pdGlhbGFyYWJpYz02NDQwNCxlLmdhZm1lZGlhbGFyYWJpYz02NDQwNSxlLmdhZ3VqYXJhdGk9MjcxMSxlLmdhZ3VybXVraGk9MjU4MyxlLmdhaGlyYWdhbmE9MTIzNjQsZS5nYWthdGFrYW5hPTEyNDYwLGUuZ2FtbWE9OTQ3LGUuZ2FtbWFsYXRpbnNtYWxsPTYxMSxlLmdhbW1hc3VwZXJpb3I9NzM2LGUuZ2FuZ2lhY29wdGljPTEwMDMsZS5nYm9wb21vZm89MTI1NTcsZS5nYnJldmU9Mjg3LGUuZ2Nhcm9uPTQ4NyxlLmdjZWRpbGxhPTI5MSxlLmdjaXJjbGU9OTQzMCxlLmdjaXJjdW1mbGV4PTI4NSxlLmdjb21tYWFjY2VudD0yOTEsZS5nZG90PTI4OSxlLmdkb3RhY2NlbnQ9Mjg5LGUuZ2VjeXJpbGxpYz0xMDc1LGUuZ2VoaXJhZ2FuYT0xMjM3MCxlLmdla2F0YWthbmE9MTI0NjYsZS5nZW9tZXRyaWNhbGx5ZXF1YWw9ODc4NSxlLmdlcmVzaGFjY2VudGhlYnJldz0xNDM2LGUuZ2VyZXNoaGVicmV3PTE1MjMsZS5nZXJlc2htdXFkYW1oZWJyZXc9MTQzNyxlLmdlcm1hbmRibHM9MjIzLGUuZ2Vyc2hheWltYWNjZW50aGVicmV3PTE0MzgsZS5nZXJzaGF5aW1oZWJyZXc9MTUyNCxlLmdldGFtYXJrPTEyMzA3LGUuZ2hhYmVuZ2FsaT0yNDU2LGUuZ2hhZGFybWVuaWFuPTEzOTQsZS5naGFkZXZhPTIzMjgsZS5naGFndWphcmF0aT0yNzEyLGUuZ2hhZ3VybXVraGk9MjU4NCxlLmdoYWluYXJhYmljPTE1OTQsZS5naGFpbmZpbmFsYXJhYmljPTY1MjMwLGUuZ2hhaW5pbml0aWFsYXJhYmljPTY1MjMxLGUuZ2hhaW5tZWRpYWxhcmFiaWM9NjUyMzIsZS5naGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MyxlLmdoZXN0cm9rZWN5cmlsbGljPTExNzEsZS5naGV1cHR1cm5jeXJpbGxpYz0xMTY5LGUuZ2hoYWRldmE9MjM5NCxlLmdoaGFndXJtdWtoaT0yNjUwLGUuZ2hvb2s9NjA4LGUuZ2h6c3F1YXJlPTEzMjAzLGUuZ2loaXJhZ2FuYT0xMjM2NixlLmdpa2F0YWthbmE9MTI0NjIsZS5naW1hcm1lbmlhbj0xMzc5LGUuZ2ltZWw9MTQ5MCxlLmdpbWVsZGFnZXNoPTY0MzA2LGUuZ2ltZWxkYWdlc2hoZWJyZXc9NjQzMDYsZS5naW1lbGhlYnJldz0xNDkwLGUuZ2plY3lyaWxsaWM9MTEwNyxlLmdsb3R0YWxpbnZlcnRlZHN0cm9rZT00NDYsZS5nbG90dGFsc3RvcD02NjAsZS5nbG90dGFsc3RvcGludmVydGVkPTY2MixlLmdsb3R0YWxzdG9wbW9kPTcwNCxlLmdsb3R0YWxzdG9wcmV2ZXJzZWQ9NjYxLGUuZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZD03MDUsZS5nbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3I9NzQwLGUuZ2xvdHRhbHN0b3BzdHJva2U9NjczLGUuZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZD02NzQsZS5nbWFjcm9uPTc3MTMsZS5nbW9ub3NwYWNlPTY1MzUxLGUuZ29oaXJhZ2FuYT0xMjM3MixlLmdva2F0YWthbmE9MTI0NjgsZS5ncGFyZW49OTM3OCxlLmdwYXNxdWFyZT0xMzIyOCxlLmdyYWRpZW50PTg3MTEsZS5ncmF2ZT05NixlLmdyYXZlYmVsb3djbWI9NzkwLGUuZ3JhdmVjbWI9NzY4LGUuZ3JhdmVjb21iPTc2OCxlLmdyYXZlZGV2YT0yMzg3LGUuZ3JhdmVsb3dtb2Q9NzE4LGUuZ3JhdmVtb25vc3BhY2U9NjUzNDQsZS5ncmF2ZXRvbmVjbWI9ODMyLGUuZ3JlYXRlcj02MixlLmdyZWF0ZXJlcXVhbD04ODA1LGUuZ3JlYXRlcmVxdWFsb3JsZXNzPTg5MjMsZS5ncmVhdGVybW9ub3NwYWNlPTY1MzEwLGUuZ3JlYXRlcm9yZXF1aXZhbGVudD04ODE5LGUuZ3JlYXRlcm9ybGVzcz04ODIzLGUuZ3JlYXRlcm92ZXJlcXVhbD04ODA3LGUuZ3JlYXRlcnNtYWxsPTY1MTI1LGUuZ3NjcmlwdD02MDksZS5nc3Ryb2tlPTQ4NSxlLmd1aGlyYWdhbmE9MTIzNjgsZS5ndWlsbGVtb3RsZWZ0PTE3MSxlLmd1aWxsZW1vdHJpZ2h0PTE4NyxlLmd1aWxzaW5nbGxlZnQ9ODI0OSxlLmd1aWxzaW5nbHJpZ2h0PTgyNTAsZS5ndWthdGFrYW5hPTEyNDY0LGUuZ3VyYW11c3F1YXJlPTEzMDgwLGUuZ3lzcXVhcmU9MTMyNTcsZS5oPTEwNCxlLmhhYWJraGFzaWFuY3lyaWxsaWM9MTE5MyxlLmhhYWx0b25lYXJhYmljPTE3MjksZS5oYWJlbmdhbGk9MjQ4OSxlLmhhZGVzY2VuZGVyY3lyaWxsaWM9MTIwMyxlLmhhZGV2YT0yMzYxLGUuaGFndWphcmF0aT0yNzQ1LGUuaGFndXJtdWtoaT0yNjE3LGUuaGFoYXJhYmljPTE1ODEsZS5oYWhmaW5hbGFyYWJpYz02NTE4NixlLmhhaGluaXRpYWxhcmFiaWM9NjUxODcsZS5oYWhpcmFnYW5hPTEyMzk5LGUuaGFobWVkaWFsYXJhYmljPTY1MTg4LGUuaGFpdHVzcXVhcmU9MTMwOTgsZS5oYWthdGFrYW5hPTEyNDk1LGUuaGFrYXRha2FuYWhhbGZ3aWR0aD02NTQxOCxlLmhhbGFudGd1cm11a2hpPTI2MzcsZS5oYW16YWFyYWJpYz0xNTY5LGUuaGFtemFsb3dhcmFiaWM9MTU2OSxlLmhhbmd1bGZpbGxlcj0xMjY0NCxlLmhhcmRzaWduY3lyaWxsaWM9MTA5OCxlLmhhcnBvb25sZWZ0YmFyYnVwPTg2MzYsZS5oYXJwb29ucmlnaHRiYXJidXA9ODY0MCxlLmhhc3F1YXJlPTEzMjU4LGUuaGF0YWZwYXRhaD0xNDU4LGUuaGF0YWZwYXRhaDE2PTE0NTgsZS5oYXRhZnBhdGFoMjM9MTQ1OCxlLmhhdGFmcGF0YWgyZj0xNDU4LGUuaGF0YWZwYXRhaGhlYnJldz0xNDU4LGUuaGF0YWZwYXRhaG5hcnJvd2hlYnJldz0xNDU4LGUuaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ1OCxlLmhhdGFmcGF0YWh3aWRlaGVicmV3PTE0NTgsZS5oYXRhZnFhbWF0cz0xNDU5LGUuaGF0YWZxYW1hdHMxYj0xNDU5LGUuaGF0YWZxYW1hdHMyOD0xNDU5LGUuaGF0YWZxYW1hdHMzND0xNDU5LGUuaGF0YWZxYW1hdHNoZWJyZXc9MTQ1OSxlLmhhdGFmcWFtYXRzbmFycm93aGVicmV3PTE0NTksZS5oYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ1OSxlLmhhdGFmcWFtYXRzd2lkZWhlYnJldz0xNDU5LGUuaGF0YWZzZWdvbD0xNDU3LGUuaGF0YWZzZWdvbDE3PTE0NTcsZS5oYXRhZnNlZ29sMjQ9MTQ1NyxlLmhhdGFmc2Vnb2wzMD0xNDU3LGUuaGF0YWZzZWdvbGhlYnJldz0xNDU3LGUuaGF0YWZzZWdvbG5hcnJvd2hlYnJldz0xNDU3LGUuaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXc9MTQ1NyxlLmhhdGFmc2Vnb2x3aWRlaGVicmV3PTE0NTcsZS5oYmFyPTI5NSxlLmhib3BvbW9mbz0xMjU1OSxlLmhicmV2ZWJlbG93PTc3MjMsZS5oY2VkaWxsYT03NzIxLGUuaGNpcmNsZT05NDMxLGUuaGNpcmN1bWZsZXg9MjkzLGUuaGRpZXJlc2lzPTc3MTksZS5oZG90YWNjZW50PTc3MTUsZS5oZG90YmVsb3c9NzcxNyxlLmhlPTE0OTIsZS5oZWFydD05ODI5LGUuaGVhcnRzdWl0YmxhY2s9OTgyOSxlLmhlYXJ0c3VpdHdoaXRlPTk4MjUsZS5oZWRhZ2VzaD02NDMwOCxlLmhlZGFnZXNoaGVicmV3PTY0MzA4LGUuaGVoYWx0b25lYXJhYmljPTE3MjksZS5oZWhhcmFiaWM9MTYwNyxlLmhlaGVicmV3PTE0OTIsZS5oZWhmaW5hbGFsdG9uZWFyYWJpYz02NDQyMyxlLmhlaGZpbmFsYWx0dHdvYXJhYmljPTY1MjU4LGUuaGVoZmluYWxhcmFiaWM9NjUyNTgsZS5oZWhoYW16YWFib3ZlZmluYWxhcmFiaWM9NjQ0MjEsZS5oZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjQ0MjAsZS5oZWhpbml0aWFsYWx0b25lYXJhYmljPTY0NDI0LGUuaGVoaW5pdGlhbGFyYWJpYz02NTI1OSxlLmhlaGlyYWdhbmE9MTI0MDgsZS5oZWhtZWRpYWxhbHRvbmVhcmFiaWM9NjQ0MjUsZS5oZWhtZWRpYWxhcmFiaWM9NjUyNjAsZS5oZWlzZWllcmFzcXVhcmU9MTMxNzksZS5oZWthdGFrYW5hPTEyNTA0LGUuaGVrYXRha2FuYWhhbGZ3aWR0aD02NTQyMSxlLmhla3V0YWFydXNxdWFyZT0xMzExMCxlLmhlbmdob29rPTYxNSxlLmhlcnV0dXNxdWFyZT0xMzExMyxlLmhldD0xNDk1LGUuaGV0aGVicmV3PTE0OTUsZS5oaG9vaz02MTQsZS5oaG9va3N1cGVyaW9yPTY4OSxlLmhpZXVoYWNpcmNsZWtvcmVhbj0xMjkyMyxlLmhpZXVoYXBhcmVua29yZWFuPTEyODI3LGUuaGlldWhjaXJjbGVrb3JlYW49MTI5MDksZS5oaWV1aGtvcmVhbj0xMjYyMixlLmhpZXVocGFyZW5rb3JlYW49MTI4MTMsZS5oaWhpcmFnYW5hPTEyNDAyLGUuaGlrYXRha2FuYT0xMjQ5OCxlLmhpa2F0YWthbmFoYWxmd2lkdGg9NjU0MTksZS5oaXJpcT0xNDYwLGUuaGlyaXExND0xNDYwLGUuaGlyaXEyMT0xNDYwLGUuaGlyaXEyZD0xNDYwLGUuaGlyaXFoZWJyZXc9MTQ2MCxlLmhpcmlxbmFycm93aGVicmV3PTE0NjAsZS5oaXJpcXF1YXJ0ZXJoZWJyZXc9MTQ2MCxlLmhpcmlxd2lkZWhlYnJldz0xNDYwLGUuaGxpbmViZWxvdz03ODMwLGUuaG1vbm9zcGFjZT02NTM1MixlLmhvYXJtZW5pYW49MTM5MixlLmhvaGlwdGhhaT0zNjI3LGUuaG9oaXJhZ2FuYT0xMjQxMSxlLmhva2F0YWthbmE9MTI1MDcsZS5ob2thdGFrYW5haGFsZndpZHRoPTY1NDIyLGUuaG9sYW09MTQ2NSxlLmhvbGFtMTk9MTQ2NSxlLmhvbGFtMjY9MTQ2NSxlLmhvbGFtMzI9MTQ2NSxlLmhvbGFtaGVicmV3PTE0NjUsZS5ob2xhbW5hcnJvd2hlYnJldz0xNDY1LGUuaG9sYW1xdWFydGVyaGVicmV3PTE0NjUsZS5ob2xhbXdpZGVoZWJyZXc9MTQ2NSxlLmhvbm9raHVrdGhhaT0zNjMwLGUuaG9va2Fib3ZlY29tYj03NzcsZS5ob29rY21iPTc3NyxlLmhvb2twYWxhdGFsaXplZGJlbG93Y21iPTgwMSxlLmhvb2tyZXRyb2ZsZXhiZWxvd2NtYj04MDIsZS5ob29uc3F1YXJlPTEzMTIyLGUuaG9yaWNvcHRpYz0xMDAxLGUuaG9yaXpvbnRhbGJhcj04MjEzLGUuaG9ybmNtYj03OTUsZS5ob3RzcHJpbmdzPTk4MzIsZS5ob3VzZT04OTYyLGUuaHBhcmVuPTkzNzksZS5oc3VwZXJpb3I9Njg4LGUuaHR1cm5lZD02MTMsZS5odWhpcmFnYW5hPTEyNDA1LGUuaHVpaXRvc3F1YXJlPTEzMTA3LGUuaHVrYXRha2FuYT0xMjUwMSxlLmh1a2F0YWthbmFoYWxmd2lkdGg9NjU0MjAsZS5odW5nYXJ1bWxhdXQ9NzMzLGUuaHVuZ2FydW1sYXV0Y21iPTc3OSxlLmh2PTQwNSxlLmh5cGhlbj00NSxlLmh5cGhlbmluZmVyaW9yPTYzMjA1LGUuaHlwaGVubW9ub3NwYWNlPTY1MjkzLGUuaHlwaGVuc21hbGw9NjUxMjMsZS5oeXBoZW5zdXBlcmlvcj02MzIwNixlLmh5cGhlbnR3bz04MjA4LGUuaT0xMDUsZS5pYWN1dGU9MjM3LGUuaWFjeXJpbGxpYz0xMTAzLGUuaWJlbmdhbGk9MjQzOSxlLmlib3BvbW9mbz0xMjU4MyxlLmlicmV2ZT0zMDEsZS5pY2Fyb249NDY0LGUuaWNpcmNsZT05NDMyLGUuaWNpcmN1bWZsZXg9MjM4LGUuaWN5cmlsbGljPTExMTAsZS5pZGJsZ3JhdmU9NTIxLGUuaWRlb2dyYXBoZWFydGhjaXJjbGU9MTI5NDMsZS5pZGVvZ3JhcGhmaXJlY2lyY2xlPTEyOTM5LGUuaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuPTEyODYzLGUuaWRlb2dyYXBoaWNjYWxscGFyZW49MTI4NTgsZS5pZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZT0xMjk2NSxlLmlkZW9ncmFwaGljY2xvc2U9MTIyOTQsZS5pZGVvZ3JhcGhpY2NvbW1hPTEyMjg5LGUuaWRlb2dyYXBoaWNjb21tYWxlZnQ9NjUzODAsZS5pZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW49MTI4NTUsZS5pZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGU9MTI5NjMsZS5pZGVvZ3JhcGhpY2VhcnRocGFyZW49MTI4NDcsZS5pZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbj0xMjg2MSxlLmlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlPTEyOTU3LGUuaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuPTEyODY0LGUuaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGU9MTI5NTAsZS5pZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuPTEyODU0LGUuaWRlb2dyYXBoaWNmaXJlcGFyZW49MTI4NDMsZS5pZGVvZ3JhcGhpY2hhdmVwYXJlbj0xMjg1MCxlLmlkZW9ncmFwaGljaGlnaGNpcmNsZT0xMjk2NCxlLmlkZW9ncmFwaGljaXRlcmF0aW9ubWFyaz0xMjI5MyxlLmlkZW9ncmFwaGljbGFib3JjaXJjbGU9MTI5NTIsZS5pZGVvZ3JhcGhpY2xhYm9ycGFyZW49MTI4NTYsZS5pZGVvZ3JhcGhpY2xlZnRjaXJjbGU9MTI5NjcsZS5pZGVvZ3JhcGhpY2xvd2NpcmNsZT0xMjk2NixlLmlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGU9MTI5NjksZS5pZGVvZ3JhcGhpY21ldGFscGFyZW49MTI4NDYsZS5pZGVvZ3JhcGhpY21vb25wYXJlbj0xMjg0MixlLmlkZW9ncmFwaGljbmFtZXBhcmVuPTEyODUyLGUuaWRlb2dyYXBoaWNwZXJpb2Q9MTIyOTAsZS5pZGVvZ3JhcGhpY3ByaW50Y2lyY2xlPTEyOTU4LGUuaWRlb2dyYXBoaWNyZWFjaHBhcmVuPTEyODY3LGUuaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbj0xMjg1NyxlLmlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbj0xMjg2MixlLmlkZW9ncmFwaGljcmlnaHRjaXJjbGU9MTI5NjgsZS5pZGVvZ3JhcGhpY3NlY3JldGNpcmNsZT0xMjk1MyxlLmlkZW9ncmFwaGljc2VsZnBhcmVuPTEyODY2LGUuaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW49MTI4NTEsZS5pZGVvZ3JhcGhpY3NwYWNlPTEyMjg4LGUuaWRlb2dyYXBoaWNzcGVjaWFscGFyZW49MTI4NTMsZS5pZGVvZ3JhcGhpY3N0b2NrcGFyZW49MTI4NDksZS5pZGVvZ3JhcGhpY3N0dWR5cGFyZW49MTI4NTksZS5pZGVvZ3JhcGhpY3N1bnBhcmVuPTEyODQ4LGUuaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbj0xMjg2MCxlLmlkZW9ncmFwaGljd2F0ZXJwYXJlbj0xMjg0NCxlLmlkZW9ncmFwaGljd29vZHBhcmVuPTEyODQ1LGUuaWRlb2dyYXBoaWN6ZXJvPTEyMjk1LGUuaWRlb2dyYXBobWV0YWxjaXJjbGU9MTI5NDIsZS5pZGVvZ3JhcGhtb29uY2lyY2xlPTEyOTM4LGUuaWRlb2dyYXBobmFtZWNpcmNsZT0xMjk0OCxlLmlkZW9ncmFwaHN1bmNpcmNsZT0xMjk0NCxlLmlkZW9ncmFwaHdhdGVyY2lyY2xlPTEyOTQwLGUuaWRlb2dyYXBod29vZGNpcmNsZT0xMjk0MSxlLmlkZXZhPTIzMTEsZS5pZGllcmVzaXM9MjM5LGUuaWRpZXJlc2lzYWN1dGU9NzcyNyxlLmlkaWVyZXNpc2N5cmlsbGljPTEyNTMsZS5pZG90YmVsb3c9Nzg4MyxlLmllYnJldmVjeXJpbGxpYz0xMjM5LGUuaWVjeXJpbGxpYz0xMDc3LGUuaWV1bmdhY2lyY2xla29yZWFuPTEyOTE3LGUuaWV1bmdhcGFyZW5rb3JlYW49MTI4MjEsZS5pZXVuZ2NpcmNsZWtvcmVhbj0xMjkwMyxlLmlldW5na29yZWFuPTEyNjE1LGUuaWV1bmdwYXJlbmtvcmVhbj0xMjgwNyxlLmlncmF2ZT0yMzYsZS5pZ3VqYXJhdGk9MjY5NSxlLmlndXJtdWtoaT0yNTY3LGUuaWhpcmFnYW5hPTEyMzU2LGUuaWhvb2thYm92ZT03ODgxLGUuaWliZW5nYWxpPTI0NDAsZS5paWN5cmlsbGljPTEwODAsZS5paWRldmE9MjMxMixlLmlpZ3VqYXJhdGk9MjY5NixlLmlpZ3VybXVraGk9MjU2OCxlLmlpbWF0cmFndXJtdWtoaT0yNjI0LGUuaWludmVydGVkYnJldmU9NTIzLGUuaWlzaG9ydGN5cmlsbGljPTEwODEsZS5paXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NixlLmlpdm93ZWxzaWduZGV2YT0yMzY4LGUuaWl2b3dlbHNpZ25ndWphcmF0aT0yNzUyLGUuaWo9MzA3LGUuaWthdGFrYW5hPTEyNDUyLGUuaWthdGFrYW5haGFsZndpZHRoPTY1Mzk0LGUuaWtvcmVhbj0xMjY0MyxlLmlsZGU9NzMyLGUuaWx1eWhlYnJldz0xNDUyLGUuaW1hY3Jvbj0yOTksZS5pbWFjcm9uY3lyaWxsaWM9MTI1MSxlLmltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWw9ODc4NyxlLmltYXRyYWd1cm11a2hpPTI2MjMsZS5pbW9ub3NwYWNlPTY1MzUzLGUuaW5jcmVtZW50PTg3MTAsZS5pbmZpbml0eT04NzM0LGUuaW5pYXJtZW5pYW49MTM4NyxlLmludGVncmFsPTg3NDcsZS5pbnRlZ3JhbGJvdHRvbT04OTkzLGUuaW50ZWdyYWxidD04OTkzLGUuaW50ZWdyYWxleD02MzczMyxlLmludGVncmFsdG9wPTg5OTIsZS5pbnRlZ3JhbHRwPTg5OTIsZS5pbnRlcnNlY3Rpb249ODc0NSxlLmludGlzcXVhcmU9MTMwNjEsZS5pbnZidWxsZXQ9OTY4OCxlLmludmNpcmNsZT05Njg5LGUuaW52c21pbGVmYWNlPTk3ODcsZS5pb2N5cmlsbGljPTExMDUsZS5pb2dvbmVrPTMwMyxlLmlvdGE9OTUzLGUuaW90YWRpZXJlc2lzPTk3MCxlLmlvdGFkaWVyZXNpc3Rvbm9zPTkxMixlLmlvdGFsYXRpbj02MTcsZS5pb3RhdG9ub3M9OTQzLGUuaXBhcmVuPTkzODAsZS5pcmlndXJtdWtoaT0yNjc0LGUuaXNtYWxsaGlyYWdhbmE9MTIzNTUsZS5pc21hbGxrYXRha2FuYT0xMjQ1MSxlLmlzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg0LGUuaXNzaGFyYmVuZ2FsaT0yNTU0LGUuaXN0cm9rZT02MTYsZS5pc3VwZXJpb3I9NjMyMTMsZS5pdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NSxlLml0ZXJhdGlvbmthdGFrYW5hPTEyNTQxLGUuaXRpbGRlPTI5NyxlLml0aWxkZWJlbG93PTc3MjUsZS5pdWJvcG9tb2ZvPTEyNTg1LGUuaXVjeXJpbGxpYz0xMTAyLGUuaXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NSxlLml2b3dlbHNpZ25kZXZhPTIzNjcsZS5pdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MSxlLml6aGl0c2FjeXJpbGxpYz0xMTQxLGUuaXpoaXRzYWRibGdyYXZlY3lyaWxsaWM9MTE0MyxlLmo9MTA2LGUuamFhcm1lbmlhbj0xMzkzLGUuamFiZW5nYWxpPTI0NjAsZS5qYWRldmE9MjMzMixlLmphZ3VqYXJhdGk9MjcxNixlLmphZ3VybXVraGk9MjU4OCxlLmpib3BvbW9mbz0xMjU2MCxlLmpjYXJvbj00OTYsZS5qY2lyY2xlPTk0MzMsZS5qY2lyY3VtZmxleD0zMDksZS5qY3Jvc3NlZHRhaWw9NjY5LGUuamRvdGxlc3NzdHJva2U9NjA3LGUuamVjeXJpbGxpYz0xMTEyLGUuamVlbWFyYWJpYz0xNTgwLGUuamVlbWZpbmFsYXJhYmljPTY1MTgyLGUuamVlbWluaXRpYWxhcmFiaWM9NjUxODMsZS5qZWVtbWVkaWFsYXJhYmljPTY1MTg0LGUuamVoYXJhYmljPTE2ODgsZS5qZWhmaW5hbGFyYWJpYz02NDM5NSxlLmpoYWJlbmdhbGk9MjQ2MSxlLmpoYWRldmE9MjMzMyxlLmpoYWd1amFyYXRpPTI3MTcsZS5qaGFndXJtdWtoaT0yNTg5LGUuamhlaGFybWVuaWFuPTE0MDMsZS5qaXM9MTIyOTIsZS5qbW9ub3NwYWNlPTY1MzU0LGUuanBhcmVuPTkzODEsZS5qc3VwZXJpb3I9NjkwLGUuaz0xMDcsZS5rYWJhc2hraXJjeXJpbGxpYz0xMTg1LGUua2FiZW5nYWxpPTI0NTMsZS5rYWN1dGU9NzcyOSxlLmthY3lyaWxsaWM9MTA4MixlLmthZGVzY2VuZGVyY3lyaWxsaWM9MTE3OSxlLmthZGV2YT0yMzI1LGUua2FmPTE0OTksZS5rYWZhcmFiaWM9MTYwMyxlLmthZmRhZ2VzaD02NDMxNSxlLmthZmRhZ2VzaGhlYnJldz02NDMxNSxlLmthZmZpbmFsYXJhYmljPTY1MjQyLGUua2FmaGVicmV3PTE0OTksZS5rYWZpbml0aWFsYXJhYmljPTY1MjQzLGUua2FmbWVkaWFsYXJhYmljPTY1MjQ0LGUua2FmcmFmZWhlYnJldz02NDMzMyxlLmthZ3VqYXJhdGk9MjcwOSxlLmthZ3VybXVraGk9MjU4MSxlLmthaGlyYWdhbmE9MTIzNjMsZS5rYWhvb2tjeXJpbGxpYz0xMjIwLGUua2FrYXRha2FuYT0xMjQ1OSxlLmtha2F0YWthbmFoYWxmd2lkdGg9NjUzOTgsZS5rYXBwYT05NTQsZS5rYXBwYXN5bWJvbGdyZWVrPTEwMDgsZS5rYXB5ZW91bm1pZXVta29yZWFuPTEyNjU3LGUua2FweWVvdW5waGlldXBoa29yZWFuPTEyNjc2LGUua2FweWVvdW5waWV1cGtvcmVhbj0xMjY2NCxlLmthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbj0xMjY2NSxlLmthcm9yaWlzcXVhcmU9MTMwNjksZS5rYXNoaWRhYXV0b2FyYWJpYz0xNjAwLGUua2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljPTE2MDAsZS5rYXNtYWxsa2F0YWthbmE9MTI1MzMsZS5rYXNxdWFyZT0xMzE4OCxlLmthc3JhYXJhYmljPTE2MTYsZS5rYXNyYXRhbmFyYWJpYz0xNjEzLGUua2FzdHJva2VjeXJpbGxpYz0xMTgzLGUua2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aD02NTM5MixlLmthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgxLGUua2JvcG9tb2ZvPTEyNTU4LGUua2NhbHNxdWFyZT0xMzE5MyxlLmtjYXJvbj00ODksZS5rY2VkaWxsYT0zMTEsZS5rY2lyY2xlPTk0MzQsZS5rY29tbWFhY2NlbnQ9MzExLGUua2RvdGJlbG93PTc3MzEsZS5rZWhhcm1lbmlhbj0xNDEyLGUua2VoaXJhZ2FuYT0xMjM2OSxlLmtla2F0YWthbmE9MTI0NjUsZS5rZWthdGFrYW5haGFsZndpZHRoPTY1NDAxLGUua2VuYXJtZW5pYW49MTM5MSxlLmtlc21hbGxrYXRha2FuYT0xMjUzNCxlLmtncmVlbmxhbmRpYz0zMTIsZS5raGFiZW5nYWxpPTI0NTQsZS5raGFjeXJpbGxpYz0xMDkzLGUua2hhZGV2YT0yMzI2LGUua2hhZ3VqYXJhdGk9MjcxMCxlLmtoYWd1cm11a2hpPTI1ODIsZS5raGFoYXJhYmljPTE1ODIsZS5raGFoZmluYWxhcmFiaWM9NjUxOTAsZS5raGFoaW5pdGlhbGFyYWJpYz02NTE5MSxlLmtoYWhtZWRpYWxhcmFiaWM9NjUxOTIsZS5raGVpY29wdGljPTk5OSxlLmtoaGFkZXZhPTIzOTMsZS5raGhhZ3VybXVraGk9MjY0OSxlLmtoaWV1a2hhY2lyY2xla29yZWFuPTEyOTIwLGUua2hpZXVraGFwYXJlbmtvcmVhbj0xMjgyNCxlLmtoaWV1a2hjaXJjbGVrb3JlYW49MTI5MDYsZS5raGlldWtoa29yZWFuPTEyNjE5LGUua2hpZXVraHBhcmVua29yZWFuPTEyODEwLGUua2hva2hhaXRoYWk9MzU4NixlLmtob2tob250aGFpPTM1ODksZS5raG9raHVhdHRoYWk9MzU4NyxlLmtob2tod2FpdGhhaT0zNTg4LGUua2hvbXV0dGhhaT0zNjc1LGUua2hvb2s9NDA5LGUua2hvcmFraGFuZ3RoYWk9MzU5MCxlLmtoenNxdWFyZT0xMzIwMSxlLmtpaGlyYWdhbmE9MTIzNjUsZS5raWthdGFrYW5hPTEyNDYxLGUua2lrYXRha2FuYWhhbGZ3aWR0aD02NTM5OSxlLmtpcm9ndXJhbXVzcXVhcmU9MTMwNzcsZS5raXJvbWVldG9ydXNxdWFyZT0xMzA3OCxlLmtpcm9zcXVhcmU9MTMwNzYsZS5raXllb2thY2lyY2xla29yZWFuPTEyOTEwLGUua2l5ZW9rYXBhcmVua29yZWFuPTEyODE0LGUua2l5ZW9rY2lyY2xla29yZWFuPTEyODk2LGUua2l5ZW9ra29yZWFuPTEyNTkzLGUua2l5ZW9rcGFyZW5rb3JlYW49MTI4MDAsZS5raXllb2tzaW9za29yZWFuPTEyNTk1LGUua2plY3lyaWxsaWM9MTExNixlLmtsaW5lYmVsb3c9NzczMyxlLmtsc3F1YXJlPTEzMjA4LGUua21jdWJlZHNxdWFyZT0xMzIyMixlLmttb25vc3BhY2U9NjUzNTU7ZS5rbXNxdWFyZWRzcXVhcmU9MTMyMTgsZS5rb2hpcmFnYW5hPTEyMzcxLGUua29obXNxdWFyZT0xMzI0OCxlLmtva2FpdGhhaT0zNTg1LGUua29rYXRha2FuYT0xMjQ2NyxlLmtva2F0YWthbmFoYWxmd2lkdGg9NjU0MDIsZS5rb29wb3NxdWFyZT0xMzA4NixlLmtvcHBhY3lyaWxsaWM9MTE1MyxlLmtvcmVhbnN0YW5kYXJkc3ltYm9sPTEyOTI3LGUua29yb25pc2NtYj04MzUsZS5rcGFyZW49OTM4MixlLmtwYXNxdWFyZT0xMzIyNixlLmtzaWN5cmlsbGljPTExMzUsZS5rdHNxdWFyZT0xMzI2MyxlLmt0dXJuZWQ9NjcwLGUua3VoaXJhZ2FuYT0xMjM2NyxlLmt1a2F0YWthbmE9MTI0NjMsZS5rdWthdGFrYW5haGFsZndpZHRoPTY1NDAwLGUua3ZzcXVhcmU9MTMyNDAsZS5rd3NxdWFyZT0xMzI0NixlLmw9MTA4LGUubGFiZW5nYWxpPTI0ODIsZS5sYWN1dGU9MzE0LGUubGFkZXZhPTIzNTQsZS5sYWd1amFyYXRpPTI3MzgsZS5sYWd1cm11a2hpPTI2MTAsZS5sYWtraGFuZ3lhb3RoYWk9MzY1MyxlLmxhbWFsZWZmaW5hbGFyYWJpYz02NTI3NixlLmxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUyNzIsZS5sYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY1MjcxLGUubGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYz02NTI3NCxlLmxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWM9NjUyNzMsZS5sYW1hbGVmaXNvbGF0ZWRhcmFiaWM9NjUyNzUsZS5sYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljPTY1MjcwLGUubGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYz02NTI2OSxlLmxhbWFyYWJpYz0xNjA0LGUubGFtYmRhPTk1NSxlLmxhbWJkYXN0cm9rZT00MTEsZS5sYW1lZD0xNTAwLGUubGFtZWRkYWdlc2g9NjQzMTYsZS5sYW1lZGRhZ2VzaGhlYnJldz02NDMxNixlLmxhbWVkaGVicmV3PTE1MDAsZS5sYW1maW5hbGFyYWJpYz02NTI0NixlLmxhbWhhaGluaXRpYWxhcmFiaWM9NjQ3MTQsZS5sYW1pbml0aWFsYXJhYmljPTY1MjQ3LGUubGFtamVlbWluaXRpYWxhcmFiaWM9NjQ3MTMsZS5sYW1raGFoaW5pdGlhbGFyYWJpYz02NDcxNSxlLmxhbWxhbWhlaGlzb2xhdGVkYXJhYmljPTY1MDEwLGUubGFtbWVkaWFsYXJhYmljPTY1MjQ4LGUubGFtbWVlbWhhaGluaXRpYWxhcmFiaWM9NjQ5MDQsZS5sYW1tZWVtaW5pdGlhbGFyYWJpYz02NDcxNixlLmxhcmdlY2lyY2xlPTk3MTEsZS5sYmFyPTQxMCxlLmxiZWx0PTYyMCxlLmxib3BvbW9mbz0xMjU1NixlLmxjYXJvbj0zMTgsZS5sY2VkaWxsYT0zMTYsZS5sY2lyY2xlPTk0MzUsZS5sY2lyY3VtZmxleGJlbG93PTc3NDEsZS5sY29tbWFhY2NlbnQ9MzE2LGUubGRvdD0zMjAsZS5sZG90YWNjZW50PTMyMCxlLmxkb3RiZWxvdz03NzM1LGUubGRvdGJlbG93bWFjcm9uPTc3MzcsZS5sZWZ0YW5nbGVhYm92ZWNtYj03OTQsZS5sZWZ0dGFja2JlbG93Y21iPTc5MixlLmxlc3M9NjAsZS5sZXNzZXF1YWw9ODgwNCxlLmxlc3NlcXVhbG9yZ3JlYXRlcj04OTIyLGUubGVzc21vbm9zcGFjZT02NTMwOCxlLmxlc3NvcmVxdWl2YWxlbnQ9ODgxOCxlLmxlc3NvcmdyZWF0ZXI9ODgyMixlLmxlc3NvdmVyZXF1YWw9ODgwNixlLmxlc3NzbWFsbD02NTEyNCxlLmxlemg9NjIyLGUubGZibG9jaz05NjEyLGUubGhvb2tyZXRyb2ZsZXg9NjIxLGUubGlyYT04MzU2LGUubGl3bmFybWVuaWFuPTEzODgsZS5saj00NTcsZS5samVjeXJpbGxpYz0xMTEzLGUubGw9NjMxNjgsZS5sbGFkZXZhPTIzNTUsZS5sbGFndWphcmF0aT0yNzM5LGUubGxpbmViZWxvdz03NzM5LGUubGxsYWRldmE9MjM1NixlLmxsdm9jYWxpY2JlbmdhbGk9MjUyOSxlLmxsdm9jYWxpY2RldmE9MjQwMSxlLmxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMSxlLmxsdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMyxlLmxtaWRkbGV0aWxkZT02MTksZS5sbW9ub3NwYWNlPTY1MzU2LGUubG1zcXVhcmU9MTMyNjQsZS5sb2NodWxhdGhhaT0zNjI4LGUubG9naWNhbGFuZD04NzQzLGUubG9naWNhbG5vdD0xNzIsZS5sb2dpY2Fsbm90cmV2ZXJzZWQ9ODk3NixlLmxvZ2ljYWxvcj04NzQ0LGUubG9saW5ndGhhaT0zNjIxLGUubG9uZ3M9MzgzLGUubG93bGluZWNlbnRlcmxpbmU9NjUxMDIsZS5sb3dsaW5lY21iPTgxOCxlLmxvd2xpbmVkYXNoZWQ9NjUxMDEsZS5sb3plbmdlPTk2NzQsZS5scGFyZW49OTM4MyxlLmxzbGFzaD0zMjIsZS5sc3F1YXJlPTg0NjcsZS5sc3VwZXJpb3I9NjMyMTQsZS5sdHNoYWRlPTk2MTcsZS5sdXRoYWk9MzYyMixlLmx2b2NhbGljYmVuZ2FsaT0yNDQ0LGUubHZvY2FsaWNkZXZhPTIzMTYsZS5sdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMCxlLmx2b2NhbGljdm93ZWxzaWduZGV2YT0yNDAyLGUubHhzcXVhcmU9MTMyNjcsZS5tPTEwOSxlLm1hYmVuZ2FsaT0yNDc4LGUubWFjcm9uPTE3NSxlLm1hY3JvbmJlbG93Y21iPTgxNyxlLm1hY3JvbmNtYj03NzIsZS5tYWNyb25sb3dtb2Q9NzE3LGUubWFjcm9ubW9ub3NwYWNlPTY1NTA3LGUubWFjdXRlPTc3NDMsZS5tYWRldmE9MjM1MCxlLm1hZ3VqYXJhdGk9MjczNCxlLm1hZ3VybXVraGk9MjYwNixlLm1haGFwYWtoaGVicmV3PTE0NDQsZS5tYWhhcGFraGxlZnRoZWJyZXc9MTQ0NCxlLm1haGlyYWdhbmE9MTI0MTQsZS5tYWljaGF0dGF3YWxvd2xlZnR0aGFpPTYzNjM3LGUubWFpY2hhdHRhd2Fsb3dyaWdodHRoYWk9NjM2MzYsZS5tYWljaGF0dGF3YXRoYWk9MzY1OSxlLm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaT02MzYzNSxlLm1haWVrbG93bGVmdHRoYWk9NjM2MjgsZS5tYWlla2xvd3JpZ2h0dGhhaT02MzYyNyxlLm1haWVrdGhhaT0zNjU2LGUubWFpZWt1cHBlcmxlZnR0aGFpPTYzNjI2LGUubWFpaGFuYWthdGxlZnR0aGFpPTYzNjIwLGUubWFpaGFuYWthdHRoYWk9MzYzMyxlLm1haXRhaWtodWxlZnR0aGFpPTYzNjI1LGUubWFpdGFpa2h1dGhhaT0zNjU1LGUubWFpdGhvbG93bGVmdHRoYWk9NjM2MzEsZS5tYWl0aG9sb3dyaWdodHRoYWk9NjM2MzAsZS5tYWl0aG90aGFpPTM2NTcsZS5tYWl0aG91cHBlcmxlZnR0aGFpPTYzNjI5LGUubWFpdHJpbG93bGVmdHRoYWk9NjM2MzQsZS5tYWl0cmlsb3dyaWdodHRoYWk9NjM2MzMsZS5tYWl0cml0aGFpPTM2NTgsZS5tYWl0cml1cHBlcmxlZnR0aGFpPTYzNjMyLGUubWFpeWFtb2t0aGFpPTM2NTQsZS5tYWthdGFrYW5hPTEyNTEwLGUubWFrYXRha2FuYWhhbGZ3aWR0aD02NTQyMyxlLm1hbGU9OTc5NCxlLm1hbnN5b25zcXVhcmU9MTMxMjcsZS5tYXFhZmhlYnJldz0xNDcwLGUubWFycz05Nzk0LGUubWFzb3JhY2lyY2xlaGVicmV3PTE0NTUsZS5tYXNxdWFyZT0xMzE4NyxlLm1ib3BvbW9mbz0xMjU1MSxlLm1ic3F1YXJlPTEzMjY4LGUubWNpcmNsZT05NDM2LGUubWN1YmVkc3F1YXJlPTEzMjIxLGUubWRvdGFjY2VudD03NzQ1LGUubWRvdGJlbG93PTc3NDcsZS5tZWVtYXJhYmljPTE2MDUsZS5tZWVtZmluYWxhcmFiaWM9NjUyNTAsZS5tZWVtaW5pdGlhbGFyYWJpYz02NTI1MSxlLm1lZW1tZWRpYWxhcmFiaWM9NjUyNTIsZS5tZWVtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MjEsZS5tZWVtbWVlbWlzb2xhdGVkYXJhYmljPTY0NTg0LGUubWVldG9ydXNxdWFyZT0xMzEzMyxlLm1laGlyYWdhbmE9MTI0MTcsZS5tZWl6aWVyYXNxdWFyZT0xMzE4MixlLm1la2F0YWthbmE9MTI1MTMsZS5tZWthdGFrYW5haGFsZndpZHRoPTY1NDI2LGUubWVtPTE1MDIsZS5tZW1kYWdlc2g9NjQzMTgsZS5tZW1kYWdlc2hoZWJyZXc9NjQzMTgsZS5tZW1oZWJyZXc9MTUwMixlLm1lbmFybWVuaWFuPTEzOTYsZS5tZXJraGFoZWJyZXc9MTQ0NSxlLm1lcmtoYWtlZnVsYWhlYnJldz0xNDQ2LGUubWVya2hha2VmdWxhbGVmdGhlYnJldz0xNDQ2LGUubWVya2hhbGVmdGhlYnJldz0xNDQ1LGUubWhvb2s9NjI1LGUubWh6c3F1YXJlPTEzMjAyLGUubWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGg9NjUzODEsZS5taWRkb3Q9MTgzLGUubWlldW1hY2lyY2xla29yZWFuPTEyOTE0LGUubWlldW1hcGFyZW5rb3JlYW49MTI4MTgsZS5taWV1bWNpcmNsZWtvcmVhbj0xMjkwMCxlLm1pZXVta29yZWFuPTEyNjA5LGUubWlldW1wYW5zaW9za29yZWFuPTEyNjU2LGUubWlldW1wYXJlbmtvcmVhbj0xMjgwNCxlLm1pZXVtcGlldXBrb3JlYW49MTI2NTQsZS5taWV1bXNpb3Nrb3JlYW49MTI2NTUsZS5taWhpcmFnYW5hPTEyNDE1LGUubWlrYXRha2FuYT0xMjUxMSxlLm1pa2F0YWthbmFoYWxmd2lkdGg9NjU0MjQsZS5taW51cz04NzIyLGUubWludXNiZWxvd2NtYj04MDAsZS5taW51c2NpcmNsZT04ODU0LGUubWludXNtb2Q9NzI3LGUubWludXNwbHVzPTg3MjMsZS5taW51dGU9ODI0MixlLm1pcmliYWFydXNxdWFyZT0xMzEzMCxlLm1pcmlzcXVhcmU9MTMxMjksZS5tbG9uZ2xlZ3R1cm5lZD02MjQsZS5tbHNxdWFyZT0xMzIwNixlLm1tY3ViZWRzcXVhcmU9MTMyMTksZS5tbW9ub3NwYWNlPTY1MzU3LGUubW1zcXVhcmVkc3F1YXJlPTEzMjE1LGUubW9oaXJhZ2FuYT0xMjQxOCxlLm1vaG1zcXVhcmU9MTMyNDksZS5tb2thdGFrYW5hPTEyNTE0LGUubW9rYXRha2FuYWhhbGZ3aWR0aD02NTQyNyxlLm1vbHNxdWFyZT0xMzI3MCxlLm1vbWF0aGFpPTM2MTcsZS5tb3ZlcnNzcXVhcmU9MTMyMjMsZS5tb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjI0LGUubXBhcmVuPTkzODQsZS5tcGFzcXVhcmU9MTMyMjcsZS5tc3NxdWFyZT0xMzIzNSxlLm1zdXBlcmlvcj02MzIxNSxlLm10dXJuZWQ9NjIzLGUubXU9MTgxLGUubXUxPTE4MSxlLm11YXNxdWFyZT0xMzE4NixlLm11Y2hncmVhdGVyPTg4MTEsZS5tdWNobGVzcz04ODEwLGUubXVmc3F1YXJlPTEzMTk2LGUubXVncmVlaz05NTYsZS5tdWdzcXVhcmU9MTMxOTcsZS5tdWhpcmFnYW5hPTEyNDE2LGUubXVrYXRha2FuYT0xMjUxMixlLm11a2F0YWthbmFoYWxmd2lkdGg9NjU0MjUsZS5tdWxzcXVhcmU9MTMyMDUsZS5tdWx0aXBseT0yMTUsZS5tdW1zcXVhcmU9MTMyMTEsZS5tdW5haGhlYnJldz0xNDQzLGUubXVuYWhsZWZ0aGVicmV3PTE0NDMsZS5tdXNpY2Fsbm90ZT05ODM0LGUubXVzaWNhbG5vdGVkYmw9OTgzNSxlLm11c2ljZmxhdHNpZ249OTgzNyxlLm11c2ljc2hhcnBzaWduPTk4MzksZS5tdXNzcXVhcmU9MTMyMzQsZS5tdXZzcXVhcmU9MTMyMzgsZS5tdXdzcXVhcmU9MTMyNDQsZS5tdm1lZ2FzcXVhcmU9MTMyNDEsZS5tdnNxdWFyZT0xMzIzOSxlLm13bWVnYXNxdWFyZT0xMzI0NyxlLm13c3F1YXJlPTEzMjQ1LGUubj0xMTAsZS5uYWJlbmdhbGk9MjQ3MixlLm5hYmxhPTg3MTEsZS5uYWN1dGU9MzI0LGUubmFkZXZhPTIzNDQsZS5uYWd1amFyYXRpPTI3MjgsZS5uYWd1cm11a2hpPTI2MDAsZS5uYWhpcmFnYW5hPTEyMzk0LGUubmFrYXRha2FuYT0xMjQ5MCxlLm5ha2F0YWthbmFoYWxmd2lkdGg9NjU0MTMsZS5uYXBvc3Ryb3BoZT0zMjksZS5uYXNxdWFyZT0xMzE4NSxlLm5ib3BvbW9mbz0xMjU1NSxlLm5ic3BhY2U9MTYwLGUubmNhcm9uPTMyOCxlLm5jZWRpbGxhPTMyNixlLm5jaXJjbGU9OTQzNyxlLm5jaXJjdW1mbGV4YmVsb3c9Nzc1NSxlLm5jb21tYWFjY2VudD0zMjYsZS5uZG90YWNjZW50PTc3NDksZS5uZG90YmVsb3c9Nzc1MSxlLm5laGlyYWdhbmE9MTIzOTcsZS5uZWthdGFrYW5hPTEyNDkzLGUubmVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNixlLm5ld3NoZXFlbHNpZ249ODM2MixlLm5mc3F1YXJlPTEzMTk1LGUubmdhYmVuZ2FsaT0yNDU3LGUubmdhZGV2YT0yMzI5LGUubmdhZ3VqYXJhdGk9MjcxMyxlLm5nYWd1cm11a2hpPTI1ODUsZS5uZ29uZ3V0aGFpPTM1OTEsZS5uaGlyYWdhbmE9MTI0MzUsZS5uaG9va2xlZnQ9NjI2LGUubmhvb2tyZXRyb2ZsZXg9NjI3LGUubmlldW5hY2lyY2xla29yZWFuPTEyOTExLGUubmlldW5hcGFyZW5rb3JlYW49MTI4MTUsZS5uaWV1bmNpZXVja29yZWFuPTEyNTk3LGUubmlldW5jaXJjbGVrb3JlYW49MTI4OTcsZS5uaWV1bmhpZXVoa29yZWFuPTEyNTk4LGUubmlldW5rb3JlYW49MTI1OTYsZS5uaWV1bnBhbnNpb3Nrb3JlYW49MTI2NDgsZS5uaWV1bnBhcmVua29yZWFuPTEyODAxLGUubmlldW5zaW9za29yZWFuPTEyNjQ3LGUubmlldW50aWtldXRrb3JlYW49MTI2NDYsZS5uaWhpcmFnYW5hPTEyMzk1LGUubmlrYXRha2FuYT0xMjQ5MSxlLm5pa2F0YWthbmFoYWxmd2lkdGg9NjU0MTQsZS5uaWtoYWhpdGxlZnR0aGFpPTYzNjQxLGUubmlraGFoaXR0aGFpPTM2NjEsZS5uaW5lPTU3LGUubmluZWFyYWJpYz0xNjQxLGUubmluZWJlbmdhbGk9MjU0MyxlLm5pbmVjaXJjbGU9OTMyMCxlLm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTMwLGUubmluZWRldmE9MjQxNSxlLm5pbmVndWphcmF0aT0yNzk5LGUubmluZWd1cm11a2hpPTI2NzEsZS5uaW5laGFja2FyYWJpYz0xNjQxLGUubmluZWhhbmd6aG91PTEyMzI5LGUubmluZWlkZW9ncmFwaGljcGFyZW49MTI4NDAsZS5uaW5laW5mZXJpb3I9ODMyOSxlLm5pbmVtb25vc3BhY2U9NjUzMDUsZS5uaW5lb2xkc3R5bGU9NjMyODksZS5uaW5lcGFyZW49OTM0MCxlLm5pbmVwZXJpb2Q9OTM2MCxlLm5pbmVwZXJzaWFuPTE3ODUsZS5uaW5lcm9tYW49ODU2OCxlLm5pbmVzdXBlcmlvcj04MzEzLGUubmluZXRlZW5jaXJjbGU9OTMzMCxlLm5pbmV0ZWVucGFyZW49OTM1MCxlLm5pbmV0ZWVucGVyaW9kPTkzNzAsZS5uaW5ldGhhaT0zNjczLGUubmo9NDYwLGUubmplY3lyaWxsaWM9MTExNCxlLm5rYXRha2FuYT0xMjUzMSxlLm5rYXRha2FuYWhhbGZ3aWR0aD02NTQzNyxlLm5sZWdyaWdodGxvbmc9NDE0LGUubmxpbmViZWxvdz03NzUzLGUubm1vbm9zcGFjZT02NTM1OCxlLm5tc3F1YXJlPTEzMjEwLGUubm5hYmVuZ2FsaT0yNDY3LGUubm5hZGV2YT0yMzM5LGUubm5hZ3VqYXJhdGk9MjcyMyxlLm5uYWd1cm11a2hpPTI1OTUsZS5ubm5hZGV2YT0yMzQ1LGUubm9oaXJhZ2FuYT0xMjM5OCxlLm5va2F0YWthbmE9MTI0OTQsZS5ub2thdGFrYW5haGFsZndpZHRoPTY1NDE3LGUubm9uYnJlYWtpbmdzcGFjZT0xNjAsZS5ub25lbnRoYWk9MzYwMyxlLm5vbnV0aGFpPTM2MDksZS5ub29uYXJhYmljPTE2MDYsZS5ub29uZmluYWxhcmFiaWM9NjUyNTQsZS5ub29uZ2h1bm5hYXJhYmljPTE3MjIsZS5ub29uZ2h1bm5hZmluYWxhcmFiaWM9NjQ0MTUsZS5ub29uaW5pdGlhbGFyYWJpYz02NTI1NSxlLm5vb25qZWVtaW5pdGlhbGFyYWJpYz02NDcyMixlLm5vb25qZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1ODcsZS5ub29ubWVkaWFsYXJhYmljPTY1MjU2LGUubm9vbm1lZW1pbml0aWFsYXJhYmljPTY0NzI1LGUubm9vbm1lZW1pc29sYXRlZGFyYWJpYz02NDU5MCxlLm5vb25ub29uZmluYWxhcmFiaWM9NjQ2NTMsZS5ub3Rjb250YWlucz04NzE2LGUubm90ZWxlbWVudD04NzEzLGUubm90ZWxlbWVudG9mPTg3MTMsZS5ub3RlcXVhbD04ODAwLGUubm90Z3JlYXRlcj04ODE1LGUubm90Z3JlYXRlcm5vcmVxdWFsPTg4MTcsZS5ub3RncmVhdGVybm9ybGVzcz04ODI1LGUubm90aWRlbnRpY2FsPTg4MDIsZS5ub3RsZXNzPTg4MTQsZS5ub3RsZXNzbm9yZXF1YWw9ODgxNixlLm5vdHBhcmFsbGVsPTg3NDIsZS5ub3RwcmVjZWRlcz04ODMyLGUubm90c3Vic2V0PTg4MzYsZS5ub3RzdWNjZWVkcz04ODMzLGUubm90c3VwZXJzZXQ9ODgzNyxlLm5vd2FybWVuaWFuPTEzOTgsZS5ucGFyZW49OTM4NSxlLm5zc3F1YXJlPTEzMjMzLGUubnN1cGVyaW9yPTgzMTksZS5udGlsZGU9MjQxLGUubnU9OTU3LGUubnVoaXJhZ2FuYT0xMjM5NixlLm51a2F0YWthbmE9MTI0OTIsZS5udWthdGFrYW5haGFsZndpZHRoPTY1NDE1LGUubnVrdGFiZW5nYWxpPTI0OTIsZS5udWt0YWRldmE9MjM2NCxlLm51a3RhZ3VqYXJhdGk9Mjc0OCxlLm51a3RhZ3VybXVraGk9MjYyMCxlLm51bWJlcnNpZ249MzUsZS5udW1iZXJzaWdubW9ub3NwYWNlPTY1MjgzLGUubnVtYmVyc2lnbnNtYWxsPTY1MTE5LGUubnVtZXJhbHNpZ25ncmVlaz04ODQsZS5udW1lcmFsc2lnbmxvd2VyZ3JlZWs9ODg1LGUubnVtZXJvPTg0NzAsZS5udW49MTUwNCxlLm51bmRhZ2VzaD02NDMyMCxlLm51bmRhZ2VzaGhlYnJldz02NDMyMCxlLm51bmhlYnJldz0xNTA0LGUubnZzcXVhcmU9MTMyMzcsZS5ud3NxdWFyZT0xMzI0MyxlLm55YWJlbmdhbGk9MjQ2MixlLm55YWRldmE9MjMzNCxlLm55YWd1amFyYXRpPTI3MTgsZS5ueWFndXJtdWtoaT0yNTkwLGUubz0xMTEsZS5vYWN1dGU9MjQzLGUub2FuZ3RoYWk9MzYyOSxlLm9iYXJyZWQ9NjI5LGUub2JhcnJlZGN5cmlsbGljPTEyNTcsZS5vYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU5LGUub2JlbmdhbGk9MjQ1MSxlLm9ib3BvbW9mbz0xMjU3MSxlLm9icmV2ZT0zMzUsZS5vY2FuZHJhZGV2YT0yMzIxLGUub2NhbmRyYWd1amFyYXRpPTI3MDUsZS5vY2FuZHJhdm93ZWxzaWduZGV2YT0yMzc3LGUub2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpPTI3NjEsZS5vY2Fyb249NDY2LGUub2NpcmNsZT05NDM4LGUub2NpcmN1bWZsZXg9MjQ0LGUub2NpcmN1bWZsZXhhY3V0ZT03ODg5LGUub2NpcmN1bWZsZXhkb3RiZWxvdz03ODk3LGUub2NpcmN1bWZsZXhncmF2ZT03ODkxLGUub2NpcmN1bWZsZXhob29rYWJvdmU9Nzg5MyxlLm9jaXJjdW1mbGV4dGlsZGU9Nzg5NSxlLm9jeXJpbGxpYz0xMDg2LGUub2RibGFjdXRlPTMzNyxlLm9kYmxncmF2ZT01MjUsZS5vZGV2YT0yMzIzLGUub2RpZXJlc2lzPTI0NixlLm9kaWVyZXNpc2N5cmlsbGljPTEyNTUsZS5vZG90YmVsb3c9Nzg4NSxlLm9lPTMzOSxlLm9la29yZWFuPTEyNjM0LGUub2dvbmVrPTczMSxlLm9nb25la2NtYj04MDgsZS5vZ3JhdmU9MjQyLGUub2d1amFyYXRpPTI3MDcsZS5vaGFybWVuaWFuPTE0MTMsZS5vaGlyYWdhbmE9MTIzNjIsZS5vaG9va2Fib3ZlPTc4ODcsZS5vaG9ybj00MTcsZS5vaG9ybmFjdXRlPTc4OTksZS5vaG9ybmRvdGJlbG93PTc5MDcsZS5vaG9ybmdyYXZlPTc5MDEsZS5vaG9ybmhvb2thYm92ZT03OTAzLGUub2hvcm50aWxkZT03OTA1LGUub2h1bmdhcnVtbGF1dD0zMzcsZS5vaT00MTksZS5vaW52ZXJ0ZWRicmV2ZT01MjcsZS5va2F0YWthbmE9MTI0NTgsZS5va2F0YWthbmFoYWxmd2lkdGg9NjUzOTcsZS5va29yZWFuPTEyNjMxLGUub2xlaGVicmV3PTE0NTEsZS5vbWFjcm9uPTMzMyxlLm9tYWNyb25hY3V0ZT03NzYzLGUub21hY3JvbmdyYXZlPTc3NjEsZS5vbWRldmE9MjM4NCxlLm9tZWdhPTk2OSxlLm9tZWdhMT05ODIsZS5vbWVnYWN5cmlsbGljPTExMjEsZS5vbWVnYWxhdGluY2xvc2VkPTYzMSxlLm9tZWdhcm91bmRjeXJpbGxpYz0xMTQ3LGUub21lZ2F0aXRsb2N5cmlsbGljPTExNDksZS5vbWVnYXRvbm9zPTk3NCxlLm9tZ3VqYXJhdGk9Mjc2OCxlLm9taWNyb249OTU5LGUub21pY3JvbnRvbm9zPTk3MixlLm9tb25vc3BhY2U9NjUzNTksZS5vbmU9NDksZS5vbmVhcmFiaWM9MTYzMyxlLm9uZWJlbmdhbGk9MjUzNSxlLm9uZWNpcmNsZT05MzEyLGUub25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyMixlLm9uZWRldmE9MjQwNyxlLm9uZWRvdGVubGVhZGVyPTgyMjgsZS5vbmVlaWdodGg9ODUzOSxlLm9uZWZpdHRlZD02MzE5NixlLm9uZWd1amFyYXRpPTI3OTEsZS5vbmVndXJtdWtoaT0yNjYzLGUub25laGFja2FyYWJpYz0xNjMzLGUub25laGFsZj0xODksZS5vbmVoYW5nemhvdT0xMjMyMSxlLm9uZWlkZW9ncmFwaGljcGFyZW49MTI4MzIsZS5vbmVpbmZlcmlvcj04MzIxLGUub25lbW9ub3NwYWNlPTY1Mjk3LGUub25lbnVtZXJhdG9yYmVuZ2FsaT0yNTQ4LGUub25lb2xkc3R5bGU9NjMyODEsZS5vbmVwYXJlbj05MzMyLGUub25lcGVyaW9kPTkzNTIsZS5vbmVwZXJzaWFuPTE3NzcsZS5vbmVxdWFydGVyPTE4OCxlLm9uZXJvbWFuPTg1NjAsZS5vbmVzdXBlcmlvcj0xODUsZS5vbmV0aGFpPTM2NjUsZS5vbmV0aGlyZD04NTMxLGUub29nb25laz00OTEsZS5vb2dvbmVrbWFjcm9uPTQ5MyxlLm9vZ3VybXVraGk9MjU3OSxlLm9vbWF0cmFndXJtdWtoaT0yNjM1LGUub29wZW49NTk2LGUub3BhcmVuPTkzODYsZS5vcGVuYnVsbGV0PTk3MDIsZS5vcHRpb249ODk5NyxlLm9yZGZlbWluaW5lPTE3MCxlLm9yZG1hc2N1bGluZT0xODYsZS5vcnRob2dvbmFsPTg3MzUsZS5vc2hvcnRkZXZhPTIzMjIsZS5vc2hvcnR2b3dlbHNpZ25kZXZhPTIzNzgsZS5vc2xhc2g9MjQ4LGUub3NsYXNoYWN1dGU9NTExLGUub3NtYWxsaGlyYWdhbmE9MTIzNjEsZS5vc21hbGxrYXRha2FuYT0xMjQ1NyxlLm9zbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg3LGUub3N0cm9rZWFjdXRlPTUxMSxlLm9zdXBlcmlvcj02MzIxNixlLm90Y3lyaWxsaWM9MTE1MSxlLm90aWxkZT0yNDUsZS5vdGlsZGVhY3V0ZT03NzU3LGUub3RpbGRlZGllcmVzaXM9Nzc1OSxlLm91Ym9wb21vZm89MTI1NzcsZS5vdmVybGluZT04MjU0LGUub3ZlcmxpbmVjZW50ZXJsaW5lPTY1MDk4LGUub3ZlcmxpbmVjbWI9NzczLGUub3ZlcmxpbmVkYXNoZWQ9NjUwOTcsZS5vdmVybGluZWRibHdhdnk9NjUxMDAsZS5vdmVybGluZXdhdnk9NjUwOTksZS5vdmVyc2NvcmU9MTc1LGUub3Zvd2Vsc2lnbmJlbmdhbGk9MjUwNyxlLm92b3dlbHNpZ25kZXZhPTIzNzksZS5vdm93ZWxzaWduZ3VqYXJhdGk9Mjc2MyxlLnA9MTEyLGUucGFhbXBzc3F1YXJlPTEzMTg0LGUucGFhc2VudG9zcXVhcmU9MTMwOTksZS5wYWJlbmdhbGk9MjQ3NCxlLnBhY3V0ZT03NzY1LGUucGFkZXZhPTIzNDYsZS5wYWdlZG93bj04NjcxLGUucGFnZXVwPTg2NzAsZS5wYWd1amFyYXRpPTI3MzAsZS5wYWd1cm11a2hpPTI2MDIsZS5wYWhpcmFnYW5hPTEyNDAxLGUucGFpeWFubm9pdGhhaT0zNjMxLGUucGFrYXRha2FuYT0xMjQ5NyxlLnBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWI9MTE1NixlLnBhbG9jaGthY3lyaWxsaWM9MTIxNixlLnBhbnNpb3Nrb3JlYW49MTI2NzEsZS5wYXJhZ3JhcGg9MTgyLGUucGFyYWxsZWw9ODc0MSxlLnBhcmVubGVmdD00MCxlLnBhcmVubGVmdGFsdG9uZWFyYWJpYz02NDgzMCxlLnBhcmVubGVmdGJ0PTYzNzI1LGUucGFyZW5sZWZ0ZXg9NjM3MjQsZS5wYXJlbmxlZnRpbmZlcmlvcj04MzMzLGUucGFyZW5sZWZ0bW9ub3NwYWNlPTY1Mjg4LGUucGFyZW5sZWZ0c21hbGw9NjUxMTMsZS5wYXJlbmxlZnRzdXBlcmlvcj04MzE3LGUucGFyZW5sZWZ0dHA9NjM3MjMsZS5wYXJlbmxlZnR2ZXJ0aWNhbD02NTA3NyxlLnBhcmVucmlnaHQ9NDEsZS5wYXJlbnJpZ2h0YWx0b25lYXJhYmljPTY0ODMxLGUucGFyZW5yaWdodGJ0PTYzNzM2LGUucGFyZW5yaWdodGV4PTYzNzM1LGUucGFyZW5yaWdodGluZmVyaW9yPTgzMzQsZS5wYXJlbnJpZ2h0bW9ub3NwYWNlPTY1Mjg5LGUucGFyZW5yaWdodHNtYWxsPTY1MTE0LGUucGFyZW5yaWdodHN1cGVyaW9yPTgzMTgsZS5wYXJlbnJpZ2h0dHA9NjM3MzQsZS5wYXJlbnJpZ2h0dmVydGljYWw9NjUwNzgsZS5wYXJ0aWFsZGlmZj04NzA2LGUucGFzZXFoZWJyZXc9MTQ3MixlLnBhc2h0YWhlYnJldz0xNDMzLGUucGFzcXVhcmU9MTMyMjUsZS5wYXRhaD0xNDYzLGUucGF0YWgxMT0xNDYzLGUucGF0YWgxZD0xNDYzLGUucGF0YWgyYT0xNDYzLGUucGF0YWhoZWJyZXc9MTQ2MyxlLnBhdGFobmFycm93aGVicmV3PTE0NjMsZS5wYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ2MyxlLnBhdGFod2lkZWhlYnJldz0xNDYzLGUucGF6ZXJoZWJyZXc9MTQ0MSxlLnBib3BvbW9mbz0xMjU1MCxlLnBjaXJjbGU9OTQzOSxlLnBkb3RhY2NlbnQ9Nzc2NyxlLnBlPTE1MDgsZS5wZWN5cmlsbGljPTEwODcsZS5wZWRhZ2VzaD02NDMyNCxlLnBlZGFnZXNoaGVicmV3PTY0MzI0LGUucGVlemlzcXVhcmU9MTMxMTUsZS5wZWZpbmFsZGFnZXNoaGVicmV3PTY0MzIzLGUucGVoYXJhYmljPTE2NjIsZS5wZWhhcm1lbmlhbj0xNDAyLGUucGVoZWJyZXc9MTUwOCxlLnBlaGZpbmFsYXJhYmljPTY0MzQzLGUucGVoaW5pdGlhbGFyYWJpYz02NDM0NCxlLnBlaGlyYWdhbmE9MTI0MTAsZS5wZWhtZWRpYWxhcmFiaWM9NjQzNDUsZS5wZWthdGFrYW5hPTEyNTA2LGUucGVtaWRkbGVob29rY3lyaWxsaWM9MTE5MSxlLnBlcmFmZWhlYnJldz02NDMzNCxlLnBlcmNlbnQ9MzcsZS5wZXJjZW50YXJhYmljPTE2NDIsZS5wZXJjZW50bW9ub3NwYWNlPTY1Mjg1LGUucGVyY2VudHNtYWxsPTY1MTMwLGUucGVyaW9kPTQ2LGUucGVyaW9kYXJtZW5pYW49MTQxNyxlLnBlcmlvZGNlbnRlcmVkPTE4MyxlLnBlcmlvZGhhbGZ3aWR0aD02NTM3NyxlLnBlcmlvZGluZmVyaW9yPTYzMjA3LGUucGVyaW9kbW9ub3NwYWNlPTY1Mjk0LGUucGVyaW9kc21hbGw9NjUxMDYsZS5wZXJpb2RzdXBlcmlvcj02MzIwOCxlLnBlcmlzcG9tZW5pZ3JlZWtjbWI9ODM0LGUucGVycGVuZGljdWxhcj04ODY5LGUucGVydGhvdXNhbmQ9ODI0MCxlLnBlc2V0YT04MzU5LGUucGZzcXVhcmU9MTMxOTQsZS5waGFiZW5nYWxpPTI0NzUsZS5waGFkZXZhPTIzNDcsZS5waGFndWphcmF0aT0yNzMxLGUucGhhZ3VybXVraGk9MjYwMyxlLnBoaT05NjYsZS5waGkxPTk4MSxlLnBoaWV1cGhhY2lyY2xla29yZWFuPTEyOTIyLGUucGhpZXVwaGFwYXJlbmtvcmVhbj0xMjgyNixlLnBoaWV1cGhjaXJjbGVrb3JlYW49MTI5MDgsZS5waGlldXBoa29yZWFuPTEyNjIxLGUucGhpZXVwaHBhcmVua29yZWFuPTEyODEyLGUucGhpbGF0aW49NjMyLGUucGhpbnRodXRoYWk9MzY0MixlLnBoaXN5bWJvbGdyZWVrPTk4MSxlLnBob29rPTQyMSxlLnBob3BoYW50aGFpPTM2MTQsZS5waG9waHVuZ3RoYWk9MzYxMixlLnBob3NhbXBoYW90aGFpPTM2MTYsZS5waT05NjAsZS5waWV1cGFjaXJjbGVrb3JlYW49MTI5MTUsZS5waWV1cGFwYXJlbmtvcmVhbj0xMjgxOSxlLnBpZXVwY2lldWNrb3JlYW49MTI2NjIsZS5waWV1cGNpcmNsZWtvcmVhbj0xMjkwMSxlLnBpZXVwa2l5ZW9ra29yZWFuPTEyNjU4LGUucGlldXBrb3JlYW49MTI2MTAsZS5waWV1cHBhcmVua29yZWFuPTEyODA1LGUucGlldXBzaW9za2l5ZW9ra29yZWFuPTEyNjYwLGUucGlldXBzaW9za29yZWFuPTEyNjEyLGUucGlldXBzaW9zdGlrZXV0a29yZWFuPTEyNjYxLGUucGlldXB0aGlldXRoa29yZWFuPTEyNjYzLGUucGlldXB0aWtldXRrb3JlYW49MTI2NTksZS5waWhpcmFnYW5hPTEyNDA0LGUucGlrYXRha2FuYT0xMjUwMCxlLnBpc3ltYm9sZ3JlZWs9OTgyLGUucGl3cmFybWVuaWFuPTE0MTEsZS5wbHVzPTQzLGUucGx1c2JlbG93Y21iPTc5OSxlLnBsdXNjaXJjbGU9ODg1MyxlLnBsdXNtaW51cz0xNzcsZS5wbHVzbW9kPTcyNixlLnBsdXNtb25vc3BhY2U9NjUyOTEsZS5wbHVzc21hbGw9NjUxMjIsZS5wbHVzc3VwZXJpb3I9ODMxNCxlLnBtb25vc3BhY2U9NjUzNjAsZS5wbXNxdWFyZT0xMzI3MixlLnBvaGlyYWdhbmE9MTI0MTMsZS5wb2ludGluZ2luZGV4ZG93bndoaXRlPTk3NTksZS5wb2ludGluZ2luZGV4bGVmdHdoaXRlPTk3NTYsZS5wb2ludGluZ2luZGV4cmlnaHR3aGl0ZT05NzU4LGUucG9pbnRpbmdpbmRleHVwd2hpdGU9OTc1NyxlLnBva2F0YWthbmE9MTI1MDksZS5wb3BsYXRoYWk9MzYxMSxlLnBvc3RhbG1hcms9MTIzMDYsZS5wb3N0YWxtYXJrZmFjZT0xMjMyMCxlLnBwYXJlbj05Mzg3LGUucHJlY2VkZXM9ODgyNixlLnByZXNjcmlwdGlvbj04NDc4LGUucHJpbWVtb2Q9Njk3LGUucHJpbWVyZXZlcnNlZD04MjQ1LGUucHJvZHVjdD04NzE5LGUucHJvamVjdGl2ZT04OTY1LGUucHJvbG9uZ2Vka2FuYT0xMjU0MCxlLnByb3BlbGxvcj04OTg0LGUucHJvcGVyc3Vic2V0PTg4MzQsZS5wcm9wZXJzdXBlcnNldD04ODM1LGUucHJvcG9ydGlvbj04NzU5LGUucHJvcG9ydGlvbmFsPTg3MzMsZS5wc2k9OTY4LGUucHNpY3lyaWxsaWM9MTEzNyxlLnBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYj0xMTU4LGUucHNzcXVhcmU9MTMyMzIsZS5wdWhpcmFnYW5hPTEyNDA3LGUucHVrYXRha2FuYT0xMjUwMyxlLnB2c3F1YXJlPTEzMjM2LGUucHdzcXVhcmU9MTMyNDIsZS5xPTExMyxlLnFhZGV2YT0yMzkyLGUucWFkbWFoZWJyZXc9MTQ0OCxlLnFhZmFyYWJpYz0xNjAyLGUucWFmZmluYWxhcmFiaWM9NjUyMzgsZS5xYWZpbml0aWFsYXJhYmljPTY1MjM5LGUucWFmbWVkaWFsYXJhYmljPTY1MjQwLGUucWFtYXRzPTE0NjQsZS5xYW1hdHMxMD0xNDY0LGUucWFtYXRzMWE9MTQ2NCxlLnFhbWF0czFjPTE0NjQsZS5xYW1hdHMyNz0xNDY0LGUucWFtYXRzMjk9MTQ2NCxlLnFhbWF0czMzPTE0NjQsZS5xYW1hdHNkZT0xNDY0LGUucWFtYXRzaGVicmV3PTE0NjQsZS5xYW1hdHNuYXJyb3doZWJyZXc9MTQ2NCxlLnFhbWF0c3FhdGFuaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbm5hcnJvd2hlYnJldz0xNDY0LGUucWFtYXRzcWF0YW5xdWFydGVyaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbndpZGVoZWJyZXc9MTQ2NCxlLnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ2NCxlLnFhbWF0c3dpZGVoZWJyZXc9MTQ2NCxlLnFhcm5leXBhcmFoZWJyZXc9MTQzOSxlLnFib3BvbW9mbz0xMjU2MSxlLnFjaXJjbGU9OTQ0MCxlLnFob29rPTY3MixlLnFtb25vc3BhY2U9NjUzNjEsZS5xb2Y9MTUxMSxlLnFvZmRhZ2VzaD02NDMyNyxlLnFvZmRhZ2VzaGhlYnJldz02NDMyNyxlLnFvZmhlYnJldz0xNTExLGUucXBhcmVuPTkzODgsZS5xdWFydGVybm90ZT05ODMzLGUucXVidXRzPTE0NjcsZS5xdWJ1dHMxOD0xNDY3LGUucXVidXRzMjU9MTQ2NyxlLnF1YnV0czMxPTE0NjcsZS5xdWJ1dHNoZWJyZXc9MTQ2NyxlLnF1YnV0c25hcnJvd2hlYnJldz0xNDY3LGUucXVidXRzcXVhcnRlcmhlYnJldz0xNDY3LGUucXVidXRzd2lkZWhlYnJldz0xNDY3LGUucXVlc3Rpb249NjMsZS5xdWVzdGlvbmFyYWJpYz0xNTY3LGUucXVlc3Rpb25hcm1lbmlhbj0xMzc0LGUucXVlc3Rpb25kb3duPTE5MSxlLnF1ZXN0aW9uZG93bnNtYWxsPTYzNDIzLGUucXVlc3Rpb25ncmVlaz04OTQsZS5xdWVzdGlvbm1vbm9zcGFjZT02NTMxMSxlLnF1ZXN0aW9uc21hbGw9NjMyOTUsZS5xdW90ZWRibD0zNCxlLnF1b3RlZGJsYmFzZT04MjIyLGUucXVvdGVkYmxsZWZ0PTgyMjAsZS5xdW90ZWRibG1vbm9zcGFjZT02NTI4MixlLnF1b3RlZGJscHJpbWU9MTIzMTgsZS5xdW90ZWRibHByaW1lcmV2ZXJzZWQ9MTIzMTcsZS5xdW90ZWRibHJpZ2h0PTgyMjEsZS5xdW90ZWxlZnQ9ODIxNixlLnF1b3RlbGVmdHJldmVyc2VkPTgyMTksZS5xdW90ZXJldmVyc2VkPTgyMTksZS5xdW90ZXJpZ2h0PTgyMTcsZS5xdW90ZXJpZ2h0bj0zMjksZS5xdW90ZXNpbmdsYmFzZT04MjE4LGUucXVvdGVzaW5nbGU9MzksZS5xdW90ZXNpbmdsZW1vbm9zcGFjZT02NTI4NyxlLnI9MTE0LGUucmFhcm1lbmlhbj0xNDA0LGUucmFiZW5nYWxpPTI0ODAsZS5yYWN1dGU9MzQxLGUucmFkZXZhPTIzNTIsZS5yYWRpY2FsPTg3MzAsZS5yYWRpY2FsZXg9NjM3MTcsZS5yYWRvdmVyc3NxdWFyZT0xMzIzMCxlLnJhZG92ZXJzc3F1YXJlZHNxdWFyZT0xMzIzMSxlLnJhZHNxdWFyZT0xMzIyOSxlLnJhZmU9MTQ3MSxlLnJhZmVoZWJyZXc9MTQ3MSxlLnJhZ3VqYXJhdGk9MjczNixlLnJhZ3VybXVraGk9MjYwOCxlLnJhaGlyYWdhbmE9MTI0MjUsZS5yYWthdGFrYW5hPTEyNTIxLGUucmFrYXRha2FuYWhhbGZ3aWR0aD02NTQzMSxlLnJhbG93ZXJkaWFnb25hbGJlbmdhbGk9MjU0NSxlLnJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpPTI1NDQsZS5yYW1zaG9ybj02MTIsZS5yYXRpbz04NzU4LGUucmJvcG9tb2ZvPTEyNTY2LGUucmNhcm9uPTM0NSxlLnJjZWRpbGxhPTM0MyxlLnJjaXJjbGU9OTQ0MSxlLnJjb21tYWFjY2VudD0zNDMsZS5yZGJsZ3JhdmU9NTI5LGUucmRvdGFjY2VudD03NzY5LGUucmRvdGJlbG93PTc3NzEsZS5yZG90YmVsb3dtYWNyb249Nzc3MyxlLnJlZmVyZW5jZW1hcms9ODI1MSxlLnJlZmxleHN1YnNldD04ODM4LGUucmVmbGV4c3VwZXJzZXQ9ODgzOSxlLnJlZ2lzdGVyZWQ9MTc0LGUucmVnaXN0ZXJzYW5zPTYzNzIwLGUucmVnaXN0ZXJzZXJpZj02MzE5NCxlLnJlaGFyYWJpYz0xNTg1LGUucmVoYXJtZW5pYW49MTQwOCxlLnJlaGZpbmFsYXJhYmljPTY1MTk4LGUucmVoaXJhZ2FuYT0xMjQyOCxlLnJla2F0YWthbmE9MTI1MjQsZS5yZWthdGFrYW5haGFsZndpZHRoPTY1NDM0LGUucmVzaD0xNTEyLGUucmVzaGRhZ2VzaGhlYnJldz02NDMyOCxlLnJlc2hoZWJyZXc9MTUxMixlLnJldmVyc2VkdGlsZGU9ODc2NSxlLnJldmlhaGVicmV3PTE0MzEsZS5yZXZpYW11Z3Jhc2hoZWJyZXc9MTQzMTtlLnJldmxvZ2ljYWxub3Q9ODk3NixlLnJmaXNoaG9vaz02MzgsZS5yZmlzaGhvb2tyZXZlcnNlZD02MzksZS5yaGFiZW5nYWxpPTI1MjUsZS5yaGFkZXZhPTIzOTcsZS5yaG89OTYxLGUucmhvb2s9NjM3LGUucmhvb2t0dXJuZWQ9NjM1LGUucmhvb2t0dXJuZWRzdXBlcmlvcj02OTMsZS5yaG9zeW1ib2xncmVlaz0xMDA5LGUucmhvdGljaG9va21vZD03MzQsZS5yaWV1bGFjaXJjbGVrb3JlYW49MTI5MTMsZS5yaWV1bGFwYXJlbmtvcmVhbj0xMjgxNyxlLnJpZXVsY2lyY2xla29yZWFuPTEyODk5LGUucmlldWxoaWV1aGtvcmVhbj0xMjYwOCxlLnJpZXVsa2l5ZW9ra29yZWFuPTEyNjAyLGUucmlldWxraXllb2tzaW9za29yZWFuPTEyNjQ5LGUucmlldWxrb3JlYW49MTI2MDEsZS5yaWV1bG1pZXVta29yZWFuPTEyNjAzLGUucmlldWxwYW5zaW9za29yZWFuPTEyNjUyLGUucmlldWxwYXJlbmtvcmVhbj0xMjgwMyxlLnJpZXVscGhpZXVwaGtvcmVhbj0xMjYwNyxlLnJpZXVscGlldXBrb3JlYW49MTI2MDQsZS5yaWV1bHBpZXVwc2lvc2tvcmVhbj0xMjY1MSxlLnJpZXVsc2lvc2tvcmVhbj0xMjYwNSxlLnJpZXVsdGhpZXV0aGtvcmVhbj0xMjYwNixlLnJpZXVsdGlrZXV0a29yZWFuPTEyNjUwLGUucmlldWx5ZW9yaW5oaWV1aGtvcmVhbj0xMjY1MyxlLnJpZ2h0YW5nbGU9ODczNSxlLnJpZ2h0dGFja2JlbG93Y21iPTc5MyxlLnJpZ2h0dHJpYW5nbGU9ODg5NSxlLnJpaGlyYWdhbmE9MTI0MjYsZS5yaWthdGFrYW5hPTEyNTIyLGUucmlrYXRha2FuYWhhbGZ3aWR0aD02NTQzMixlLnJpbmc9NzMwLGUucmluZ2JlbG93Y21iPTgwNSxlLnJpbmdjbWI9Nzc4LGUucmluZ2hhbGZsZWZ0PTcwMyxlLnJpbmdoYWxmbGVmdGFybWVuaWFuPTEzNjksZS5yaW5naGFsZmxlZnRiZWxvd2NtYj03OTYsZS5yaW5naGFsZmxlZnRjZW50ZXJlZD03MjMsZS5yaW5naGFsZnJpZ2h0PTcwMixlLnJpbmdoYWxmcmlnaHRiZWxvd2NtYj04MjUsZS5yaW5naGFsZnJpZ2h0Y2VudGVyZWQ9NzIyLGUucmludmVydGVkYnJldmU9NTMxLGUucml0dG9ydXNxdWFyZT0xMzEzNyxlLnJsaW5lYmVsb3c9Nzc3NSxlLnJsb25nbGVnPTYzNixlLnJsb25nbGVndHVybmVkPTYzNCxlLnJtb25vc3BhY2U9NjUzNjIsZS5yb2hpcmFnYW5hPTEyNDI5LGUucm9rYXRha2FuYT0xMjUyNSxlLnJva2F0YWthbmFoYWxmd2lkdGg9NjU0MzUsZS5yb3J1YXRoYWk9MzYxOSxlLnJwYXJlbj05Mzg5LGUucnJhYmVuZ2FsaT0yNTI0LGUucnJhZGV2YT0yMzUzLGUucnJhZ3VybXVraGk9MjY1MixlLnJyZWhhcmFiaWM9MTY4MSxlLnJyZWhmaW5hbGFyYWJpYz02NDM5NyxlLnJydm9jYWxpY2JlbmdhbGk9MjUyOCxlLnJydm9jYWxpY2RldmE9MjQwMCxlLnJydm9jYWxpY2d1amFyYXRpPTI3ODQsZS5ycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MDAsZS5ycnZvY2FsaWN2b3dlbHNpZ25kZXZhPTIzNzIsZS5ycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU2LGUucnN1cGVyaW9yPTYzMjE3LGUucnRibG9jaz05NjE2LGUucnR1cm5lZD02MzMsZS5ydHVybmVkc3VwZXJpb3I9NjkyLGUucnVoaXJhZ2FuYT0xMjQyNyxlLnJ1a2F0YWthbmE9MTI1MjMsZS5ydWthdGFrYW5haGFsZndpZHRoPTY1NDMzLGUucnVwZWVtYXJrYmVuZ2FsaT0yNTQ2LGUucnVwZWVzaWduYmVuZ2FsaT0yNTQ3LGUucnVwaWFoPTYzMTk3LGUucnV0aGFpPTM2MjAsZS5ydm9jYWxpY2JlbmdhbGk9MjQ0MyxlLnJ2b2NhbGljZGV2YT0yMzE1LGUucnZvY2FsaWNndWphcmF0aT0yNjk5LGUucnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI0OTksZS5ydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MSxlLnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NSxlLnM9MTE1LGUuc2FiZW5nYWxpPTI0ODgsZS5zYWN1dGU9MzQ3LGUuc2FjdXRlZG90YWNjZW50PTc3ODEsZS5zYWRhcmFiaWM9MTU4OSxlLnNhZGV2YT0yMzYwLGUuc2FkZmluYWxhcmFiaWM9NjUyMTAsZS5zYWRpbml0aWFsYXJhYmljPTY1MjExLGUuc2FkbWVkaWFsYXJhYmljPTY1MjEyLGUuc2FndWphcmF0aT0yNzQ0LGUuc2FndXJtdWtoaT0yNjE2LGUuc2FoaXJhZ2FuYT0xMjM3MyxlLnNha2F0YWthbmE9MTI0NjksZS5zYWthdGFrYW5haGFsZndpZHRoPTY1NDAzLGUuc2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYz02NTAxOCxlLnNhbWVraD0xNTA1LGUuc2FtZWtoZGFnZXNoPTY0MzIxLGUuc2FtZWtoZGFnZXNoaGVicmV3PTY0MzIxLGUuc2FtZWtoaGVicmV3PTE1MDUsZS5zYXJhYWF0aGFpPTM2MzQsZS5zYXJhYWV0aGFpPTM2NDksZS5zYXJhYWltYWltYWxhaXRoYWk9MzY1MixlLnNhcmFhaW1haW11YW50aGFpPTM2NTEsZS5zYXJhYW10aGFpPTM2MzUsZS5zYXJhYXRoYWk9MzYzMixlLnNhcmFldGhhaT0zNjQ4LGUuc2FyYWlpbGVmdHRoYWk9NjM2MjIsZS5zYXJhaWl0aGFpPTM2MzcsZS5zYXJhaWxlZnR0aGFpPTYzNjIxLGUuc2FyYWl0aGFpPTM2MzYsZS5zYXJhb3RoYWk9MzY1MCxlLnNhcmF1ZWVsZWZ0dGhhaT02MzYyNCxlLnNhcmF1ZWV0aGFpPTM2MzksZS5zYXJhdWVsZWZ0dGhhaT02MzYyMyxlLnNhcmF1ZXRoYWk9MzYzOCxlLnNhcmF1dGhhaT0zNjQwLGUuc2FyYXV1dGhhaT0zNjQxLGUuc2JvcG9tb2ZvPTEyNTY5LGUuc2Nhcm9uPTM1MyxlLnNjYXJvbmRvdGFjY2VudD03NzgzLGUuc2NlZGlsbGE9MzUxLGUuc2Nod2E9NjAxLGUuc2Nod2FjeXJpbGxpYz0xMjQxLGUuc2Nod2FkaWVyZXNpc2N5cmlsbGljPTEyNDMsZS5zY2h3YWhvb2s9NjAyLGUuc2NpcmNsZT05NDQyLGUuc2NpcmN1bWZsZXg9MzQ5LGUuc2NvbW1hYWNjZW50PTUzNyxlLnNkb3RhY2NlbnQ9Nzc3NyxlLnNkb3RiZWxvdz03Nzc5LGUuc2RvdGJlbG93ZG90YWNjZW50PTc3ODUsZS5zZWFndWxsYmVsb3djbWI9ODI4LGUuc2Vjb25kPTgyNDMsZS5zZWNvbmR0b25lY2hpbmVzZT03MTQsZS5zZWN0aW9uPTE2NyxlLnNlZW5hcmFiaWM9MTU4NyxlLnNlZW5maW5hbGFyYWJpYz02NTIwMixlLnNlZW5pbml0aWFsYXJhYmljPTY1MjAzLGUuc2Vlbm1lZGlhbGFyYWJpYz02NTIwNCxlLnNlZ29sPTE0NjIsZS5zZWdvbDEzPTE0NjIsZS5zZWdvbDFmPTE0NjIsZS5zZWdvbDJjPTE0NjIsZS5zZWdvbGhlYnJldz0xNDYyLGUuc2Vnb2xuYXJyb3doZWJyZXc9MTQ2MixlLnNlZ29scXVhcnRlcmhlYnJldz0xNDYyLGUuc2Vnb2x0YWhlYnJldz0xNDI2LGUuc2Vnb2x3aWRlaGVicmV3PTE0NjIsZS5zZWhhcm1lbmlhbj0xNDA1LGUuc2VoaXJhZ2FuYT0xMjM3OSxlLnNla2F0YWthbmE9MTI0NzUsZS5zZWthdGFrYW5haGFsZndpZHRoPTY1NDA2LGUuc2VtaWNvbG9uPTU5LGUuc2VtaWNvbG9uYXJhYmljPTE1NjMsZS5zZW1pY29sb25tb25vc3BhY2U9NjUzMDcsZS5zZW1pY29sb25zbWFsbD02NTEwOCxlLnNlbWl2b2ljZWRtYXJra2FuYT0xMjQ0NCxlLnNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzOSxlLnNlbnRpc3F1YXJlPTEzMDkwLGUuc2VudG9zcXVhcmU9MTMwOTEsZS5zZXZlbj01NSxlLnNldmVuYXJhYmljPTE2MzksZS5zZXZlbmJlbmdhbGk9MjU0MSxlLnNldmVuY2lyY2xlPTkzMTgsZS5zZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjgsZS5zZXZlbmRldmE9MjQxMyxlLnNldmVuZWlnaHRocz04NTQyLGUuc2V2ZW5ndWphcmF0aT0yNzk3LGUuc2V2ZW5ndXJtdWtoaT0yNjY5LGUuc2V2ZW5oYWNrYXJhYmljPTE2MzksZS5zZXZlbmhhbmd6aG91PTEyMzI3LGUuc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODM4LGUuc2V2ZW5pbmZlcmlvcj04MzI3LGUuc2V2ZW5tb25vc3BhY2U9NjUzMDMsZS5zZXZlbm9sZHN0eWxlPTYzMjg3LGUuc2V2ZW5wYXJlbj05MzM4LGUuc2V2ZW5wZXJpb2Q9OTM1OCxlLnNldmVucGVyc2lhbj0xNzgzLGUuc2V2ZW5yb21hbj04NTY2LGUuc2V2ZW5zdXBlcmlvcj04MzExLGUuc2V2ZW50ZWVuY2lyY2xlPTkzMjgsZS5zZXZlbnRlZW5wYXJlbj05MzQ4LGUuc2V2ZW50ZWVucGVyaW9kPTkzNjgsZS5zZXZlbnRoYWk9MzY3MSxlLnNmdGh5cGhlbj0xNzMsZS5zaGFhcm1lbmlhbj0xMzk5LGUuc2hhYmVuZ2FsaT0yNDg2LGUuc2hhY3lyaWxsaWM9MTA5NixlLnNoYWRkYWFyYWJpYz0xNjE3LGUuc2hhZGRhZGFtbWFhcmFiaWM9NjQ2MDksZS5zaGFkZGFkYW1tYXRhbmFyYWJpYz02NDYwNixlLnNoYWRkYWZhdGhhYXJhYmljPTY0NjA4LGUuc2hhZGRha2FzcmFhcmFiaWM9NjQ2MTAsZS5zaGFkZGFrYXNyYXRhbmFyYWJpYz02NDYwNyxlLnNoYWRlPTk2MTgsZS5zaGFkZWRhcms9OTYxOSxlLnNoYWRlbGlnaHQ9OTYxNyxlLnNoYWRlbWVkaXVtPTk2MTgsZS5zaGFkZXZhPTIzNTgsZS5zaGFndWphcmF0aT0yNzQyLGUuc2hhZ3VybXVraGk9MjYxNCxlLnNoYWxzaGVsZXRoZWJyZXc9MTQyNyxlLnNoYm9wb21vZm89MTI1NjUsZS5zaGNoYWN5cmlsbGljPTEwOTcsZS5zaGVlbmFyYWJpYz0xNTg4LGUuc2hlZW5maW5hbGFyYWJpYz02NTIwNixlLnNoZWVuaW5pdGlhbGFyYWJpYz02NTIwNyxlLnNoZWVubWVkaWFsYXJhYmljPTY1MjA4LGUuc2hlaWNvcHRpYz05OTUsZS5zaGVxZWw9ODM2MixlLnNoZXFlbGhlYnJldz04MzYyLGUuc2hldmE9MTQ1NixlLnNoZXZhMTE1PTE0NTYsZS5zaGV2YTE1PTE0NTYsZS5zaGV2YTIyPTE0NTYsZS5zaGV2YTJlPTE0NTYsZS5zaGV2YWhlYnJldz0xNDU2LGUuc2hldmFuYXJyb3doZWJyZXc9MTQ1NixlLnNoZXZhcXVhcnRlcmhlYnJldz0xNDU2LGUuc2hldmF3aWRlaGVicmV3PTE0NTYsZS5zaGhhY3lyaWxsaWM9MTIxMSxlLnNoaW1hY29wdGljPTEwMDUsZS5zaGluPTE1MTMsZS5zaGluZGFnZXNoPTY0MzI5LGUuc2hpbmRhZ2VzaGhlYnJldz02NDMyOSxlLnNoaW5kYWdlc2hzaGluZG90PTY0MzAwLGUuc2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXc9NjQzMDAsZS5zaGluZGFnZXNoc2luZG90PTY0MzAxLGUuc2hpbmRhZ2VzaHNpbmRvdGhlYnJldz02NDMwMSxlLnNoaW5kb3RoZWJyZXc9MTQ3MyxlLnNoaW5oZWJyZXc9MTUxMyxlLnNoaW5zaGluZG90PTY0Mjk4LGUuc2hpbnNoaW5kb3RoZWJyZXc9NjQyOTgsZS5zaGluc2luZG90PTY0Mjk5LGUuc2hpbnNpbmRvdGhlYnJldz02NDI5OSxlLnNob29rPTY0MixlLnNpZ21hPTk2MyxlLnNpZ21hMT05NjIsZS5zaWdtYWZpbmFsPTk2MixlLnNpZ21hbHVuYXRlc3ltYm9sZ3JlZWs9MTAxMCxlLnNpaGlyYWdhbmE9MTIzNzUsZS5zaWthdGFrYW5hPTEyNDcxLGUuc2lrYXRha2FuYWhhbGZ3aWR0aD02NTQwNCxlLnNpbHVxaGVicmV3PTE0NjksZS5zaWx1cWxlZnRoZWJyZXc9MTQ2OSxlLnNpbWlsYXI9ODc2NCxlLnNpbmRvdGhlYnJldz0xNDc0LGUuc2lvc2FjaXJjbGVrb3JlYW49MTI5MTYsZS5zaW9zYXBhcmVua29yZWFuPTEyODIwLGUuc2lvc2NpZXVja29yZWFuPTEyNjcwLGUuc2lvc2NpcmNsZWtvcmVhbj0xMjkwMixlLnNpb3NraXllb2trb3JlYW49MTI2NjYsZS5zaW9za29yZWFuPTEyNjEzLGUuc2lvc25pZXVua29yZWFuPTEyNjY3LGUuc2lvc3BhcmVua29yZWFuPTEyODA2LGUuc2lvc3BpZXVwa29yZWFuPTEyNjY5LGUuc2lvc3Rpa2V1dGtvcmVhbj0xMjY2OCxlLnNpeD01NCxlLnNpeGFyYWJpYz0xNjM4LGUuc2l4YmVuZ2FsaT0yNTQwLGUuc2l4Y2lyY2xlPTkzMTcsZS5zaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI3LGUuc2l4ZGV2YT0yNDEyLGUuc2l4Z3VqYXJhdGk9Mjc5NixlLnNpeGd1cm11a2hpPTI2NjgsZS5zaXhoYWNrYXJhYmljPTE2MzgsZS5zaXhoYW5nemhvdT0xMjMyNixlLnNpeGlkZW9ncmFwaGljcGFyZW49MTI4MzcsZS5zaXhpbmZlcmlvcj04MzI2LGUuc2l4bW9ub3NwYWNlPTY1MzAyLGUuc2l4b2xkc3R5bGU9NjMyODYsZS5zaXhwYXJlbj05MzM3LGUuc2l4cGVyaW9kPTkzNTcsZS5zaXhwZXJzaWFuPTE3ODIsZS5zaXhyb21hbj04NTY1LGUuc2l4c3VwZXJpb3I9ODMxMCxlLnNpeHRlZW5jaXJjbGU9OTMyNyxlLnNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaT0yNTUzLGUuc2l4dGVlbnBhcmVuPTkzNDcsZS5zaXh0ZWVucGVyaW9kPTkzNjcsZS5zaXh0aGFpPTM2NzAsZS5zbGFzaD00NyxlLnNsYXNobW9ub3NwYWNlPTY1Mjk1LGUuc2xvbmc9MzgzLGUuc2xvbmdkb3RhY2NlbnQ9NzgzNSxlLnNtaWxlZmFjZT05Nzg2LGUuc21vbm9zcGFjZT02NTM2MyxlLnNvZnBhc3VxaGVicmV3PTE0NzUsZS5zb2Z0aHlwaGVuPTE3MyxlLnNvZnRzaWduY3lyaWxsaWM9MTEwMCxlLnNvaGlyYWdhbmE9MTIzODEsZS5zb2thdGFrYW5hPTEyNDc3LGUuc29rYXRha2FuYWhhbGZ3aWR0aD02NTQwNyxlLnNvbGlkdXNsb25nb3ZlcmxheWNtYj04MjQsZS5zb2xpZHVzc2hvcnRvdmVybGF5Y21iPTgyMyxlLnNvcnVzaXRoYWk9MzYyNSxlLnNvc2FsYXRoYWk9MzYyNCxlLnNvc290aGFpPTM1OTUsZS5zb3N1YXRoYWk9MzYyNixlLnNwYWNlPTMyLGUuc3BhY2VoYWNrYXJhYmljPTMyLGUuc3BhZGU9OTgyNCxlLnNwYWRlc3VpdGJsYWNrPTk4MjQsZS5zcGFkZXN1aXR3aGl0ZT05ODI4LGUuc3BhcmVuPTkzOTAsZS5zcXVhcmViZWxvd2NtYj04MjcsZS5zcXVhcmVjYz0xMzI1MixlLnNxdWFyZWNtPTEzMjEzLGUuc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbD05NjQxLGUuc3F1YXJlaG9yaXpvbnRhbGZpbGw9OTYzNixlLnNxdWFyZWtnPTEzMTk5LGUuc3F1YXJla209MTMyMTQsZS5zcXVhcmVrbWNhcGl0YWw9MTMyNjIsZS5zcXVhcmVsbj0xMzI2NSxlLnNxdWFyZWxvZz0xMzI2NixlLnNxdWFyZW1nPTEzMTk4LGUuc3F1YXJlbWlsPTEzMjY5LGUuc3F1YXJlbW09MTMyMTIsZS5zcXVhcmVtc3F1YXJlZD0xMzIxNyxlLnNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbD05NjM4LGUuc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbD05NjM5LGUuc3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbD05NjQwLGUuc3F1YXJldmVydGljYWxmaWxsPTk2MzcsZS5zcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrPTk2MzUsZS5zcnNxdWFyZT0xMzI3NSxlLnNzYWJlbmdhbGk9MjQ4NyxlLnNzYWRldmE9MjM1OSxlLnNzYWd1amFyYXRpPTI3NDMsZS5zc2FuZ2NpZXVja29yZWFuPTEyNjE3LGUuc3NhbmdoaWV1aGtvcmVhbj0xMjY3NyxlLnNzYW5naWV1bmdrb3JlYW49MTI2NzIsZS5zc2FuZ2tpeWVva2tvcmVhbj0xMjU5NCxlLnNzYW5nbmlldW5rb3JlYW49MTI2NDUsZS5zc2FuZ3BpZXVwa29yZWFuPTEyNjExLGUuc3NhbmdzaW9za29yZWFuPTEyNjE0LGUuc3Nhbmd0aWtldXRrb3JlYW49MTI2MDAsZS5zc3VwZXJpb3I9NjMyMTgsZS5zdGVybGluZz0xNjMsZS5zdGVybGluZ21vbm9zcGFjZT02NTUwNSxlLnN0cm9rZWxvbmdvdmVybGF5Y21iPTgyMixlLnN0cm9rZXNob3J0b3ZlcmxheWNtYj04MjEsZS5zdWJzZXQ9ODgzNCxlLnN1YnNldG5vdGVxdWFsPTg4NDIsZS5zdWJzZXRvcmVxdWFsPTg4MzgsZS5zdWNjZWVkcz04ODI3LGUuc3VjaHRoYXQ9ODcxNSxlLnN1aGlyYWdhbmE9MTIzNzcsZS5zdWthdGFrYW5hPTEyNDczLGUuc3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwNSxlLnN1a3VuYXJhYmljPTE2MTgsZS5zdW1tYXRpb249ODcyMSxlLnN1bj05Nzg4LGUuc3VwZXJzZXQ9ODgzNSxlLnN1cGVyc2V0bm90ZXF1YWw9ODg0MyxlLnN1cGVyc2V0b3JlcXVhbD04ODM5LGUuc3ZzcXVhcmU9MTMyNzYsZS5zeW91d2FlcmFzcXVhcmU9MTMxODAsZS50PTExNixlLnRhYmVuZ2FsaT0yNDY4LGUudGFja2Rvd249ODg2OCxlLnRhY2tsZWZ0PTg4NjcsZS50YWRldmE9MjM0MCxlLnRhZ3VqYXJhdGk9MjcyNCxlLnRhZ3VybXVraGk9MjU5NixlLnRhaGFyYWJpYz0xNTkxLGUudGFoZmluYWxhcmFiaWM9NjUyMTgsZS50YWhpbml0aWFsYXJhYmljPTY1MjE5LGUudGFoaXJhZ2FuYT0xMjM4MyxlLnRhaG1lZGlhbGFyYWJpYz02NTIyMCxlLnRhaXN5b3VlcmFzcXVhcmU9MTMxODEsZS50YWthdGFrYW5hPTEyNDc5LGUudGFrYXRha2FuYWhhbGZ3aWR0aD02NTQwOCxlLnRhdHdlZWxhcmFiaWM9MTYwMCxlLnRhdT05NjQsZS50YXY9MTUxNCxlLnRhdmRhZ2VzPTY0MzMwLGUudGF2ZGFnZXNoPTY0MzMwLGUudGF2ZGFnZXNoaGVicmV3PTY0MzMwLGUudGF2aGVicmV3PTE1MTQsZS50YmFyPTM1OSxlLnRib3BvbW9mbz0xMjU1NCxlLnRjYXJvbj0zNTcsZS50Y2N1cmw9NjgwLGUudGNlZGlsbGE9MzU1LGUudGNoZWhhcmFiaWM9MTY3MCxlLnRjaGVoZmluYWxhcmFiaWM9NjQzNzksZS50Y2hlaGluaXRpYWxhcmFiaWM9NjQzODAsZS50Y2hlaG1lZGlhbGFyYWJpYz02NDM4MSxlLnRjaXJjbGU9OTQ0MyxlLnRjaXJjdW1mbGV4YmVsb3c9Nzc5MyxlLnRjb21tYWFjY2VudD0zNTUsZS50ZGllcmVzaXM9NzgzMSxlLnRkb3RhY2NlbnQ9Nzc4NyxlLnRkb3RiZWxvdz03Nzg5LGUudGVjeXJpbGxpYz0xMDkwLGUudGVkZXNjZW5kZXJjeXJpbGxpYz0xMTk3LGUudGVoYXJhYmljPTE1NzgsZS50ZWhmaW5hbGFyYWJpYz02NTE3NCxlLnRlaGhhaGluaXRpYWxhcmFiaWM9NjQ2NzQsZS50ZWhoYWhpc29sYXRlZGFyYWJpYz02NDUyNCxlLnRlaGluaXRpYWxhcmFiaWM9NjUxNzUsZS50ZWhpcmFnYW5hPTEyMzkwLGUudGVoamVlbWluaXRpYWxhcmFiaWM9NjQ2NzMsZS50ZWhqZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjMsZS50ZWhtYXJidXRhYXJhYmljPTE1NzcsZS50ZWhtYXJidXRhZmluYWxhcmFiaWM9NjUxNzIsZS50ZWhtZWRpYWxhcmFiaWM9NjUxNzYsZS50ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDY3NixlLnRlaG1lZW1pc29sYXRlZGFyYWJpYz02NDUyNixlLnRlaG5vb25maW5hbGFyYWJpYz02NDYyNyxlLnRla2F0YWthbmE9MTI0ODYsZS50ZWthdGFrYW5haGFsZndpZHRoPTY1NDExLGUudGVsZXBob25lPTg0ODEsZS50ZWxlcGhvbmVibGFjaz05NzQyLGUudGVsaXNoYWdlZG9sYWhlYnJldz0xNDQwLGUudGVsaXNoYXFldGFuYWhlYnJldz0xNDQ5LGUudGVuY2lyY2xlPTkzMjEsZS50ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODQxLGUudGVucGFyZW49OTM0MSxlLnRlbnBlcmlvZD05MzYxLGUudGVucm9tYW49ODU2OSxlLnRlc2g9Njc5LGUudGV0PTE0OTYsZS50ZXRkYWdlc2g9NjQzMTIsZS50ZXRkYWdlc2hoZWJyZXc9NjQzMTIsZS50ZXRoZWJyZXc9MTQ5NixlLnRldHNlY3lyaWxsaWM9MTIwNSxlLnRldmlyaGVicmV3PTE0MzUsZS50ZXZpcmxlZnRoZWJyZXc9MTQzNSxlLnRoYWJlbmdhbGk9MjQ2OSxlLnRoYWRldmE9MjM0MSxlLnRoYWd1amFyYXRpPTI3MjUsZS50aGFndXJtdWtoaT0yNTk3LGUudGhhbGFyYWJpYz0xNTg0LGUudGhhbGZpbmFsYXJhYmljPTY1MTk2LGUudGhhbnRoYWtoYXRsb3dsZWZ0dGhhaT02MzY0MCxlLnRoYW50aGFraGF0bG93cmlnaHR0aGFpPTYzNjM5LGUudGhhbnRoYWtoYXR0aGFpPTM2NjAsZS50aGFudGhha2hhdHVwcGVybGVmdHRoYWk9NjM2MzgsZS50aGVoYXJhYmljPTE1NzksZS50aGVoZmluYWxhcmFiaWM9NjUxNzgsZS50aGVoaW5pdGlhbGFyYWJpYz02NTE3OSxlLnRoZWhtZWRpYWxhcmFiaWM9NjUxODAsZS50aGVyZWV4aXN0cz04NzA3LGUudGhlcmVmb3JlPTg3NTYsZS50aGV0YT05NTIsZS50aGV0YTE9OTc3LGUudGhldGFzeW1ib2xncmVlaz05NzcsZS50aGlldXRoYWNpcmNsZWtvcmVhbj0xMjkyMSxlLnRoaWV1dGhhcGFyZW5rb3JlYW49MTI4MjUsZS50aGlldXRoY2lyY2xla29yZWFuPTEyOTA3LGUudGhpZXV0aGtvcmVhbj0xMjYyMCxlLnRoaWV1dGhwYXJlbmtvcmVhbj0xMjgxMSxlLnRoaXJ0ZWVuY2lyY2xlPTkzMjQsZS50aGlydGVlbnBhcmVuPTkzNDQsZS50aGlydGVlbnBlcmlvZD05MzY0LGUudGhvbmFuZ21vbnRob3RoYWk9MzYwMSxlLnRob29rPTQyOSxlLnRob3BodXRoYW90aGFpPTM2MDIsZS50aG9ybj0yNTQsZS50aG90aGFoYW50aGFpPTM2MDcsZS50aG90aGFudGhhaT0zNjAwLGUudGhvdGhvbmd0aGFpPTM2MDgsZS50aG90aHVuZ3RoYWk9MzYwNixlLnRob3VzYW5kY3lyaWxsaWM9MTE1NCxlLnRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYz0xNjQ0LGUudGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbj0xNjQ0LGUudGhyZWU9NTEsZS50aHJlZWFyYWJpYz0xNjM1LGUudGhyZWViZW5nYWxpPTI1MzcsZS50aHJlZWNpcmNsZT05MzE0LGUudGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI0LGUudGhyZWVkZXZhPTI0MDksZS50aHJlZWVpZ2h0aHM9ODU0MCxlLnRocmVlZ3VqYXJhdGk9Mjc5MyxlLnRocmVlZ3VybXVraGk9MjY2NSxlLnRocmVlaGFja2FyYWJpYz0xNjM1LGUudGhyZWVoYW5nemhvdT0xMjMyMyxlLnRocmVlaWRlb2dyYXBoaWNwYXJlbj0xMjgzNCxlLnRocmVlaW5mZXJpb3I9ODMyMyxlLnRocmVlbW9ub3NwYWNlPTY1Mjk5LGUudGhyZWVudW1lcmF0b3JiZW5nYWxpPTI1NTAsZS50aHJlZW9sZHN0eWxlPTYzMjgzLGUudGhyZWVwYXJlbj05MzM0LGUudGhyZWVwZXJpb2Q9OTM1NCxlLnRocmVlcGVyc2lhbj0xNzc5LGUudGhyZWVxdWFydGVycz0xOTAsZS50aHJlZXF1YXJ0ZXJzZW1kYXNoPTYzMTk4LGUudGhyZWVyb21hbj04NTYyLGUudGhyZWVzdXBlcmlvcj0xNzksZS50aHJlZXRoYWk9MzY2NyxlLnRoenNxdWFyZT0xMzIwNCxlLnRpaGlyYWdhbmE9MTIzODUsZS50aWthdGFrYW5hPTEyNDgxLGUudGlrYXRha2FuYWhhbGZ3aWR0aD02NTQwOSxlLnRpa2V1dGFjaXJjbGVrb3JlYW49MTI5MTIsZS50aWtldXRhcGFyZW5rb3JlYW49MTI4MTYsZS50aWtldXRjaXJjbGVrb3JlYW49MTI4OTgsZS50aWtldXRrb3JlYW49MTI1OTksZS50aWtldXRwYXJlbmtvcmVhbj0xMjgwMixlLnRpbGRlPTczMixlLnRpbGRlYmVsb3djbWI9ODE2LGUudGlsZGVjbWI9NzcxLGUudGlsZGVjb21iPTc3MSxlLnRpbGRlZG91YmxlY21iPTg2NCxlLnRpbGRlb3BlcmF0b3I9ODc2NCxlLnRpbGRlb3ZlcmxheWNtYj04MjAsZS50aWxkZXZlcnRpY2FsY21iPTgzMCxlLnRpbWVzY2lyY2xlPTg4NTUsZS50aXBlaGFoZWJyZXc9MTQzMCxlLnRpcGVoYWxlZnRoZWJyZXc9MTQzMCxlLnRpcHBpZ3VybXVraGk9MjY3MixlLnRpdGxvY3lyaWxsaWNjbWI9MTE1NSxlLnRpd25hcm1lbmlhbj0xNDA3LGUudGxpbmViZWxvdz03NzkxLGUudG1vbm9zcGFjZT02NTM2NCxlLnRvYXJtZW5pYW49MTM4NSxlLnRvaGlyYWdhbmE9MTIzOTIsZS50b2thdGFrYW5hPTEyNDg4LGUudG9rYXRha2FuYWhhbGZ3aWR0aD02NTQxMixlLnRvbmViYXJleHRyYWhpZ2htb2Q9NzQxLGUudG9uZWJhcmV4dHJhbG93bW9kPTc0NSxlLnRvbmViYXJoaWdobW9kPTc0MixlLnRvbmViYXJsb3dtb2Q9NzQ0LGUudG9uZWJhcm1pZG1vZD03NDMsZS50b25lZml2ZT00NDUsZS50b25lc2l4PTM4OSxlLnRvbmV0d289NDI0LGUudG9ub3M9OTAwLGUudG9uc3F1YXJlPTEzMDk1LGUudG9wYXRha3RoYWk9MzU5OSxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMwOCxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsPTY1MTE3LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODEsZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzA5LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsPTY1MTE4LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDgyLGUudG90YW90aGFpPTM2MDUsZS50cGFsYXRhbGhvb2s9NDI3LGUudHBhcmVuPTkzOTEsZS50cmFkZW1hcms9ODQ4MixlLnRyYWRlbWFya3NhbnM9NjM3MjIsZS50cmFkZW1hcmtzZXJpZj02MzE5NSxlLnRyZXRyb2ZsZXhob29rPTY0OCxlLnRyaWFnZG49OTY2MCxlLnRyaWFnbGY9OTY2OCxlLnRyaWFncnQ9OTY1OCxlLnRyaWFndXA9OTY1MCxlLnRzPTY3OCxlLnRzYWRpPTE1MTAsZS50c2FkaWRhZ2VzaD02NDMyNixlLnRzYWRpZGFnZXNoaGVicmV3PTY0MzI2LGUudHNhZGloZWJyZXc9MTUxMCxlLnRzZWN5cmlsbGljPTEwOTQsZS50c2VyZT0xNDYxLGUudHNlcmUxMj0xNDYxLGUudHNlcmUxZT0xNDYxLGUudHNlcmUyYj0xNDYxLGUudHNlcmVoZWJyZXc9MTQ2MSxlLnRzZXJlbmFycm93aGVicmV3PTE0NjEsZS50c2VyZXF1YXJ0ZXJoZWJyZXc9MTQ2MSxlLnRzZXJld2lkZWhlYnJldz0xNDYxLGUudHNoZWN5cmlsbGljPTExMTUsZS50c3VwZXJpb3I9NjMyMTksZS50dGFiZW5nYWxpPTI0NjMsZS50dGFkZXZhPTIzMzUsZS50dGFndWphcmF0aT0yNzE5LGUudHRhZ3VybXVraGk9MjU5MSxlLnR0ZWhhcmFiaWM9MTY1NyxlLnR0ZWhmaW5hbGFyYWJpYz02NDM1OSxlLnR0ZWhpbml0aWFsYXJhYmljPTY0MzYwLGUudHRlaG1lZGlhbGFyYWJpYz02NDM2MSxlLnR0aGFiZW5nYWxpPTI0NjQsZS50dGhhZGV2YT0yMzM2LGUudHRoYWd1amFyYXRpPTI3MjAsZS50dGhhZ3VybXVraGk9MjU5MixlLnR0dXJuZWQ9NjQ3LGUudHVoaXJhZ2FuYT0xMjM4OCxlLnR1a2F0YWthbmE9MTI0ODQsZS50dWthdGFrYW5haGFsZndpZHRoPTY1NDEwLGUudHVzbWFsbGhpcmFnYW5hPTEyMzg3LGUudHVzbWFsbGthdGFrYW5hPTEyNDgzLGUudHVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzkxLGUudHdlbHZlY2lyY2xlPTkzMjMsZS50d2VsdmVwYXJlbj05MzQzLGUudHdlbHZlcGVyaW9kPTkzNjMsZS50d2VsdmVyb21hbj04NTcxLGUudHdlbnR5Y2lyY2xlPTkzMzEsZS50d2VudHloYW5nemhvdT0yMTMxNixlLnR3ZW50eXBhcmVuPTkzNTEsZS50d2VudHlwZXJpb2Q9OTM3MSxlLnR3bz01MCxlLnR3b2FyYWJpYz0xNjM0LGUudHdvYmVuZ2FsaT0yNTM2LGUudHdvY2lyY2xlPTkzMTMsZS50d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTIzLGUudHdvZGV2YT0yNDA4LGUudHdvZG90ZW5sZWFkZXI9ODIyOSxlLnR3b2RvdGxlYWRlcj04MjI5LGUudHdvZG90bGVhZGVydmVydGljYWw9NjUwNzIsZS50d29ndWphcmF0aT0yNzkyLGUudHdvZ3VybXVraGk9MjY2NCxlLnR3b2hhY2thcmFiaWM9MTYzNCxlLnR3b2hhbmd6aG91PTEyMzIyLGUudHdvaWRlb2dyYXBoaWNwYXJlbj0xMjgzMyxlLnR3b2luZmVyaW9yPTgzMjIsZS50d29tb25vc3BhY2U9NjUyOTgsZS50d29udW1lcmF0b3JiZW5nYWxpPTI1NDksZS50d29vbGRzdHlsZT02MzI4MixlLnR3b3BhcmVuPTkzMzMsZS50d29wZXJpb2Q9OTM1MyxlLnR3b3BlcnNpYW49MTc3OCxlLnR3b3JvbWFuPTg1NjEsZS50d29zdHJva2U9NDQzLGUudHdvc3VwZXJpb3I9MTc4LGUudHdvdGhhaT0zNjY2LGUudHdvdGhpcmRzPTg1MzIsZS51PTExNyxlLnVhY3V0ZT0yNTAsZS51YmFyPTY0OSxlLnViZW5nYWxpPTI0NDEsZS51Ym9wb21vZm89MTI1ODQsZS51YnJldmU9MzY1LGUudWNhcm9uPTQ2OCxlLnVjaXJjbGU9OTQ0NCxlLnVjaXJjdW1mbGV4PTI1MSxlLnVjaXJjdW1mbGV4YmVsb3c9Nzc5OSxlLnVjeXJpbGxpYz0xMDkxLGUudWRhdHRhZGV2YT0yMzg1LGUudWRibGFjdXRlPTM2OSxlLnVkYmxncmF2ZT01MzMsZS51ZGV2YT0yMzEzLGUudWRpZXJlc2lzPTI1MixlLnVkaWVyZXNpc2FjdXRlPTQ3MixlLnVkaWVyZXNpc2JlbG93PTc3OTUsZS51ZGllcmVzaXNjYXJvbj00NzQsZS51ZGllcmVzaXNjeXJpbGxpYz0xMjY1LGUudWRpZXJlc2lzZ3JhdmU9NDc2LGUudWRpZXJlc2lzbWFjcm9uPTQ3MCxlLnVkb3RiZWxvdz03OTA5LGUudWdyYXZlPTI0OSxlLnVndWphcmF0aT0yNjk3LGUudWd1cm11a2hpPTI1NjksZS51aGlyYWdhbmE9MTIzNTgsZS51aG9va2Fib3ZlPTc5MTEsZS51aG9ybj00MzIsZS51aG9ybmFjdXRlPTc5MTMsZS51aG9ybmRvdGJlbG93PTc5MjEsZS51aG9ybmdyYXZlPTc5MTUsZS51aG9ybmhvb2thYm92ZT03OTE3LGUudWhvcm50aWxkZT03OTE5LGUudWh1bmdhcnVtbGF1dD0zNjksZS51aHVuZ2FydW1sYXV0Y3lyaWxsaWM9MTI2NyxlLnVpbnZlcnRlZGJyZXZlPTUzNSxlLnVrYXRha2FuYT0xMjQ1NCxlLnVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NSxlLnVrY3lyaWxsaWM9MTE0NSxlLnVrb3JlYW49MTI2MzYsZS51bWFjcm9uPTM2MyxlLnVtYWNyb25jeXJpbGxpYz0xMjYzLGUudW1hY3JvbmRpZXJlc2lzPTc4MDMsZS51bWF0cmFndXJtdWtoaT0yNjI1LGUudW1vbm9zcGFjZT02NTM2NSxlLnVuZGVyc2NvcmU9OTUsZS51bmRlcnNjb3JlZGJsPTgyMTUsZS51bmRlcnNjb3JlbW9ub3NwYWNlPTY1MzQzLGUudW5kZXJzY29yZXZlcnRpY2FsPTY1MDc1LGUudW5kZXJzY29yZXdhdnk9NjUxMDMsZS51bmlvbj04NzQ2LGUudW5pdmVyc2FsPTg3MDQsZS51b2dvbmVrPTM3MSxlLnVwYXJlbj05MzkyLGUudXBibG9jaz05NjAwLGUudXBwZXJkb3RoZWJyZXc9MTQ3NixlLnVwc2lsb249OTY1LGUudXBzaWxvbmRpZXJlc2lzPTk3MSxlLnVwc2lsb25kaWVyZXNpc3Rvbm9zPTk0NCxlLnVwc2lsb25sYXRpbj02NTAsZS51cHNpbG9udG9ub3M9OTczLGUudXB0YWNrYmVsb3djbWI9Nzk3LGUudXB0YWNrbW9kPTcyNCxlLnVyYWd1cm11a2hpPTI2NzUsZS51cmluZz0zNjcsZS51c2hvcnRjeXJpbGxpYz0xMTE4LGUudXNtYWxsaGlyYWdhbmE9MTIzNTcsZS51c21hbGxrYXRha2FuYT0xMjQ1MyxlLnVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg1LGUudXN0cmFpZ2h0Y3lyaWxsaWM9MTE5OSxlLnVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDEsZS51dGlsZGU9MzYxLGUudXRpbGRlYWN1dGU9NzgwMSxlLnV0aWxkZWJlbG93PTc3OTcsZS51dWJlbmdhbGk9MjQ0MixlLnV1ZGV2YT0yMzE0LGUudXVndWphcmF0aT0yNjk4LGUudXVndXJtdWtoaT0yNTcwLGUudXVtYXRyYWd1cm11a2hpPTI2MjYsZS51dXZvd2Vsc2lnbmJlbmdhbGk9MjQ5OCxlLnV1dm93ZWxzaWduZGV2YT0yMzcwLGUudXV2b3dlbHNpZ25ndWphcmF0aT0yNzU0LGUudXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NyxlLnV2b3dlbHNpZ25kZXZhPTIzNjksZS51dm93ZWxzaWduZ3VqYXJhdGk9Mjc1MyxlLnY9MTE4LGUudmFkZXZhPTIzNTcsZS52YWd1amFyYXRpPTI3NDEsZS52YWd1cm11a2hpPTI2MTMsZS52YWthdGFrYW5hPTEyNTM1LGUudmF2PTE0OTMsZS52YXZkYWdlc2g9NjQzMDksZS52YXZkYWdlc2g2NT02NDMwOSxlLnZhdmRhZ2VzaGhlYnJldz02NDMwOSxlLnZhdmhlYnJldz0xNDkzLGUudmF2aG9sYW09NjQzMzEsZS52YXZob2xhbWhlYnJldz02NDMzMSxlLnZhdnZhdmhlYnJldz0xNTIwLGUudmF2eW9kaGVicmV3PTE1MjEsZS52Y2lyY2xlPTk0NDUsZS52ZG90YmVsb3c9NzgwNyxlLnZlY3lyaWxsaWM9MTA3NCxlLnZlaGFyYWJpYz0xNzAwLGUudmVoZmluYWxhcmFiaWM9NjQzNjMsZS52ZWhpbml0aWFsYXJhYmljPTY0MzY0LGUudmVobWVkaWFsYXJhYmljPTY0MzY1LGUudmVrYXRha2FuYT0xMjUzNyxlLnZlbnVzPTk3OTIsZS52ZXJ0aWNhbGJhcj0xMjQsZS52ZXJ0aWNhbGxpbmVhYm92ZWNtYj03ODEsZS52ZXJ0aWNhbGxpbmViZWxvd2NtYj04MDksZS52ZXJ0aWNhbGxpbmVsb3dtb2Q9NzE2LGUudmVydGljYWxsaW5lbW9kPTcxMixlLnZld2FybWVuaWFuPTE0MDYsZS52aG9vaz02NTEsZS52aWthdGFrYW5hPTEyNTM2LGUudmlyYW1hYmVuZ2FsaT0yNTA5LGUudmlyYW1hZGV2YT0yMzgxLGUudmlyYW1hZ3VqYXJhdGk9Mjc2NSxlLnZpc2FyZ2FiZW5nYWxpPTI0MzUsZS52aXNhcmdhZGV2YT0yMzA3LGUudmlzYXJnYWd1amFyYXRpPTI2OTEsZS52bW9ub3NwYWNlPTY1MzY2LGUudm9hcm1lbmlhbj0xNDAwLGUudm9pY2VkaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDYsZS52b2ljZWRpdGVyYXRpb25rYXRha2FuYT0xMjU0MixlLnZvaWNlZG1hcmtrYW5hPTEyNDQzLGUudm9pY2VkbWFya2thbmFoYWxmd2lkdGg9NjU0MzgsZS52b2thdGFrYW5hPTEyNTM4LGUudnBhcmVuPTkzOTMsZS52dGlsZGU9NzgwNSxlLnZ0dXJuZWQ9NjUyLGUudnVoaXJhZ2FuYT0xMjQzNixlLnZ1a2F0YWthbmE9MTI1MzIsZS53PTExOSxlLndhY3V0ZT03ODExLGUud2Fla29yZWFuPTEyNjMzLGUud2FoaXJhZ2FuYT0xMjQzMSxlLndha2F0YWthbmE9MTI1MjcsZS53YWthdGFrYW5haGFsZndpZHRoPTY1NDM2LGUud2Frb3JlYW49MTI2MzIsZS53YXNtYWxsaGlyYWdhbmE9MTI0MzAsZS53YXNtYWxsa2F0YWthbmE9MTI1MjYsZS53YXR0b3NxdWFyZT0xMzE0MyxlLndhdmVkYXNoPTEyMzE2LGUud2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbD02NTA3NixlLndhd2FyYWJpYz0xNjA4LGUud2F3ZmluYWxhcmFiaWM9NjUyNjIsZS53YXdoYW16YWFib3ZlYXJhYmljPTE1NzIsZS53YXdoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNTgsZS53YnNxdWFyZT0xMzI3NyxlLndjaXJjbGU9OTQ0NixlLndjaXJjdW1mbGV4PTM3MyxlLndkaWVyZXNpcz03ODEzLGUud2RvdGFjY2VudD03ODE1LGUud2RvdGJlbG93PTc4MTcsZS53ZWhpcmFnYW5hPTEyNDMzLGUud2VpZXJzdHJhc3M9ODQ3MixlLndla2F0YWthbmE9MTI1MjksZS53ZWtvcmVhbj0xMjYzOCxlLndlb2tvcmVhbj0xMjYzNyxlLndncmF2ZT03ODA5LGUud2hpdGVidWxsZXQ9OTcwMixlLndoaXRlY2lyY2xlPTk2NzUsZS53aGl0ZWNpcmNsZWludmVyc2U9OTY4OSxlLndoaXRlY29ybmVyYnJhY2tldGxlZnQ9MTIzMDIsZS53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWw9NjUwOTEsZS53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMyxlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwOTIsZS53aGl0ZWRpYW1vbmQ9OTY3MSxlLndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZD05NjcyLGUud2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NjMsZS53aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjEsZS53aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2NyxlLndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NSxlLndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzEwLGUud2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0PTEyMzExLGUud2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjU3LGUud2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGU9OTY1NTtlLndoaXRlc21hbGxzcXVhcmU9OTY0MyxlLndoaXRlc21pbGluZ2ZhY2U9OTc4NixlLndoaXRlc3F1YXJlPTk2MzMsZS53aGl0ZXN0YXI9OTczNCxlLndoaXRldGVsZXBob25lPTk3NDMsZS53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMxMixlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodD0xMjMxMyxlLndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MyxlLndoaXRldXBwb2ludGluZ3RyaWFuZ2xlPTk2NTEsZS53aWhpcmFnYW5hPTEyNDMyLGUud2lrYXRha2FuYT0xMjUyOCxlLndpa29yZWFuPTEyNjM5LGUud21vbm9zcGFjZT02NTM2NyxlLndvaGlyYWdhbmE9MTI0MzQsZS53b2thdGFrYW5hPTEyNTMwLGUud29rYXRha2FuYWhhbGZ3aWR0aD02NTM4MixlLndvbj04MzYxLGUud29ubW9ub3NwYWNlPTY1NTEwLGUud293YWVudGhhaT0zNjIzLGUud3BhcmVuPTkzOTQsZS53cmluZz03ODMyLGUud3N1cGVyaW9yPTY5NSxlLnd0dXJuZWQ9NjUzLGUud3lubj00NDcsZS54PTEyMCxlLnhhYm92ZWNtYj04MjksZS54Ym9wb21vZm89MTI1NjIsZS54Y2lyY2xlPTk0NDcsZS54ZGllcmVzaXM9NzgyMSxlLnhkb3RhY2NlbnQ9NzgxOSxlLnhlaGFybWVuaWFuPTEzODksZS54aT05NTgsZS54bW9ub3NwYWNlPTY1MzY4LGUueHBhcmVuPTkzOTUsZS54c3VwZXJpb3I9NzM5LGUueT0xMjEsZS55YWFkb3NxdWFyZT0xMzEzNCxlLnlhYmVuZ2FsaT0yNDc5LGUueWFjdXRlPTI1MyxlLnlhZGV2YT0yMzUxLGUueWFla29yZWFuPTEyNjI2LGUueWFndWphcmF0aT0yNzM1LGUueWFndXJtdWtoaT0yNjA3LGUueWFoaXJhZ2FuYT0xMjQyMCxlLnlha2F0YWthbmE9MTI1MTYsZS55YWthdGFrYW5haGFsZndpZHRoPTY1NDI4LGUueWFrb3JlYW49MTI2MjUsZS55YW1ha2thbnRoYWk9MzY2MixlLnlhc21hbGxoaXJhZ2FuYT0xMjQxOSxlLnlhc21hbGxrYXRha2FuYT0xMjUxNSxlLnlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OCxlLnlhdGN5cmlsbGljPTExMjMsZS55Y2lyY2xlPTk0NDgsZS55Y2lyY3VtZmxleD0zNzUsZS55ZGllcmVzaXM9MjU1LGUueWRvdGFjY2VudD03ODIzLGUueWRvdGJlbG93PTc5MjUsZS55ZWhhcmFiaWM9MTYxMCxlLnllaGJhcnJlZWFyYWJpYz0xNzQ2LGUueWVoYmFycmVlZmluYWxhcmFiaWM9NjQ0MzEsZS55ZWhmaW5hbGFyYWJpYz02NTI2NixlLnllaGhhbXphYWJvdmVhcmFiaWM9MTU3NCxlLnllaGhhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE2MixlLnllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljPTY1MTYzLGUueWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYz02NTE2NCxlLnllaGluaXRpYWxhcmFiaWM9NjUyNjcsZS55ZWhtZWRpYWxhcmFiaWM9NjUyNjgsZS55ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDczMyxlLnllaG1lZW1pc29sYXRlZGFyYWJpYz02NDYwMCxlLnllaG5vb25maW5hbGFyYWJpYz02NDY2MCxlLnllaHRocmVlZG90c2JlbG93YXJhYmljPTE3NDUsZS55ZWtvcmVhbj0xMjYzMCxlLnllbj0xNjUsZS55ZW5tb25vc3BhY2U9NjU1MDksZS55ZW9rb3JlYW49MTI2MjksZS55ZW9yaW5oaWV1aGtvcmVhbj0xMjY3OCxlLnllcmFoYmVueW9tb2hlYnJldz0xNDUwLGUueWVyYWhiZW55b21vbGVmdGhlYnJldz0xNDUwLGUueWVyaWN5cmlsbGljPTEwOTksZS55ZXJ1ZGllcmVzaXNjeXJpbGxpYz0xMjczLGUueWVzaWV1bmdrb3JlYW49MTI2NzMsZS55ZXNpZXVuZ3BhbnNpb3Nrb3JlYW49MTI2NzUsZS55ZXNpZXVuZ3Npb3Nrb3JlYW49MTI2NzQsZS55ZXRpdmhlYnJldz0xNDM0LGUueWdyYXZlPTc5MjMsZS55aG9vaz00MzYsZS55aG9va2Fib3ZlPTc5MjcsZS55aWFybWVuaWFuPTEzOTcsZS55aWN5cmlsbGljPTExMTEsZS55aWtvcmVhbj0xMjY0MixlLnlpbnlhbmc9OTc3NSxlLnlpd25hcm1lbmlhbj0xNDEwLGUueW1vbm9zcGFjZT02NTM2OSxlLnlvZD0xNDk3LGUueW9kZGFnZXNoPTY0MzEzLGUueW9kZGFnZXNoaGVicmV3PTY0MzEzLGUueW9kaGVicmV3PTE0OTcsZS55b2R5b2RoZWJyZXc9MTUyMixlLnlvZHlvZHBhdGFoaGVicmV3PTY0Mjg3LGUueW9oaXJhZ2FuYT0xMjQyNCxlLnlvaWtvcmVhbj0xMjY4MSxlLnlva2F0YWthbmE9MTI1MjAsZS55b2thdGFrYW5haGFsZndpZHRoPTY1NDMwLGUueW9rb3JlYW49MTI2MzUsZS55b3NtYWxsaGlyYWdhbmE9MTI0MjMsZS55b3NtYWxsa2F0YWthbmE9MTI1MTksZS55b3NtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTAsZS55b3RncmVlaz0xMDExLGUueW95YWVrb3JlYW49MTI2ODAsZS55b3lha29yZWFuPTEyNjc5LGUueW95YWt0aGFpPTM2MTgsZS55b3lpbmd0aGFpPTM1OTcsZS55cGFyZW49OTM5NixlLnlwb2dlZ3JhbW1lbmk9ODkwLGUueXBvZ2VncmFtbWVuaWdyZWVrY21iPTgzNyxlLnlyPTQyMixlLnlyaW5nPTc4MzMsZS55c3VwZXJpb3I9Njk2LGUueXRpbGRlPTc5MjksZS55dHVybmVkPTY1NCxlLnl1aGlyYWdhbmE9MTI0MjIsZS55dWlrb3JlYW49MTI2ODQsZS55dWthdGFrYW5hPTEyNTE4LGUueXVrYXRha2FuYWhhbGZ3aWR0aD02NTQyOSxlLnl1a29yZWFuPTEyNjQwLGUueXVzYmlnY3lyaWxsaWM9MTEzMSxlLnl1c2JpZ2lvdGlmaWVkY3lyaWxsaWM9MTEzMyxlLnl1c2xpdHRsZWN5cmlsbGljPTExMjcsZS55dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljPTExMjksZS55dXNtYWxsaGlyYWdhbmE9MTI0MjEsZS55dXNtYWxsa2F0YWthbmE9MTI1MTcsZS55dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODksZS55dXlla29yZWFuPTEyNjgzLGUueXV5ZW9rb3JlYW49MTI2ODIsZS55eWFiZW5nYWxpPTI1MjcsZS55eWFkZXZhPTIzOTksZS56PTEyMixlLnphYXJtZW5pYW49MTM4MixlLnphY3V0ZT0zNzgsZS56YWRldmE9MjM5NSxlLnphZ3VybXVraGk9MjY1MSxlLnphaGFyYWJpYz0xNTkyLGUuemFoZmluYWxhcmFiaWM9NjUyMjIsZS56YWhpbml0aWFsYXJhYmljPTY1MjIzLGUuemFoaXJhZ2FuYT0xMjM3NCxlLnphaG1lZGlhbGFyYWJpYz02NTIyNCxlLnphaW5hcmFiaWM9MTU4NixlLnphaW5maW5hbGFyYWJpYz02NTIwMCxlLnpha2F0YWthbmE9MTI0NzAsZS56YXFlZmdhZG9saGVicmV3PTE0MjksZS56YXFlZnFhdGFuaGVicmV3PTE0MjgsZS56YXJxYWhlYnJldz0xNDMyLGUuemF5aW49MTQ5NCxlLnpheWluZGFnZXNoPTY0MzEwLGUuemF5aW5kYWdlc2hoZWJyZXc9NjQzMTAsZS56YXlpbmhlYnJldz0xNDk0LGUuemJvcG9tb2ZvPTEyNTY3LGUuemNhcm9uPTM4MixlLnpjaXJjbGU9OTQ0OSxlLnpjaXJjdW1mbGV4PTc4MjUsZS56Y3VybD02NTcsZS56ZG90PTM4MCxlLnpkb3RhY2NlbnQ9MzgwLGUuemRvdGJlbG93PTc4MjcsZS56ZWN5cmlsbGljPTEwNzksZS56ZWRlc2NlbmRlcmN5cmlsbGljPTExNzcsZS56ZWRpZXJlc2lzY3lyaWxsaWM9MTI0NyxlLnplaGlyYWdhbmE9MTIzODAsZS56ZWthdGFrYW5hPTEyNDc2LGUuemVybz00OCxlLnplcm9hcmFiaWM9MTYzMixlLnplcm9iZW5nYWxpPTI1MzQsZS56ZXJvZGV2YT0yNDA2LGUuemVyb2d1amFyYXRpPTI3OTAsZS56ZXJvZ3VybXVraGk9MjY2MixlLnplcm9oYWNrYXJhYmljPTE2MzIsZS56ZXJvaW5mZXJpb3I9ODMyMCxlLnplcm9tb25vc3BhY2U9NjUyOTYsZS56ZXJvb2xkc3R5bGU9NjMyODAsZS56ZXJvcGVyc2lhbj0xNzc2LGUuemVyb3N1cGVyaW9yPTgzMDQsZS56ZXJvdGhhaT0zNjY0LGUuemVyb3dpZHRoam9pbmVyPTY1Mjc5LGUuemVyb3dpZHRobm9uam9pbmVyPTgyMDQsZS56ZXJvd2lkdGhzcGFjZT04MjAzLGUuemV0YT05NTAsZS56aGJvcG9tb2ZvPTEyNTYzLGUuemhlYXJtZW5pYW49MTM4NixlLnpoZWJyZXZlY3lyaWxsaWM9MTIxOCxlLnpoZWN5cmlsbGljPTEwNzgsZS56aGVkZXNjZW5kZXJjeXJpbGxpYz0xMTc1LGUuemhlZGllcmVzaXNjeXJpbGxpYz0xMjQ1LGUuemloaXJhZ2FuYT0xMjM3NixlLnppa2F0YWthbmE9MTI0NzIsZS56aW5vcmhlYnJldz0xNDU0LGUuemxpbmViZWxvdz03ODI5LGUuem1vbm9zcGFjZT02NTM3MCxlLnpvaGlyYWdhbmE9MTIzODIsZS56b2thdGFrYW5hPTEyNDc4LGUuenBhcmVuPTkzOTcsZS56cmV0cm9mbGV4aG9vaz02NTYsZS56c3Ryb2tlPTQzOCxlLnp1aGlyYWdhbmE9MTIzNzgsZS56dWthdGFrYW5hPTEyNDc0LGVbIi5ub3RkZWYiXT0wLGUuYW5nYnJhY2tldGxlZnRiaWc9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnPTkwMDEsZS5hbmdicmFja2V0bGVmdGJpZ2c9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnZz05MDAxLGUuYW5nYnJhY2tldHJpZ2h0QmlnPTkwMDIsZS5hbmdicmFja2V0cmlnaHRiaWc9OTAwMixlLmFuZ2JyYWNrZXRyaWdodEJpZ2c9OTAwMixlLmFuZ2JyYWNrZXRyaWdodGJpZ2c9OTAwMixlLmFycm93aG9va2xlZnQ9ODYxOCxlLmFycm93aG9va3JpZ2h0PTg2MTcsZS5hcnJvd2xlZnR0b3BoYWxmPTg2MzYsZS5hcnJvd2xlZnRib3RoYWxmPTg2MzcsZS5hcnJvd25vcnRoZWFzdD04NTk5LGUuYXJyb3dub3J0aHdlc3Q9ODU5OCxlLmFycm93cmlnaHR0b3BoYWxmPTg2NDAsZS5hcnJvd3JpZ2h0Ym90aGFsZj04NjQxLGUuYXJyb3dzb3V0aGVhc3Q9ODYwMCxlLmFycm93c291dGh3ZXN0PTg2MDEsZS5iYWNrc2xhc2hiaWc9ODcyNixlLmJhY2tzbGFzaEJpZz04NzI2LGUuYmFja3NsYXNoQmlnZz04NzI2LGUuYmFja3NsYXNoYmlnZz04NzI2LGUuYmFyZGJsPTgyMTQsZS5icmFjZWh0aXBkb3dubGVmdD02NTA3OSxlLmJyYWNlaHRpcGRvd25yaWdodD02NTA3OSxlLmJyYWNlaHRpcHVwbGVmdD02NTA4MCxlLmJyYWNlaHRpcHVwcmlnaHQ9NjUwODAsZS5icmFjZWxlZnRCaWc9MTIzLGUuYnJhY2VsZWZ0YmlnPTEyMyxlLmJyYWNlbGVmdGJpZ2c9MTIzLGUuYnJhY2VsZWZ0QmlnZz0xMjMsZS5icmFjZXJpZ2h0QmlnPTEyNSxlLmJyYWNlcmlnaHRiaWc9MTI1LGUuYnJhY2VyaWdodGJpZ2c9MTI1LGUuYnJhY2VyaWdodEJpZ2c9MTI1LGUuYnJhY2tldGxlZnRiaWc9OTEsZS5icmFja2V0bGVmdEJpZz05MSxlLmJyYWNrZXRsZWZ0YmlnZz05MSxlLmJyYWNrZXRsZWZ0QmlnZz05MSxlLmJyYWNrZXRyaWdodEJpZz05MyxlLmJyYWNrZXRyaWdodGJpZz05MyxlLmJyYWNrZXRyaWdodGJpZ2c9OTMsZS5icmFja2V0cmlnaHRCaWdnPTkzLGUuY2VpbGluZ2xlZnRiaWc9ODk2OCxlLmNlaWxpbmdsZWZ0QmlnPTg5NjgsZS5jZWlsaW5nbGVmdEJpZ2c9ODk2OCxlLmNlaWxpbmdsZWZ0YmlnZz04OTY4LGUuY2VpbGluZ3JpZ2h0YmlnPTg5NjksZS5jZWlsaW5ncmlnaHRCaWc9ODk2OSxlLmNlaWxpbmdyaWdodGJpZ2c9ODk2OSxlLmNlaWxpbmdyaWdodEJpZ2c9ODk2OSxlLmNpcmNsZWRvdGRpc3BsYXk9ODg1NyxlLmNpcmNsZWRvdHRleHQ9ODg1NyxlLmNpcmNsZW11bHRpcGx5ZGlzcGxheT04ODU1LGUuY2lyY2xlbXVsdGlwbHl0ZXh0PTg4NTUsZS5jaXJjbGVwbHVzZGlzcGxheT04ODUzLGUuY2lyY2xlcGx1c3RleHQ9ODg1MyxlLmNvbnRpbnRlZ3JhbGRpc3BsYXk9ODc1MCxlLmNvbnRpbnRlZ3JhbHRleHQ9ODc1MCxlLmNvcHJvZHVjdGRpc3BsYXk9ODcyMCxlLmNvcHJvZHVjdHRleHQ9ODcyMCxlLmZsb29ybGVmdEJpZz04OTcwLGUuZmxvb3JsZWZ0YmlnPTg5NzAsZS5mbG9vcmxlZnRiaWdnPTg5NzAsZS5mbG9vcmxlZnRCaWdnPTg5NzAsZS5mbG9vcnJpZ2h0YmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnZz04OTcxLGUuZmxvb3JyaWdodGJpZ2c9ODk3MSxlLmhhdHdpZGU9NzcwLGUuaGF0d2lkZXI9NzcwLGUuaGF0d2lkZXN0PTc3MCxlLmludGVyY2FsPTc0ODgsZS5pbnRlZ3JhbGRpc3BsYXk9ODc0NyxlLmludGVncmFsdGV4dD04NzQ3LGUuaW50ZXJzZWN0aW9uZGlzcGxheT04ODk4LGUuaW50ZXJzZWN0aW9udGV4dD04ODk4LGUubG9naWNhbGFuZGRpc3BsYXk9ODc0MyxlLmxvZ2ljYWxhbmR0ZXh0PTg3NDMsZS5sb2dpY2Fsb3JkaXNwbGF5PTg3NDQsZS5sb2dpY2Fsb3J0ZXh0PTg3NDQsZS5wYXJlbmxlZnRCaWc9NDAsZS5wYXJlbmxlZnRiaWc9NDAsZS5wYXJlbmxlZnRCaWdnPTQwLGUucGFyZW5sZWZ0YmlnZz00MCxlLnBhcmVucmlnaHRCaWc9NDEsZS5wYXJlbnJpZ2h0YmlnPTQxLGUucGFyZW5yaWdodEJpZ2c9NDEsZS5wYXJlbnJpZ2h0YmlnZz00MSxlLnByaW1lPTgyNDIsZS5wcm9kdWN0ZGlzcGxheT04NzE5LGUucHJvZHVjdHRleHQ9ODcxOSxlLnJhZGljYWxiaWc9ODczMCxlLnJhZGljYWxCaWc9ODczMCxlLnJhZGljYWxCaWdnPTg3MzAsZS5yYWRpY2FsYmlnZz04NzMwLGUucmFkaWNhbGJ0PTg3MzAsZS5yYWRpY2FsdHA9ODczMCxlLnJhZGljYWx2ZXJ0ZXg9ODczMCxlLnNsYXNoYmlnPTQ3LGUuc2xhc2hCaWc9NDcsZS5zbGFzaEJpZ2c9NDcsZS5zbGFzaGJpZ2c9NDcsZS5zdW1tYXRpb25kaXNwbGF5PTg3MjEsZS5zdW1tYXRpb250ZXh0PTg3MjEsZS50aWxkZXdpZGU9NzMyLGUudGlsZGV3aWRlcj03MzIsZS50aWxkZXdpZGVzdD03MzIsZS51bmlvbmRpc3BsYXk9ODg5OSxlLnVuaW9ubXVsdGlkaXNwbGF5PTg4NDYsZS51bmlvbm11bHRpdGV4dD04ODQ2LGUudW5pb25zcWRpc3BsYXk9ODg1MixlLnVuaW9uc3F0ZXh0PTg4NTIsZS51bmlvbnRleHQ9ODg5OSxlLnZleHRlbmRkb3VibGU9ODc0MSxlLnZleHRlbmRzaW5nbGU9ODczOX0pKSxpPW4oKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MzIsZS5hMT05OTg1LGUuYTI9OTk4NixlLmEyMDI9OTk4NyxlLmEzPTk5ODgsZS5hND05NzQyLGUuYTU9OTk5MCxlLmExMTk9OTk5MSxlLmExMTg9OTk5MixlLmExMTc9OTk5MyxlLmExMT05NzU1LGUuYTEyPTk3NTgsZS5hMTM9OTk5NixlLmExND05OTk3LGUuYTE1PTk5OTgsZS5hMTY9OTk5OSxlLmExMDU9MWU0LGUuYTE3PTEwMDAxLGUuYTE4PTEwMDAyLGUuYTE5PTEwMDAzLGUuYTIwPTEwMDA0LGUuYTIxPTEwMDA1LGUuYTIyPTEwMDA2LGUuYTIzPTEwMDA3LGUuYTI0PTEwMDA4LGUuYTI1PTEwMDA5LGUuYTI2PTEwMDEwLGUuYTI3PTEwMDExLGUuYTI4PTEwMDEyLGUuYTY9MTAwMTMsZS5hNz0xMDAxNCxlLmE4PTEwMDE1LGUuYTk9MTAwMTYsZS5hMTA9MTAwMTcsZS5hMjk9MTAwMTgsZS5hMzA9MTAwMTksZS5hMzE9MTAwMjAsZS5hMzI9MTAwMjEsZS5hMzM9MTAwMjIsZS5hMzQ9MTAwMjMsZS5hMzU9OTczMyxlLmEzNj0xMDAyNSxlLmEzNz0xMDAyNixlLmEzOD0xMDAyNyxlLmEzOT0xMDAyOCxlLmE0MD0xMDAyOSxlLmE0MT0xMDAzMCxlLmE0Mj0xMDAzMSxlLmE0Mz0xMDAzMixlLmE0ND0xMDAzMyxlLmE0NT0xMDAzNCxlLmE0Nj0xMDAzNSxlLmE0Nz0xMDAzNixlLmE0OD0xMDAzNyxlLmE0OT0xMDAzOCxlLmE1MD0xMDAzOSxlLmE1MT0xMDA0MCxlLmE1Mj0xMDA0MSxlLmE1Mz0xMDA0MixlLmE1ND0xMDA0MyxlLmE1NT0xMDA0NCxlLmE1Nj0xMDA0NSxlLmE1Nz0xMDA0NixlLmE1OD0xMDA0NyxlLmE1OT0xMDA0OCxlLmE2MD0xMDA0OSxlLmE2MT0xMDA1MCxlLmE2Mj0xMDA1MSxlLmE2Mz0xMDA1MixlLmE2ND0xMDA1MyxlLmE2NT0xMDA1NCxlLmE2Nj0xMDA1NSxlLmE2Nz0xMDA1NixlLmE2OD0xMDA1NyxlLmE2OT0xMDA1OCxlLmE3MD0xMDA1OSxlLmE3MT05Njc5LGUuYTcyPTEwMDYxLGUuYTczPTk2MzIsZS5hNzQ9MTAwNjMsZS5hMjAzPTEwMDY0LGUuYTc1PTEwMDY1LGUuYTIwND0xMDA2NixlLmE3Nj05NjUwLGUuYTc3PTk2NjAsZS5hNzg9OTY3MCxlLmE3OT0xMDA3MCxlLmE4MT05Njg3LGUuYTgyPTEwMDcyLGUuYTgzPTEwMDczLGUuYTg0PTEwMDc0LGUuYTk3PTEwMDc1LGUuYTk4PTEwMDc2LGUuYTk5PTEwMDc3LGUuYTEwMD0xMDA3OCxlLmExMDE9MTAwODEsZS5hMTAyPTEwMDgyLGUuYTEwMz0xMDA4MyxlLmExMDQ9MTAwODQsZS5hMTA2PTEwMDg1LGUuYTEwNz0xMDA4NixlLmExMDg9MTAwODcsZS5hMTEyPTk4MjcsZS5hMTExPTk4MzAsZS5hMTEwPTk4MjksZS5hMTA5PTk4MjQsZS5hMTIwPTkzMTIsZS5hMTIxPTkzMTMsZS5hMTIyPTkzMTQsZS5hMTIzPTkzMTUsZS5hMTI0PTkzMTYsZS5hMTI1PTkzMTcsZS5hMTI2PTkzMTgsZS5hMTI3PTkzMTksZS5hMTI4PTkzMjAsZS5hMTI5PTkzMjEsZS5hMTMwPTEwMTAyLGUuYTEzMT0xMDEwMyxlLmExMzI9MTAxMDQsZS5hMTMzPTEwMTA1LGUuYTEzND0xMDEwNixlLmExMzU9MTAxMDcsZS5hMTM2PTEwMTA4LGUuYTEzNz0xMDEwOSxlLmExMzg9MTAxMTAsZS5hMTM5PTEwMTExLGUuYTE0MD0xMDExMixlLmExNDE9MTAxMTMsZS5hMTQyPTEwMTE0LGUuYTE0Mz0xMDExNSxlLmExNDQ9MTAxMTYsZS5hMTQ1PTEwMTE3LGUuYTE0Nj0xMDExOCxlLmExNDc9MTAxMTksZS5hMTQ4PTEwMTIwLGUuYTE0OT0xMDEyMSxlLmExNTA9MTAxMjIsZS5hMTUxPTEwMTIzLGUuYTE1Mj0xMDEyNCxlLmExNTM9MTAxMjUsZS5hMTU0PTEwMTI2LGUuYTE1NT0xMDEyNyxlLmExNTY9MTAxMjgsZS5hMTU3PTEwMTI5LGUuYTE1OD0xMDEzMCxlLmExNTk9MTAxMzEsZS5hMTYwPTEwMTMyLGUuYTE2MT04NTk0LGUuYTE2Mz04NTk2LGUuYTE2ND04NTk3LGUuYTE5Nj0xMDEzNixlLmExNjU9MTAxMzcsZS5hMTkyPTEwMTM4LGUuYTE2Nj0xMDEzOSxlLmExNjc9MTAxNDAsZS5hMTY4PTEwMTQxLGUuYTE2OT0xMDE0MixlLmExNzA9MTAxNDMsZS5hMTcxPTEwMTQ0LGUuYTE3Mj0xMDE0NSxlLmExNzM9MTAxNDYsZS5hMTYyPTEwMTQ3LGUuYTE3ND0xMDE0OCxlLmExNzU9MTAxNDksZS5hMTc2PTEwMTUwLGUuYTE3Nz0xMDE1MSxlLmExNzg9MTAxNTIsZS5hMTc5PTEwMTUzLGUuYTE5Mz0xMDE1NCxlLmExODA9MTAxNTUsZS5hMTk5PTEwMTU2LGUuYTE4MT0xMDE1NyxlLmEyMDA9MTAxNTgsZS5hMTgyPTEwMTU5LGUuYTIwMT0xMDE2MSxlLmExODM9MTAxNjIsZS5hMTg0PTEwMTYzLGUuYTE5Nz0xMDE2NCxlLmExODU9MTAxNjUsZS5hMTk0PTEwMTY2LGUuYTE5OD0xMDE2NyxlLmExODY9MTAxNjgsZS5hMTk1PTEwMTY5LGUuYTE4Nz0xMDE3MCxlLmExODg9MTAxNzEsZS5hMTg5PTEwMTcyLGUuYTE5MD0xMDE3MyxlLmExOTE9MTAxNzQsZS5hODk9MTAwODgsZS5hOTA9MTAwODksZS5hOTM9MTAwOTAsZS5hOTQ9MTAwOTEsZS5hOTE9MTAwOTIsZS5hOTI9MTAwOTMsZS5hMjA1PTEwMDk0LGUuYTg1PTEwMDk1LGUuYTIwNj0xMDA5NixlLmE4Nj0xMDA5NyxlLmE4Nz0xMDA5OCxlLmE4OD0xMDA5OSxlLmE5NT0xMDEwMCxlLmE5Nj0xMDEwMSxlWyIubm90ZGVmIl09MH0pKTt0LmdldEdseXBoc1VuaWNvZGU9YSx0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZT1pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz10LmdldFN5bWJvbHNGb250cz10LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0U3RkRm9udE1hcD12b2lkIDA7dmFyIG49cig2KSxhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5BcmlhbE5hcnJvdz0iSGVsdmV0aWNhIixlWyJBcmlhbE5hcnJvdy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWxOYXJyb3ctSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsQmxhY2s9IkhlbHZldGljYSIsZVsiQXJpYWxCbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbEJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQXJpYWwtQmxhY2siXT0iSGVsdmV0aWNhIixlWyJBcmlhbC1CbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbC1CbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWwtQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxNVD0iSGVsdmV0aWNhIixlWyJDb3VyaWVyLUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXc9IkNvdXJpZXIiLGVbIkNvdXJpZXJOZXctQm9sZCJdPSJDb3VyaWVyLUJvbGQiLGVbIkNvdXJpZXJOZXctQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJDb3VyaWVyTmV3LUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ld1BTLUJvbGRNVCJdPSJDb3VyaWVyLUJvbGQiLGVbIkNvdXJpZXJOZXdQUy1JdGFsaWNNVCJdPSJDb3VyaWVyLU9ibGlxdWUiLGUuQ291cmllck5ld1BTTVQ9IkNvdXJpZXIiLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGVbIkhlbHZldGljYS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkhlbHZldGljYS1PYmxpcXVlIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZVsiU3ltYm9sLUJvbGQiXT0iU3ltYm9sIixlWyJTeW1ib2wtQm9sZEl0YWxpYyJdPSJTeW1ib2wiLGVbIlN5bWJvbC1JdGFsaWMiXT0iU3ltYm9sIixlLlRpbWVzTmV3Um9tYW49IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW4tSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZS5UaW1lc05ld1JvbWFuUFM9IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTTVQ9IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTTVQtSXRhbGljIl09IlRpbWVzLUl0YWxpYyJ9KSk7dC5nZXRTdGRGb250TWFwPWE7dmFyIGk9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNhbGlicmk9IkhlbHZldGljYSIsZVsiQ2FsaWJyaS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJDYWxpYnJpLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5DZW50dXJ5R290aGljPSJIZWx2ZXRpY2EiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2VudHVyeUdvdGhpYy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2VudHVyeUdvdGhpYy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ29taWNTYW5zTVM9IkNvbWljIFNhbnMgTVMiLGVbIkNvbWljU2Fuc01TLUJvbGQiXT0iQ29taWMgU2FucyBNUy1Cb2xkIixlWyJDb21pY1NhbnNNUy1Cb2xkSXRhbGljIl09IkNvbWljIFNhbnMgTVMtQm9sZEl0YWxpYyIsZVsiQ29taWNTYW5zTVMtSXRhbGljIl09IkNvbWljIFNhbnMgTVMtSXRhbGljIixlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiLGVbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiLGVbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyIsZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiLGVbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIixlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiLGVbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iLGVbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIixlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIixlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiLGVbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiLGVbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIixlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iLGVbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiLGVbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiLGVbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIixlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyJ9KSk7dC5nZXROb25TdGRGb250TWFwPWk7dmFyIG89KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJBZG9iZSBKZW5zb24iXT0hMCxlWyJBZG9iZSBUZXh0Il09ITAsZS5BbGJlcnR1cz0hMCxlLkFsZHVzPSEwLGUuQWxleGFuZHJpYT0hMCxlLkFsZ2VyaWFuPSEwLGVbIkFtZXJpY2FuIFR5cGV3cml0ZXIiXT0hMCxlLkFudGlxdWE9ITAsZS5BcGV4PSEwLGUuQXJubz0hMCxlLkFzdGVyPSEwLGUuQXVyb3JhPSEwLGUuQmFza2VydmlsbGU9ITAsZS5CZWxsPSEwLGUuQmVtYm89ITAsZVsiQmVtYm8gU2Nob29sYm9vayJdPSEwLGUuQmVuZ3VpYXQ9ITAsZVsiQmVya2VsZXkgT2xkIFN0eWxlIl09ITAsZVsiQmVybmhhcmQgTW9kZXJuIl09ITAsZVsiQmVydGhvbGQgQ2l0eSJdPSEwLGUuQm9kb25pPSEwLGVbIkJhdWVyIEJvZG9uaSJdPSEwLGVbIkJvb2sgQW50aXF1YSJdPSEwLGUuQm9va21hbj0hMCxlWyJCb3JkZWF1eCBSb21hbiJdPSEwLGVbIkNhbGlmb3JuaWFuIEZCIl09ITAsZS5DYWxpc3RvPSEwLGUuQ2FsdmVydD0hMCxlLkNhcGl0YWxzPSEwLGUuQ2FtYnJpYT0hMCxlLkNhcnRpZXI9ITAsZS5DYXNsb249ITAsZS5DYXR1bGw9ITAsZS5DZW50YXVyPSEwLGVbIkNlbnR1cnkgT2xkIFN0eWxlIl09ITAsZVsiQ2VudHVyeSBTY2hvb2xib29rIl09ITAsZS5DaGFwYXJyYWw9ITAsZVsiQ2hhcmlzIFNJTCJdPSEwLGUuQ2hlbHRlbmhhbT0hMCxlWyJDaG9sbGEgU2xhYiJdPSEwLGUuQ2xhcmVuZG9uPSEwLGUuQ2xlYXJmYWNlPSEwLGUuQ29jaGluPSEwLGUuQ29sb25uYT0hMCxlWyJDb21wdXRlciBNb2Rlcm4iXT0hMCxlWyJDb25jcmV0ZSBSb21hbiJdPSEwLGUuQ29uc3RhbnRpYT0hMCxlWyJDb29wZXIgQmxhY2siXT0hMCxlLkNvcm9uYT0hMCxlLkVjb3R5cGU9ITAsZS5FZ3lwdGllbm5lPSEwLGUuRWxlcGhhbnQ9ITAsZS5FeGNlbHNpb3I9ITAsZS5GYWlyZmllbGQ9ITAsZVsiRkYgU2NhbGEiXT0hMCxlLkZvbGthcmQ9ITAsZS5Gb290bGlnaHQ9ITAsZS5GcmVlU2VyaWY9ITAsZVsiRnJpeiBRdWFkcmF0YSJdPSEwLGUuR2FyYW1vbmQ9ITAsZS5HZW50aXVtPSEwLGUuR2VvcmdpYT0hMCxlLkdsb3VjZXN0ZXI9ITAsZVsiR291ZHkgT2xkIFN0eWxlIl09ITAsZVsiR291ZHkgU2Nob29sYm9vayJdPSEwLGVbIkdvdWR5IFBybyBGb250Il09ITAsZS5HcmFuam9uPSEwLGVbIkd1YXJkaWFuIEVneXB0aWFuIl09ITAsZS5IZWF0aGVyPSEwLGUuSGVyY3VsZXM9ITAsZVsiSGlnaCBUb3dlciBUZXh0Il09ITAsZS5IaXJvc2hpZ2U9ITAsZVsiSG9lZmxlciBUZXh0Il09ITAsZVsiSHVtYW5hIFNlcmlmIl09ITAsZS5JbXByaW50PSEwLGVbIklvbmljIE5vLiA1Il09ITAsZS5KYW5zb249ITAsZS5Kb2FubmE9ITAsZS5Lb3Jpbm5hPSEwLGUuTGV4aWNvbj0hMCxlWyJMaWJlcmF0aW9uIFNlcmlmIl09ITAsZVsiTGludXggTGliZXJ0aW5lIl09ITAsZS5MaXRlcmF0dXJuYXlhPSEwLGUuTHVjaWRhPSEwLGVbIkx1Y2lkYSBCcmlnaHQiXT0hMCxlLk1lbGlvcj0hMCxlLk1lbXBoaXM9ITAsZS5NaWxsZXI9ITAsZS5NaW5pb249ITAsZS5Nb2Rlcm49ITAsZVsiTW9uYSBMaXNhIl09ITAsZVsiTXJzIEVhdmVzIl09ITAsZVsiTVMgU2VyaWYiXT0hMCxlWyJNdXNlbyBTbGFiIl09ITAsZVsiTmV3IFlvcmsiXT0hMCxlWyJOaW1idXMgUm9tYW4iXT0hMCxlWyJOUFMgUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLk51cHRpYWxTY3JpcHQ9ITAsZS5QYWxhdGlubz0hMCxlLlBlcnBldHVhPSEwLGUuUGxhbnRpbj0hMCxlWyJQbGFudGluIFNjaG9vbGJvb2siXT0hMCxlLlBsYXliaWxsPSEwLGVbIlBvb3IgUmljaGFyZCJdPSEwLGVbIlJhd2xpbnNvbiBSb2Fkd2F5Il09ITAsZS5SZW5hdWx0PSEwLGUuUmVxdWllbT0hMCxlLlJvY2t3ZWxsPSEwLGUuUm9tYW49ITAsZVsiUm90aXMgU2VyaWYiXT0hMCxlLlNhYm9uPSEwLGUuU2NhbGE9ITAsZS5TZWFndWxsPSEwLGUuU2lzdGluYT0hMCxlLlNvdXZlbmlyPSEwLGUuU1RJWD0hMCxlWyJTdG9uZSBJbmZvcm1hbCJdPSEwLGVbIlN0b25lIFNlcmlmIl09ITAsZS5TeWxmYWVuPSEwLGUuVGltZXM9ITAsZS5UcmFqYW49ITAsZVsiVHJpbml0w6kiXT0hMCxlWyJUcnVtcCBNZWRpYWV2YWwiXT0hMCxlLlV0b3BpYT0hMCxlWyJWYWxlIFR5cGUiXT0hMCxlWyJCaXRzdHJlYW0gVmVyYSJdPSEwLGVbIlZlcmEgU2VyaWYiXT0hMCxlLlZlcnNhaWxsZXM9ITAsZS5XYW50ZWQ9ITAsZS5XZWlzcz0hMCxlWyJXaWRlIExhdGluIl09ITAsZS5XaW5kc29yPSEwLGUuWElUUz0hMH0pKTt0LmdldFNlcmlmRm9udHM9bzt2YXIgcz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuRGluZ2JhdHM9ITAsZS5TeW1ib2w9ITAsZS5aYXBmRGluZ2JhdHM9ITB9KSk7dC5nZXRTeW1ib2xzRm9udHM9czt2YXIgbD0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMl09MTAsZVszXT0zMixlWzRdPTMzLGVbNV09MzQsZVs2XT0zNSxlWzddPTM2LGVbOF09MzcsZVs5XT0zOCxlWzEwXT0zOSxlWzExXT00MCxlWzEyXT00MSxlWzEzXT00MixlWzE0XT00MyxlWzE1XT00NCxlWzE2XT00NSxlWzE3XT00NixlWzE4XT00NyxlWzE5XT00OCxlWzIwXT00OSxlWzIxXT01MCxlWzIyXT01MSxlWzIzXT01MixlWzI0XT01MyxlWzI1XT01NCxlWzI2XT01NSxlWzI3XT01NixlWzI4XT01NyxlWzI5XT01OCxlWzMwXT04OTQsZVszMV09NjAsZVszMl09NjEsZVszM109NjIsZVszNF09NjMsZVszNV09NjQsZVszNl09NjUsZVszN109NjYsZVszOF09NjcsZVszOV09NjgsZVs0MF09NjksZVs0MV09NzAsZVs0Ml09NzEsZVs0M109NzIsZVs0NF09NzMsZVs0NV09NzQsZVs0Nl09NzUsZVs0N109NzYsZVs0OF09NzcsZVs0OV09NzgsZVs1MF09NzksZVs1MV09ODAsZVs1Ml09ODEsZVs1M109ODIsZVs1NF09ODMsZVs1NV09ODQsZVs1Nl09ODUsZVs1N109ODYsZVs1OF09ODcsZVs1OV09ODgsZVs2MF09ODksZVs2MV09OTAsZVs2Ml09OTEsZVs2M109OTIsZVs2NF09OTMsZVs2NV09OTQsZVs2Nl09OTUsZVs2N109OTYsZVs2OF09OTcsZVs2OV09OTgsZVs3MF09OTksZVs3MV09MTAwLGVbNzJdPTEwMSxlWzczXT0xMDIsZVs3NF09MTAzLGVbNzVdPTEwNCxlWzc2XT0xMDUsZVs3N109MTA2LGVbNzhdPTEwNyxlWzc5XT0xMDgsZVs4MF09MTA5LGVbODFdPTExMCxlWzgyXT0xMTEsZVs4M109MTEyLGVbODRdPTExMyxlWzg1XT0xMTQsZVs4Nl09MTE1LGVbODddPTExNixlWzg4XT0xMTcsZVs4OV09MTE4LGVbOTBdPTExOSxlWzkxXT0xMjAsZVs5Ml09MTIxLGVbOTNdPTEyMixlWzk0XT0xMjMsZVs5NV09MTI0LGVbOTZdPTEyNSxlWzk3XT0xMjYsZVs5OF09MTk2LGVbOTldPTE5NyxlWzEwMF09MTk5LGVbMTAxXT0yMDEsZVsxMDJdPTIwOSxlWzEwM109MjE0LGVbMTA0XT0yMjAsZVsxMDVdPTIyNSxlWzEwNl09MjI0LGVbMTA3XT0yMjYsZVsxMDhdPTIyOCxlWzEwOV09MjI3LGVbMTEwXT0yMjksZVsxMTFdPTIzMSxlWzExMl09MjMzLGVbMTEzXT0yMzIsZVsxMTRdPTIzNCxlWzExNV09MjM1LGVbMTE2XT0yMzcsZVsxMTddPTIzNixlWzExOF09MjM4LGVbMTE5XT0yMzksZVsxMjBdPTI0MSxlWzEyMV09MjQzLGVbMTIyXT0yNDIsZVsxMjNdPTI0NCxlWzEyNF09MjQ2LGVbMTI1XT0yNDUsZVsxMjZdPTI1MCxlWzEyN109MjQ5LGVbMTI4XT0yNTEsZVsxMjldPTI1MixlWzEzMF09ODIyNCxlWzEzMV09MTc2LGVbMTMyXT0xNjIsZVsxMzNdPTE2MyxlWzEzNF09MTY3LGVbMTM1XT04MjI2LGVbMTM2XT0xODIsZVsxMzddPTIyMyxlWzEzOF09MTc0LGVbMTM5XT0xNjksZVsxNDBdPTg0ODIsZVsxNDFdPTE4MCxlWzE0Ml09MTY4LGVbMTQzXT04ODAwLGVbMTQ0XT0xOTgsZVsxNDVdPTIxNixlWzE0Nl09ODczNCxlWzE0N109MTc3LGVbMTQ4XT04ODA0LGVbMTQ5XT04ODA1LGVbMTUwXT0xNjUsZVsxNTFdPTE4MSxlWzE1Ml09ODcwNixlWzE1M109ODcyMSxlWzE1NF09ODcxOSxlWzE1Nl09ODc0NyxlWzE1N109MTcwLGVbMTU4XT0xODYsZVsxNTldPTg0ODYsZVsxNjBdPTIzMCxlWzE2MV09MjQ4LGVbMTYyXT0xOTEsZVsxNjNdPTE2MSxlWzE2NF09MTcyLGVbMTY1XT04NzMwLGVbMTY2XT00MDIsZVsxNjddPTg3NzYsZVsxNjhdPTg3MTAsZVsxNjldPTE3MSxlWzE3MF09MTg3LGVbMTcxXT04MjMwLGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjddPTM1MyxlWzIyOV09MzgyLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY4XT0yODMsZVsyNjldPTMxMyxlWzI3NV09MzIzLGVbMjc2XT0zMjQsZVsyNzhdPTMyOCxlWzI4NF09MzQ1LGVbMjg1XT0zNDYsZVsyODZdPTM0NyxlWzI5Ml09MzY3LGVbMjk1XT0zNzcsZVsyOTZdPTM3OCxlWzI5OF09MzgwLGVbMzA1XT05NjMsZVszMDZdPTk2NCxlWzMwN109OTY2LGVbMzA4XT04MjE1LGVbMzA5XT04MjUyLGVbMzEwXT04MzE5LGVbMzExXT04MzU5LGVbMzEyXT04NTkyLGVbMzEzXT04NTkzLGVbMzM3XT05NTUyLGVbNDkzXT0xMDM5LGVbNDk0XT0xMDQwLGVbNzA1XT0xNTI0LGVbNzA2XT04MzYyLGVbNzEwXT02NDI4OCxlWzcxMV09NjQyOTgsZVs3NTldPTE2MTcsZVs3NjFdPTE3NzYsZVs3NjNdPTE3NzgsZVs3NzVdPTE2NTIsZVs3NzddPTE3NjQsZVs3NzhdPTE3ODAsZVs3NzldPTE3ODEsZVs3ODBdPTE3ODIsZVs3ODJdPTc3MSxlWzc4M109NjQ3MjYsZVs3ODZdPTgzNjMsZVs3ODhdPTg1MzIsZVs3OTBdPTc2OCxlWzc5MV09NzY5LGVbNzkyXT03NjgsZVs3OTVdPTgwMyxlWzc5N109NjQzMzYsZVs3OThdPTY0MzM3LGVbNzk5XT02NDM0MixlWzgwMF09NjQzNDMsZVs4MDFdPTY0MzQ0LGVbODAyXT02NDM0NSxlWzgwM109NjQzNjIsZVs4MDRdPTY0MzYzLGVbODA1XT02NDM2NCxlWzI0MjRdPTc4MjEsZVsyNDI1XT03ODIyLGVbMjQyNl09NzgyMyxlWzI0MjddPTc4MjQsZVsyNDI4XT03ODI1LGVbMjQyOV09NzgyNixlWzI0MzBdPTc4MjcsZVsyNDMzXT03NjgyLGVbMjY3OF09ODA0NSxlWzI2NzldPTgwNDYsZVsyODMwXT0xNTUyLGVbMjgzOF09Njg2LGVbMjg0MF09NzUxLGVbMjg0Ml09NzUzLGVbMjg0M109NzU0LGVbMjg0NF09NzU1LGVbMjg0Nl09NzU3LGVbMjg1Nl09NzY3LGVbMjg1N109ODQ4LGVbMjg1OF09ODQ5LGVbMjg2Ml09ODUzLGVbMjg2M109ODU0LGVbMjg2NF09ODU1LGVbMjg2NV09ODYxLGVbMjg2Nl09ODYyLGVbMjkwNl09NzQ2MCxlWzI5MDhdPTc0NjIsZVsyOTA5XT03NDYzLGVbMjkxMF09NzQ2NCxlWzI5MTJdPTc0NjYsZVsyOTEzXT03NDY3LGVbMjkxNF09NzQ2OCxlWzI5MTZdPTc0NzAsZVsyOTE3XT03NDcxLGVbMjkxOF09NzQ3MixlWzI5MjBdPTc0NzQsZVsyOTIxXT03NDc1LGVbMjkyMl09NzQ3NixlWzI5MjRdPTc0NzgsZVsyOTI1XT03NDc5LGVbMjkyNl09NzQ4MCxlWzI5MjhdPTc0ODIsZVsyOTI5XT03NDgzLGVbMjkzMF09NzQ4NCxlWzI5MzJdPTc0ODYsZVsyOTMzXT03NDg3LGVbMjkzNF09NzQ4OCxlWzI5MzZdPTc0OTAsZVsyOTM3XT03NDkxLGVbMjkzOF09NzQ5MixlWzI5NDBdPTc0OTQsZVsyOTQxXT03NDk1LGVbMjk0Ml09NzQ5NixlWzI5NDRdPTc0OTgsZVsyOTQ2XT03NTAwLGVbMjk0OF09NzUwMixlWzI5NTBdPTc1MDQsZVsyOTUxXT03NTA1LGVbMjk1Ml09NzUwNixlWzI5NTRdPTc1MDgsZVsyOTU1XT03NTA5LGVbMjk1Nl09NzUxMCxlWzI5NThdPTc1MTIsZVsyOTU5XT03NTEzLGVbMjk2MF09NzUxNCxlWzI5NjJdPTc1MTYsZVsyOTYzXT03NTE3LGVbMjk2NF09NzUxOCxlWzI5NjZdPTc1MjAsZVsyOTY3XT03NTIxLGVbMjk2OF09NzUyMixlWzI5NzBdPTc1MjQsZVsyOTcxXT03NTI1LGVbMjk3Ml09NzUyNixlWzI5NzRdPTc1MjgsZVsyOTc1XT03NTI5LGVbMjk3Nl09NzUzMCxlWzI5NzhdPTE1MzcsZVsyOTc5XT0xNTM4LGVbMjk4MF09MTUzOSxlWzI5ODJdPTE1NDksZVsyOTgzXT0xNTUxLGVbMjk4NF09MTU1MixlWzI5ODZdPTE1NTQsZVsyOTg3XT0xNTU1LGVbMjk4OF09MTU1NixlWzI5OTBdPTE2MjMsZVsyOTkxXT0xNjI0LGVbMjk5NV09MTc3NSxlWzI5OTldPTE3OTEsZVszMDAyXT02NDI5MCxlWzMwMDNdPTY0MjkxLGVbMzAwNF09NjQyOTIsZVszMDA2XT02NDI5NCxlWzMwMDddPTY0Mjk1LGVbMzAwOF09NjQyOTYsZVszMDExXT0xOTAwLGVbMzAxNF09ODIyMyxlWzMwMTVdPTgyNDQsZVszMDE3XT03NTMyLGVbMzAxOF09NzUzMyxlWzMwMTldPTc1MzQsZVszMDc1XT03NTkwLGVbMzA3Nl09NzU5MSxlWzMwNzldPTc1OTQsZVszMDgwXT03NTk1LGVbMzA4M109NzU5OCxlWzMwODRdPTc1OTksZVszMDg3XT03NjAyLGVbMzA4OF09NzYwMyxlWzMwOTFdPTc2MDYsZVszMDkyXT03NjA3LGVbMzA5NV09NzYxMCxlWzMwOTZdPTc2MTEsZVszMDk5XT03NjE0LGVbMzEwMF09NzYxNSxlWzMxMDNdPTc2MTgsZVszMTA0XT03NjE5LGVbMzEwN109ODMzNyxlWzMxMDhdPTgzMzgsZVszMTE2XT0xODg0LGVbMzExOV09MTg4NSxlWzMxMjBdPTE4ODUsZVszMTIzXT0xODg2LGVbMzEyNF09MTg4NixlWzMxMjddPTE4ODcsZVszMTI4XT0xODg3LGVbMzEzMV09MTg4OCxlWzMxMzJdPTE4ODgsZVszMTM1XT0xODg5LGVbMzEzNl09MTg4OSxlWzMxMzldPTE4OTAsZVszMTQwXT0xODkwLGVbMzE0M109MTg5MSxlWzMxNDRdPTE4OTEsZVszMTQ3XT0xODkyLGVbMzE0OF09MTg5MixlWzMxNTNdPTU4MCxlWzMxNTRdPTU4MSxlWzMxNTddPTU4NCxlWzMxNThdPTU4NSxlWzMxNjFdPTU4OCxlWzMxNjJdPTU4OSxlWzMxNjVdPTg5MSxlWzMxNjZdPTg5MixlWzMxNjldPTEyNzQsZVszMTcwXT0xMjc1LGVbMzE3M109MTI3OCxlWzMxNzRdPTEyNzksZVszMTgxXT03NjIyLGVbMzE4Ml09NzYyMyxlWzMyODJdPTExNzk5LGVbMzMxNl09NTc4LGVbMzM3OV09NDI3ODUsZVszMzkzXT0xMTU5LGVbMzQxNl09ODM3N30pKTt0LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz1sO3ZhciBjPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyMjddPTMyMixlWzI2NF09MjYxLGVbMjkxXT0zNDZ9KSk7dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s9Yzt2YXIgdT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzIsZVs0XT02NSxlWzE3XT02NixlWzE4XT02NyxlWzI0XT02OCxlWzI4XT02OSxlWzM4XT03MCxlWzM5XT03MSxlWzQ0XT03MixlWzQ3XT03MyxlWzU4XT03NCxlWzYwXT03NSxlWzYyXT03NixlWzY4XT03NyxlWzY5XT03OCxlWzc1XT03OSxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzk0XT04MyxlWzEwMF09ODQsZVsxMDRdPTg1LGVbMTE1XT04NixlWzExNl09ODcsZVsxMjFdPTg4LGVbMTIyXT04OSxlWzEyN109OTAsZVsyNThdPTk3LGVbMjY4XT0yNjEsZVsyNzFdPTk4LGVbMjcyXT05OSxlWzI3M109MjYzLGVbMjgyXT0xMDAsZVsyODZdPTEwMSxlWzI5NV09MjgxLGVbMjk2XT0xMDIsZVszMzZdPTEwMyxlWzM0Nl09MTA0LGVbMzQ5XT0xMDUsZVszNjFdPTEwNixlWzM2NF09MTA3LGVbMzY3XT0xMDgsZVszNzFdPTMyMixlWzM3M109MTA5LGVbMzc0XT0xMTAsZVszODFdPTExMSxlWzM4M109MjQzLGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbNDAwXT0xMTUsZVs0MDFdPTM0NyxlWzQxMF09MTE2LGVbNDM3XT0xMTcsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ2MF09MTIyLGVbNDYzXT0zODAsZVs4NTNdPTQ0LGVbODU1XT01OCxlWzg1Nl09NDYsZVs4NzZdPTQ3LGVbODc4XT00NSxlWzg4Ml09NDUsZVs4OTRdPTQwLGVbODk1XT00MSxlWzg5Nl09OTEsZVs4OTddPTkzLGVbOTIzXT02NCxlWzEwMDRdPTQ4LGVbMTAwNV09NDksZVsxMDA2XT01MCxlWzEwMDddPTUxLGVbMTAwOF09NTIsZVsxMDA5XT01MyxlWzEwMTBdPTU0LGVbMTAxMV09NTUsZVsxMDEyXT01NixlWzEwMTNdPTU3LGVbMTA4MV09MzcsZVsxMDg1XT00MyxlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPXV9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDYpLmdldExvb2t1cFRhYmxlRmFjdG9yeSxhPW4oKGZ1bmN0aW9uKGUpe2VbNjM3MjFdPTE2OSxlWzYzMTkzXT0xNjksZVs2MzcyMF09MTc0LGVbNjMxOTRdPTE3NCxlWzYzNzIyXT04NDgyLGVbNjMxOTVdPTg0ODIsZVs2MzcyOV09OTEyNyxlWzYzNzMwXT05MTI4LGVbNjM3MzFdPTkxMjksZVs2Mzc0MF09OTEzMSxlWzYzNzQxXT05MTMyLGVbNjM3NDJdPTkxMzMsZVs2MzcyNl09OTEyMSxlWzYzNzI3XT05MTIyLGVbNjM3MjhdPTkxMjMsZVs2MzczN109OTEyNCxlWzYzNzM4XT05MTI1LGVbNjM3MzldPTkxMjYsZVs2MzcyM109OTExNSxlWzYzNzI0XT05MTE2LGVbNjM3MjVdPTkxMTcsZVs2MzczNF09OTExOCxlWzYzNzM1XT05MTE5LGVbNjM3MzZdPTkxMjB9KSksaT1be2JlZ2luOjAsZW5kOjEyN30se2JlZ2luOjEyOCxlbmQ6MjU1fSx7YmVnaW46MjU2LGVuZDozODN9LHtiZWdpbjozODQsZW5kOjU5MX0se2JlZ2luOjU5MixlbmQ6Njg3fSx7YmVnaW46Njg4LGVuZDo3Njd9LHtiZWdpbjo3NjgsZW5kOjg3OX0se2JlZ2luOjg4MCxlbmQ6MTAyM30se2JlZ2luOjExMzkyLGVuZDoxMTUxOX0se2JlZ2luOjEwMjQsZW5kOjEyNzl9LHtiZWdpbjoxMzI4LGVuZDoxNDIzfSx7YmVnaW46MTQyNCxlbmQ6MTUzNX0se2JlZ2luOjQyMjQwLGVuZDo0MjU1OX0se2JlZ2luOjE1MzYsZW5kOjE3OTF9LHtiZWdpbjoxOTg0LGVuZDoyMDQ3fSx7YmVnaW46MjMwNCxlbmQ6MjQzMX0se2JlZ2luOjI0MzIsZW5kOjI1NTl9LHtiZWdpbjoyNTYwLGVuZDoyNjg3fSx7YmVnaW46MjY4OCxlbmQ6MjgxNX0se2JlZ2luOjI4MTYsZW5kOjI5NDN9LHtiZWdpbjoyOTQ0LGVuZDozMDcxfSx7YmVnaW46MzA3MixlbmQ6MzE5OX0se2JlZ2luOjMyMDAsZW5kOjMzMjd9LHtiZWdpbjozMzI4LGVuZDozNDU1fSx7YmVnaW46MzU4NCxlbmQ6MzcxMX0se2JlZ2luOjM3MTIsZW5kOjM4Mzl9LHtiZWdpbjo0MjU2LGVuZDo0MzUxfSx7YmVnaW46NjkxMixlbmQ6NzAzOX0se2JlZ2luOjQzNTIsZW5kOjQ2MDd9LHtiZWdpbjo3NjgwLGVuZDo3OTM1fSx7YmVnaW46NzkzNixlbmQ6ODE5MX0se2JlZ2luOjgxOTIsZW5kOjgzMDN9LHtiZWdpbjo4MzA0LGVuZDo4MzUxfSx7YmVnaW46ODM1MixlbmQ6ODM5OX0se2JlZ2luOjg0MDAsZW5kOjg0NDd9LHtiZWdpbjo4NDQ4LGVuZDo4NTI3fSx7YmVnaW46ODUyOCxlbmQ6ODU5MX0se2JlZ2luOjg1OTIsZW5kOjg3MDN9LHtiZWdpbjo4NzA0LGVuZDo4OTU5fSx7YmVnaW46ODk2MCxlbmQ6OTIxNX0se2JlZ2luOjkyMTYsZW5kOjkyNzl9LHtiZWdpbjo5MjgwLGVuZDo5MzExfSx7YmVnaW46OTMxMixlbmQ6OTQ3MX0se2JlZ2luOjk0NzIsZW5kOjk1OTl9LHtiZWdpbjo5NjAwLGVuZDo5NjMxfSx7YmVnaW46OTYzMixlbmQ6OTcyN30se2JlZ2luOjk3MjgsZW5kOjk5ODN9LHtiZWdpbjo5OTg0LGVuZDoxMDE3NX0se2JlZ2luOjEyMjg4LGVuZDoxMjM1MX0se2JlZ2luOjEyMzUyLGVuZDoxMjQ0N30se2JlZ2luOjEyNDQ4LGVuZDoxMjU0M30se2JlZ2luOjEyNTQ0LGVuZDoxMjU5MX0se2JlZ2luOjEyNTkyLGVuZDoxMjY4N30se2JlZ2luOjQzMDcyLGVuZDo0MzEzNX0se2JlZ2luOjEyODAwLGVuZDoxMzA1NX0se2JlZ2luOjEzMDU2LGVuZDoxMzMxMX0se2JlZ2luOjQ0MDMyLGVuZDo1NTIxNX0se2JlZ2luOjU1Mjk2LGVuZDo1NzM0M30se2JlZ2luOjY3ODQwLGVuZDo2Nzg3MX0se2JlZ2luOjE5OTY4LGVuZDo0MDk1OX0se2JlZ2luOjU3MzQ0LGVuZDo2Mzc0M30se2JlZ2luOjEyNzM2LGVuZDoxMjc4M30se2JlZ2luOjY0MjU2LGVuZDo2NDMzNX0se2JlZ2luOjY0MzM2LGVuZDo2NTAyM30se2JlZ2luOjY1MDU2LGVuZDo2NTA3MX0se2JlZ2luOjY1MDQwLGVuZDo2NTA1NX0se2JlZ2luOjY1MTA0LGVuZDo2NTEzNX0se2JlZ2luOjY1MTM2LGVuZDo2NTI3OX0se2JlZ2luOjY1MjgwLGVuZDo2NTUxOX0se2JlZ2luOjY1NTIwLGVuZDo2NTUzNX0se2JlZ2luOjM4NDAsZW5kOjQwOTV9LHtiZWdpbjoxNzkyLGVuZDoxODcxfSx7YmVnaW46MTkyMCxlbmQ6MTk4M30se2JlZ2luOjM0NTYsZW5kOjM1ODN9LHtiZWdpbjo0MDk2LGVuZDo0MjU1fSx7YmVnaW46NDYwOCxlbmQ6NDk5MX0se2JlZ2luOjUwMjQsZW5kOjUxMTl9LHtiZWdpbjo1MTIwLGVuZDo1NzU5fSx7YmVnaW46NTc2MCxlbmQ6NTc5MX0se2JlZ2luOjU3OTIsZW5kOjU4ODd9LHtiZWdpbjo2MDE2LGVuZDo2MTQzfSx7YmVnaW46NjE0NCxlbmQ6NjMxOX0se2JlZ2luOjEwMjQwLGVuZDoxMDQ5NX0se2JlZ2luOjQwOTYwLGVuZDo0MjEyN30se2JlZ2luOjU4ODgsZW5kOjU5MTl9LHtiZWdpbjo2NjMwNCxlbmQ6NjYzNTF9LHtiZWdpbjo2NjM1MixlbmQ6NjYzODN9LHtiZWdpbjo2NjU2MCxlbmQ6NjY2Mzl9LHtiZWdpbjoxMTg3ODQsZW5kOjExOTAzOX0se2JlZ2luOjExOTgwOCxlbmQ6MTIwODMxfSx7YmVnaW46MTA0NDQ4MCxlbmQ6MTA0ODU3M30se2JlZ2luOjY1MDI0LGVuZDo2NTAzOX0se2JlZ2luOjkxNzUwNCxlbmQ6OTE3NjMxfSx7YmVnaW46NjQwMCxlbmQ6NjQ3OX0se2JlZ2luOjY0ODAsZW5kOjY1Mjd9LHtiZWdpbjo2NTI4LGVuZDo2NjIzfSx7YmVnaW46NjY1NixlbmQ6NjY4N30se2JlZ2luOjExMjY0LGVuZDoxMTM1OX0se2JlZ2luOjExNTY4LGVuZDoxMTY0N30se2JlZ2luOjE5OTA0LGVuZDoxOTk2N30se2JlZ2luOjQzMDA4LGVuZDo0MzA1NX0se2JlZ2luOjY1NTM2LGVuZDo2NTY2M30se2JlZ2luOjY1ODU2LGVuZDo2NTkzNX0se2JlZ2luOjY2NDMyLGVuZDo2NjQ2M30se2JlZ2luOjY2NDY0LGVuZDo2NjUyN30se2JlZ2luOjY2NjQwLGVuZDo2NjY4N30se2JlZ2luOjY2Njg4LGVuZDo2NjczNX0se2JlZ2luOjY3NTg0LGVuZDo2NzY0N30se2JlZ2luOjY4MDk2LGVuZDo2ODE5MX0se2JlZ2luOjExOTU1MixlbmQ6MTE5NjQ3fSx7YmVnaW46NzM3MjgsZW5kOjc0NzUxfSx7YmVnaW46MTE5NjQ4LGVuZDoxMTk2Nzl9LHtiZWdpbjo3MDQwLGVuZDo3MTAzfSx7YmVnaW46NzE2OCxlbmQ6NzI0N30se2JlZ2luOjcyNDgsZW5kOjcyOTV9LHtiZWdpbjo0MzEzNixlbmQ6NDMyMzF9LHtiZWdpbjo0MzI2NCxlbmQ6NDMzMTF9LHtiZWdpbjo0MzMxMixlbmQ6NDMzNTl9LHtiZWdpbjo0MzUyMCxlbmQ6NDM2MTV9LHtiZWdpbjo2NTkzNixlbmQ6NjU5OTl9LHtiZWdpbjo2NmUzLGVuZDo2NjA0N30se2JlZ2luOjY2MjA4LGVuZDo2NjI3MX0se2JlZ2luOjEyNzAyNCxlbmQ6MTI3MTM1fV0sbz1uKChmdW5jdGlvbihlKXtlWyLCqCJdPSIgzIgiLGVbIsKvIl09IiDMhCIsZVsiwrQiXT0iIMyBIixlWyLCtSJdPSLOvCIsZVsiwrgiXT0iIMynIixlWyLEsiJdPSJJSiIsZVsixLMiXT0iaWoiLGVbIsS/Il09IkzCtyIsZVsixYAiXT0ibMK3IixlWyLFiSJdPSLKvG4iLGVbIsW/Il09InMiLGVbIseEIl09IkTFvSIsZVsix4UiXT0iRMW+IixlWyLHhiJdPSJkxb4iLGVbIseHIl09IkxKIixlWyLHiCJdPSJMaiIsZVsix4kiXT0ibGoiLGVbIseKIl09Ik5KIixlWyLHiyJdPSJOaiIsZVsix4wiXT0ibmoiLGVbIsexIl09IkRaIixlWyLHsiJdPSJEeiIsZVsix7MiXT0iZHoiLGVbIsuYIl09IiDMhiIsZVsiy5kiXT0iIMyHIixlWyLLmiJdPSIgzIoiLGVbIsubIl09IiDMqCIsZVsiy5wiXT0iIMyDIixlWyLLnSJdPSIgzIsiLGVbIs26Il09IiDNhSIsZVsizoQiXT0iIMyBIixlWyLPkCJdPSLOsiIsZVsiz5EiXT0izrgiLGVbIs+SIl09Is6lIixlWyLPlSJdPSLPhiIsZVsiz5YiXT0iz4AiLGVbIs+wIl09Is66IixlWyLPsSJdPSLPgSIsZVsiz7IiXT0iz4IiLGVbIs+0Il09Is6YIixlWyLPtSJdPSLOtSIsZVsiz7kiXT0izqMiLGVbItaHIl09ItWl1oIiLGVbItm1Il09Itin2bQiLGVbItm2Il09ItmI2bQiLGVbItm3Il09ItuH2bQiLGVbItm4Il09ItmK2bQiLGVbIuC4syJdPSLguY3guLIiLGVbIuC6syJdPSLgu43gurIiLGVbIuC7nCJdPSLguqvgupkiLGVbIuC7nSJdPSLguqvguqEiLGVbIuC9tyJdPSLgvrLgvoEiLGVbIuC9uSJdPSLgvrPgvoEiLGVbIuG6miJdPSJhyr4iLGVbIuG+vSJdPSIgzJMiLGVbIuG+vyJdPSIgzJMiLGVbIuG/gCJdPSIgzYIiLGVbIuG/viJdPSIgzJQiLGVbIuKAgiJdPSIgIixlWyLigIMiXT0iICIsZVsi4oCEIl09IiAiLGVbIuKAhSJdPSIgIixlWyLigIYiXT0iICIsZVsi4oCIIl09IiAiLGVbIuKAiSJdPSIgIixlWyLigIoiXT0iICIsZVsi4oCXIl09IiDMsyIsZVsi4oCkIl09Ii4iLGVbIuKApSJdPSIuLiIsZVsi4oCmIl09Ii4uLiIsZVsi4oCzIl09IuKAsuKAsiIsZVsi4oC0Il09IuKAsuKAsuKAsiIsZVsi4oC2Il09IuKAteKAtSIsZVsi4oC3Il09IuKAteKAteKAtSIsZVsi4oC8Il09IiEhIixlWyLigL4iXT0iIMyFIixlWyLigYciXT0iPz8iLGVbIuKBiCJdPSI/ISIsZVsi4oGJIl09IiE/IixlWyLigZciXT0i4oCy4oCy4oCy4oCyIixlWyLigZ8iXT0iICIsZVsi4oKoIl09IlJzIixlWyLihIAiXT0iYS9jIixlWyLihIEiXT0iYS9zIixlWyLihIMiXT0iwrBDIixlWyLihIUiXT0iYy9vIixlWyLihIYiXT0iYy91IixlWyLihIciXT0ixpAiLGVbIuKEiSJdPSLCsEYiLGVbIuKEliJdPSJObyIsZVsi4oShIl09IlRFTCIsZVsi4oS1Il09IteQIixlWyLihLYiXT0i15EiLGVbIuKEtyJdPSLXkiIsZVsi4oS4Il09IteTIixlWyLihLsiXT0iRkFYIixlWyLihaAiXT0iSSIsZVsi4oWhIl09IklJIixlWyLihaIiXT0iSUlJIixlWyLihaMiXT0iSVYiLGVbIuKFpCJdPSJWIixlWyLihaUiXT0iVkkiLGVbIuKFpiJdPSJWSUkiLGVbIuKFpyJdPSJWSUlJIixlWyLihagiXT0iSVgiLGVbIuKFqSJdPSJYIixlWyLihaoiXT0iWEkiLGVbIuKFqyJdPSJYSUkiLGVbIuKFrCJdPSJMIixlWyLiha0iXT0iQyIsZVsi4oWuIl09IkQiLGVbIuKFryJdPSJNIixlWyLihbAiXT0iaSIsZVsi4oWxIl09ImlpIixlWyLihbIiXT0iaWlpIixlWyLihbMiXT0iaXYiLGVbIuKFtCJdPSJ2IixlWyLihbUiXT0idmkiLGVbIuKFtiJdPSJ2aWkiLGVbIuKFtyJdPSJ2aWlpIixlWyLihbgiXT0iaXgiLGVbIuKFuSJdPSJ4IixlWyLihboiXT0ieGkiLGVbIuKFuyJdPSJ4aWkiLGVbIuKFvCJdPSJsIixlWyLihb0iXT0iYyIsZVsi4oW+Il09ImQiLGVbIuKFvyJdPSJtIixlWyLiiKwiXT0i4oir4oirIixlWyLiiK0iXT0i4oir4oir4oirIixlWyLiiK8iXT0i4oiu4oiuIixlWyLiiLAiXT0i4oiu4oiu4oiuIixlWyLikbQiXT0iKDEpIixlWyLikbUiXT0iKDIpIixlWyLikbYiXT0iKDMpIixlWyLikbciXT0iKDQpIixlWyLikbgiXT0iKDUpIixlWyLikbkiXT0iKDYpIixlWyLikboiXT0iKDcpIixlWyLikbsiXT0iKDgpIixlWyLikbwiXT0iKDkpIixlWyLikb0iXT0iKDEwKSIsZVsi4pG+Il09IigxMSkiLGVbIuKRvyJdPSIoMTIpIixlWyLikoAiXT0iKDEzKSIsZVsi4pKBIl09IigxNCkiLGVbIuKSgiJdPSIoMTUpIixlWyLikoMiXT0iKDE2KSIsZVsi4pKEIl09IigxNykiLGVbIuKShSJdPSIoMTgpIixlWyLikoYiXT0iKDE5KSIsZVsi4pKHIl09IigyMCkiLGVbIuKSiCJdPSIxLiIsZVsi4pKJIl09IjIuIixlWyLikooiXT0iMy4iLGVbIuKSiyJdPSI0LiIsZVsi4pKMIl09IjUuIixlWyLiko0iXT0iNi4iLGVbIuKSjiJdPSI3LiIsZVsi4pKPIl09IjguIixlWyLikpAiXT0iOS4iLGVbIuKSkSJdPSIxMC4iLGVbIuKSkiJdPSIxMS4iLGVbIuKSkyJdPSIxMi4iLGVbIuKSlCJdPSIxMy4iLGVbIuKSlSJdPSIxNC4iLGVbIuKSliJdPSIxNS4iLGVbIuKSlyJdPSIxNi4iLGVbIuKSmCJdPSIxNy4iLGVbIuKSmSJdPSIxOC4iLGVbIuKSmiJdPSIxOS4iLGVbIuKSmyJdPSIyMC4iLGVbIuKSnCJdPSIoYSkiLGVbIuKSnSJdPSIoYikiLGVbIuKSniJdPSIoYykiLGVbIuKSnyJdPSIoZCkiLGVbIuKSoCJdPSIoZSkiLGVbIuKSoSJdPSIoZikiLGVbIuKSoiJdPSIoZykiLGVbIuKSoyJdPSIoaCkiLGVbIuKSpCJdPSIoaSkiLGVbIuKSpSJdPSIoaikiLGVbIuKSpiJdPSIoaykiLGVbIuKSpyJdPSIobCkiLGVbIuKSqCJdPSIobSkiLGVbIuKSqSJdPSIobikiLGVbIuKSqiJdPSIobykiLGVbIuKSqyJdPSIocCkiLGVbIuKSrCJdPSIocSkiLGVbIuKSrSJdPSIocikiLGVbIuKSriJdPSIocykiLGVbIuKSryJdPSIodCkiLGVbIuKSsCJdPSIodSkiLGVbIuKSsSJdPSIodikiLGVbIuKSsiJdPSIodykiLGVbIuKSsyJdPSIoeCkiLGVbIuKStCJdPSIoeSkiLGVbIuKStSJdPSIoeikiLGVbIuKojCJdPSLiiKviiKviiKviiKsiLGVbIuKptCJdPSI6Oj0iLGVbIuKptSJdPSI9PSIsZVsi4qm2Il09Ij09PSIsZVsi4rqfIl09IuavjSIsZVsi4ruzIl09Ium+nyIsZVsi4ryAIl09IuS4gCIsZVsi4ryBIl09IuS4qCIsZVsi4ryCIl09IuS4tiIsZVsi4ryDIl09IuS4vyIsZVsi4ryEIl09IuS5mSIsZVsi4ryFIl09IuS6hSIsZVsi4ryGIl09IuS6jCIsZVsi4ryHIl09IuS6oCIsZVsi4ryIIl09IuS6uiIsZVsi4ryJIl09IuWEvyIsZVsi4ryKIl09IuWFpSIsZVsi4ryLIl09IuWFqyIsZVsi4ryMIl09IuWGgiIsZVsi4ryNIl09IuWGliIsZVsi4ryOIl09IuWGqyIsZVsi4ryPIl09IuWHoCIsZVsi4ryQIl09IuWHtSIsZVsi4ryRIl09IuWIgCIsZVsi4rySIl09IuWKmyIsZVsi4ryTIl09IuWLuSIsZVsi4ryUIl09IuWMlSIsZVsi4ryVIl09IuWMmiIsZVsi4ryWIl09IuWMuCIsZVsi4ryXIl09IuWNgSIsZVsi4ryYIl09IuWNnCIsZVsi4ryZIl09IuWNqSIsZVsi4ryaIl09IuWOgiIsZVsi4rybIl09IuWOtiIsZVsi4rycIl09IuWPiCIsZVsi4rydIl09IuWPoyIsZVsi4ryeIl09IuWblyIsZVsi4ryfIl09IuWcnyIsZVsi4rygIl09IuWjqyIsZVsi4ryhIl09IuWkgiIsZVsi4ryiIl09IuWkiiIsZVsi4ryjIl09IuWklSIsZVsi4rykIl09IuWkpyIsZVsi4rylIl09IuWlsyIsZVsi4rymIl09IuWtkCIsZVsi4rynIl09IuWugCIsZVsi4ryoIl09IuWvuCIsZVsi4rypIl09IuWwjyIsZVsi4ryqIl09IuWwoiIsZVsi4ryrIl09IuWwuCIsZVsi4rysIl09IuWxriIsZVsi4rytIl09IuWxsSIsZVsi4ryuIl09IuW3myIsZVsi4ryvIl09IuW3pSIsZVsi4rywIl09IuW3sSIsZVsi4ryxIl09IuW3viIsZVsi4ryyIl09IuW5siIsZVsi4ryzIl09IuW5uiIsZVsi4ry0Il09IuW5vyIsZVsi4ry1Il09IuW7tCIsZVsi4ry2Il09IuW7viIsZVsi4ry3Il09IuW8iyIsZVsi4ry4Il09IuW8kyIsZVsi4ry5Il09IuW9kCIsZVsi4ry6Il09IuW9oSIsZVsi4ry7Il09IuW9syIsZVsi4ry8Il09IuW/gyIsZVsi4ry9Il09IuaIiCIsZVsi4ry+Il09IuaItiIsZVsi4ry/Il09IuaJiyIsZVsi4r2AIl09IuaUryIsZVsi4r2BIl09IuaUtCIsZVsi4r2CIl09IuaWhyIsZVsi4r2DIl09IuaWlyIsZVsi4r2EIl09IuaWpCIsZVsi4r2FIl09IuaWuSIsZVsi4r2GIl09IuaXoCIsZVsi4r2HIl09IuaXpSIsZVsi4r2IIl09IuabsCIsZVsi4r2JIl09IuaciCIsZVsi4r2KIl09IuacqCIsZVsi4r2LIl09IuasoCIsZVsi4r2MIl09IuatoiIsZVsi4r2NIl09IuatuSIsZVsi4r2OIl09IuausyIsZVsi4r2PIl09IuaviyIsZVsi4r2QIl09IuavlCIsZVsi4r2RIl09IuavmyIsZVsi4r2SIl09IuawjyIsZVsi4r2TIl09IuawlCIsZVsi4r2UIl09IuawtCIsZVsi4r2VIl09IueBqyIsZVsi4r2WIl09IueIqiIsZVsi4r2XIl09IueItiIsZVsi4r2YIl09IueIuyIsZVsi4r2ZIl09IueIvyIsZVsi4r2aIl09IueJhyIsZVsi4r2bIl09IueJmSIsZVsi4r2cIl09IueJmyIsZVsi4r2dIl09IueKrCIsZVsi4r2eIl09IueOhCIsZVsi4r2fIl09IueOiSIsZVsi4r2gIl09IueTnCIsZVsi4r2hIl09IueTpiIsZVsi4r2iIl09IueUmCIsZVsi4r2jIl09IueUnyIsZVsi4r2kIl09IueUqCIsZVsi4r2lIl09IueUsCIsZVsi4r2mIl09IueWiyIsZVsi4r2nIl09IueWkiIsZVsi4r2oIl09IueZtiIsZVsi4r2pIl09IueZvSIsZVsi4r2qIl09IueariIsZVsi4r2rIl09IueavyIsZVsi4r2sIl09IuebriIsZVsi4r2tIl09IuefmyIsZVsi4r2uIl09IuefoiIsZVsi4r2vIl09IuefsyIsZVsi4r2wIl09IuekuiIsZVsi4r2xIl09IuemuCIsZVsi4r2yIl09IuemviIsZVsi4r2zIl09IueptCIsZVsi4r20Il09IueriyIsZVsi4r21Il09IueruSIsZVsi4r22Il09IuexsyIsZVsi4r23Il09IuezuCIsZVsi4r24Il09Iue8tiIsZVsi4r25Il09Iue9kSIsZVsi4r26Il09Iue+iiIsZVsi4r27Il09Iue+vSIsZVsi4r28Il09IuiAgSIsZVsi4r29Il09IuiAjCIsZVsi4r2+Il09IuiAkiIsZVsi4r2/Il09IuiAsyIsZVsi4r6AIl09IuiBvyIsZVsi4r6BIl09IuiCiSIsZVsi4r6CIl09IuiHoyIsZVsi4r6DIl09IuiHqiIsZVsi4r6EIl09IuiHsyIsZVsi4r6FIl09IuiHvCIsZVsi4r6GIl09IuiIjCIsZVsi4r6HIl09IuiImyIsZVsi4r6IIl09IuiInyIsZVsi4r6JIl09IuiJriIsZVsi4r6KIl09IuiJsiIsZVsi4r6LIl09IuiJuCIsZVsi4r6MIl09IuiZjSIsZVsi4r6NIl09IuiZqyIsZVsi4r6OIl09IuihgCIsZVsi4r6PIl09IuihjCIsZVsi4r6QIl09IuihoyIsZVsi4r6RIl09IuilviIsZVsi4r6SIl09IuimiyIsZVsi4r6TIl09IuinkiIsZVsi4r6UIl09IuiogCIsZVsi4r6VIl09IuiwtyIsZVsi4r6WIl09IuixhiIsZVsi4r6XIl09IuixlSIsZVsi4r6YIl09IuixuCIsZVsi4r6ZIl09IuiynSIsZVsi4r6aIl09Iui1pCIsZVsi4r6bIl09Iui1sCIsZVsi4r6cIl09Iui2syIsZVsi4r6dIl09Iui6qyIsZVsi4r6eIl09Iui7iiIsZVsi4r6fIl09Iui+myIsZVsi4r6gIl09Iui+sCIsZVsi4r6hIl09Iui+tSIsZVsi4r6iIl09IumCkSIsZVsi4r6jIl09IumFiSIsZVsi4r6kIl09IumHhiIsZVsi4r6lIl09IumHjCIsZVsi4r6mIl09IumHkSIsZVsi4r6nIl09IumVtyIsZVsi4r6oIl09IumWgCIsZVsi4r6pIl09IumYnCIsZVsi4r6qIl09IumatiIsZVsi4r6rIl09IumauSIsZVsi4r6sIl09IumbqCIsZVsi4r6tIl09IumdkSIsZVsi4r6uIl09IumdniIsZVsi4r6vIl09IumdoiIsZVsi4r6wIl09IumdqSIsZVsi4r6xIl09IumfiyIsZVsi4r6yIl09IumfrSIsZVsi4r6zIl09IumfsyIsZVsi4r60Il09IumggSIsZVsi4r61Il09IumiqCIsZVsi4r62Il09IumjmyIsZVsi4r63Il09IumjnyIsZVsi4r64Il09IummliIsZVsi4r65Il09IummmSIsZVsi4r66Il09IummrCIsZVsi4r67Il09IumqqCIsZVsi4r68Il09IumrmCIsZVsi4r69Il09IumrnyIsZVsi4r6+Il09IumspSIsZVsi4r6/Il09IumsryIsZVsi4r+AIl09IumssiIsZVsi4r+BIl09IumsvCIsZVsi4r+CIl09IumtmiIsZVsi4r+DIl09IumzpSIsZVsi4r+EIl09Ium5tSIsZVsi4r+FIl09Ium5vyIsZVsi4r+GIl09Ium6pSIsZVsi4r+HIl09Ium6uyIsZVsi4r+IIl09Ium7gyIsZVsi4r+JIl09Ium7jSIsZVsi4r+KIl09Ium7kSIsZVsi4r+LIl09Ium7uSIsZVsi4r+MIl09Ium7vSIsZVsi4r+NIl09Ium8jiIsZVsi4r+OIl09Ium8kyIsZVsi4r+PIl09Ium8oCIsZVsi4r+QIl09Ium8uyIsZVsi4r+RIl09Ium9iiIsZVsi4r+SIl09Ium9kiIsZVsi4r+TIl09Ium+jSIsZVsi4r+UIl09Ium+nCIsZVsi4r+VIl09Ium+oCIsZVsi44C2Il09IuOAkiIsZVsi44C4Il09IuWNgSIsZVsi44C5Il09IuWNhCIsZVsi44C6Il09IuWNhSIsZVsi44KbIl09IiDjgpkiLGVbIuOCnCJdPSIg44KaIixlWyLjhLEiXT0i4YSAIixlWyLjhLIiXT0i4YSBIixlWyLjhLMiXT0i4YaqIixlWyLjhLQiXT0i4YSCIixlWyLjhLUiXT0i4YasIixlWyLjhLYiXT0i4YatIixlWyLjhLciXT0i4YSDIixlWyLjhLgiXT0i4YSEIixlWyLjhLkiXT0i4YSFIixlWyLjhLoiXT0i4YawIixlWyLjhLsiXT0i4YaxIixlWyLjhLwiXT0i4YayIixlWyLjhL0iXT0i4YazIixlWyLjhL4iXT0i4Ya0IixlWyLjhL8iXT0i4Ya1IixlWyLjhYAiXT0i4YSaIixlWyLjhYEiXT0i4YSGIixlWyLjhYIiXT0i4YSHIixlWyLjhYMiXT0i4YSIIixlWyLjhYQiXT0i4YShIixlWyLjhYUiXT0i4YSJIixlWyLjhYYiXT0i4YSKIixlWyLjhYciXT0i4YSLIixlWyLjhYgiXT0i4YSMIixlWyLjhYkiXT0i4YSNIixlWyLjhYoiXT0i4YSOIixlWyLjhYsiXT0i4YSPIixlWyLjhYwiXT0i4YSQIixlWyLjhY0iXT0i4YSRIixlWyLjhY4iXT0i4YSSIixlWyLjhY8iXT0i4YWhIixlWyLjhZAiXT0i4YWiIixlWyLjhZEiXT0i4YWjIixlWyLjhZIiXT0i4YWkIixlWyLjhZMiXT0i4YWlIixlWyLjhZQiXT0i4YWmIixlWyLjhZUiXT0i4YWnIixlWyLjhZYiXT0i4YWoIixlWyLjhZciXT0i4YWpIixlWyLjhZgiXT0i4YWqIixlWyLjhZkiXT0i4YWrIixlWyLjhZoiXT0i4YWsIixlWyLjhZsiXT0i4YWtIixlWyLjhZwiXT0i4YWuIixlWyLjhZ0iXT0i4YWvIixlWyLjhZ4iXT0i4YWwIixlWyLjhZ8iXT0i4YWxIixlWyLjhaAiXT0i4YWyIixlWyLjhaEiXT0i4YWzIixlWyLjhaIiXT0i4YW0IixlWyLjhaMiXT0i4YW1IixlWyLjhaQiXT0i4YWgIixlWyLjhaUiXT0i4YSUIixlWyLjhaYiXT0i4YSVIixlWyLjhaciXT0i4YeHIixlWyLjhagiXT0i4YeIIixlWyLjhakiXT0i4YeMIixlWyLjhaoiXT0i4YeOIixlWyLjhasiXT0i4YeTIixlWyLjhawiXT0i4YeXIixlWyLjha0iXT0i4YeZIixlWyLjha4iXT0i4YScIixlWyLjha8iXT0i4YedIixlWyLjhbAiXT0i4YefIixlWyLjhbEiXT0i4YSdIixlWyLjhbIiXT0i4YSeIixlWyLjhbMiXT0i4YSgIixlWyLjhbQiXT0i4YSiIixlWyLjhbUiXT0i4YSjIixlWyLjhbYiXT0i4YSnIixlWyLjhbciXT0i4YSpIixlWyLjhbgiXT0i4YSrIixlWyLjhbkiXT0i4YSsIixlWyLjhboiXT0i4YStIixlWyLjhbsiXT0i4YSuIixlWyLjhbwiXT0i4YSvIixlWyLjhb0iXT0i4YSyIixlWyLjhb4iXT0i4YS2IixlWyLjhb8iXT0i4YWAIixlWyLjhoAiXT0i4YWHIixlWyLjhoEiXT0i4YWMIixlWyLjhoIiXT0i4YexIixlWyLjhoMiXT0i4YeyIixlWyLjhoQiXT0i4YWXIixlWyLjhoUiXT0i4YWYIixlWyLjhoYiXT0i4YWZIixlWyLjhociXT0i4YaEIixlWyLjhogiXT0i4YaFIixlWyLjhokiXT0i4YaIIixlWyLjhooiXT0i4YaRIixlWyLjhosiXT0i4YaSIixlWyLjhowiXT0i4YaUIixlWyLjho0iXT0i4YaeIixlWyLjho4iXT0i4YahIixlWyLjiIAiXT0iKOGEgCkiLGVbIuOIgSJdPSIo4YSCKSIsZVsi44iCIl09IijhhIMpIixlWyLjiIMiXT0iKOGEhSkiLGVbIuOIhCJdPSIo4YSGKSIsZVsi44iFIl09IijhhIcpIixlWyLjiIYiXT0iKOGEiSkiLGVbIuOIhyJdPSIo4YSLKSIsZVsi44iIIl09IijhhIwpIixlWyLjiIkiXT0iKOGEjikiLGVbIuOIiiJdPSIo4YSPKSIsZVsi44iLIl09IijhhJApIixlWyLjiIwiXT0iKOGEkSkiLGVbIuOIjSJdPSIo4YSSKSIsZVsi44iOIl09IijhhIDhhaEpIixlWyLjiI8iXT0iKOGEguGFoSkiLGVbIuOIkCJdPSIo4YSD4YWhKSIsZVsi44iRIl09IijhhIXhhaEpIixlWyLjiJIiXT0iKOGEhuGFoSkiLGVbIuOIkyJdPSIo4YSH4YWhKSIsZVsi44iUIl09IijhhInhhaEpIixlWyLjiJUiXT0iKOGEi+GFoSkiLGVbIuOIliJdPSIo4YSM4YWhKSIsZVsi44iXIl09IijhhI7hhaEpIixlWyLjiJgiXT0iKOGEj+GFoSkiLGVbIuOImSJdPSIo4YSQ4YWhKSIsZVsi44iaIl09IijhhJHhhaEpIixlWyLjiJsiXT0iKOGEkuGFoSkiLGVbIuOInCJdPSIo4YSM4YWuKSIsZVsi44idIl09IijhhIvhhanhhIzhhaXhhqspIixlWyLjiJ4iXT0iKOGEi+GFqeGEkuGFrikiLGVbIuOIoCJdPSIo5LiAKSIsZVsi44ihIl09IijkuowpIixlWyLjiKIiXT0iKOS4iSkiLGVbIuOIoyJdPSIo5ZubKSIsZVsi44ikIl09IijkupQpIixlWyLjiKUiXT0iKOWFrSkiLGVbIuOIpiJdPSIo5LiDKSIsZVsi44inIl09IijlhaspIixlWyLjiKgiXT0iKOS5nSkiLGVbIuOIqSJdPSIo5Y2BKSIsZVsi44iqIl09IijmnIgpIixlWyLjiKsiXT0iKOeBqykiLGVbIuOIrCJdPSIo5rC0KSIsZVsi44itIl09IijmnKgpIixlWyLjiK4iXT0iKOmHkSkiLGVbIuOIryJdPSIo5ZyfKSIsZVsi44iwIl09Iijml6UpIixlWyLjiLEiXT0iKOagqikiLGVbIuOIsiJdPSIo5pyJKSIsZVsi44izIl09IijnpL4pIixlWyLjiLQiXT0iKOWQjSkiLGVbIuOItSJdPSIo54m5KSIsZVsi44i2Il09IijosqEpIixlWyLjiLciXT0iKOelnSkiLGVbIuOIuCJdPSIo5Yq0KSIsZVsi44i5Il09Iijku6MpIixlWyLjiLoiXT0iKOWRvCkiLGVbIuOIuyJdPSIo5a2mKSIsZVsi44i8Il09Iijnm6MpIixlWyLjiL0iXT0iKOS8gSkiLGVbIuOIviJdPSIo6LOHKSIsZVsi44i/Il09IijljZQpIixlWyLjiYAiXT0iKOelrSkiLGVbIuOJgSJdPSIo5LyRKSIsZVsi44mCIl09Iijoh6opIixlWyLjiYMiXT0iKOiHsykiLGVbIuOLgCJdPSIx5pyIIixlWyLji4EiXT0iMuaciCIsZVsi44uCIl09IjPmnIgiLGVbIuOLgyJdPSI05pyIIixlWyLji4QiXT0iNeaciCIsZVsi44uFIl09IjbmnIgiLGVbIuOLhiJdPSI35pyIIixlWyLji4ciXT0iOOaciCIsZVsi44uIIl09IjnmnIgiLGVbIuOLiSJdPSIxMOaciCIsZVsi44uKIl09IjEx5pyIIixlWyLji4siXT0iMTLmnIgiLGVbIuONmCJdPSIw54K5IixlWyLjjZkiXT0iMeeCuSIsZVsi442aIl09IjLngrkiLGVbIuONmyJdPSIz54K5IixlWyLjjZwiXT0iNOeCuSIsZVsi442dIl09IjXngrkiLGVbIuONniJdPSI254K5IixlWyLjjZ8iXT0iN+eCuSIsZVsi442gIl09IjjngrkiLGVbIuONoSJdPSI554K5IixlWyLjjaIiXT0iMTDngrkiLGVbIuONoyJdPSIxMeeCuSIsZVsi442kIl09IjEy54K5IixlWyLjjaUiXT0iMTPngrkiLGVbIuONpiJdPSIxNOeCuSIsZVsi442nIl09IjE154K5IixlWyLjjagiXT0iMTbngrkiLGVbIuONqSJdPSIxN+eCuSIsZVsi442qIl09IjE454K5IixlWyLjjasiXT0iMTnngrkiLGVbIuONrCJdPSIyMOeCuSIsZVsi442tIl09IjIx54K5IixlWyLjja4iXT0iMjLngrkiLGVbIuONryJdPSIyM+eCuSIsZVsi442wIl09IjI054K5IixlWyLjj6AiXT0iMeaXpSIsZVsi44+hIl09IjLml6UiLGVbIuOPoiJdPSIz5pelIixlWyLjj6MiXT0iNOaXpSIsZVsi44+kIl09IjXml6UiLGVbIuOPpSJdPSI25pelIixlWyLjj6YiXT0iN+aXpSIsZVsi44+nIl09Ijjml6UiLGVbIuOPqCJdPSI55pelIixlWyLjj6kiXT0iMTDml6UiLGVbIuOPqiJdPSIxMeaXpSIsZVsi44+rIl09IjEy5pelIixlWyLjj6wiXT0iMTPml6UiLGVbIuOPrSJdPSIxNOaXpSIsZVsi44+uIl09IjE15pelIixlWyLjj68iXT0iMTbml6UiLGVbIuOPsCJdPSIxN+aXpSIsZVsi44+xIl09IjE45pelIixlWyLjj7IiXT0iMTnml6UiLGVbIuOPsyJdPSIyMOaXpSIsZVsi44+0Il09IjIx5pelIixlWyLjj7UiXT0iMjLml6UiLGVbIuOPtiJdPSIyM+aXpSIsZVsi44+3Il09IjI05pelIixlWyLjj7giXT0iMjXml6UiLGVbIuOPuSJdPSIyNuaXpSIsZVsi44+6Il09IjI35pelIixlWyLjj7siXT0iMjjml6UiLGVbIuOPvCJdPSIyOeaXpSIsZVsi44+9Il09IjMw5pelIixlWyLjj74iXT0iMzHml6UiLGVbIu+sgCJdPSJmZiIsZVsi76yBIl09ImZpIixlWyLvrIIiXT0iZmwiLGVbIu+sgyJdPSJmZmkiLGVbIu+shCJdPSJmZmwiLGVbIu+shSJdPSLFv3QiLGVbIu+shiJdPSJzdCIsZVsi76yTIl09ItW01bYiLGVbIu+slCJdPSLVtNWlIixlWyLvrJUiXT0i1bTVqyIsZVsi76yWIl09ItW+1bYiLGVbIu+slyJdPSLVtNWtIixlWyLvrY8iXT0i15DXnCIsZVsi762QIl09ItmxIixlWyLvrZEiXT0i2bEiLGVbIu+tkiJdPSLZuyIsZVsi762TIl09Itm7IixlWyLvrZQiXT0i2bsiLGVbIu+tlSJdPSLZuyIsZVsi762WIl09Itm+IixlWyLvrZciXT0i2b4iLGVbIu+tmCJdPSLZviIsZVsi762ZIl09Itm+IixlWyLvrZoiXT0i2oAiLGVbIu+tmyJdPSLagCIsZVsi762cIl09ItqAIixlWyLvrZ0iXT0i2oAiLGVbIu+tniJdPSLZuiIsZVsi762fIl09Itm6IixlWyLvraAiXT0i2boiLGVbIu+toSJdPSLZuiIsZVsi762iIl09Itm/IixlWyLvraMiXT0i2b8iLGVbIu+tpCJdPSLZvyIsZVsi762lIl09Itm/IixlWyLvraYiXT0i2bkiLGVbIu+tpyJdPSLZuSIsZVsi762oIl09Itm5IixlWyLvrakiXT0i2bkiLGVbIu+tqiJdPSLapCIsZVsi762rIl09ItqkIixlWyLvrawiXT0i2qQiLGVbIu+trSJdPSLapCIsZVsi762uIl09ItqmIixlWyLvra8iXT0i2qYiLGVbIu+tsCJdPSLapiIsZVsi762xIl09ItqmIixlWyLvrbIiXT0i2oQiLGVbIu+tsyJdPSLahCIsZVsi7620Il09ItqEIixlWyLvrbUiXT0i2oQiLGVbIu+ttiJdPSLagyIsZVsi7623Il09ItqDIixlWyLvrbgiXT0i2oMiLGVbIu+tuSJdPSLagyIsZVsi7626Il09ItqGIixlWyLvrbsiXT0i2oYiLGVbIu+tvCJdPSLahiIsZVsi7629Il09ItqGIixlWyLvrb4iXT0i2ociLGVbIu+tvyJdPSLahyIsZVsi766AIl09ItqHIixlWyLvroEiXT0i2ociLGVbIu+ugiJdPSLajSIsZVsi766DIl09ItqNIixlWyLvroQiXT0i2owiLGVbIu+uhSJdPSLajCIsZVsi766GIl09ItqOIixlWyLvrociXT0i2o4iLGVbIu+uiCJdPSLaiCIsZVsi766JIl09ItqIIixlWyLvrooiXT0i2pgiLGVbIu+uiyJdPSLamCIsZVsi766MIl09ItqRIixlWyLvro0iXT0i2pEiLGVbIu+ujiJdPSLaqSIsZVsi766PIl09ItqpIixlWyLvrpAiXT0i2qkiLGVbIu+ukSJdPSLaqSIsZVsi766SIl09ItqvIixlWyLvrpMiXT0i2q8iLGVbIu+ulCJdPSLaryIsZVsi766VIl09ItqvIixlWyLvrpYiXT0i2rMiLGVbIu+ulyJdPSLasyIsZVsi766YIl09ItqzIixlWyLvrpkiXT0i2rMiLGVbIu+umiJdPSLasSIsZVsi766bIl09ItqxIixlWyLvrpwiXT0i2rEiLGVbIu+unSJdPSLasSIsZVsi766eIl09Itq6IixlWyLvrp8iXT0i2roiLGVbIu+uoCJdPSLauyIsZVsi766hIl09Itq7IixlWyLvrqIiXT0i2rsiLGVbIu+uoyJdPSLauyIsZVsi766kIl09ItuAIixlWyLvrqUiXT0i24AiLGVbIu+upiJdPSLbgSIsZVsi766nIl09ItuBIixlWyLvrqgiXT0i24EiLGVbIu+uqSJdPSLbgSIsZVsi766qIl09Itq+IixlWyLvrqsiXT0i2r4iLGVbIu+urCJdPSLaviIsZVsi766tIl09Itq+IixlWyLvrq4iXT0i25IiLGVbIu+uryJdPSLbkiIsZVsi766wIl09ItuTIixlWyLvrrEiXT0i25MiLGVbIu+vkyJdPSLarSIsZVsi76+UIl09ItqtIixlWyLvr5UiXT0i2q0iLGVbIu+vliJdPSLarSIsZVsi76+XIl09ItuHIixlWyLvr5giXT0i24ciLGVbIu+vmSJdPSLbhiIsZVsi76+aIl09ItuGIixlWyLvr5siXT0i24giLGVbIu+vnCJdPSLbiCIsZVsi76+dIl09Itm3IixlWyLvr54iXT0i24siLGVbIu+vnyJdPSLbiyIsZVsi76+gIl09ItuFIixlWyLvr6EiXT0i24UiLGVbIu+voiJdPSLbiSIsZVsi76+jIl09ItuJIixlWyLvr6QiXT0i25AiLGVbIu+vpSJdPSLbkCIsZVsi76+mIl09ItuQIixlWyLvr6ciXT0i25AiLGVbIu+vqCJdPSLZiSIsZVsi76+pIl09ItmJIixlWyLvr6oiXT0i2KbYpyIsZVsi76+rIl09Itim2KciLGVbIu+vrCJdPSLYptuVIixlWyLvr60iXT0i2KbblSIsZVsi76+uIl09Itim2YgiLGVbIu+vryJdPSLYptmIIixlWyLvr7AiXT0i2KbbhyIsZVsi76+xIl09Itim24ciLGVbIu+vsiJdPSLYptuGIixlWyLvr7MiXT0i2KbbhiIsZVsi76+0Il09Itim24giLGVbIu+vtSJdPSLYptuIIixlWyLvr7YiXT0i2KbbkCI7ZVsi76+3Il09Itim25AiLGVbIu+vuCJdPSLYptuQIixlWyLvr7kiXT0i2KbZiSIsZVsi76+6Il09Itim2YkiLGVbIu+vuyJdPSLYptmJIixlWyLvr7wiXT0i24wiLGVbIu+vvSJdPSLbjCIsZVsi76++Il09ItuMIixlWyLvr78iXT0i24wiLGVbIu+wgCJdPSLYptisIixlWyLvsIEiXT0i2KbYrSIsZVsi77CCIl09Itim2YUiLGVbIu+wgyJdPSLYptmJIixlWyLvsIQiXT0i2KbZiiIsZVsi77CFIl09Itio2KwiLGVbIu+whiJdPSLYqNitIixlWyLvsIciXT0i2KjYriIsZVsi77CIIl09Itio2YUiLGVbIu+wiSJdPSLYqNmJIixlWyLvsIoiXT0i2KjZiiIsZVsi77CLIl09Itiq2KwiLGVbIu+wjCJdPSLYqtitIixlWyLvsI0iXT0i2KrYriIsZVsi77COIl09Itiq2YUiLGVbIu+wjyJdPSLYqtmJIixlWyLvsJAiXT0i2KrZiiIsZVsi77CRIl09Itir2KwiLGVbIu+wkiJdPSLYq9mFIixlWyLvsJMiXT0i2KvZiSIsZVsi77CUIl09Itir2YoiLGVbIu+wlSJdPSLYrNitIixlWyLvsJYiXT0i2KzZhSIsZVsi77CXIl09Itit2KwiLGVbIu+wmCJdPSLYrdmFIixlWyLvsJkiXT0i2K7YrCIsZVsi77CaIl09Itiu2K0iLGVbIu+wmyJdPSLYrtmFIixlWyLvsJwiXT0i2LPYrCIsZVsi77CdIl09Itiz2K0iLGVbIu+wniJdPSLYs9iuIixlWyLvsJ8iXT0i2LPZhSIsZVsi77CgIl09Iti12K0iLGVbIu+woSJdPSLYtdmFIixlWyLvsKIiXT0i2LbYrCIsZVsi77CjIl09Iti22K0iLGVbIu+wpCJdPSLYttiuIixlWyLvsKUiXT0i2LbZhSIsZVsi77CmIl09Iti32K0iLGVbIu+wpyJdPSLYt9mFIixlWyLvsKgiXT0i2LjZhSIsZVsi77CpIl09Iti52KwiLGVbIu+wqiJdPSLYudmFIixlWyLvsKsiXT0i2LrYrCIsZVsi77CsIl09Iti62YUiLGVbIu+wrSJdPSLZgdisIixlWyLvsK4iXT0i2YHYrSIsZVsi77CvIl09ItmB2K4iLGVbIu+wsCJdPSLZgdmFIixlWyLvsLEiXT0i2YHZiSIsZVsi77CyIl09ItmB2YoiLGVbIu+wsyJdPSLZgtitIixlWyLvsLQiXT0i2YLZhSIsZVsi77C1Il09ItmC2YkiLGVbIu+wtiJdPSLZgtmKIixlWyLvsLciXT0i2YPYpyIsZVsi77C4Il09ItmD2KwiLGVbIu+wuSJdPSLZg9itIixlWyLvsLoiXT0i2YPYriIsZVsi77C7Il09ItmD2YQiLGVbIu+wvCJdPSLZg9mFIixlWyLvsL0iXT0i2YPZiSIsZVsi77C+Il09ItmD2YoiLGVbIu+wvyJdPSLZhNisIixlWyLvsYAiXT0i2YTYrSIsZVsi77GBIl09ItmE2K4iLGVbIu+xgiJdPSLZhNmFIixlWyLvsYMiXT0i2YTZiSIsZVsi77GEIl09ItmE2YoiLGVbIu+xhSJdPSLZhdisIixlWyLvsYYiXT0i2YXYrSIsZVsi77GHIl09ItmF2K4iLGVbIu+xiCJdPSLZhdmFIixlWyLvsYkiXT0i2YXZiSIsZVsi77GKIl09ItmF2YoiLGVbIu+xiyJdPSLZhtisIixlWyLvsYwiXT0i2YbYrSIsZVsi77GNIl09ItmG2K4iLGVbIu+xjiJdPSLZhtmFIixlWyLvsY8iXT0i2YbZiSIsZVsi77GQIl09ItmG2YoiLGVbIu+xkSJdPSLZh9isIixlWyLvsZIiXT0i2YfZhSIsZVsi77GTIl09ItmH2YkiLGVbIu+xlCJdPSLZh9mKIixlWyLvsZUiXT0i2YrYrCIsZVsi77GWIl09ItmK2K0iLGVbIu+xlyJdPSLZitiuIixlWyLvsZgiXT0i2YrZhSIsZVsi77GZIl09ItmK2YkiLGVbIu+xmiJdPSLZitmKIixlWyLvsZsiXT0i2LDZsCIsZVsi77GcIl09Itix2bAiLGVbIu+xnSJdPSLZidmwIixlWyLvsZ4iXT0iINmM2ZEiLGVbIu+xnyJdPSIg2Y3ZkSIsZVsi77GgIl09IiDZjtmRIixlWyLvsaEiXT0iINmP2ZEiLGVbIu+xoiJdPSIg2ZDZkSIsZVsi77GjIl09IiDZkdmwIixlWyLvsaQiXT0i2KbYsSIsZVsi77GlIl09Itim2LIiLGVbIu+xpiJdPSLYptmFIixlWyLvsaciXT0i2KbZhiIsZVsi77GoIl09Itim2YkiLGVbIu+xqSJdPSLYptmKIixlWyLvsaoiXT0i2KjYsSIsZVsi77GrIl09Itio2LIiLGVbIu+xrCJdPSLYqNmFIixlWyLvsa0iXT0i2KjZhiIsZVsi77GuIl09Itio2YkiLGVbIu+xryJdPSLYqNmKIixlWyLvsbAiXT0i2KrYsSIsZVsi77GxIl09Itiq2LIiLGVbIu+xsiJdPSLYqtmFIixlWyLvsbMiXT0i2KrZhiIsZVsi77G0Il09Itiq2YkiLGVbIu+xtSJdPSLYqtmKIixlWyLvsbYiXT0i2KvYsSIsZVsi77G3Il09Itir2LIiLGVbIu+xuCJdPSLYq9mFIixlWyLvsbkiXT0i2KvZhiIsZVsi77G6Il09Itir2YkiLGVbIu+xuyJdPSLYq9mKIixlWyLvsbwiXT0i2YHZiSIsZVsi77G9Il09ItmB2YoiLGVbIu+xviJdPSLZgtmJIixlWyLvsb8iXT0i2YLZiiIsZVsi77KAIl09ItmD2KciLGVbIu+ygSJdPSLZg9mEIixlWyLvsoIiXT0i2YPZhSIsZVsi77KDIl09ItmD2YkiLGVbIu+yhCJdPSLZg9mKIixlWyLvsoUiXT0i2YTZhSIsZVsi77KGIl09ItmE2YkiLGVbIu+yhyJdPSLZhNmKIixlWyLvsogiXT0i2YXYpyIsZVsi77KJIl09ItmF2YUiLGVbIu+yiiJdPSLZhtixIixlWyLvsosiXT0i2YbYsiIsZVsi77KMIl09ItmG2YUiLGVbIu+yjSJdPSLZhtmGIixlWyLvso4iXT0i2YbZiSIsZVsi77KPIl09ItmG2YoiLGVbIu+ykCJdPSLZidmwIixlWyLvspEiXT0i2YrYsSIsZVsi77KSIl09ItmK2LIiLGVbIu+ykyJdPSLZitmFIixlWyLvspQiXT0i2YrZhiIsZVsi77KVIl09ItmK2YkiLGVbIu+yliJdPSLZitmKIixlWyLvspciXT0i2KbYrCIsZVsi77KYIl09Itim2K0iLGVbIu+ymSJdPSLYptiuIixlWyLvspoiXT0i2KbZhSIsZVsi77KbIl09Itim2YciLGVbIu+ynCJdPSLYqNisIixlWyLvsp0iXT0i2KjYrSIsZVsi77KeIl09Itio2K4iLGVbIu+ynyJdPSLYqNmFIixlWyLvsqAiXT0i2KjZhyIsZVsi77KhIl09Itiq2KwiLGVbIu+yoiJdPSLYqtitIixlWyLvsqMiXT0i2KrYriIsZVsi77KkIl09Itiq2YUiLGVbIu+ypSJdPSLYqtmHIixlWyLvsqYiXT0i2KvZhSIsZVsi77KnIl09Itis2K0iLGVbIu+yqCJdPSLYrNmFIixlWyLvsqkiXT0i2K3YrCIsZVsi77KqIl09Itit2YUiLGVbIu+yqyJdPSLYrtisIixlWyLvsqwiXT0i2K7ZhSIsZVsi77KtIl09Itiz2KwiLGVbIu+yriJdPSLYs9itIixlWyLvsq8iXT0i2LPYriIsZVsi77KwIl09Itiz2YUiLGVbIu+ysSJdPSLYtditIixlWyLvsrIiXT0i2LXYriIsZVsi77KzIl09Iti12YUiLGVbIu+ytCJdPSLYttisIixlWyLvsrUiXT0i2LbYrSIsZVsi77K2Il09Iti22K4iLGVbIu+ytyJdPSLYttmFIixlWyLvsrgiXT0i2LfYrSIsZVsi77K5Il09Iti42YUiLGVbIu+yuiJdPSLYudisIixlWyLvsrsiXT0i2LnZhSIsZVsi77K8Il09Iti62KwiLGVbIu+yvSJdPSLYutmFIixlWyLvsr4iXT0i2YHYrCIsZVsi77K/Il09ItmB2K0iLGVbIu+zgCJdPSLZgdiuIixlWyLvs4EiXT0i2YHZhSIsZVsi77OCIl09ItmC2K0iLGVbIu+zgyJdPSLZgtmFIixlWyLvs4QiXT0i2YPYrCIsZVsi77OFIl09ItmD2K0iLGVbIu+zhiJdPSLZg9iuIixlWyLvs4ciXT0i2YPZhCIsZVsi77OIIl09ItmD2YUiLGVbIu+ziSJdPSLZhNisIixlWyLvs4oiXT0i2YTYrSIsZVsi77OLIl09ItmE2K4iLGVbIu+zjCJdPSLZhNmFIixlWyLvs40iXT0i2YTZhyIsZVsi77OOIl09ItmF2KwiLGVbIu+zjyJdPSLZhditIixlWyLvs5AiXT0i2YXYriIsZVsi77ORIl09ItmF2YUiLGVbIu+zkiJdPSLZhtisIixlWyLvs5MiXT0i2YbYrSIsZVsi77OUIl09ItmG2K4iLGVbIu+zlSJdPSLZhtmFIixlWyLvs5YiXT0i2YbZhyIsZVsi77OXIl09ItmH2KwiLGVbIu+zmCJdPSLZh9mFIixlWyLvs5kiXT0i2YfZsCIsZVsi77OaIl09ItmK2KwiLGVbIu+zmyJdPSLZititIixlWyLvs5wiXT0i2YrYriIsZVsi77OdIl09ItmK2YUiLGVbIu+zniJdPSLZitmHIixlWyLvs58iXT0i2KbZhSIsZVsi77OgIl09Itim2YciLGVbIu+zoSJdPSLYqNmFIixlWyLvs6IiXT0i2KjZhyIsZVsi77OjIl09Itiq2YUiLGVbIu+zpCJdPSLYqtmHIixlWyLvs6UiXT0i2KvZhSIsZVsi77OmIl09Itir2YciLGVbIu+zpyJdPSLYs9mFIixlWyLvs6giXT0i2LPZhyIsZVsi77OpIl09Iti02YUiLGVbIu+zqiJdPSLYtNmHIixlWyLvs6siXT0i2YPZhCIsZVsi77OsIl09ItmD2YUiLGVbIu+zrSJdPSLZhNmFIixlWyLvs64iXT0i2YbZhSIsZVsi77OvIl09ItmG2YciLGVbIu+zsCJdPSLZitmFIixlWyLvs7EiXT0i2YrZhyIsZVsi77OyIl09ItmA2Y7ZkSIsZVsi77OzIl09ItmA2Y/ZkSIsZVsi77O0Il09ItmA2ZDZkSIsZVsi77O1Il09Iti32YkiLGVbIu+ztiJdPSLYt9mKIixlWyLvs7ciXT0i2LnZiSIsZVsi77O4Il09Iti52YoiLGVbIu+zuSJdPSLYutmJIixlWyLvs7oiXT0i2LrZiiIsZVsi77O7Il09Itiz2YkiLGVbIu+zvCJdPSLYs9mKIixlWyLvs70iXT0i2LTZiSIsZVsi77O+Il09Iti02YoiLGVbIu+zvyJdPSLYrdmJIixlWyLvtIAiXT0i2K3ZiiIsZVsi77SBIl09Itis2YkiLGVbIu+0giJdPSLYrNmKIixlWyLvtIMiXT0i2K7ZiSIsZVsi77SEIl09Itiu2YoiLGVbIu+0hSJdPSLYtdmJIixlWyLvtIYiXT0i2LXZiiIsZVsi77SHIl09Iti22YkiLGVbIu+0iCJdPSLYttmKIixlWyLvtIkiXT0i2LTYrCIsZVsi77SKIl09Iti02K0iLGVbIu+0iyJdPSLYtNiuIixlWyLvtIwiXT0i2LTZhSIsZVsi77SNIl09Iti02LEiLGVbIu+0jiJdPSLYs9ixIixlWyLvtI8iXT0i2LXYsSIsZVsi77SQIl09Iti22LEiLGVbIu+0kSJdPSLYt9mJIixlWyLvtJIiXT0i2LfZiiIsZVsi77STIl09Iti52YkiLGVbIu+0lCJdPSLYudmKIixlWyLvtJUiXT0i2LrZiSIsZVsi77SWIl09Iti62YoiLGVbIu+0lyJdPSLYs9mJIixlWyLvtJgiXT0i2LPZiiIsZVsi77SZIl09Iti02YkiLGVbIu+0miJdPSLYtNmKIixlWyLvtJsiXT0i2K3ZiSIsZVsi77ScIl09Itit2YoiLGVbIu+0nSJdPSLYrNmJIixlWyLvtJ4iXT0i2KzZiiIsZVsi77SfIl09Itiu2YkiLGVbIu+0oCJdPSLYrtmKIixlWyLvtKEiXT0i2LXZiSIsZVsi77SiIl09Iti12YoiLGVbIu+0oyJdPSLYttmJIixlWyLvtKQiXT0i2LbZiiIsZVsi77SlIl09Iti02KwiLGVbIu+0piJdPSLYtNitIixlWyLvtKciXT0i2LTYriIsZVsi77SoIl09Iti02YUiLGVbIu+0qSJdPSLYtNixIixlWyLvtKoiXT0i2LPYsSIsZVsi77SrIl09Iti12LEiLGVbIu+0rCJdPSLYttixIixlWyLvtK0iXT0i2LTYrCIsZVsi77SuIl09Iti02K0iLGVbIu+0ryJdPSLYtNiuIixlWyLvtLAiXT0i2LTZhSIsZVsi77SxIl09Itiz2YciLGVbIu+0siJdPSLYtNmHIixlWyLvtLMiXT0i2LfZhSIsZVsi77S0Il09Itiz2KwiLGVbIu+0tSJdPSLYs9itIixlWyLvtLYiXT0i2LPYriIsZVsi77S3Il09Iti02KwiLGVbIu+0uCJdPSLYtNitIixlWyLvtLkiXT0i2LTYriIsZVsi77S6Il09Iti32YUiLGVbIu+0uyJdPSLYuNmFIixlWyLvtLwiXT0i2KfZiyIsZVsi77S9Il09Itin2YsiLGVbIu+1kCJdPSLYqtis2YUiLGVbIu+1kSJdPSLYqtit2KwiLGVbIu+1kiJdPSLYqtit2KwiLGVbIu+1kyJdPSLYqtit2YUiLGVbIu+1lCJdPSLYqtiu2YUiLGVbIu+1lSJdPSLYqtmF2KwiLGVbIu+1liJdPSLYqtmF2K0iLGVbIu+1lyJdPSLYqtmF2K4iLGVbIu+1mCJdPSLYrNmF2K0iLGVbIu+1mSJdPSLYrNmF2K0iLGVbIu+1miJdPSLYrdmF2YoiLGVbIu+1myJdPSLYrdmF2YkiLGVbIu+1nCJdPSLYs9it2KwiLGVbIu+1nSJdPSLYs9is2K0iLGVbIu+1niJdPSLYs9is2YkiLGVbIu+1nyJdPSLYs9mF2K0iLGVbIu+1oCJdPSLYs9mF2K0iLGVbIu+1oSJdPSLYs9mF2KwiLGVbIu+1oiJdPSLYs9mF2YUiLGVbIu+1oyJdPSLYs9mF2YUiLGVbIu+1pCJdPSLYtdit2K0iLGVbIu+1pSJdPSLYtdit2K0iLGVbIu+1piJdPSLYtdmF2YUiLGVbIu+1pyJdPSLYtNit2YUiLGVbIu+1qCJdPSLYtNit2YUiLGVbIu+1qSJdPSLYtNis2YoiLGVbIu+1qiJdPSLYtNmF2K4iLGVbIu+1qyJdPSLYtNmF2K4iLGVbIu+1rCJdPSLYtNmF2YUiLGVbIu+1rSJdPSLYtNmF2YUiLGVbIu+1riJdPSLYttit2YkiLGVbIu+1ryJdPSLYttiu2YUiLGVbIu+1sCJdPSLYttiu2YUiLGVbIu+1sSJdPSLYt9mF2K0iLGVbIu+1siJdPSLYt9mF2K0iLGVbIu+1syJdPSLYt9mF2YUiLGVbIu+1tCJdPSLYt9mF2YoiLGVbIu+1tSJdPSLYudis2YUiLGVbIu+1tiJdPSLYudmF2YUiLGVbIu+1tyJdPSLYudmF2YUiLGVbIu+1uCJdPSLYudmF2YkiLGVbIu+1uSJdPSLYutmF2YUiLGVbIu+1uiJdPSLYutmF2YoiLGVbIu+1uyJdPSLYutmF2YkiLGVbIu+1vCJdPSLZgdiu2YUiLGVbIu+1vSJdPSLZgdiu2YUiLGVbIu+1viJdPSLZgtmF2K0iLGVbIu+1vyJdPSLZgtmF2YUiLGVbIu+2gCJdPSLZhNit2YUiLGVbIu+2gSJdPSLZhNit2YoiLGVbIu+2giJdPSLZhNit2YkiLGVbIu+2gyJdPSLZhNis2KwiLGVbIu+2hCJdPSLZhNis2KwiLGVbIu+2hSJdPSLZhNiu2YUiLGVbIu+2hiJdPSLZhNiu2YUiLGVbIu+2hyJdPSLZhNmF2K0iLGVbIu+2iCJdPSLZhNmF2K0iLGVbIu+2iSJdPSLZhdit2KwiLGVbIu+2iiJdPSLZhdit2YUiLGVbIu+2iyJdPSLZhdit2YoiLGVbIu+2jCJdPSLZhdis2K0iLGVbIu+2jSJdPSLZhdis2YUiLGVbIu+2jiJdPSLZhdiu2KwiLGVbIu+2jyJdPSLZhdiu2YUiLGVbIu+2kiJdPSLZhdis2K4iLGVbIu+2kyJdPSLZh9mF2KwiLGVbIu+2lCJdPSLZh9mF2YUiLGVbIu+2lSJdPSLZhtit2YUiLGVbIu+2liJdPSLZhtit2YkiLGVbIu+2lyJdPSLZhtis2YUiLGVbIu+2mCJdPSLZhtis2YUiLGVbIu+2mSJdPSLZhtis2YkiLGVbIu+2miJdPSLZhtmF2YoiLGVbIu+2myJdPSLZhtmF2YkiLGVbIu+2nCJdPSLZitmF2YUiLGVbIu+2nSJdPSLZitmF2YUiLGVbIu+2niJdPSLYqNiu2YoiLGVbIu+2nyJdPSLYqtis2YoiLGVbIu+2oCJdPSLYqtis2YkiLGVbIu+2oSJdPSLYqtiu2YoiLGVbIu+2oiJdPSLYqtiu2YkiLGVbIu+2oyJdPSLYqtmF2YoiLGVbIu+2pCJdPSLYqtmF2YkiLGVbIu+2pSJdPSLYrNmF2YoiLGVbIu+2piJdPSLYrNit2YkiLGVbIu+2pyJdPSLYrNmF2YkiLGVbIu+2qCJdPSLYs9iu2YkiLGVbIu+2qSJdPSLYtdit2YoiLGVbIu+2qiJdPSLYtNit2YoiLGVbIu+2qyJdPSLYttit2YoiLGVbIu+2rCJdPSLZhNis2YoiLGVbIu+2rSJdPSLZhNmF2YoiLGVbIu+2riJdPSLZitit2YoiLGVbIu+2ryJdPSLZitis2YoiLGVbIu+2sCJdPSLZitmF2YoiLGVbIu+2sSJdPSLZhdmF2YoiLGVbIu+2siJdPSLZgtmF2YoiLGVbIu+2syJdPSLZhtit2YoiLGVbIu+2tCJdPSLZgtmF2K0iLGVbIu+2tSJdPSLZhNit2YUiLGVbIu+2tiJdPSLYudmF2YoiLGVbIu+2tyJdPSLZg9mF2YoiLGVbIu+2uCJdPSLZhtis2K0iLGVbIu+2uSJdPSLZhdiu2YoiLGVbIu+2uiJdPSLZhNis2YUiLGVbIu+2uyJdPSLZg9mF2YUiLGVbIu+2vCJdPSLZhNis2YUiLGVbIu+2vSJdPSLZhtis2K0iLGVbIu+2viJdPSLYrNit2YoiLGVbIu+2vyJdPSLYrdis2YoiLGVbIu+3gCJdPSLZhdis2YoiLGVbIu+3gSJdPSLZgdmF2YoiLGVbIu+3giJdPSLYqNit2YoiLGVbIu+3gyJdPSLZg9mF2YUiLGVbIu+3hCJdPSLYudis2YUiLGVbIu+3hSJdPSLYtdmF2YUiLGVbIu+3hiJdPSLYs9iu2YoiLGVbIu+3hyJdPSLZhtis2YoiLGVbIu+5iSJdPSLigL4iLGVbIu+5iiJdPSLigL4iLGVbIu+5iyJdPSLigL4iLGVbIu+5jCJdPSLigL4iLGVbIu+5jSJdPSJfIixlWyLvuY4iXT0iXyIsZVsi77mPIl09Il8iLGVbIu+6gCJdPSLYoSIsZVsi77qBIl09ItiiIixlWyLvuoIiXT0i2KIiLGVbIu+6gyJdPSLYoyIsZVsi77qEIl09ItijIixlWyLvuoUiXT0i2KQiLGVbIu+6hiJdPSLYpCIsZVsi77qHIl09ItilIixlWyLvuogiXT0i2KUiLGVbIu+6iSJdPSLYpiIsZVsi77qKIl09ItimIixlWyLvuosiXT0i2KYiLGVbIu+6jCJdPSLYpiIsZVsi77qNIl09ItinIixlWyLvuo4iXT0i2KciLGVbIu+6jyJdPSLYqCIsZVsi77qQIl09ItioIixlWyLvupEiXT0i2KgiLGVbIu+6kiJdPSLYqCIsZVsi77qTIl09ItipIixlWyLvupQiXT0i2KkiLGVbIu+6lSJdPSLYqiIsZVsi77qWIl09ItiqIixlWyLvupciXT0i2KoiLGVbIu+6mCJdPSLYqiIsZVsi77qZIl09ItirIixlWyLvupoiXT0i2KsiLGVbIu+6myJdPSLYqyIsZVsi77qcIl09ItirIixlWyLvup0iXT0i2KwiLGVbIu+6niJdPSLYrCIsZVsi77qfIl09ItisIixlWyLvuqAiXT0i2KwiLGVbIu+6oSJdPSLYrSIsZVsi77qiIl09ItitIixlWyLvuqMiXT0i2K0iLGVbIu+6pCJdPSLYrSIsZVsi77qlIl09ItiuIixlWyLvuqYiXT0i2K4iLGVbIu+6pyJdPSLYriIsZVsi77qoIl09ItiuIixlWyLvuqkiXT0i2K8iLGVbIu+6qiJdPSLYryIsZVsi77qrIl09ItiwIixlWyLvuqwiXT0i2LAiLGVbIu+6rSJdPSLYsSIsZVsi77quIl09ItixIixlWyLvuq8iXT0i2LIiLGVbIu+6sCJdPSLYsiIsZVsi77qxIl09ItizIixlWyLvurIiXT0i2LMiLGVbIu+6syJdPSLYsyIsZVsi77q0Il09ItizIixlWyLvurUiXT0i2LQiLGVbIu+6tiJdPSLYtCIsZVsi77q3Il09Iti0IixlWyLvurgiXT0i2LQiLGVbIu+6uSJdPSLYtSIsZVsi77q6Il09Iti1IixlWyLvursiXT0i2LUiLGVbIu+6vCJdPSLYtSIsZVsi77q9Il09Iti2IixlWyLvur4iXT0i2LYiLGVbIu+6vyJdPSLYtiIsZVsi77uAIl09Iti2IixlWyLvu4EiXT0i2LciLGVbIu+7giJdPSLYtyIsZVsi77uDIl09Iti3IixlWyLvu4QiXT0i2LciLGVbIu+7hSJdPSLYuCIsZVsi77uGIl09Iti4IixlWyLvu4ciXT0i2LgiLGVbIu+7iCJdPSLYuCIsZVsi77uJIl09Iti5IixlWyLvu4oiXT0i2LkiLGVbIu+7iyJdPSLYuSIsZVsi77uMIl09Iti5IixlWyLvu40iXT0i2LoiLGVbIu+7jiJdPSLYuiIsZVsi77uPIl09Iti6IixlWyLvu5AiXT0i2LoiLGVbIu+7kSJdPSLZgSIsZVsi77uSIl09ItmBIixlWyLvu5MiXT0i2YEiLGVbIu+7lCJdPSLZgSIsZVsi77uVIl09ItmCIixlWyLvu5YiXT0i2YIiLGVbIu+7lyJdPSLZgiIsZVsi77uYIl09ItmCIixlWyLvu5kiXT0i2YMiLGVbIu+7miJdPSLZgyIsZVsi77ubIl09ItmDIixlWyLvu5wiXT0i2YMiLGVbIu+7nSJdPSLZhCIsZVsi77ueIl09ItmEIixlWyLvu58iXT0i2YQiLGVbIu+7oCJdPSLZhCIsZVsi77uhIl09ItmFIixlWyLvu6IiXT0i2YUiLGVbIu+7oyJdPSLZhSIsZVsi77ukIl09ItmFIixlWyLvu6UiXT0i2YYiLGVbIu+7piJdPSLZhiIsZVsi77unIl09ItmGIixlWyLvu6giXT0i2YYiLGVbIu+7qSJdPSLZhyIsZVsi77uqIl09ItmHIixlWyLvu6siXT0i2YciLGVbIu+7rCJdPSLZhyIsZVsi77utIl09ItmIIixlWyLvu64iXT0i2YgiLGVbIu+7ryJdPSLZiSIsZVsi77uwIl09ItmJIixlWyLvu7EiXT0i2YoiLGVbIu+7siJdPSLZiiIsZVsi77uzIl09ItmKIixlWyLvu7QiXT0i2YoiLGVbIu+7tSJdPSLZhNiiIixlWyLvu7YiXT0i2YTYoiIsZVsi77u3Il09ItmE2KMiLGVbIu+7uCJdPSLZhNijIixlWyLvu7kiXT0i2YTYpSIsZVsi77u6Il09ItmE2KUiLGVbIu+7uyJdPSLZhNinIixlWyLvu7wiXT0i2YTYpyJ9KSk7dC5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT49NjU1MjAmJmU8PTY1NTM1PzA6ZT49NjI5NzYmJmU8PTYzNzQzP2EoKVtlXXx8ZToxNzM9PT1lPzQ1OmV9LHQucmV2ZXJzZUlmUnRsPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmxlbmd0aDtpZihuPD0xfHwhKCh0PWUuY2hhckNvZGVBdCgwKSk+PShyPWlbMTNdKS5iZWdpbiYmdDxyLmVuZHx8dD49KHI9aVsxMV0pLmJlZ2luJiZ0PHIuZW5kKSlyZXR1cm4gZTtmb3IodmFyIGE9IiIsbz1uLTE7bz49MDtvLS0pYSs9ZVtvXTtyZXR1cm4gYX0sdC5nZXRVbmljb2RlUmFuZ2VGb3I9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj1pW3RdO2lmKGU+PW4uYmVnaW4mJmU8bi5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9LHQuZ2V0Tm9ybWFsaXplZFVuaWNvZGVzPW8sdC5nZXRVbmljb2RlRm9yR2x5cGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10W2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7aWYoIWUpcmV0dXJuLTE7aWYoInUiPT09ZVswXSl7dmFyIG4sYT1lLmxlbmd0aDtpZig3PT09YSYmIm4iPT09ZVsxXSYmImkiPT09ZVsyXSluPWUuc3Vic3RyaW5nKDMpO2Vsc2V7aWYoIShhPj01JiZhPD03KSlyZXR1cm4tMTtuPWUuc3Vic3RyaW5nKDEpfWlmKG49PT1uLnRvVXBwZXJDYXNlKCkmJihyPXBhcnNlSW50KG4sMTYpKT49MClyZXR1cm4gcn1yZXR1cm4tMX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTc0KSxpPXIoMTc3KSxvPXIoMTc2KSxzPXIoMTU3KTtmdW5jdGlvbiBsKGUpe3JldHVybihsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWwodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiB1KGUpe3JldHVybih1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuKGg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLGV9dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIHIocixhLGkpe3ZhciBvLHMsbCxjPTE9PT10KHIsYSsyKT9lKHIsYSs4KTplKHIsYSsxNiksdT10KHIsYStjKTtpZig0PT09dSl7dChyLGErYysyKTt2YXIgZj10KHIsYStjKzYpPj4xO2ZvcihzPWErYysxNCxvPVtdLGw9MDtsPGY7bCsrLHMrPTIpb1tsXT17ZW5kOnQocixzKX07Zm9yKHMrPTIsbD0wO2w8ZjtsKysscys9MilvW2xdLnN0YXJ0PXQocixzKTtmb3IobD0wO2w8ZjtsKysscys9MilvW2xdLmlkRGVsdGE9dChyLHMpO2ZvcihsPTA7bDxmO2wrKyxzKz0yKXt2YXIgaD10KHIscyk7aWYoMCE9PWgpe29bbF0uaWRzPVtdO2Zvcih2YXIgZD0wLHA9b1tsXS5lbmQtb1tsXS5zdGFydCsxO2Q8cDtkKyspb1tsXS5pZHNbZF09dChyLHMraCksaCs9Mn19cmV0dXJuIG99aWYoMTI9PT11KXtlKHIsYStjKzQpO3ZhciBtPWUocixhK2MrMTIpO2ZvcihzPWErYysxNixvPVtdLGw9MDtsPG07bCsrKW8ucHVzaCh7c3RhcnQ6ZShyLHMpLGVuZDplKHIscys0KSxpZERlbHRhOmUocixzKzgpLWUocixzKX0pLHMrPTEyO3JldHVybiBvfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBjbWFwOiAiLmNvbmNhdCh1KSl9ZnVuY3Rpb24gbChlLHQscixuKXt2YXIgaT1uZXcgYS5DRkZQYXJzZXIobmV3IHMuU3RyZWFtKGUsdCxyLXQpLHt9LG4pLnBhcnNlKCk7cmV0dXJue2dseXBoczppLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6aS50b3BEaWN0LnByaXZhdGVEaWN0JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmaS50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyxnc3VicnM6aS5nbG9iYWxTdWJySW5kZXgmJmkuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsaXNDRkZDSURGb250OmkuaXNDSURGb250LGZkU2VsZWN0OmkuZmRTZWxlY3QsZmRBcnJheTppLmZkQXJyYXl9fWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9dC5jb2RlUG9pbnRBdCgwKSxuPTAsYT0wLGk9ZS5sZW5ndGgtMTthPGk7KXt2YXIgbz1hK2krMT4+MTtyPGVbb10uc3RhcnQ/aT1vLTE6YT1vfXJldHVybiBlW2FdLnN0YXJ0PD1yJiZyPD1lW2FdLmVuZCYmKG49ZVthXS5pZERlbHRhKyhlW2FdLmlkcz9lW2FdLmlkc1tyLWVbYV0uc3RhcnRdOnIpJjY1NTM1KSx7Y2hhckNvZGU6cixnbHlwaElkOm59fXZhciBwPVtdLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2QodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC4iKSx0aGlzLmZvbnRNYXRyaXg9dCx0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIG0oZSxbe2tleToiZ2V0UGF0aEpzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuY21hcCxlKSxyPXRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXTtyZXR1cm4gcnx8KHI9dGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbdC5nbHlwaElkXSx0LmdseXBoSWQpLHRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXT1yKSx2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdC5jaGFyQ29kZV0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdC5jaGFyQ29kZV09dC5nbHlwaElkKSxyfX0se2tleToiY29tcGlsZUdseXBoIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGh8fDE0PT09ZVswXSlyZXR1cm4gcDt2YXIgcj10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe3ZhciBhPXRoaXMuZmRTZWxlY3QuZ2V0RkRJbmRleCh0KTthPj0wJiZhPHRoaXMuZmRBcnJheS5sZW5ndGg/cj10aGlzLmZkQXJyYXlbYV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fG4uRk9OVF9JREVOVElUWV9NQVRSSVg6KDAsbi53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9dmFyIGk9W107cmV0dXJuIGkucHVzaCh7Y21kOiJzYXZlIn0pLGkucHVzaCh7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6ci5zbGljZSgpfSksaS5wdXNoKHtjbWQ6InNjYWxlIixhcmdzOlsic2l6ZSIsIi1zaXplIl19KSx0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9aCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXSYmdm9pZCAwIT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3QuY2hhckNvZGVdfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsbil7dmFyIGE7cmV0dXJuIGQodGhpcyx0KSwoYT1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsbnx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pKSkuZ2x5cGhzPWUsYS5jbWFwPXIsYX1yZXR1cm4gZih0LGUpLG0odCxbe2tleToiY29tcGlsZUdseXBoSW1wbCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24gZSh0LHIsbil7ZnVuY3Rpb24gYShlLHQpe3IucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsdF19KX1mdW5jdGlvbiBpKGUsdCl7ci5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSx0XX0pfWZ1bmN0aW9uIG8oZSx0LG4sYSl7ci5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UsdCxuLGFdfSl9dmFyIHMsbD0wLGM9KHRbbF08PDI0fHRbbCsxXTw8MTYpPj4xNix1PTAsZj0wO2lmKGwrPTEwLGM8MClkb3tzPXRbbF08PDh8dFtsKzFdO3ZhciBoLGQscD10W2wrMl08PDh8dFtsKzNdO2wrPTQsMSZzPyhoPSh0W2xdPDwyNHx0W2wrMV08PDE2KT4+MTYsZD0odFtsKzJdPDwyNHx0W2wrM108PDE2KT4+MTYsbCs9NCk6KGg9dFtsKytdLGQ9dFtsKytdKSwyJnM/KHU9aCxmPWQpOih1PTAsZj0wKTt2YXIgbT0xLGc9MSx2PTAseT0wOzgmcz8obT1nPSh0W2xdPDwyNHx0W2wrMV08PDE2KS8xMDczNzQxODI0LGwrPTIpOjY0JnM/KG09KHRbbF08PDI0fHRbbCsxXTw8MTYpLzEwNzM3NDE4MjQsZz0odFtsKzJdPDwyNHx0W2wrM108PDE2KS8xMDczNzQxODI0LGwrPTQpOjEyOCZzJiYobT0odFtsXTw8MjR8dFtsKzFdPDwxNikvMTA3Mzc0MTgyNCx2PSh0W2wrMl08PDI0fHRbbCszXTw8MTYpLzEwNzM3NDE4MjQseT0odFtsKzRdPDwyNHx0W2wrNV08PDE2KS8xMDczNzQxODI0LGc9KHRbbCs2XTw8MjR8dFtsKzddPDwxNikvMTA3Mzc0MTgyNCxsKz04KTt2YXIgYj1uLmdseXBoc1twXTtiJiYoci5wdXNoKHtjbWQ6InNhdmUifSksci5wdXNoKHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbbSx2LHksZyx1LGZdfSksZShiLHIsbiksci5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJnMpO2Vsc2V7dmFyIHcsayxTPVtdO2Zvcih3PTA7dzxjO3crKylTLnB1c2godFtsXTw8OHx0W2wrMV0pLGwrPTI7bCs9MisodFtsXTw8OHx0W2wrMV0pO2Zvcih2YXIgXz1TW1MubGVuZ3RoLTFdKzEseD1bXTt4Lmxlbmd0aDxfOyl7dmFyIEE9MTtmb3IoOCYocz10W2wrK10pJiYoQSs9dFtsKytdKTtBLS0gPjA7KXgucHVzaCh7ZmxhZ3M6c30pfWZvcih3PTA7dzxfO3crKyl7c3dpdGNoKDE4Jnhbd10uZmxhZ3Mpe2Nhc2UgMDp1Kz0odFtsXTw8MjR8dFtsKzFdPDwxNik+PjE2LGwrPTI7YnJlYWs7Y2FzZSAyOnUtPXRbbCsrXTticmVhaztjYXNlIDE4OnUrPXRbbCsrXX14W3ddLng9dX1mb3Iodz0wO3c8Xzt3Kyspe3N3aXRjaCgzNiZ4W3ddLmZsYWdzKXtjYXNlIDA6Zis9KHRbbF08PDI0fHRbbCsxXTw8MTYpPj4xNixsKz0yO2JyZWFrO2Nhc2UgNDpmLT10W2wrK107YnJlYWs7Y2FzZSAzNjpmKz10W2wrK119eFt3XS55PWZ9dmFyIEM9MDtmb3IobD0wO2w8YztsKyspe3ZhciBQPVNbbF0sRT14LnNsaWNlKEMsUCsxKTtpZigxJkVbMF0uZmxhZ3MpRS5wdXNoKEVbMF0pO2Vsc2UgaWYoMSZFW0UubGVuZ3RoLTFdLmZsYWdzKUUudW5zaGlmdChFW0UubGVuZ3RoLTFdKTtlbHNle3ZhciBUPXtmbGFnczoxLHg6KEVbMF0ueCtFW0UubGVuZ3RoLTFdLngpLzIseTooRVswXS55K0VbRS5sZW5ndGgtMV0ueSkvMn07RS51bnNoaWZ0KFQpLEUucHVzaChUKX1mb3IoYShFWzBdLngsRVswXS55KSx3PTEsaz1FLmxlbmd0aDt3PGs7dysrKTEmRVt3XS5mbGFncz9pKEVbd10ueCxFW3ddLnkpOjEmRVt3KzFdLmZsYWdzPyhvKEVbd10ueCxFW3ddLnksRVt3KzFdLngsRVt3KzFdLnkpLHcrKyk6byhFW3ddLngsRVt3XS55LChFW3ddLngrRVt3KzFdLngpLzIsKEVbd10ueStFW3crMV0ueSkvMik7Qz1QKzF9fX0oZSx0LHRoaXMpfX1dKSx0fShnKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyLG4sYSl7dmFyIG87cmV0dXJuIGQodGhpcyx0KSwobz1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsbnx8Wy4wMDEsMCwwLC4wMDEsMCwwXSkpKS5nbHlwaHM9ZS5nbHlwaHMsby5nc3VicnM9ZS5nc3VicnN8fFtdLG8uc3VicnM9ZS5zdWJyc3x8W10sby5jbWFwPXIsby5nbHlwaE5hbWVNYXA9YXx8KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpLG8uZ3N1YnJzQmlhcz1vLmdzdWJycy5sZW5ndGg8MTI0MD8xMDc6by5nc3VicnMubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njgsby5zdWJyc0JpYXM9by5zdWJycy5sZW5ndGg8MTI0MD8xMDc6by5zdWJycy5sZW5ndGg8MzM5MDA/MTEzMTozMjc2OCxvLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxvLmZkU2VsZWN0PWUuZmRTZWxlY3Qsby5mZEFycmF5PWUuZmRBcnJheSxvfXJldHVybiBmKHQsZSksbSh0LFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQscil7IWZ1bmN0aW9uIGUodCxyLGEsaSl7dmFyIHM9W10sbD0wLGM9MCx1PTA7ZnVuY3Rpb24gZihlLHQpe3IucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsdF19KX1mdW5jdGlvbiBkKGUsdCl7ci5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSx0XX0pfWZ1bmN0aW9uIHAoZSx0LG4sYSxpLG8pe3IucHVzaCh7Y21kOiJiZXppZXJDdXJ2ZVRvIixhcmdzOltlLHQsbixhLGksb119KX0hZnVuY3Rpb24gdChtKXtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoOyl7dmFyIHYseSxiLHcsayxTLF8seCxBPSExLEM9bVtnKytdO3N3aXRjaChDKXtjYXNlIDE6Y2FzZSAzOnUrPXMubGVuZ3RoPj4xLEE9ITA7YnJlYWs7Y2FzZSA0OmMrPXMucG9wKCksZihsLGMpLEE9ITA7YnJlYWs7Y2FzZSA1OmZvcig7cy5sZW5ndGg+MDspbCs9cy5zaGlmdCgpLGMrPXMuc2hpZnQoKSxkKGwsYyk7YnJlYWs7Y2FzZSA2OmZvcig7cy5sZW5ndGg+MCYmKGQobCs9cy5zaGlmdCgpLGMpLDAhPT1zLmxlbmd0aCk7KWMrPXMuc2hpZnQoKSxkKGwsYyk7YnJlYWs7Y2FzZSA3OmZvcig7cy5sZW5ndGg+MCYmKGMrPXMuc2hpZnQoKSxkKGwsYyksMCE9PXMubGVuZ3RoKTspZChsKz1zLnNoaWZ0KCksYyk7YnJlYWs7Y2FzZSA4OmZvcig7cy5sZW5ndGg+MDspdj1sK3Muc2hpZnQoKSxiPWMrcy5zaGlmdCgpLHk9ditzLnNoaWZ0KCksdz1iK3Muc2hpZnQoKSxsPXkrcy5zaGlmdCgpLGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7Y2FzZSAxMDppZihfPXMucG9wKCkseD1udWxsLGEuaXNDRkZDSURGb250KXt2YXIgUD1hLmZkU2VsZWN0LmdldEZESW5kZXgoaSk7aWYoUD49MCYmUDxhLmZkQXJyYXkubGVuZ3RoKXt2YXIgRT1hLmZkQXJyYXlbUF0sVD12b2lkIDA7aWYoRS5wcml2YXRlRGljdCYmRS5wcml2YXRlRGljdC5zdWJyc0luZGV4JiYoVD1FLnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyksVCl7dmFyIFI9VC5sZW5ndGg7eD1UW18rPVI8MTI0MD8xMDc6UjwzMzkwMD8xMTMxOjMyNzY4XX19ZWxzZSgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2UgeD1hLnN1YnJzW18rYS5zdWJyc0JpYXNdO3gmJnQoeCk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjpzd2l0Y2goQz1tW2crK10pe2Nhc2UgMzQ6eT0odj1sK3Muc2hpZnQoKSkrcy5zaGlmdCgpLGs9YytzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxwKHYsYyx5LGssbCxrKSx5PSh2PWwrcy5zaGlmdCgpKStzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxwKHYsayx5LGMsbCxjKTticmVhaztjYXNlIDM1OnY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpLHY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpLHMucG9wKCk7YnJlYWs7Y2FzZSAzNjpwKHY9bCtzLnNoaWZ0KCksaz1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLFM9aytzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxTKSxwKHY9bCtzLnNoaWZ0KCksUyx5PXYrcy5zaGlmdCgpLFMrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYyk7YnJlYWs7Y2FzZSAzNzp2YXIgTz1sLEk9Yzt2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbCxjKSx2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eSxjPXcsTWF0aC5hYnMobC1PKT5NYXRoLmFicyhjLUkpP2wrPXMuc2hpZnQoKTpjKz1zLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5rbm93biBvcGVyYXRvcjogMTIgIi5jb25jYXQoQykpfWJyZWFrO2Nhc2UgMTQ6aWYocy5sZW5ndGg+PTQpe3ZhciBGPXMucG9wKCksTD1zLnBvcCgpO2M9cy5wb3AoKSxsPXMucG9wKCksci5wdXNoKHtjbWQ6InNhdmUifSksci5wdXNoKHtjbWQ6InRyYW5zbGF0ZSIsYXJnczpbbCxjXX0pO3ZhciBEPWgoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbby5TdGFuZGFyZEVuY29kaW5nW0ZdXSkpO2UoYS5nbHlwaHNbRC5nbHlwaElkXSxyLGEsRC5nbHlwaElkKSxyLnB1c2goe2NtZDoicmVzdG9yZSJ9KSxEPWgoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbby5TdGFuZGFyZEVuY29kaW5nW0xdXSkpLGUoYS5nbHlwaHNbRC5nbHlwaElkXSxyLGEsRC5nbHlwaElkKX1yZXR1cm47Y2FzZSAxODp1Kz1zLmxlbmd0aD4+MSxBPSEwO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDpnKz0odSs9cy5sZW5ndGg+PjEpKzc+PjMsQT0hMDticmVhaztjYXNlIDIxOmMrPXMucG9wKCksZihsKz1zLnBvcCgpLGMpLEE9ITA7YnJlYWs7Y2FzZSAyMjpmKGwrPXMucG9wKCksYyksQT0hMDticmVhaztjYXNlIDIzOnUrPXMubGVuZ3RoPj4xLEE9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3MubGVuZ3RoPjI7KXY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpO2wrPXMuc2hpZnQoKSxjKz1zLnNoaWZ0KCksZChsLGMpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtzLmxlbmd0aD42OylsKz1zLnNoaWZ0KCksYys9cy5zaGlmdCgpLGQobCxjKTt2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbCxjKTticmVhaztjYXNlIDI2OmZvcihzLmxlbmd0aCUyJiYobCs9cy5zaGlmdCgpKTtzLmxlbmd0aD4wOyl2PWwsYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15LGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7Y2FzZSAyNzpmb3Iocy5sZW5ndGglMiYmKGMrPXMuc2hpZnQoKSk7cy5sZW5ndGg+MDspcCh2PWwrcy5zaGlmdCgpLGI9Yyx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcpO2JyZWFrO2Nhc2UgMjg6cy5wdXNoKChtW2ddPDwyNHxtW2crMV08PDE2KT4+MTYpLGcrPTI7YnJlYWs7Y2FzZSAyOTpfPXMucG9wKCkrYS5nc3VicnNCaWFzLCh4PWEuZ3N1YnJzW19dKSYmdCh4KTticmVhaztjYXNlIDMwOmZvcig7cy5sZW5ndGg+MCYmKHY9bCxiPWMrcy5zaGlmdCgpLHk9ditzLnNoaWZ0KCksdz1iK3Muc2hpZnQoKSxsPXkrcy5zaGlmdCgpLGM9dysoMT09PXMubGVuZ3RoP3Muc2hpZnQoKTowKSxwKHYsYix5LHcsbCxjKSwwIT09cy5sZW5ndGgpOyl2PWwrcy5zaGlmdCgpLGI9Yyx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbD15KygxPT09cy5sZW5ndGg/cy5zaGlmdCgpOjApLGMpO2JyZWFrO2Nhc2UgMzE6Zm9yKDtzLmxlbmd0aD4wJiYodj1sK3Muc2hpZnQoKSxiPWMseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGw9eSsoMT09PXMubGVuZ3RoP3Muc2hpZnQoKTowKSxjKSwwIT09cy5sZW5ndGgpOyl2PWwsYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrKDE9PT1zLmxlbmd0aD9zLnNoaWZ0KCk6MCkscCh2LGIseSx3LGwsYyk7YnJlYWs7ZGVmYXVsdDppZihDPDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdChDKSk7QzwyNDc/cy5wdXNoKEMtMTM5KTpDPDI1MT9zLnB1c2goMjU2KihDLTI0NykrbVtnKytdKzEwOCk6QzwyNTU/cy5wdXNoKDI1NiotKEMtMjUxKS1tW2crK10tMTA4KToocy5wdXNoKChtW2ddPDwyNHxtW2crMV08PDE2fG1bZysyXTw8OHxtW2crM10pLzY1NTM2KSxnKz00KX1BJiYocy5sZW5ndGg9MCl9fSh0KX0oZSx0LHRoaXMscil9fV0pLHR9KGcpO3JldHVybntjcmVhdGU6ZnVuY3Rpb24oYSxpKXtmb3IodmFyIG8scyxjLHUsZixoLGQ9bmV3IFVpbnQ4QXJyYXkoYS5kYXRhKSxwPXQoZCw0KSxtPTAsZz0xMjttPHA7bSsrLGcrPTE2KXt2YXIgYj0oMCxuLmJ5dGVzVG9TdHJpbmcpKGQuc3ViYXJyYXkoZyxnKzQpKSx3PWUoZCxnKzgpLGs9ZShkLGcrMTIpO3N3aXRjaChiKXtjYXNlImNtYXAiOm89cihkLHcpO2JyZWFrO2Nhc2UiZ2x5ZiI6cz1kLnN1YmFycmF5KHcsdytrKTticmVhaztjYXNlImxvY2EiOmM9ZC5zdWJhcnJheSh3LHcrayk7YnJlYWs7Y2FzZSJoZWFkIjpoPXQoZCx3KzE4KSxmPXQoZCx3KzUwKTticmVhaztjYXNlIkNGRiAiOnU9bChkLHcsdytrLGkpfX1pZihzKXt2YXIgUz1oP1sxL2gsMCwwLDEvaCwwLDBdOmEuZm9udE1hdHJpeDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSk6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBsPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGwpKSxvPWx9cmV0dXJuIGl9KHMsYyxmKSxvLFMpfXJldHVybiBuZXcgeSh1LG8sYS5mb250TWF0cml4LGEuZ2x5cGhOYW1lTWFwKX19fSgpO3QuRm9udFJlbmRlcmVyRmFjdG9yeT1nfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNzYpLGk9cigxNTcpLG89ZnVuY3Rpb24oKXt2YXIgZT1bNF0sdD1bNV0scj1bNl0sYT1bN10saT1bOF0sbz1bMTIsMzVdLHM9WzE0XSxsPVsyMV0sYz1bMjJdLHU9WzMwXSxmPVszMV07ZnVuY3Rpb24gaCgpe3RoaXMud2lkdGg9MCx0aGlzLmxzYj0wLHRoaXMuZmxleGluZz0hMSx0aGlzLm91dHB1dD1bXSx0aGlzLnN0YWNrPVtdfXJldHVybiBoLnByb3RvdHlwZT17Y29udmVydDpmdW5jdGlvbihoLGQscCl7Zm9yKHZhciBtLGcsdix5PWgubGVuZ3RoLGI9ITEsdz0wO3c8eTt3Kyspe3ZhciBrPWhbd107aWYoazwzMil7c3dpdGNoKDEyPT09ayYmKGs9KGs8PDgpK2hbKyt3XSksayl7Y2FzZSAxOmNhc2UgMzp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2I9ITA7YnJlYWt9dmFyIFM9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goMCxTKTticmVha31iPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxlKTticmVhaztjYXNlIDU6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDIsdCk7YnJlYWs7Y2FzZSA2OmI9dGhpcy5leGVjdXRlQ29tbWFuZCgxLHIpO2JyZWFrO2Nhc2UgNzpiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxhKTticmVhaztjYXNlIDg6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDYsaSk7YnJlYWs7Y2FzZSA5OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSAxMDppZih0aGlzLnN0YWNrLmxlbmd0aDwxKXtiPSEwO2JyZWFrfWlmKCFkW3Y9dGhpcy5zdGFjay5wb3AoKV0pe2I9ITA7YnJlYWt9Yj10aGlzLmNvbnZlcnQoZFt2XSxkLHApO2JyZWFrO2Nhc2UgMTE6cmV0dXJuIGI7Y2FzZSAxMzppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtiPSEwO2JyZWFrfW09dGhpcy5zdGFjay5wb3AoKSxnPXRoaXMuc3RhY2sucG9wKCksdGhpcy5sc2I9Zyx0aGlzLndpZHRoPW0sdGhpcy5zdGFjay5wdXNoKG0sZyksYj10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYyk7YnJlYWs7Y2FzZSAxNDp0aGlzLm91dHB1dC5wdXNoKHNbMF0pO2JyZWFrO2Nhc2UgMjE6aWYodGhpcy5mbGV4aW5nKWJyZWFrO2I9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGwpO2JyZWFrO2Nhc2UgMjI6aWYodGhpcy5mbGV4aW5nKXt0aGlzLnN0YWNrLnB1c2goMCk7YnJlYWt9Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDEsYyk7YnJlYWs7Y2FzZSAzMDpiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCx1KTticmVhaztjYXNlIDMxOmI9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGYpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSAzMDc4OnA/KHRoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSxiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMCxzKSk6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDQscyk7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe2I9ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKSxtPXRoaXMuc3RhY2sucG9wKCk7dmFyIF89dGhpcy5zdGFjay5wb3AoKTtnPXRoaXMuc3RhY2sucG9wKCksdGhpcy5sc2I9Zyx0aGlzLndpZHRoPW0sdGhpcy5zdGFjay5wdXNoKG0sZyxfKSxiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMyxsKTticmVhaztjYXNlIDMwODQ6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7Yj0hMDticmVha312YXIgeD10aGlzLnN0YWNrLnBvcCgpLEE9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goQS94KTticmVhaztjYXNlIDMwODg6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7Yj0hMDticmVha312PXRoaXMuc3RhY2sucG9wKCk7dmFyIEM9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09diYmMz09PUMpe3ZhciBQPXRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoLTE3LDE3KTt0aGlzLnN0YWNrLnB1c2goUFsyXStQWzBdLFBbM10rUFsxXSxQWzRdLFBbNV0sUFs2XSxQWzddLFBbOF0sUFs5XSxQWzEwXSxQWzExXSxQWzEyXSxQWzEzXSxQWzE0XSksYj10aGlzLmV4ZWN1dGVDb21tYW5kKDEzLG8sITApLHRoaXMuZmxleGluZz0hMSx0aGlzLnN0YWNrLnB1c2goUFsxNV0sUFsxNl0pfWVsc2UgMT09PXYmJjA9PT1DJiYodGhpcy5mbGV4aW5nPSEwKTticmVhaztjYXNlIDMwODk6YnJlYWs7Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7ZGVmYXVsdDooMCxuLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgIicraysnIicpfWlmKGIpYnJlYWt9ZWxzZSBrPD0yNDY/ay09MTM5Oms9azw9MjUwPzI1Niooay0yNDcpK2hbKyt3XSsxMDg6azw9MjU0Py0yNTYqKGstMjUxKS1oWysrd10tMTA4OigyNTUmaFsrK3ddKTw8MjR8KDI1NSZoWysrd10pPDwxNnwoMjU1JmhbKyt3XSk8PDh8KDI1NSZoWysrd10pPDwwLHRoaXMuc3RhY2sucHVzaChrKX1yZXR1cm4gYn0sZXhlY3V0ZUNvbW1hbmQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuc3RhY2subGVuZ3RoO2lmKGU+bilyZXR1cm4hMDtmb3IodmFyIGE9bi1lLGk9YTtpPG47aSsrKXt2YXIgbz10aGlzLnN0YWNrW2ldO051bWJlci5pc0ludGVnZXIobyk/dGhpcy5vdXRwdXQucHVzaCgyOCxvPj44JjI1NSwyNTUmbyk6KG89NjU1MzYqb3wwLHRoaXMub3V0cHV0LnB1c2goMjU1LG8+PjI0JjI1NSxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8pKX1yZXR1cm4gdGhpcy5vdXRwdXQucHVzaC5hcHBseSh0aGlzLm91dHB1dCx0KSxyP3RoaXMuc3RhY2suc3BsaWNlKGEsZSk6dGhpcy5zdGFjay5sZW5ndGg9MCwhMX19LGh9KCkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIHQoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGw9ZVtuXTtzW2FdPWxeaT4+OCxpPTUyODQ1KihsK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfWZ1bmN0aW9uIHMocixuLGEpe2lmKG4pe3ZhciBvPXIuZ2V0Qnl0ZXMoKSxzPSEoZShvWzBdKSYmZShvWzFdKSYmZShvWzJdKSYmZShvWzNdKSk7cj1uZXcgaS5TdHJlYW0ocz90KG8sNTU2NjUsNCk6ZnVuY3Rpb24odCxyLG4pe3ZhciBhLGksbz0wfHIscz10Lmxlbmd0aCxsPW5ldyBVaW50OEFycmF5KHM+Pj4xKTtmb3IoYT0wLGk9MDthPHM7YSsrKXt2YXIgYz10W2FdO2lmKGUoYykpe3ZhciB1O2ZvcihhKys7YTxzJiYhZSh1PXRbYV0pOylhKys7aWYoYTxzKXt2YXIgZj1wYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKGMsdSksMTYpO2xbaSsrXT1mXm8+Pjgsbz01Mjg0NSooZitvKSsyMjcxOSY2NTUzNX19fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsLG4saSl9KG8sNTU2NjUsNCkpfXRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWEsdGhpcy5zdHJlYW09cix0aGlzLm5leHRDaGFyKCl9cmV0dXJuIHMucHJvdG90eXBlPXtyZWFkTnVtYmVyQXJyYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFRva2VuKCk7Zm9yKHZhciBlPVtdOzspe3ZhciB0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dHx8Il0iPT09dHx8In0iPT09dClicmVhaztlLnB1c2gocGFyc2VGbG9hdCh0fHwwKSl9cmV0dXJuIGV9LHJlYWROdW1iZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9LHJlYWRJbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIDB8cGFyc2VJbnQoZXx8MCwxMCl9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuInRydWUiPT09dGhpcy5nZXRUb2tlbigpPzE6MH0sbmV4dENoYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9LGdldFRva2VuOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjs7KXtpZigtMT09PXQpcmV0dXJuIG51bGw7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1NwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1pZihyKHQpKXJldHVybiB0aGlzLm5leHRDaGFyKCksU3RyaW5nLmZyb21DaGFyQ29kZSh0KTt2YXIgYT0iIjtkb3thKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKHQ+PTAmJiEoMCxuLmlzU3BhY2UpKHQpJiYhcih0KSk7cmV0dXJuIGF9LHJlYWRDaGFyU3RyaW5nczpmdW5jdGlvbihlLHIpe3JldHVybi0xPT09cj9lOnQoZSw0MzMwLHIpfSxleHRyYWN0Rm9udFByb2dyYW06ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PVtdLHI9W10sbj1PYmplY3QuY3JlYXRlKG51bGwpO24ubGVuSVY9NDtmb3IodmFyIGEsaSxzLGwsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTpufX07bnVsbCE9PShhPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWEpc3dpdGNoKGE9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oYT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWE7KWlmKCIvIj09PWEpe3ZhciBmPXRoaXMuZ2V0VG9rZW4oKTtpPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPWk+MD9lLmdldEJ5dGVzKGkpOm5ldyBVaW50OEFycmF5KDApLGw9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWLGM9dGhpcy5yZWFkQ2hhclN0cmluZ3MocyxsKSx0aGlzLm5leHRDaGFyKCksIm5vYWNjZXNzIj09PShhPXRoaXMuZ2V0VG9rZW4oKSkmJnRoaXMuZ2V0VG9rZW4oKSxyLnB1c2goe2dseXBoOmYsZW5jb2RlZDpjfSl9YnJlYWs7Y2FzZSJTdWJycyI6Zm9yKHRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKTsiZHVwIj09PXRoaXMuZ2V0VG9rZW4oKTspe3ZhciBoPXRoaXMucmVhZEludCgpO2k9dGhpcy5yZWFkSW50KCksdGhpcy5nZXRUb2tlbigpLHM9aT4wP2UuZ2V0Qnl0ZXMoaSk6bmV3IFVpbnQ4QXJyYXkoMCksbD11LnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVYsYz10aGlzLnJlYWRDaGFyU3RyaW5ncyhzLGwpLHRoaXMubmV4dENoYXIoKSwibm9hY2Nlc3MiPT09KGE9dGhpcy5nZXRUb2tlbigpKSYmdGhpcy5nZXRUb2tlbigpLHRbaF09Y31icmVhaztjYXNlIkJsdWVWYWx1ZXMiOmNhc2UiT3RoZXJCbHVlcyI6Y2FzZSJGYW1pbHlCbHVlcyI6Y2FzZSJGYW1pbHlPdGhlckJsdWVzIjp2YXIgZD10aGlzLnJlYWROdW1iZXJBcnJheSgpO2QubGVuZ3RoPjAmJmQubGVuZ3RoO2JyZWFrO2Nhc2UiU3RlbVNuYXBIIjpjYXNlIlN0ZW1TbmFwViI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2FdPXRoaXMucmVhZE51bWJlckFycmF5KCk7YnJlYWs7Y2FzZSJTdGRIVyI6Y2FzZSJTdGRWVyI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2FdPXRoaXMucmVhZE51bWJlckFycmF5KClbMF07YnJlYWs7Y2FzZSJCbHVlU2hpZnQiOmNhc2UibGVuSVYiOmNhc2UiQmx1ZUZ1enoiOmNhc2UiQmx1ZVNjYWxlIjpjYXNlIkxhbmd1YWdlR3JvdXAiOmNhc2UiRXhwYW5zaW9uRmFjdG9yIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbYV09dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJGb3JjZUJvbGQiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVthXT10aGlzLnJlYWRCb29sZWFuKCl9Zm9yKHZhciBwPTA7cDxyLmxlbmd0aDtwKyspe2Y9cltwXS5nbHlwaCxjPXJbcF0uZW5jb2RlZDt2YXIgbT1uZXcgbyxnPW0uY29udmVydChjLHQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSx2PW0ub3V0cHV0O2cmJih2PVsxNF0pLHUuY2hhcnN0cmluZ3MucHVzaCh7Z2x5cGhOYW1lOmYsY2hhcnN0cmluZzp2LHdpZHRoOm0ud2lkdGgsbHNiOm0ubHNiLHNlYWM6bS5zZWFjfSl9cmV0dXJuIHV9LGV4dHJhY3RGb250SGVhZGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgbixpPXRoaXMuZ2V0VG9rZW4oKTtpZigvXlxkKyQvLnRlc3QoaSkpe249W107dmFyIG89MHxwYXJzZUludChpLDEwKTt0aGlzLmdldFRva2VuKCk7Zm9yKHZhciBzPTA7czxvO3MrKyl7Zm9yKHQ9dGhpcy5nZXRUb2tlbigpOyJkdXAiIT09dCYmImRlZiIhPT10OylpZihudWxsPT09KHQ9dGhpcy5nZXRUb2tlbigpKSlyZXR1cm47aWYoImRlZiI9PT10KWJyZWFrO3ZhciBsPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTt2YXIgYz10aGlzLmdldFRva2VuKCk7bltsXT1jLHRoaXMuZ2V0VG9rZW4oKX19ZWxzZSBuPSgwLGEuZ2V0RW5jb2RpbmcpKGkpO2UuYnVpbHRJbkVuY29kaW5nPW47YnJlYWs7Y2FzZSJGb250QkJveCI6dmFyIHU9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmFzY2VudD1NYXRoLm1heCh1WzNdLHVbMV0pLGUuZGVzY2VudD1NYXRoLm1pbih1WzFdLHVbM10pLGUuYXNjZW50U2NhbGVkPSEwfX19LHN9KCk7dC5UeXBlMVBhcnNlcj1zfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRpbGluZ1BhdHRlcm5JUj1mdW5jdGlvbihlLHQscil7dmFyIGE9dC5nZXRBcnJheSgiTWF0cml4IiksaT1uLlV0aWwubm9ybWFsaXplUmVjdCh0LmdldEFycmF5KCJCQm94IikpLG89dC5nZXQoIlhTdGVwIikscz10LmdldCgiWVN0ZXAiKSxsPXQuZ2V0KCJQYWludFR5cGUiKSxjPXQuZ2V0KCJUaWxpbmdUeXBlIik7aWYoaVsyXS1pWzBdPT0wfHxpWzNdLWlbMV09PTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbIi5jb25jYXQoaSwiXS4iKSk7cmV0dXJuWyJUaWxpbmdQYXR0ZXJuIixyLGUsYSxpLG8scyxsLGNdfSx0LlBhdHRlcm49dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE2OCksaT1yKDE1NSksbz0yLHM9MyxsPTQsYz01LHU9NixmPTcsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIFBhdHRlcm4gY29uc3RydWN0b3IiKX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldFBhdHRlcm46ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuLmdldFN0eWxlOiAiLmNvbmNhdChlKSl9fSxlLnBhcnNlU2hhZGluZz1mdW5jdGlvbihlLHQscixhLGgscCl7dmFyIG09KDAsaS5pc1N0cmVhbSkoZSk/ZS5kaWN0OmUsZz1tLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGcpe2Nhc2UgbzpjYXNlIHM6cmV0dXJuIG5ldyBkLlJhZGlhbEF4aWFsKG0sdCxyLGEscCk7Y2FzZSBsOmNhc2UgYzpjYXNlIHU6Y2FzZSBmOnJldHVybiBuZXcgZC5NZXNoKGUsdCxyLGEscCk7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICIrZyl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuIGguc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm59KSwoMCxuLndhcm4pKGUpLG5ldyBkLkR1bW15fX0sZX0oKTt0LlBhdHRlcm49aDt2YXIgZD17U01BTExfTlVNQkVSOjFlLTZ9O2QuUmFkaWFsQXhpYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGksbyl7dGhpcy5tYXRyaXg9dCx0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSx0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpLHRoaXMudHlwZT0iUGF0dGVybiI7dmFyIGw9ZS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpO2w9YS5Db2xvclNwYWNlLnBhcnNlKGwscixpLG8pLHRoaXMuY3M9bDt2YXIgYz0wLHU9MTtpZihlLmhhcygiRG9tYWluIikpe3ZhciBmPWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2M9ZlswXSx1PWZbMV19dmFyIGg9ITEscD0hMTtpZihlLmhhcygiRXh0ZW5kIikpe3ZhciBtPWUuZ2V0QXJyYXkoIkV4dGVuZCIpO2g9bVswXSxwPW1bMV19aWYoISh0aGlzLnNoYWRpbmdUeXBlIT09c3x8aCYmcCkpe3ZhciBnPXRoaXMuY29vcmRzQXJyWzBdLHY9dGhpcy5jb29yZHNBcnJbMV0seT10aGlzLmNvb3Jkc0FyclsyXSxiPXRoaXMuY29vcmRzQXJyWzNdLHc9dGhpcy5jb29yZHNBcnJbNF0saz10aGlzLmNvb3Jkc0Fycls1XSxTPU1hdGguc3FydCgoZy1iKSooZy1iKSsodi13KSoodi13KSk7eTw9aytTJiZrPD15K1MmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX10aGlzLmV4dGVuZFN0YXJ0PWgsdGhpcy5leHRlbmRFbmQ9cDt2YXIgXz1lLmdldCgiRnVuY3Rpb24iKSx4PW8uY3JlYXRlRnJvbUFycmF5KF8pLEE9dS1jLEM9QS8xMCxQPXRoaXMuY29sb3JTdG9wcz1bXTtpZihjPj11fHxDPD0wKSgwLG4uaW5mbykoIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtlbHNle2Zvcih2YXIgRSxUPW5ldyBGbG9hdDMyQXJyYXkobC5udW1Db21wcyksUj1uZXcgRmxvYXQzMkFycmF5KDEpLE89YztPPD11O08rPUMpe1JbMF09Tyx4KFIsMCxULDApLEU9bC5nZXRSZ2IoVCwwKTt2YXIgST1uLlV0aWwubWFrZUNzc1JnYihFWzBdLEVbMV0sRVsyXSk7UC5wdXNoKFsoTy1jKS9BLEldKX12YXIgRj0idHJhbnNwYXJlbnQiO2UuaGFzKCJCYWNrZ3JvdW5kIikmJihFPWwuZ2V0UmdiKGUuZ2V0KCJCYWNrZ3JvdW5kIiksMCksRj1uLlV0aWwubWFrZUNzc1JnYihFWzBdLEVbMV0sRVsyXSkpLGh8fChQLnVuc2hpZnQoWzAsRl0pLFBbMV1bMF0rPWQuU01BTExfTlVNQkVSKSxwfHwoUFtQLmxlbmd0aC0xXVswXS09ZC5TTUFMTF9OVU1CRVIsUC5wdXNoKFsxLEZdKSksdGhpcy5jb2xvclN0b3BzPVB9fXJldHVybiBlLnByb3RvdHlwZT17Z2V0SVI6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsYSxpLGw9dGhpcy5jb29yZHNBcnIsYz10aGlzLnNoYWRpbmdUeXBlO2M9PT1vPyh0PVtsWzBdLGxbMV1dLHI9W2xbMl0sbFszXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOmM9PT1zPyh0PVtsWzBdLGxbMV1dLHI9W2xbM10sbFs0XV0sYT1sWzJdLGk9bFs1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KGMpKTt2YXIgdT10aGlzLm1hdHJpeDtpZih1JiYodD1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0odCx1KSxyPW4uVXRpbC5hcHBseVRyYW5zZm9ybShyLHUpLGM9PT1zKSl7dmFyIGY9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHUpO2EqPWZbMF0saSo9ZlsxXX1yZXR1cm5bIlJhZGlhbEF4aWFsIixlLHRoaXMuY29sb3JTdG9wcyx0LHIsYSxpXX19LGV9KCksZC5NZXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyZWFtPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciByPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KHIpO3ZhciBuPXQuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9dC5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkobik6dGhpcy50bXBDb21wc0J1Zn1lLnByb3RvdHlwZT17Z2V0IGhhc0RhdGEoKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfSxyZWFkQml0czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ1ZmZlcixyPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDMyPT09ZSl7aWYoMD09PXIpcmV0dXJuKHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKT4+PjA7dD10PDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7dmFyIG49dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLmJ1ZmZlcj1uJigxPDxyKS0xLCh0PDw4LXJ8KDI1NSZuKT4+cik+Pj4wfWlmKDg9PT1lJiYwPT09cilyZXR1cm4gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2Zvcig7cjxlOyl0PXQ8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpLHIrPTg7cmV0dXJuIHItPWUsdGhpcy5idWZmZXJMZW5ndGg9cix0aGlzLmJ1ZmZlcj10JigxPDxyKS0xLHQ+PnJ9LGFsaWduOmZ1bmN0aW9uKCl7dGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wfSxyZWFkRmxhZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9LHJlYWRDb29yZGluYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlLHQ9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMucmVhZEJpdHMoZSksbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9ZTwzMj8xLygoMTw8ZSktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtyZXR1cm5bdCphKihuWzFdLW5bMF0pK25bMF0sciphKihuWzNdLW5bMl0pK25bMl1dfSxyZWFkQ29tcG9uZW50czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRleHQubnVtQ29tcHMsdD10aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudCxyPXQ8MzI/MS8oKDE8PHQpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTAsbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9dGhpcy50bXBDb21wc0J1ZixpPTAsbz00O2k8ZTtpKyssbys9Mil7dmFyIHM9dGhpcy5yZWFkQml0cyh0KTthW2ldPXMqcioobltvKzFdLW5bb10pK25bb119dmFyIGw9dGhpcy50bXBDc0NvbXBzQnVmO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4oYSwwLGwsMCksdGhpcy5jb250ZXh0LmNvbG9yU3BhY2UuZ2V0UmdiKGwsMCl9fTt2YXIgdCxyPSh0PVtdLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfHwodFtlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8PWU7cisrKXt2YXIgbj1yL2UsYT0xLW47dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW2EqYSphLDMqbiphKmEsMypuKm4qYSxuKm4qbl0pKX1yZXR1cm4gdH0oZSkpLHRbZV19KTtmdW5jdGlvbiBvKGUsdCl7dmFyIGE9ZS5maWd1cmVzW3RdOygwLG4uYXNzZXJ0KSgicGF0Y2giPT09YS50eXBlLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7dmFyIGk9ZS5jb29yZHMsbz1lLmNvbG9ycyxzPWEuY29vcmRzLGw9YS5jb2xvcnMsYz1NYXRoLm1pbihpW3NbMF1dWzBdLGlbc1szXV1bMF0saVtzWzEyXV1bMF0saVtzWzE1XV1bMF0pLHU9TWF0aC5taW4oaVtzWzBdXVsxXSxpW3NbM11dWzFdLGlbc1sxMl1dWzFdLGlbc1sxNV1dWzFdKSxmPU1hdGgubWF4KGlbc1swXV1bMF0saVtzWzNdXVswXSxpW3NbMTJdXVswXSxpW3NbMTVdXVswXSksaD1NYXRoLm1heChpW3NbMF1dWzFdLGlbc1szXV1bMV0saVtzWzEyXV1bMV0saVtzWzE1XV1bMV0pLGQ9TWF0aC5jZWlsKDIwKihmLWMpLyhlLmJvdW5kc1syXS1lLmJvdW5kc1swXSkpO2Q9TWF0aC5tYXgoMyxNYXRoLm1pbigyMCxkKSk7dmFyIHA9TWF0aC5jZWlsKDIwKihoLXUpLyhlLmJvdW5kc1szXS1lLmJvdW5kc1sxXSkpO3A9TWF0aC5tYXgoMyxNYXRoLm1pbigyMCxwKSk7Zm9yKHZhciBtPWQrMSxnPW5ldyBJbnQzMkFycmF5KChwKzEpKm0pLHY9bmV3IEludDMyQXJyYXkoKHArMSkqbSkseT0wLGI9bmV3IFVpbnQ4QXJyYXkoMyksdz1uZXcgVWludDhBcnJheSgzKSxrPW9bbFswXV0sUz1vW2xbMV1dLF89b1tsWzJdXSx4PW9bbFszXV0sQT1yKHApLEM9cihkKSxQPTA7UDw9cDtQKyspe2JbMF09KGtbMF0qKHAtUCkrX1swXSpQKS9wfDAsYlsxXT0oa1sxXSoocC1QKStfWzFdKlApL3B8MCxiWzJdPShrWzJdKihwLVApK19bMl0qUCkvcHwwLHdbMF09KFNbMF0qKHAtUCkreFswXSpQKS9wfDAsd1sxXT0oU1sxXSoocC1QKSt4WzFdKlApL3B8MCx3WzJdPShTWzJdKihwLVApK3hbMl0qUCkvcHwwO2Zvcih2YXIgRT0wO0U8PWQ7RSsrLHkrKylpZigwIT09UCYmUCE9PXB8fDAhPT1FJiZFIT09ZCl7Zm9yKHZhciBUPTAsUj0wLE89MCxJPTA7STw9MztJKyspZm9yKHZhciBGPTA7Rjw9MztGKyssTysrKXt2YXIgTD1BW1BdW0ldKkNbRV1bRl07VCs9aVtzW09dXVswXSpMLFIrPWlbc1tPXV1bMV0qTH1nW3ldPWkubGVuZ3RoLGkucHVzaChbVCxSXSksdlt5XT1vLmxlbmd0aDt2YXIgRD1uZXcgVWludDhBcnJheSgzKTtEWzBdPShiWzBdKihkLUUpK3dbMF0qRSkvZHwwLERbMV09KGJbMV0qKGQtRSkrd1sxXSpFKS9kfDAsRFsyXT0oYlsyXSooZC1FKSt3WzJdKkUpL2R8MCxvLnB1c2goRCl9fWdbMF09c1swXSx2WzBdPWxbMF0sZ1tkXT1zWzNdLHZbZF09bFsxXSxnW20qcF09c1sxMl0sdlttKnBdPWxbMl0sZ1ttKnArZF09c1sxNV0sdlttKnArZF09bFszXSxlLmZpZ3VyZXNbdF09e3R5cGU6ImxhdHRpY2UiLGNvb3JkczpnLGNvbG9yczp2LHZlcnRpY2VzUGVyUm93Om19fWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PWUuY29vcmRzWzBdWzBdLHI9ZS5jb29yZHNbMF1bMV0sbj10LGE9cixpPTEsbz1lLmNvb3Jkcy5sZW5ndGg7aTxvO2krKyl7dmFyIHM9ZS5jb29yZHNbaV1bMF0sbD1lLmNvb3Jkc1tpXVsxXTt0PXQ+cz9zOnQscj1yPmw/bDpyLG49bjxzP3M6bixhPWE8bD9sOmF9ZS5ib3VuZHM9W3QscixuLGFdfWZ1bmN0aW9uIGgodCxyLGgsZCxwKXtpZighKDAsaS5pc1N0cmVhbSkodCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTt2YXIgbT10LmRpY3Q7dGhpcy5tYXRyaXg9cix0aGlzLnNoYWRpbmdUeXBlPW0uZ2V0KCJTaGFkaW5nVHlwZSIpLHRoaXMudHlwZT0iUGF0dGVybiIsdGhpcy5iYm94PW0uZ2V0QXJyYXkoIkJCb3giKTt2YXIgZz1tLmdldCgiQ29sb3JTcGFjZSIsIkNTIik7Zz1hLkNvbG9yU3BhY2UucGFyc2UoZyxoLGQscCksdGhpcy5jcz1nLHRoaXMuYmFja2dyb3VuZD1tLmhhcygiQmFja2dyb3VuZCIpP2cuZ2V0UmdiKG0uZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgdj1tLmdldCgiRnVuY3Rpb24iKSx5PXY/cC5jcmVhdGVGcm9tQXJyYXkodik6bnVsbDt0aGlzLmNvb3Jkcz1bXSx0aGlzLmNvbG9ycz1bXSx0aGlzLmZpZ3VyZXM9W107dmFyIGI9bmV3IGUodCx7Yml0c1BlckNvb3JkaW5hdGU6bS5nZXQoIkJpdHNQZXJDb29yZGluYXRlIiksYml0c1BlckNvbXBvbmVudDptLmdldCgiQml0c1BlckNvbXBvbmVudCIpLGJpdHNQZXJGbGFnOm0uZ2V0KCJCaXRzUGVyRmxhZyIpLGRlY29kZTptLmdldEFycmF5KCJEZWNvZGUiKSxjb2xvckZuOnksY29sb3JTcGFjZTpnLG51bUNvbXBzOnk/MTpnLm51bUNvbXBzfSksdz0hMTtzd2l0Y2godGhpcy5zaGFkaW5nVHlwZSl7Y2FzZSBsOiFmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkcyxhPWUuY29sb3JzLGk9W10sbz1bXSxzPTA7dC5oYXNEYXRhOyl7dmFyIGw9dC5yZWFkRmxhZygpLGM9dC5yZWFkQ29vcmRpbmF0ZSgpLHU9dC5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PWwmJmw8PTIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobCl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6by5wdXNoKG9bby5sZW5ndGgtMl0sb1tvLmxlbmd0aC0xXSkscz0xO2JyZWFrO2Nhc2UgMjpvLnB1c2gob1tvLmxlbmd0aC0zXSxvW28ubGVuZ3RoLTFdKSxzPTF9aS5wdXNoKGwpfW8ucHVzaChyLmxlbmd0aCksci5wdXNoKGMpLGEucHVzaCh1KSxzLS0sdC5hbGlnbigpfWUuZmlndXJlcy5wdXNoKHt0eXBlOiJ0cmlhbmdsZXMiLGNvb3JkczpuZXcgSW50MzJBcnJheShvKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX0odGhpcyxiKTticmVhaztjYXNlIGM6dmFyIGs9MHxtLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihrPDIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTshZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1lLmNvb3JkcyxhPWUuY29sb3JzLGk9W107dC5oYXNEYXRhOyl7dmFyIG89dC5yZWFkQ29vcmRpbmF0ZSgpLHM9dC5yZWFkQ29tcG9uZW50cygpO2kucHVzaChuLmxlbmd0aCksbi5wdXNoKG8pLGEucHVzaChzKX1lLmZpZ3VyZXMucHVzaCh7dHlwZToibGF0dGljZSIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKSx2ZXJ0aWNlc1BlclJvdzpyfSl9KHRoaXMsYixrKTticmVhaztjYXNlIHU6IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRzLGE9ZS5jb2xvcnMsaT1uZXcgSW50MzJBcnJheSgxNiksbz1uZXcgSW50MzJBcnJheSg0KTt0Lmhhc0RhdGE7KXt2YXIgcyxsLGM9dC5yZWFkRmxhZygpO2lmKCEoMDw9YyYmYzw9MykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTYgZmxhZyIpO3ZhciB1PXIubGVuZ3RoO2ZvcihzPTAsbD0wIT09Yz84OjEyO3M8bDtzKyspci5wdXNoKHQucmVhZENvb3JkaW5hdGUoKSk7dmFyIGYsaCxkLHAsbT1hLmxlbmd0aDtmb3Iocz0wLGw9MCE9PWM/Mjo0O3M8bDtzKyspYS5wdXNoKHQucmVhZENvbXBvbmVudHMoKSk7c3dpdGNoKGMpe2Nhc2UgMDppWzEyXT11KzMsaVsxM109dSs0LGlbMTRdPXUrNSxpWzE1XT11KzYsaVs4XT11KzIsaVsxMV09dSs3LGlbNF09dSsxLGlbN109dSs4LGlbMF09dSxpWzFdPXUrMTEsaVsyXT11KzEwLGlbM109dSs5LG9bMl09bSsxLG9bM109bSsyLG9bMF09bSxvWzFdPW0rMzticmVhaztjYXNlIDE6Zj1pWzEyXSxoPWlbMTNdLGQ9aVsxNF0scD1pWzE1XSxpWzEyXT1wLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09ZCxpWzExXT11KzMsaVs0XT1oLGlbN109dSs0LGlbMF09ZixpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxmPW9bMl0saD1vWzNdLG9bMl09aCxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMjpmPWlbMTVdLGg9aVsxMV0saVsxMl09aVszXSxpWzEzXT11KzAsaVsxNF09dSsxLGlbMTVdPXUrMixpWzhdPWlbN10saVsxMV09dSszLGlbNF09aCxpWzddPXUrNCxpWzBdPWYsaVsxXT11KzcsaVsyXT11KzYsaVszXT11KzUsZj1vWzNdLG9bMl09b1sxXSxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMzppWzEyXT1pWzBdLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09aVsxXSxpWzExXT11KzMsaVs0XT1pWzJdLGlbN109dSs0LGlbMF09aVszXSxpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxvWzJdPW9bMF0sb1szXT1tLG9bMF09b1sxXSxvWzFdPW0rMX1pWzVdPXIubGVuZ3RoLHIucHVzaChbKC00KnJbaVswXV1bMF0tcltpWzE1XV1bMF0rNioocltpWzRdXVswXStyW2lbMV1dWzBdKS0yKihyW2lbMTJdXVswXStyW2lbM11dWzBdKSszKihyW2lbMTNdXVswXStyW2lbN11dWzBdKSkvOSwoLTQqcltpWzBdXVsxXS1yW2lbMTVdXVsxXSs2KihyW2lbNF1dWzFdK3JbaVsxXV1bMV0pLTIqKHJbaVsxMl1dWzFdK3JbaVszXV1bMV0pKzMqKHJbaVsxM11dWzFdK3JbaVs3XV1bMV0pKS85XSksaVs2XT1yLmxlbmd0aCxyLnB1c2goWygtNCpyW2lbM11dWzBdLXJbaVsxMl1dWzBdKzYqKHJbaVsyXV1bMF0rcltpWzddXVswXSktMioocltpWzBdXVswXStyW2lbMTVdXVswXSkrMyoocltpWzRdXVswXStyW2lbMTRdXVswXSkpLzksKC00KnJbaVszXV1bMV0tcltpWzEyXV1bMV0rNioocltpWzJdXVsxXStyW2lbN11dWzFdKS0yKihyW2lbMF1dWzFdK3JbaVsxNV1dWzFdKSszKihyW2lbNF1dWzFdK3JbaVsxNF1dWzFdKSkvOV0pLGlbOV09ci5sZW5ndGgsci5wdXNoKFsoLTQqcltpWzEyXV1bMF0tcltpWzNdXVswXSs2KihyW2lbOF1dWzBdK3JbaVsxM11dWzBdKS0yKihyW2lbMF1dWzBdK3JbaVsxNV1dWzBdKSszKihyW2lbMTFdXVswXStyW2lbMV1dWzBdKSkvOSwoLTQqcltpWzEyXV1bMV0tcltpWzNdXVsxXSs2KihyW2lbOF1dWzFdK3JbaVsxM11dWzFdKS0yKihyW2lbMF1dWzFdK3JbaVsxNV1dWzFdKSszKihyW2lbMTFdXVsxXStyW2lbMV1dWzFdKSkvOV0pLGlbMTBdPXIubGVuZ3RoLHIucHVzaChbKC00KnJbaVsxNV1dWzBdLXJbaVswXV1bMF0rNioocltpWzExXV1bMF0rcltpWzE0XV1bMF0pLTIqKHJbaVsxMl1dWzBdK3JbaVszXV1bMF0pKzMqKHJbaVsyXV1bMF0rcltpWzhdXVswXSkpLzksKC00KnJbaVsxNV1dWzFdLXJbaVswXV1bMV0rNioocltpWzExXV1bMV0rcltpWzE0XV1bMV0pLTIqKHJbaVsxMl1dWzFdK3JbaVszXV1bMV0pKzMqKHJbaVsyXV1bMV0rcltpWzhdXVsxXSkpLzldKSxlLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX19KHRoaXMsYiksdz0hMDticmVhaztjYXNlIGY6IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRzLGE9ZS5jb2xvcnMsaT1uZXcgSW50MzJBcnJheSgxNiksbz1uZXcgSW50MzJBcnJheSg0KTt0Lmhhc0RhdGE7KXt2YXIgcyxsLGM9dC5yZWFkRmxhZygpO2lmKCEoMDw9YyYmYzw9MykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO3ZhciB1PXIubGVuZ3RoO2ZvcihzPTAsbD0wIT09Yz8xMjoxNjtzPGw7cysrKXIucHVzaCh0LnJlYWRDb29yZGluYXRlKCkpO3ZhciBmLGgsZCxwLG09YS5sZW5ndGg7Zm9yKHM9MCxsPTAhPT1jPzI6NDtzPGw7cysrKWEucHVzaCh0LnJlYWRDb21wb25lbnRzKCkpO3N3aXRjaChjKXtjYXNlIDA6aVsxMl09dSszLGlbMTNdPXUrNCxpWzE0XT11KzUsaVsxNV09dSs2LGlbOF09dSsyLGlbOV09dSsxMyxpWzEwXT11KzE0LGlbMTFdPXUrNyxpWzRdPXUrMSxpWzVdPXUrMTIsaVs2XT11KzE1LGlbN109dSs4LGlbMF09dSxpWzFdPXUrMTEsaVsyXT11KzEwLGlbM109dSs5LG9bMl09bSsxLG9bM109bSsyLG9bMF09bSxvWzFdPW0rMzticmVhaztjYXNlIDE6Zj1pWzEyXSxoPWlbMTNdLGQ9aVsxNF0scD1pWzE1XSxpWzEyXT1wLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09ZCxpWzldPXUrOSxpWzEwXT11KzEwLGlbMTFdPXUrMyxpWzRdPWgsaVs1XT11KzgsaVs2XT11KzExLGlbN109dSs0LGlbMF09ZixpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxmPW9bMl0saD1vWzNdLG9bMl09aCxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMjpmPWlbMTVdLGg9aVsxMV0saVsxMl09aVszXSxpWzEzXT11KzAsaVsxNF09dSsxLGlbMTVdPXUrMixpWzhdPWlbN10saVs5XT11KzksaVsxMF09dSsxMCxpWzExXT11KzMsaVs0XT1oLGlbNV09dSs4LGlbNl09dSsxMSxpWzddPXUrNCxpWzBdPWYsaVsxXT11KzcsaVsyXT11KzYsaVszXT11KzUsZj1vWzNdLG9bMl09b1sxXSxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMzppWzEyXT1pWzBdLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09aVsxXSxpWzldPXUrOSxpWzEwXT11KzEwLGlbMTFdPXUrMyxpWzRdPWlbMl0saVs1XT11KzgsaVs2XT11KzExLGlbN109dSs0LGlbMF09aVszXSxpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxvWzJdPW9bMF0sb1szXT1tLG9bMF09b1sxXSxvWzFdPW0rMX1lLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX19KHRoaXMsYiksdz0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYodyl7cyh0aGlzKTtmb3IodmFyIFM9MCxfPXRoaXMuZmlndXJlcy5sZW5ndGg7UzxfO1MrKylvKHRoaXMsUyl9cyh0aGlzKSxmdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpPWUuY29vcmRzLG89bmV3IEZsb2F0MzJBcnJheSgyKmkubGVuZ3RoKTtmb3IodD0wLG49MCxyPWkubGVuZ3RoO3Q8cjt0Kyspe3ZhciBzPWlbdF07b1tuKytdPXNbMF0sb1tuKytdPXNbMV19ZS5jb29yZHM9bzt2YXIgbD1lLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqbC5sZW5ndGgpO2Zvcih0PTAsbj0wLHI9bC5sZW5ndGg7dDxyO3QrKyl7dmFyIHU9bFt0XTtjW24rK109dVswXSxjW24rK109dVsxXSxjW24rK109dVsyXX1lLmNvbG9ycz1jO3ZhciBmPWUuZmlndXJlcztmb3IodD0wLHI9Zi5sZW5ndGg7dDxyO3QrKyl7dmFyIGg9Zlt0XSxkPWguY29vcmRzLHA9aC5jb2xvcnM7Zm9yKG49MCxhPWQubGVuZ3RoO248YTtuKyspZFtuXSo9MixwW25dKj0zfX0odGhpcyl9cmV0dXJuIGgucHJvdG90eXBlPXtnZXRJUjpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5tYXRyaXgsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fSxofSgpLGQuRHVtbXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPSJQYXR0ZXJuIn1yZXR1cm4gZS5wcm90b3R5cGU9e2dldElSOmZ1bmN0aW9uKCl7cmV0dXJuWyJEdW1teSJdfX0sZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iaWRpPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcD0hMCxtPWUubGVuZ3RoO2lmKDA9PT1tfHxyKXJldHVybiBmKGUscCxyKTtoLmxlbmd0aD1tLGQubGVuZ3RoPW07dmFyIGcsdix5PTA7Zm9yKGc9MDtnPG07KytnKXtoW2ddPWUuY2hhckF0KGcpO3ZhciBiPWUuY2hhckNvZGVBdChnKSx3PSJMIjtiPD0yNTU/dz1hW2JdOjE0MjQ8PWImJmI8PTE1MjQ/dz0iUiI6MTUzNjw9YiYmYjw9MTc5MT8odz1pWzI1NSZiXSl8fCgwLG4ud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIitiLnRvU3RyaW5nKDE2KSk6MTc5Mjw9YiYmYjw9MjIyMCYmKHc9IkFMIiksIlIiIT09dyYmIkFMIiE9PXcmJiJBTiIhPT13fHx5KyssZFtnXT13fWlmKDA9PT15KXJldHVybiBmKGUscD0hMCk7LTE9PT10JiYoeS9tPC4zPyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKGc9MDtnPG07KytnKWtbZ109dDt2YXIgUyxfPW8odCk/IlIiOiJMIix4PV8sQT14LEM9eDtmb3IoZz0wO2c8bTsrK2cpIk5TTSI9PT1kW2ddP2RbZ109QzpDPWRbZ107Zm9yKEM9eCxnPTA7ZzxtOysrZykiRU4iPT09KFM9ZFtnXSk/ZFtnXT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2ZvcihnPTA7ZzxtOysrZykiQUwiPT09KFM9ZFtnXSkmJihkW2ddPSJSIik7Zm9yKGc9MTtnPG0tMTsrK2cpIkVTIj09PWRbZ10mJiJFTiI9PT1kW2ctMV0mJiJFTiI9PT1kW2crMV0mJihkW2ddPSJFTiIpLCJDUyIhPT1kW2ddfHwiRU4iIT09ZFtnLTFdJiYiQU4iIT09ZFtnLTFdfHxkW2crMV0hPT1kW2ctMV18fChkW2ddPWRbZy0xXSk7Zm9yKGc9MDtnPG07KytnKWlmKCJFTiI9PT1kW2ddKXt2YXIgUDtmb3IoUD1nLTE7UD49MCYmIkVUIj09PWRbUF07LS1QKWRbUF09IkVOIjtmb3IoUD1nKzE7UDxtJiYiRVQiPT09ZFtQXTsrK1ApZFtQXT0iRU4ifWZvcihnPTA7ZzxtOysrZykiV1MiIT09KFM9ZFtnXSkmJiJFUyIhPT1TJiYiRVQiIT09UyYmIkNTIiE9PVN8fChkW2ddPSJPTiIpO2ZvcihDPXgsZz0wO2c8bTsrK2cpIkVOIj09PShTPWRbZ10pP2RbZ109IkwiPT09Qz8iTCI6IkVOIjoiUiIhPT1TJiYiTCIhPT1TfHwoQz1TKTtmb3IoZz0wO2c8bTsrK2cpaWYoIk9OIj09PWRbZ10pe3ZhciBFPWwoZCxnKzEsIk9OIiksVD14O2c+MCYmKFQ9ZFtnLTFdKTt2YXIgUj1BO0UrMTxtJiYoUj1kW0UrMV0pLCJMIiE9PVQmJihUPSJSIiksIkwiIT09UiYmKFI9IlIiKSxUPT09UiYmYyhkLGcsRSxUKSxnPUUtMX1mb3IoZz0wO2c8bTsrK2cpIk9OIj09PWRbZ10mJihkW2ddPV8pO2ZvcihnPTA7ZzxtOysrZylTPWRbZ10scyhrW2ddKT8iUiI9PT1TP2tbZ10rPTE6IkFOIiE9PVMmJiJFTiIhPT1TfHwoa1tnXSs9Mik6IkwiIT09UyYmIkFOIiE9PVMmJiJFTiIhPT1TfHwoa1tnXSs9MSk7dmFyIE8sST0tMSxGPTk5O2ZvcihnPTAsdj1rLmxlbmd0aDtnPHY7KytnKU89a1tnXSxJPE8mJihJPU8pLEY+TyYmbyhPKSYmKEY9Tyk7Zm9yKE89STtPPj1GOy0tTyl7dmFyIEw9LTE7Zm9yKGc9MCx2PWsubGVuZ3RoO2c8djsrK2cpa1tnXTxPP0w+PTAmJih1KGgsTCxnKSxMPS0xKTpMPDAmJihMPWcpO0w+PTAmJnUoaCxMLGsubGVuZ3RoKX1mb3IoZz0wLHY9aC5sZW5ndGg7Zzx2OysrZyl7dmFyIEQ9aFtnXTsiPCIhPT1EJiYiPiIhPT1EfHwoaFtnXT0iIil9cmV0dXJuIGYoaC5qb2luKCIiKSxwKX07dmFyIG49cig2KSxhPVsiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiUyIsIkIiLCJTIiwiV1MiLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCIiwiQiIsIlMiLCJXUyIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiRVMiLCJDUyIsIkVTIiwiQ1MiLCJDUyIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQ1MiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkNTIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJCTiIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRU4iLCJFTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJPTiIsIkVOIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiXSxpPVsiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiT04iLCJPTiIsIkFMIiwiRVQiLCJFVCIsIkFMIiwiQ1MiLCJBTCIsIk9OIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJFVCIsIkFOIiwiQU4iLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCJdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIDAhPSgxJmUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDA9PSgxJmUpfWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybntzdHI6ZSxkaXI6cj8idHRiIjp0PyJsdHIiOiJydGwifX12YXIgaD1bXSxkPVtdfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dm9pZCAwO3ZhciBuPXIoNiksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCJvYmplY3QiIT09byhlKSlyZXR1cm4hMTtpZigoMCxhLmlzRGljdCkoZSkpdD1lO2Vsc2V7aWYoISgwLGEuaXNTdHJlYW0pKGUpKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9LHQuUG9zdFNjcmlwdENvbXBpbGVyPXQuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KSxpPXIoMTg2KTtmdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBsPXtnZXQgdmFsdWUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmFsdWUiLCgwLG4uaXNFdmFsU3VwcG9ydGVkKSgpKX19LGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnhyZWY9cix0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWF9dmFyIHQscixuO3JldHVybiB0PWUsKHI9W3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGYucGFyc2Uoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbjplfSl9fSx7a2V5OiJjcmVhdGVGcm9tQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplfSl9fV0pJiZzKHQucHJvdG90eXBlLHIpLG4mJnModCxuKSxlfSgpO2Z1bmN0aW9uIHUoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MDtyPHQ7cisrKWlmKCJudW1iZXIiIT10eXBlb2YgZVtyXSl7Zm9yKHZhciBuPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKyluW2FdPStlW2FdO3JldHVybiBufXJldHVybiBlfXQuUERGRnVuY3Rpb25GYWN0b3J5PWM7dmFyIGY9e2dldFNhbXBsZUFycmF5OmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0xO2ZvcihhPTAsaT1lLmxlbmd0aDthPGk7YSsrKW8qPWVbYV07byo9dDt2YXIgcz1uZXcgQXJyYXkobyksbD0wLGM9MCx1PTEvKE1hdGgucG93KDIsciktMSksZj1uLmdldEJ5dGVzKChvKnIrNykvOCksaD0wO2ZvcihhPTA7YTxvO2ErKyl7Zm9yKDtsPHI7KWM8PD04LGN8PWZbaCsrXSxsKz04O2wtPXIsc1thXT0oYz4+bCkqdSxjJj0oMTw8bCktMX1yZXR1cm4gc30sZ2V0SVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsYT1lLmZuLGk9YS5kaWN0O2l8fChpPWEpO3ZhciBvPVt0aGlzLmNvbnN0cnVjdFNhbXBsZWQsbnVsbCx0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCx0aGlzLmNvbnN0cnVjdFN0aWNoZWQsdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0XVtpLmdldCgiRnVuY3Rpb25UeXBlIildO2lmKCFvKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGUgb2YgZnVuY3Rpb24iKTtyZXR1cm4gby5jYWxsKHRoaXMse3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjphLGRpY3Q6aX0pfSxmcm9tSVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsbj1lLklSO3N3aXRjaChuWzBdKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZEZyb21JUih7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLElSOm59KTtjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6bn0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6bn0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUih7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLElSOm59KX19LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixhPXRoaXMuZ2V0SVIoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7cmV0dXJuIHRoaXMuZnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6YX0pfSxwYXJzZUFycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbk9iajtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gdGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm59KTtmb3IodmFyIGE9W10saT0wLG89bi5sZW5ndGg7aTxvO2krKylhLnB1c2godGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOnQuZmV0Y2hJZlJlZihuW2ldKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTAsbz1hLmxlbmd0aDtpPG87aSsrKWFbaV0oZSx0LHIsbitpKX19LGNvbnN0cnVjdFNhbXBsZWQ6ZnVuY3Rpb24oZSl7ZS54cmVmLGUuaXNFdmFsU3VwcG9ydGVkO3ZhciB0PWUuZm4scj1lLmRpY3Q7ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxuPTAsYT0wO2E8dDthKz0yKXJbbl09W2VbYV0sZVthKzFdXSwrK247cmV0dXJuIHJ9dmFyIGk9dShyLmdldEFycmF5KCJEb21haW4iKSksbz11KHIuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFpfHwhbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7dmFyIHM9aS5sZW5ndGgvMixsPW8ubGVuZ3RoLzI7aT1hKGkpLG89YShvKTt2YXIgYz11KHIuZ2V0QXJyYXkoIlNpemUiKSksZj1yLmdldCgiQml0c1BlclNhbXBsZSIpLGg9ci5nZXQoIk9yZGVyIil8fDE7MSE9PWgmJigwLG4uaW5mbykoIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK2gpO3ZhciBkPXUoci5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGQpZD1hKGQpO2Vsc2V7ZD1bXTtmb3IodmFyIHA9MDtwPHM7KytwKWQucHVzaChbMCxjW3BdLTFdKX12YXIgbT11KHIuZ2V0QXJyYXkoIkRlY29kZSIpKTtyZXR1cm5bMCxzLGksZCxtPW0/YShtKTpvLHRoaXMuZ2V0U2FtcGxlQXJyYXkoYyxsLGYsdCksYyxsLE1hdGgucG93KDIsZiktMSxvXX0sY29uc3RydWN0U2FtcGxlZEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5JUjtmdW5jdGlvbiByKGUsdCxyLG4sYSl7cmV0dXJuIG4rKGEtbikvKHItdCkqKGUtdCl9cmV0dXJuIGZ1bmN0aW9uKGUsbixhLGkpe3ZhciBvLHMsbD10WzFdLGM9dFsyXSx1PXRbM10sZj10WzRdLGg9dFs1XSxkPXRbNl0scD10WzddLG09dFs5XSxnPTE8PGwsdj1uZXcgRmxvYXQ2NEFycmF5KGcpLHk9bmV3IFVpbnQzMkFycmF5KGcpO2ZvcihzPTA7czxnO3MrKyl2W3NdPTE7dmFyIGI9cCx3PTE7Zm9yKG89MDtvPGw7KytvKXt2YXIgaz1jW29dWzBdLFM9Y1tvXVsxXSxfPXIoTWF0aC5taW4oTWF0aC5tYXgoZVtuK29dLGspLFMpLGssUyx1W29dWzBdLHVbb11bMV0pLHg9ZFtvXSxBPShfPU1hdGgubWluKE1hdGgubWF4KF8sMCkseC0xKSk8eC0xP01hdGguZmxvb3IoXyk6Xy0xLEM9QSsxLV8sUD1fLUEsRT1BKmIsVD1FK2I7Zm9yKHM9MDtzPGc7cysrKXMmdz8odltzXSo9UCx5W3NdKz1UKToodltzXSo9Qyx5W3NdKz1FKTtiKj14LHc8PD0xfWZvcihzPTA7czxwOysrcyl7dmFyIFI9MDtmb3Iobz0wO288ZztvKyspUis9aFt5W29dK3NdKnZbb107Uj1yKFIsMCwxLGZbc11bMF0sZltzXVsxXSksYVtpK3NdPU1hdGgubWluKE1hdGgubWF4KFIsbVtzXVswXSksbVtzXVsxXSl9fX0sY29uc3RydWN0SW50ZXJwb2xhdGVkOmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZCxlLmZuO2Zvcih2YXIgdD1lLmRpY3Qscj11KHQuZ2V0QXJyYXkoIkMwIikpfHxbMF0sbj11KHQuZ2V0QXJyYXkoIkMxIikpfHxbMV0sYT10LmdldCgiTiIpLGk9ci5sZW5ndGgsbz1bXSxzPTA7czxpOysrcylvLnB1c2gobltzXS1yW3NdKTtyZXR1cm5bMixyLG8sYV19LGNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5JUixyPXRbMV0sbj10WzJdLGE9dFszXSxpPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbyxzKXtmb3IodmFyIGw9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLGM9MDtjPGk7KytjKW9bcytjXT1yW2NdK2wqbltjXX19LGNvbnN0cnVjdFN0aWNoZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsYT0oZS5mbixlLmRpY3QpLGk9dShhLmdldEFycmF5KCJEb21haW4iKSk7aWYoIWkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPWkubGVuZ3RoLzIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtmb3IodmFyIG89YS5nZXQoIkZ1bmN0aW9ucyIpLHM9W10sbD0wLGM9by5sZW5ndGg7bDxjOysrbClzLnB1c2godGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOnQuZmV0Y2hJZlJlZihvW2xdKX0pKTtyZXR1cm5bMyxpLHUoYS5nZXRBcnJheSgiQm91bmRzIikpLHUoYS5nZXRBcnJheSgiRW5jb2RlIikpLHNdfSxjb25zdHJ1Y3RTdGljaGVkRnJvbUlSOmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZDt2YXIgdD1lLklSLHI9dFsxXSxuPXRbMl0sYT10WzNdLGk9dFs0XSxvPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxzLGwpe2Zvcih2YXIgYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU+cj9lPXI6ZTx0JiYoZT10KSxlfShlW3RdLHJbMF0sclsxXSksdT0wLGY9bi5sZW5ndGg7dTxmJiYhKGM8blt1XSk7Kyt1KTt2YXIgaD1yWzBdO3U+MCYmKGg9blt1LTFdKTt2YXIgZD1yWzFdO3U8bi5sZW5ndGgmJihkPW5bdV0pO3ZhciBwPWFbMip1XSxtPWFbMip1KzFdO29bMF09aD09PWQ/cDpwKyhjLWgpKihtLXApLyhkLWgpLGlbdV0obywwLHMsbCl9fSxjb25zdHJ1Y3RQb3N0U2NyaXB0OmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZDt2YXIgdD1lLmZuLHI9ZS5kaWN0LGE9dShyLmdldEFycmF5KCJEb21haW4iKSksbz11KHIuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyBkb21haW4uIik7aWYoIW8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIHJhbmdlLiIpO3ZhciBzPW5ldyBpLlBvc3RTY3JpcHRMZXhlcih0KTtyZXR1cm5bNCxhLG8sbmV3IGkuUG9zdFNjcmlwdFBhcnNlcihzKS5wYXJzZSgpXX0sY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWY7dmFyIHQ9ZS5pc0V2YWxTdXBwb3J0ZWQscj1lLklSLGE9clsxXSxpPXJbMl0sbz1yWzNdO2lmKHQmJmwudmFsdWUpe3ZhciBzPShuZXcgcCkuY29tcGlsZShvLGEsaSk7aWYocylyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIscyl9KDAsbi5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgYz1pLmxlbmd0aD4+MSx1PWEubGVuZ3RoPj4xLGY9bmV3IGQobyksaD1PYmplY3QuY3JlYXRlKG51bGwpLG09ODE5MixnPW5ldyBGbG9hdDMyQXJyYXkodSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLG8scz0iIixsPWc7Zm9yKGE9MDthPHU7YSsrKW89ZVt0K2FdLGxbYV09byxzKz1vKyJfIjt2YXIgZD1oW3NdO2lmKHZvaWQgMD09PWQpe3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkoYyksdj1mLmV4ZWN1dGUobCkseT12Lmxlbmd0aC1jO2ZvcihhPTA7YTxjO2ErKyl7bz12W3krYV07dmFyIGI9aVsyKmFdO288Yj9vPWI6bz4oYj1pWzIqYSsxXSkmJihvPWIpLHBbYV09b31tPjAmJihtLS0saFtzXT1wKSxyLnNldChwLG4pfWVsc2Ugci5zZXQoZCxuKX19fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnN0YWNrPWU/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwKTpbXX1yZXR1cm4gZS5wcm90b3R5cGU9e3B1c2g6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PTEwMCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfSxwb3A6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfSxjb3B5OmZ1bmN0aW9uKGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoK2U+PTEwMCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciB0PXRoaXMuc3RhY2sscj10Lmxlbmd0aC1lLG49ZS0xO24+PTA7bi0tLHIrKyl0LnB1c2godFtyXSl9LGluZGV4OmZ1bmN0aW9uKGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfSxyb2xsOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9dGhpcy5zdGFjayxvPWkubGVuZ3RoLWUscz1pLmxlbmd0aC0xLGw9bysodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKHI9byxuPXM7cjxuO3IrKyxuLS0pYT1pW3JdLGlbcl09aVtuXSxpW25dPWE7Zm9yKHI9byxuPWwtMTtyPG47cisrLG4tLSlhPWlbcl0saVtyXT1pW25dLGlbbl09YTtmb3Iocj1sLG49cztyPG47cisrLG4tLSlhPWlbcl0saVtyXT1pW25dLGlbbl09YX19LGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vcGVyYXRvcnM9ZX1yZXR1cm4gZS5wcm90b3R5cGU9e2V4ZWN1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsYSxpPW5ldyBoKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGw9cy5sZW5ndGg7bzxsOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6YT1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1hKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocithKTticmVhaztjYXNlImFuZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSwoMCxuLmlzQm9vbCkocikmJigwLG4uaXNCb29sKShhKT9pLnB1c2gociYmYSk6aS5wdXNoKHImYSk7YnJlYWs7Y2FzZSJhdGFuIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYXRhbihyKSk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6YT1pLnBvcCgpLChyPWkucG9wKCkpPjA/aS5wdXNoKHI8PGEpOmkucHVzaChyPj5hKTticmVhaztjYXNlImNlaWxpbmciOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5jZWlsKHIpKTticmVhaztjYXNlImNvcHkiOnI9aS5wb3AoKSxpLmNvcHkocik7YnJlYWs7Y2FzZSJjb3MiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5jb3MocikpO2JyZWFrO2Nhc2UiY3ZpIjpyPTB8aS5wb3AoKSxpLnB1c2gocik7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyL2EpO2JyZWFrO2Nhc2UiZHVwIjppLmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj09PWEpO2JyZWFrO2Nhc2UiZXhjaCI6aS5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKE1hdGgucG93KHIsYSkpO2JyZWFrO2Nhc2UiZmFsc2UiOmkucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmZsb29yKHIpKTticmVhaztjYXNlImdlIjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPj1hKTticmVhaztjYXNlImd0IjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPmEpO2JyZWFrO2Nhc2UiaWRpdiI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9hfDApO2JyZWFrO2Nhc2UiaW5kZXgiOnI9aS5wb3AoKSxpLmluZGV4KHIpO2JyZWFrO2Nhc2UibGUiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8PWEpO2JyZWFrO2Nhc2UibG4iOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5sb2cocikpO2JyZWFrO2Nhc2UibG9nIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpL01hdGguTE4xMCk7YnJlYWs7Y2FzZSJsdCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocjxhKTticmVhaztjYXNlIm1vZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociVhKTticmVhaztjYXNlIm11bCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociphKTticmVhaztjYXNlIm5lIjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyIT09YSk7YnJlYWs7Y2FzZSJuZWciOnI9aS5wb3AoKSxpLnB1c2goLXIpO2JyZWFrO2Nhc2Uibm90IjpyPWkucG9wKCksKDAsbi5pc0Jvb2wpKHIpP2kucHVzaCghcik6aS5wdXNoKH5yKTticmVhaztjYXNlIm9yIjphPWkucG9wKCkscj1pLnBvcCgpLCgwLG4uaXNCb29sKShyKSYmKDAsbi5pc0Jvb2wpKGEpP2kucHVzaChyfHxhKTppLnB1c2gocnxhKTticmVhaztjYXNlInBvcCI6aS5wb3AoKTticmVhaztjYXNlInJvbGwiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5yb2xsKHIsYSk7YnJlYWs7Y2FzZSJyb3VuZCI6cj1pLnBvcCgpLGkucHVzaChNYXRoLnJvdW5kKHIpKTticmVhaztjYXNlInNpbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLnNpbihyKSk7YnJlYWs7Y2FzZSJzcXJ0IjpyPWkucG9wKCksaS5wdXNoKE1hdGguc3FydChyKSk7YnJlYWs7Y2FzZSJzdWIiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHItYSk7YnJlYWs7Y2FzZSJ0cnVlIjppLnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOnI9KHI9aS5wb3AoKSk8MD9NYXRoLmNlaWwocik6TWF0aC5mbG9vcihyKSxpLnB1c2gocik7YnJlYWs7Y2FzZSJ4b3IiOmE9aS5wb3AoKSxyPWkucG9wKCksKDAsbi5pc0Jvb2wpKHIpJiYoMCxuLmlzQm9vbCkoYSk/aS5wdXNoKHIhPT1hKTppLnB1c2gocl5hKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319LGV9KCk7dC5Qb3N0U2NyaXB0RXZhbHVhdG9yPWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1lfWZ1bmN0aW9uIHQodCxyLG4pe2UuY2FsbCh0aGlzLCJhcmdzIiksdGhpcy5pbmRleD10LHRoaXMubWluPXIsdGhpcy5tYXg9bn1mdW5jdGlvbiByKHQpe2UuY2FsbCh0aGlzLCJsaXRlcmFsIiksdGhpcy5udW1iZXI9dCx0aGlzLm1pbj10LHRoaXMubWF4PXR9ZnVuY3Rpb24gYSh0LHIsbixhLGkpe2UuY2FsbCh0aGlzLCJiaW5hcnkiKSx0aGlzLm9wPXQsdGhpcy5hcmcxPXIsdGhpcy5hcmcyPW4sdGhpcy5taW49YSx0aGlzLm1heD1pfWZ1bmN0aW9uIGkodCxyKXtlLmNhbGwodGhpcywibWF4IiksdGhpcy5hcmc9dCx0aGlzLm1pbj10Lm1pbix0aGlzLm1heD1yfWZ1bmN0aW9uIG8odCxyLG4pe2UuY2FsbCh0aGlzLCJ2YXIiKSx0aGlzLmluZGV4PXQsdGhpcy5taW49cix0aGlzLm1heD1ufWZ1bmN0aW9uIHModCxyKXtlLmNhbGwodGhpcywiZGVmaW5pdGlvbiIpLHRoaXMudmFyaWFibGU9dCx0aGlzLmFyZz1yfWZ1bmN0aW9uIGwoKXt0aGlzLnBhcnRzPVtdfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4ibGl0ZXJhbCI9PT10LnR5cGUmJjA9PT10Lm51bWJlcj9lOiJsaXRlcmFsIj09PWUudHlwZSYmMD09PWUubnVtYmVyP3Q6ImxpdGVyYWwiPT09dC50eXBlJiYibGl0ZXJhbCI9PT1lLnR5cGU/bmV3IHIoZS5udW1iZXIrdC5udW1iZXIpOm5ldyBhKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIHUoZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gbmV3IHIoMCk7aWYoMT09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IHIoZS5udW1iZXIqdC5udW1iZXIpfWlmKCJsaXRlcmFsIj09PWUudHlwZSl7aWYoMD09PWUubnVtYmVyKXJldHVybiBuZXcgcigwKTtpZigxPT09ZS5udW1iZXIpcmV0dXJuIHR9cmV0dXJuIG5ldyBhKCIqIixlLHQsTWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLE1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSl9ZnVuY3Rpb24gZihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IHIoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgYSgiLSIsZSx0LGUubWluLXQubWF4LGUubWF4LXQubWluKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyByKHQpOmUubWF4PD10P2U6bmV3IGkoZSx0KX1mdW5jdGlvbiBkKCl7fXJldHVybiBlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlKXsoMCxuLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9LHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX0sci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7ZS52aXNpdExpdGVyYWwodGhpcyl9LGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLGEucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRCaW5hcnlPcGVyYXRpb24odGhpcyl9LGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLGkucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRNaW4odGhpcyl9LG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLG8ucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRWYXJpYWJsZSh0aGlzKX0scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkscy5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKX0sbC5wcm90b3R5cGU9e3Zpc2l0QXJndW1lbnQ6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1heCgiLGUubWluLCIsIE1hdGgubWluKCIsZS5tYXgsIiwgc3JjW3NyY09mZnNldCArICIsZS5pbmRleCwiXSkpIil9LHZpc2l0VmFyaWFibGU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX0sdmlzaXRMaXRlcmFsOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9LHZpc2l0QmluYXJ5T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiKCIpLGUuYXJnMS52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiAiLGUub3AsIiAiKSxlLmFyZzIudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIpIil9LHZpc2l0VmFyaWFibGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX0sdmlzaXRNaW46ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnRzLmpvaW4oIiIpfX0sZC5wcm90b3R5cGU9e2NvbXBpbGU6ZnVuY3Rpb24oZSxuLGEpe3ZhciBpLGQscCxtLGcsdix5LGIsdyxrLFM9W10sXz1bXSx4PW4ubGVuZ3RoPj4xLEE9YS5sZW5ndGg+PjEsQz0wO2ZvcihpPTA7aTx4O2krKylTLnB1c2gobmV3IHQoaSxuWzIqaV0sblsyKmkrMV0pKTtmb3IoaT0wLGQ9ZS5sZW5ndGg7aTxkO2krKylpZigibnVtYmVyIiE9dHlwZW9mKGs9ZVtpXSkpc3dpdGNoKGspe2Nhc2UiYWRkIjppZihTLmxlbmd0aDwyKXJldHVybiBudWxsO3Y9Uy5wb3AoKSxnPVMucG9wKCksUy5wdXNoKGMoZyx2KSk7YnJlYWs7Y2FzZSJjdnIiOmlmKFMubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKFMubGVuZ3RoPDIpcmV0dXJuIG51bGw7dj1TLnBvcCgpLGc9Uy5wb3AoKSxTLnB1c2godShnLHYpKTticmVhaztjYXNlInN1YiI6aWYoUy5sZW5ndGg8MilyZXR1cm4gbnVsbDt2PVMucG9wKCksZz1TLnBvcCgpLFMucHVzaChmKGcsdikpO2JyZWFrO2Nhc2UiZXhjaCI6aWYoUy5sZW5ndGg8MilyZXR1cm4gbnVsbDt5PVMucG9wKCksYj1TLnBvcCgpLFMucHVzaCh5LGIpO2JyZWFrO2Nhc2UicG9wIjppZihTLmxlbmd0aDwxKXJldHVybiBudWxsO1MucG9wKCk7YnJlYWs7Y2FzZSJpbmRleCI6aWYoUy5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibGl0ZXJhbCIhPT0oZz1TLnBvcCgpKS50eXBlKXJldHVybiBudWxsO2lmKChwPWcubnVtYmVyKTwwfHwhTnVtYmVyLmlzSW50ZWdlcihwKXx8Uy5sZW5ndGg8cClyZXR1cm4gbnVsbDtpZigibGl0ZXJhbCI9PT0oeT1TW1MubGVuZ3RoLXAtMV0pLnR5cGV8fCJ2YXIiPT09eS50eXBlKXtTLnB1c2goeSk7YnJlYWt9dz1uZXcgbyhDKysseS5taW4seS5tYXgpLFNbUy5sZW5ndGgtcC0xXT13LFMucHVzaCh3KSxfLnB1c2gobmV3IHModyx5KSk7YnJlYWs7Y2FzZSJkdXAiOmlmKFMubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoIm51bWJlciI9PXR5cGVvZiBlW2krMV0mJiJndCI9PT1lW2krMl0mJmVbaSszXT09PWkrNyYmImp6Ij09PWVbaSs0XSYmInBvcCI9PT1lW2krNV0mJmVbaSs2XT09PWVbaSsxXSl7Zz1TLnBvcCgpLFMucHVzaChoKGcsZVtpKzFdKSksaSs9NjticmVha31pZigibGl0ZXJhbCI9PT0oeT1TW1MubGVuZ3RoLTFdKS50eXBlfHwidmFyIj09PXkudHlwZSl7Uy5wdXNoKHkpO2JyZWFrfXc9bmV3IG8oQysrLHkubWluLHkubWF4KSxTW1MubGVuZ3RoLTFdPXcsUy5wdXNoKHcpLF8ucHVzaChuZXcgcyh3LHkpKTticmVhaztjYXNlInJvbGwiOmlmKFMubGVuZ3RoPDIpcmV0dXJuIG51bGw7aWYodj1TLnBvcCgpLGc9Uy5wb3AoKSwibGl0ZXJhbCIhPT12LnR5cGV8fCJsaXRlcmFsIiE9PWcudHlwZSlyZXR1cm4gbnVsbDtpZihtPXYubnVtYmVyLChwPWcubnVtYmVyKTw9MHx8IU51bWJlci5pc0ludGVnZXIocCl8fCFOdW1iZXIuaXNJbnRlZ2VyKG0pfHxTLmxlbmd0aDxwKXJldHVybiBudWxsO2lmKDA9PShtPShtJXArcCklcCkpYnJlYWs7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoUyxTLnNwbGljZShTLmxlbmd0aC1wLHAtbSkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBTLnB1c2gobmV3IHIoaykpO2lmKFMubGVuZ3RoIT09QSlyZXR1cm4gbnVsbDt2YXIgUD1bXTtyZXR1cm4gXy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgbDtlLnZpc2l0KHQpLFAucHVzaCh0LnRvU3RyaW5nKCkpfSkpLFMuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbDtlLnZpc2l0KHIpO3ZhciBuPWFbMip0XSxpPWFbMip0KzFdLG89W3IudG9TdHJpbmcoKV07bj5lLm1pbiYmKG8udW5zaGlmdCgiTWF0aC5tYXgoIixuLCIsICIpLG8ucHVzaCgiKSIpKSxpPGUubWF4JiYoby51bnNoaWZ0KCJNYXRoLm1pbigiLGksIiwgIiksby5wdXNoKCIpIikpLG8udW5zaGlmdCgiZGVzdFtkZXN0T2Zmc2V0ICsgIix0LCJdID0gIiksby5wdXNoKCI7IiksUC5wdXNoKG8uam9pbigiIikpfSkpLFAuam9pbigiXG4iKX19LGR9KCk7dC5Qb3N0U2NyaXB0Q29tcGlsZXI9cH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpO2Z1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksciYmbyhlLHIpLGV9dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSx0aGlzLmxleGVyPXQsdGhpcy5vcGVyYXRvcnM9W10sdGhpcy50b2tlbj1udWxsLHRoaXMucHJldj1udWxsfXJldHVybiBzKGUsW3trZXk6Im5leHRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByZXY9dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubGV4ZXIuZ2V0VG9rZW4oKX19LHtrZXk6ImFjY2VwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9rZW4udHlwZT09PWUmJih0aGlzLm5leHRUb2tlbigpLCEwKX19LHtrZXk6ImV4cGVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hY2NlcHQoZSkpcmV0dXJuITA7dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAiLmNvbmNhdCh0aGlzLnRva2VuLnR5cGUsIiBleHBlY3RlZCAiKS5jb25jYXQoZSwiLiIpKX19LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRUb2tlbigpLHRoaXMuZXhwZWN0KHUuTEJSQUNFKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdCh1LlJCUkFDRSksdGhpcy5vcGVyYXRvcnN9fSx7a2V5OiJwYXJzZUJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7OylpZih0aGlzLmFjY2VwdCh1Lk5VTUJFUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2UgaWYodGhpcy5hY2NlcHQodS5PUEVSQVRPUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2V7aWYoIXRoaXMuYWNjZXB0KHUuTEJSQUNFKSlyZXR1cm47dGhpcy5wYXJzZUNvbmRpdGlvbigpfX19LHtrZXk6InBhcnNlQ29uZGl0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDtpZih0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCksdGhpcy5wYXJzZUJsb2NrKCksdGhpcy5leHBlY3QodS5SQlJBQ0UpLHRoaXMuYWNjZXB0KHUuSUYpKXRoaXMub3BlcmF0b3JzW2VdPXRoaXMub3BlcmF0b3JzLmxlbmd0aCx0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiI7ZWxzZXtpZighdGhpcy5hY2NlcHQodS5MQlJBQ0UpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQUyBGdW5jdGlvbjogZXJyb3IgcGFyc2luZyBjb25kaXRpb25hbC4iKTt2YXIgdD10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnMucHVzaChudWxsLG51bGwpO3ZhciByPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdCh1LlJCUkFDRSksdGhpcy5leHBlY3QodS5JRkVMU0UpLHRoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aCx0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIix0aGlzLm9wZXJhdG9yc1tlXT1yLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fV0pLGV9KCk7dC5Qb3N0U2NyaXB0UGFyc2VyPWw7dmFyIGMsdT17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxmPShjPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMudHlwZT10LHRoaXMudmFsdWU9cn1yZXR1cm4gcyhlLG51bGwsW3trZXk6ImdldE9wZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1jW3RdO3JldHVybiByfHwoY1t0XT1uZXcgZSh1Lk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUodS5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKHUuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUodS5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKHUuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCkpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXX1yZXR1cm4gcyhlLFt7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKHQ8MClyZXR1cm4gYS5FT0Y7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1NwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiBuZXcgZih1Lk5VTUJFUix0aGlzLmdldE51bWJlcigpKTtjYXNlIDEyMzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGYuTEJSQUNFO2Nhc2UgMTI1OnJldHVybiB0aGlzLm5leHRDaGFyKCksZi5SQlJBQ0V9dmFyIHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTAsclswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7dmFyIGk9ci5qb2luKCIiKTtzd2l0Y2goaS50b0xvd2VyQ2FzZSgpKXtjYXNlImlmIjpyZXR1cm4gZi5JRjtjYXNlImlmZWxzZSI6cmV0dXJuIGYuSUZFTFNFO2RlZmF1bHQ6cmV0dXJuIGYuZ2V0T3BlcmF0b3IoaSl9fX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD10aGlzLnN0ckJ1Zjtmb3IodC5sZW5ndGg9MCx0WzBdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmKGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWUpOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7dmFyIHI9cGFyc2VGbG9hdCh0LmpvaW4oIiIpKTtpZihpc05hTihyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICIuY29uY2F0KHIpKTtyZXR1cm4gcn19XSksZX0oKTt0LlBvc3RTY3JpcHRMZXhlcj1ofSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk11cm11ckhhc2gzXzY0PXZvaWQgMDt2YXIgbj1yKDYpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLmgxPWU/NDI5NDk2NzI5NSZlOjMyODUzNzc1MjAsdGhpcy5oMj1lPzQyOTQ5NjcyOTUmZTozMjg1Mzc3NTIwfXJldHVybiB0LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoKDAsbi5pc1N0cmluZykoZSkpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkscj0wO2Zvcih2YXIgYT0wLGk9ZS5sZW5ndGg7YTxpO2ErKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGEpO288PTI1NT90W3IrK109bzoodFtyKytdPW8+Pj44LHRbcisrXT0yNTUmbyl9fWVsc2V7aWYoISgwLG4uaXNBcnJheUJ1ZmZlcikoZSkpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIElucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIik7cj0odD1lKS5ieXRlTGVuZ3RofWZvcih2YXIgcz1yPj4yLGw9ci00KnMsYz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxzKSx1PTAsZj0wLGg9dGhpcy5oMSxkPXRoaXMuaDIscD0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MDtnPHM7ZysrKTEmZz9oPTUqKGg9KGhePXU9KHU9KHU9KHU9Y1tnXSkqcCY0Mjk0OTAxNzYwfDExNjAxKnUmNjU1MzUpPDwxNXx1Pj4+MTcpKm0mNDI5NDkwMTc2MHwxMzcxNSp1JjY1NTM1KTw8MTN8aD4+PjE5KSszODY0MjkyMTk2OmQ9NSooZD0oZF49Zj0oZj0oZj0oZj1jW2ddKSpwJjQyOTQ5MDE3NjB8MTE2MDEqZiY2NTUzNSk8PDE1fGY+Pj4xNykqbSY0Mjk0OTAxNzYwfDEzNzE1KmYmNjU1MzUpPDwxM3xkPj4+MTkpKzM4NjQyOTIxOTY7c3dpdGNoKHU9MCxsKXtjYXNlIDM6dV49dFs0KnMrMl08PDE2O2Nhc2UgMjp1Xj10WzQqcysxXTw8ODtjYXNlIDE6dT0odT0odT0odV49dFs0KnNdKSpwJjQyOTQ5MDE3NjB8MTE2MDEqdSY2NTUzNSk8PDE1fHU+Pj4xNykqbSY0Mjk0OTAxNzYwfDEzNzE1KnUmNjU1MzUsMSZzP2hePXU6ZF49dX1yZXR1cm4gdGhpcy5oMT1oLHRoaXMuaDI9ZCx0aGlzfSxoZXhkaWdlc3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtlPTM5ODE4MDY3OTcqKGVePXQ+Pj4xKSY0Mjk0OTAxNzYwfDM2MDQ1KmUmNjU1MzUsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCY0Mjk0OTAxNzYwfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJjQyOTQ5MDE3NjApPj4+MTYpPj4+MSkmNDI5NDkwMTc2MHw2MDQ5OSplJjY1NTM1O2Zvcih2YXIgcj0wLG49W2VePSh0PTMzMDE4ODIzNjYqdCY0Mjk0OTAxNzYwfCgzMTIwNDM3ODkzKih0PDwxNnxlPj4+MTYpJjQyOTQ5MDE3NjApPj4+MTYpPj4+MSx0XSxhPSIiO3I8bi5sZW5ndGg7cisrKXtmb3IodmFyIGk9KG5bcl0+Pj4wKS50b1N0cmluZygxNik7aS5sZW5ndGg8ODspaT0iMCIraTthKz1pfXJldHVybiBhfX0sdH0oKTt0Lk11cm11ckhhc2gzXzY0PWF9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGSW1hZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE1NSksaT1yKDE2OCksbz1yKDE1Nykscz1yKDE2MyksbD1yKDE2Nik7ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHQmJnQuY2FuRGVjb2RlKGUpP3QuZGVjb2RlKGUpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLndhcm4pKCJOYXRpdmUgaW1hZ2UgZGVjb2RpbmcgZmFpbGVkIC0tIHRyeWluZyB0byByZWNvdmVyOiAiKyh0JiZ0Lm1lc3NhZ2UpKSxlfSkpOlByb21pc2UucmVzb2x2ZShlKX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybihlPXQrZSpyKTwwPzA6ZT5uP246ZX1mdW5jdGlvbiByKGUsdCxyLG4sYSxpKXt2YXIgbyxzLGwsYyx1PWEqaSxmPXQ8PTg/bmV3IFVpbnQ4QXJyYXkodSk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHUpOm5ldyBVaW50MzJBcnJheSh1KSxoPXIvYSxkPW4vaSxwPTAsbT1uZXcgVWludDE2QXJyYXkoYSksZz1yO2ZvcihvPTA7bzxhO28rKyltW29dPU1hdGguZmxvb3IobypoKTtmb3Iobz0wO288aTtvKyspZm9yKGw9TWF0aC5mbG9vcihvKmQpKmcscz0wO3M8YTtzKyspYz1sK21bc10sZltwKytdPWVbY107cmV0dXJuIGZ9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLnhyZWYscj1lLnJlcyxvPWUuaW1hZ2Uscz1lLmlzSW5saW5lLGM9dm9pZCAwIT09cyYmcyxmPWUuc21hc2ssaD12b2lkIDA9PT1mP251bGw6ZixkPWUubWFzayxwPXZvaWQgMD09PWQ/bnVsbDpkLG09ZS5pc01hc2ssZz12b2lkIDAhPT1tJiZtLHY9ZS5wZGZGdW5jdGlvbkZhY3Rvcnk7dGhpcy5pbWFnZT1vO3ZhciB5PW8uZGljdCxiPXkuZ2V0KCJGaWx0ZXIiKTtpZigoMCxhLmlzTmFtZSkoYikpc3dpdGNoKGIubmFtZSl7Y2FzZSJKUFhEZWNvZGUiOnZhciB3PW5ldyBsLkpweEltYWdlO3cucGFyc2VJbWFnZVByb3BlcnRpZXMoby5zdHJlYW0pLG8uc3RyZWFtLnJlc2V0KCksby53aWR0aD13LndpZHRoLG8uaGVpZ2h0PXcuaGVpZ2h0LG8uYml0c1BlckNvbXBvbmVudD13LmJpdHNQZXJDb21wb25lbnQsby5udW1Db21wcz13LmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpvLmJpdHNQZXJDb21wb25lbnQ9MSxvLm51bUNvbXBzPTF9dmFyIGs9eS5nZXQoIldpZHRoIiwiVyIpLFM9eS5nZXQoIkhlaWdodCIsIkgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKG8ud2lkdGgpJiZvLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIoby5oZWlnaHQpJiZvLmhlaWdodD4wJiYoby53aWR0aCE9PWt8fG8uaGVpZ2h0IT09UykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLGs9by53aWR0aCxTPW8uaGVpZ2h0KSxrPDF8fFM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoaywiIG9yICIpKyJoZWlnaHQ6ICIuY29uY2F0KFMpKTt0aGlzLndpZHRoPWssdGhpcy5oZWlnaHQ9Uyx0aGlzLmludGVycG9sYXRlPXkuZ2V0KCJJbnRlcnBvbGF0ZSIsIkkiKXx8ITEsdGhpcy5pbWFnZU1hc2s9eS5nZXQoIkltYWdlTWFzayIsIklNIil8fCExLHRoaXMubWF0dGU9eS5nZXQoIk1hdHRlIil8fCExO3ZhciBfPW8uYml0c1BlckNvbXBvbmVudDtpZighXyYmIShfPXkuZ2V0KCJCaXRzUGVyQ29tcG9uZW50IiwiQlBDIikpKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAiLmNvbmNhdCh0aGlzLmltYWdlTWFzaykpO189MX1pZih0aGlzLmJwYz1fLCF0aGlzLmltYWdlTWFzayl7dmFyIHg9eS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpO2lmKCF4KXN3aXRjaCgoMCxuLmluZm8pKCJKUFggaW1hZ2VzICh3aGljaCBkbyBub3QgcmVxdWlyZSBjb2xvciBzcGFjZXMpIiksby5udW1Db21wcyl7Y2FzZSAxOng9YS5OYW1lLmdldCgiRGV2aWNlR3JheSIpO2JyZWFrO2Nhc2UgMzp4PWEuTmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDp4PWEuTmFtZS5nZXQoIkRldmljZUNNWUsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSlBYIGltYWdlcyB3aXRoICIuY29uY2F0KG8ubnVtQ29tcHMsIiAiKSsiY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpfXZhciBBPWM/cjpudWxsO3RoaXMuY29sb3JTcGFjZT1pLkNvbG9yU3BhY2UucGFyc2UoeCx0LEEsdiksdGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHN9aWYodGhpcy5kZWNvZGU9eS5nZXRBcnJheSgiRGVjb2RlIiwiRCIpLHRoaXMubmVlZHNEZWNvZGU9ITEsdGhpcy5kZWNvZGUmJih0aGlzLmNvbG9yU3BhY2UmJiF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLF8pfHxnJiYhaS5Db2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwxKSkpe3RoaXMubmVlZHNEZWNvZGU9ITA7dmFyIEM9KDE8PF8pLTE7dGhpcy5kZWNvZGVDb2VmZmljaWVudHM9W10sdGhpcy5kZWNvZGVBZGRlbmRzPVtdO2Zvcih2YXIgUD10aGlzLmNvbG9yU3BhY2UmJiJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZS5uYW1lLEU9MCxUPTA7RTx0aGlzLmRlY29kZS5sZW5ndGg7RSs9MiwrK1Qpe3ZhciBSPXRoaXMuZGVjb2RlW0VdLE89dGhpcy5kZWNvZGVbRSsxXTt0aGlzLmRlY29kZUNvZWZmaWNpZW50c1tUXT1QPyhPLVIpL0M6Ty1SLHRoaXMuZGVjb2RlQWRkZW5kc1tUXT1QP1I6QypSfX1oP3RoaXMuc21hc2s9bmV3IHUoe3hyZWY6dCxyZXM6cixpbWFnZTpoLGlzSW5saW5lOmMscGRmRnVuY3Rpb25GYWN0b3J5OnZ9KTpwJiYoKDAsYS5pc1N0cmVhbSkocCk/cC5kaWN0LmdldCgiSW1hZ2VNYXNrIiwiSU0iKT90aGlzLm1hc2s9bmV3IHUoe3hyZWY6dCxyZXM6cixpbWFnZTpwLGlzSW5saW5lOmMsaXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTp2fSk6KDAsbi53YXJuKSgiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLiIpOnRoaXMubWFzaz1wKX1yZXR1cm4gdS5idWlsZEltYWdlPWZ1bmN0aW9uKHQpe3QuaGFuZGxlcjt2YXIgcixpLG89dC54cmVmLHM9dC5yZXMsbD10LmltYWdlLGY9dC5pc0lubGluZSxoPXZvaWQgMCE9PWYmJmYsZD10Lm5hdGl2ZURlY29kZXIscD12b2lkIDA9PT1kP251bGw6ZCxtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGc9ZShsLHApLHY9bC5kaWN0LmdldCgiU01hc2siKSx5PWwuZGljdC5nZXQoIk1hc2siKTtyZXR1cm4gdj8ocj1lKHYscCksaT1Qcm9taXNlLnJlc29sdmUobnVsbCkpOihyPVByb21pc2UucmVzb2x2ZShudWxsKSx5PygwLGEuaXNTdHJlYW0pKHkpP2k9ZSh5LHApOkFycmF5LmlzQXJyYXkoeSk/aT1Qcm9taXNlLnJlc29sdmUoeSk6KCgwLG4ud2FybikoIlVuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LiIpLGk9UHJvbWlzZS5yZXNvbHZlKG51bGwpKTppPVByb21pc2UucmVzb2x2ZShudWxsKSksUHJvbWlzZS5hbGwoW2cscixpXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9YyhlLDMpLHI9dFswXSxuPXRbMV0sYT10WzJdO3JldHVybiBuZXcgdSh7eHJlZjpvLHJlczpzLGltYWdlOnIsaXNJbmxpbmU6aCxzbWFzazpuLG1hc2s6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6bX0pfSkpfSx1LmNyZWF0ZU1hc2s9ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGw9KGErNz4+MykqaSxjPW4uYnl0ZUxlbmd0aDtpZighb3x8cyYmbCE9PWMpaWYocylmb3IoKHQ9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwpKS5zZXQobikscj1jO3I8bDtyKyspdFtyXT0yNTU7ZWxzZSh0PW5ldyBVaW50OENsYW1wZWRBcnJheShjKSkuc2V0KG4pO2Vsc2UgdD1uO2lmKHMpZm9yKHI9MDtyPGM7cisrKXRbcl1ePTI1NTtyZXR1cm57ZGF0YTp0LHdpZHRoOmEsaGVpZ2h0Oml9fSx1LnByb3RvdHlwZT17Z2V0IGRyYXdXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuc21hc2smJnRoaXMuc21hc2sud2lkdGh8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2sud2lkdGh8fDApfSxnZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLmhlaWdodHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay5oZWlnaHR8fDApfSxkZWNvZGVCdWZmZXI6ZnVuY3Rpb24oZSl7dmFyIHIsbixhPXRoaXMuYnBjLGk9dGhpcy5udW1Db21wcyxvPXRoaXMuZGVjb2RlQWRkZW5kcyxzPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLGw9KDE8PGEpLTE7aWYoMSE9PWEpe3ZhciBjPTA7Zm9yKHI9MCxuPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7cjxuO3IrKylmb3IodmFyIHU9MDt1PGk7dSsrKWVbY109dChlW2NdLG9bdV0sc1t1XSxsKSxjKyt9ZWxzZSBmb3Iocj0wLG49ZS5sZW5ndGg7cjxuO3IrKyllW3JdPSshZVtyXX0sZ2V0Q29tcG9uZW50czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJwYztpZig4PT09dClyZXR1cm4gZTt2YXIgcixuLGE9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LG89dGhpcy5udW1Db21wcyxzPWEqaSpvLGw9MCxjPXQ8PTg/bmV3IFVpbnQ4QXJyYXkocyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHMpOm5ldyBVaW50MzJBcnJheShzKSx1PWEqbyxmPSgxPDx0KS0xLGg9MDtpZigxPT09dClmb3IodmFyIGQscCxtLGc9MDtnPGk7ZysrKXtmb3IocD1oKygtOCZ1KSxtPWgrdTtoPHA7KW49ZVtsKytdLGNbaF09bj4+NyYxLGNbaCsxXT1uPj42JjEsY1toKzJdPW4+PjUmMSxjW2grM109bj4+NCYxLGNbaCs0XT1uPj4zJjEsY1toKzVdPW4+PjImMSxjW2grNl09bj4+MSYxLGNbaCs3XT0xJm4saCs9ODtpZihoPG0pZm9yKG49ZVtsKytdLGQ9MTI4O2g8bTspY1toKytdPSshIShuJmQpLGQ+Pj0xfWVsc2V7dmFyIHY9MDtmb3Iobj0wLGg9MCxyPXM7aDxyOysraCl7Zm9yKGgldT09MCYmKG49MCx2PTApO3Y8dDspbj1uPDw4fGVbbCsrXSx2Kz04O3ZhciB5PXYtdCxiPW4+Pnk7Y1toXT1iPDA/MDpiPmY/ZjpiLG4mPSgxPDx5KS0xLHY9eX19cmV0dXJuIGN9LGZpbGxPcGFjaXR5OmZ1bmN0aW9uKGUsdCxhLGksbyl7dmFyIHMsbCxjLGYsaCxkLHA9dGhpcy5zbWFzayxtPXRoaXMubWFzaztpZihwKWw9cC53aWR0aCxjPXAuaGVpZ2h0LHM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwqYykscC5maWxsR3JheUJ1ZmZlcihzKSxsPT09dCYmYz09PWF8fChzPXIocyxwLmJwYyxsLGMsdCxhKSk7ZWxzZSBpZihtKWlmKG0gaW5zdGFuY2VvZiB1KXtmb3IobD1tLndpZHRoLGM9bS5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpjKSxtLm51bUNvbXBzPTEsbS5maWxsR3JheUJ1ZmZlcihzKSxmPTAsaD1sKmM7ZjxoOysrZilzW2ZdPTI1NS1zW2ZdO2w9PT10JiZjPT09YXx8KHM9cihzLG0uYnBjLGwsYyx0LGEpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSk7dmFyIGc9dGhpcy5udW1Db21wcztmb3IoZj0wLGg9dCphO2Y8aDsrK2Ype3ZhciB2PTAseT1mKmc7Zm9yKGQ9MDtkPGc7KytkKXt2YXIgYj1vW3krZF0sdz0yKmQ7aWYoYjxtW3ddfHxiPm1bdysxXSl7dj0yNTU7YnJlYWt9fXNbZl09dn19aWYocylmb3IoZj0wLGQ9MyxoPXQqaTtmPGg7KytmLGQrPTQpZVtkXT1zW2ZdO2Vsc2UgZm9yKGY9MCxkPTMsaD10Kmk7ZjxoOysrZixkKz00KWVbZF09MjU1fSx1bmRvUHJlYmxlbmQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuc21hc2smJnRoaXMuc21hc2subWF0dGU7aWYobilmb3IodmFyIGE9dGhpcy5jb2xvclNwYWNlLmdldFJnYihuLDApLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9dCpyKjQsYz0wO2M8bDtjKz00KXt2YXIgdT1lW2MrM107aWYoMCE9PXUpe3ZhciBmPTI1NS91O2VbY109KGVbY10taSkqZitpLGVbYysxXT0oZVtjKzFdLW8pKmYrbyxlW2MrMl09KGVbYysyXS1zKSpmK3N9ZWxzZSBlW2NdPTI1NSxlW2MrMV09MjU1LGVbYysyXT0yNTV9fSxjcmVhdGVJbWFnZURhdGE6ZnVuY3Rpb24oKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0scj10aGlzLmRyYXdXaWR0aCxhPXRoaXMuZHJhd0hlaWdodCxpPXt3aWR0aDpyLGhlaWdodDphLGtpbmQ6MCxkYXRhOm51bGx9LGw9dGhpcy5udW1Db21wcyxjPXRoaXMud2lkdGgsdT10aGlzLmhlaWdodCxmPXRoaXMuYnBjLGg9YypsKmYrNz4+MztpZighdCl7dmFyIGQ7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1mP2Q9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PWZ8fHRoaXMubmVlZHNEZWNvZGV8fChkPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZCYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnI9PT1jJiZhPT09dSl7aWYoaS5raW5kPWQsZT10aGlzLmdldEltYWdlQnl0ZXModSpoKSx0aGlzLmltYWdlIGluc3RhbmNlb2Ygby5EZWNvZGVTdHJlYW0paS5kYXRhPWU7ZWxzZXt2YXIgcD1uZXcgVWludDhDbGFtcGVkQXJyYXkoZS5sZW5ndGgpO3Auc2V0KGUpLGkuZGF0YT1wfWlmKHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShkPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgbT1pLmRhdGEsZz0wLHY9bS5sZW5ndGg7Zzx2O2crKyltW2ddXj0yNTV9cmV0dXJuIGl9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIHMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciB5PXUqaDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6eSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gaS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxpLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKHkscixhLCEwKSxpfX19dmFyIGIsdyxrPTB8KGU9dGhpcy5nZXRJbWFnZUJ5dGVzKHUqaCkpLmxlbmd0aC9oKmEvdSxTPXRoaXMuZ2V0Q29tcG9uZW50cyhlKTtyZXR1cm4gdHx8dGhpcy5zbWFza3x8dGhpcy5tYXNrPyhpLmtpbmQ9bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxpLmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIqYSo0KSxiPTEsdz0hMCx0aGlzLmZpbGxPcGFjaXR5KGkuZGF0YSxyLGEsayxTKSk6KGkua2luZD1uLkltYWdlS2luZC5SR0JfMjRCUFAsaS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheShyKmEqMyksYj0wLHc9ITEpLHRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKFMpLHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKGkuZGF0YSxjLHUscixhLGssZixTLGIpLHcmJnRoaXMudW5kb1ByZWJsZW5kKGkuZGF0YSxyLGspLGl9LGZpbGxHcmF5QnVmZmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsbD1pKnQqcys3Pj4zLGM9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qbCksdT10aGlzLmdldENvbXBvbmVudHMoYyk7aWYoMSE9PXMpe3RoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKHUpLGE9aSpvO3ZhciBmPTI1NS8oKDE8PHMpLTEpO2ZvcihyPTA7cjxhOysrcillW3JdPWYqdVtyXX1lbHNlIGlmKGE9aSpvLHRoaXMubmVlZHNEZWNvZGUpZm9yKHI9MDtyPGE7KytyKWVbcl09dVtyXS0xJjI1NTtlbHNlIGZvcihyPTA7cjxhOysrcillW3JdPTI1NSYtdVtyXX0sZ2V0SW1hZ2VCeXRlczpmdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gdGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PXJ8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFuLHRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSwhMCl9fSx1fSgpO3QuUERGSW1hZ2U9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NZXNzYWdlSGFuZGxlcj1wO3ZhciBuLGE9KG49cigyKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cig2KTtmdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxsPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGEpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7cyhpLG4sYSxvLGwsIm5leHQiLGUpfWZ1bmN0aW9uIGwoZSl7cyhpLG4sYSxvLGwsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdSgpe3JldHVybih1PWwoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpPWFyZ3VtZW50cztyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG49aS5sZW5ndGg+MiYmdm9pZCAwIT09aVsyXT9pWzJdOm51bGwsdCl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHQuYXBwbHkobixyKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUpe2lmKCJvYmplY3QiIT09byhlKSlyZXR1cm4gZTtzd2l0Y2goZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IGkuQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZS5tZXNzYWdlLGUuc3RhdHVzKTtkZWZhdWx0OnJldHVybiBuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyl9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgRXJyb3IpfHxlIGluc3RhbmNlb2YgaS5BYm9ydEV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIGkuTWlzc2luZ1BERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIGkuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24/ZTpuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSl9ZnVuY3Rpb24gZChlLHQscil7dD9lLnJlc29sdmUoKTplLnJlamVjdChyKX1mdW5jdGlvbiBwKGUsdCxyKXt2YXIgbj10aGlzO3RoaXMuc291cmNlTmFtZT1lLHRoaXMudGFyZ2V0TmFtZT10LHRoaXMuY29tT2JqPXIsdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5zdHJlYW1JZD0xLHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM9ITAsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgYT10aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcz1PYmplY3QuY3JlYXRlKG51bGwpLGk9dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PW4uc291cmNlTmFtZSlpZih0LnN0cmVhbSluLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuaXNSZXBseSl7dmFyIG89dC5jYWxsYmFja0lkO2lmKCEodC5jYWxsYmFja0lkIGluIGEpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgIi5jb25jYXQobykpO3ZhciBzPWFbb107ZGVsZXRlIGFbb10sImVycm9yImluIHQ/cy5yZWplY3QoZih0LmVycm9yKSk6cy5yZXNvbHZlKHQuZGF0YSl9ZWxzZXtpZighKHQuYWN0aW9uIGluIGkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7dmFyIGw9aVt0LmFjdGlvbl07aWYodC5jYWxsYmFja0lkKXt2YXIgYz1uLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbFswXS5jYWxsKGxbMV0sdC5kYXRhKX0pKS50aGVuKChmdW5jdGlvbihlKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmMsdGFyZ2V0TmFtZTp1LGlzUmVwbHk6ITAsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpjLHRhcmdldE5hbWU6dSxpc1JlcGx5OiEwLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGVycm9yOmgoZSl9KX0pKX1lbHNlIHQuc3RyZWFtSWQ/bi5fY3JlYXRlU3RyZWFtU2luayh0KTpsWzBdLmNhbGwobFsxXSx0LmRhdGEpfX0sci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9cC5wcm90b3R5cGU9e29uOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLmFjdGlvbkhhbmRsZXI7aWYobltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7bltlXT1bdCxyXX0sc2VuZDpmdW5jdGlvbihlLHQscil7dmFyIG49e3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH07dGhpcy5wb3N0TWVzc2FnZShuLHIpfSxzZW5kV2l0aFByb21pc2U6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuY2FsbGJhY2tJZCsrLGE9e3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dCxjYWxsYmFja0lkOm59LG89KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllc1tuXT1vO3RyeXt0aGlzLnBvc3RNZXNzYWdlKGEscil9Y2F0Y2goZSl7by5yZWplY3QoZSl9cmV0dXJuIG8ucHJvbWlzZX0sc2VuZFdpdGhTdHJlYW06ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSxsPXRoaXMudGFyZ2V0TmFtZTtyZXR1cm4gbmV3IGkuUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBuPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bixpc0Nsb3NlZDohMX0sYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bCxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSksbi5wcm9taXNlfSxwdWxsOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10ucHVsbENhbGw9dCxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbToicHVsbCIsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5jYW5jZWxDYWxsPXQsYS5zdHJlYW1Db250cm9sbGVyc1tvXS5pc0Nsb3NlZD0hMCxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbToiY2FuY2VsIixyZWFzb246ZSxzdHJlYW1JZDpvfSksdC5wcm9taXNlfX0scil9LF9jcmVhdGVTdHJlYW1TaW5rOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj10aGlzLG49dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSxhPWUuc3RyZWFtSWQsbz1lLmRlc2lyZWRTaXplLHM9dGhpcy5zb3VyY2VOYW1lLGw9ZS5zb3VyY2VOYW1lLHU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxmPWZ1bmN0aW9uKGUpe3ZhciByPWUuc3RyZWFtLG49ZS5jaHVuayxpPWUudHJhbnNmZXJzLG89ZS5zdWNjZXNzLGM9ZS5yZWFzb247dC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bCxzdHJlYW06cixzdHJlYW1JZDphLGNodW5rOm4sc3VjY2VzczpvLHJlYXNvbjpjfSxpKX0saD17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbj10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPXQsbj4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxmKHtzdHJlYW06ImVucXVldWUiLGNodW5rOmUsdHJhbnNmZXJzOnJ9KX19LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsZih7c3RyZWFtOiJjbG9zZSJ9KSxkZWxldGUgci5zdHJlYW1TaW5rc1thXSl9LGVycm9yOmZ1bmN0aW9uKGUpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGYoe3N0cmVhbToiZXJyb3IiLHJlYXNvbjplfSkpfSxzaW5rQ2FwYWJpbGl0eTp1LG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6byxyZWFkeTpudWxsfTtoLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSxoLnJlYWR5PWguc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2FdPWgsYyhuWzBdLFtlLmRhdGEsaF0sblsxXSkudGhlbigoZnVuY3Rpb24oKXtmKHtzdHJlYW06InN0YXJ0X2NvbXBsZXRlIixzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7Zih7c3RyZWFtOiJzdGFydF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpfSxfcHJvY2Vzc1N0cmVhbU1lc3NhZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxhPWUuc3RyZWFtSWQsbz1mdW5jdGlvbihlKXt2YXIgaT1lLnN0cmVhbSxvPWUuc3VjY2VzcyxzPWUucmVhc29uO3QuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTppLHN1Y2Nlc3M6byxzdHJlYW1JZDphLHJlYXNvbjpzfSl9LHM9ZnVuY3Rpb24oKXtQcm9taXNlLmFsbChbdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5zdGFydENhbGwsdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5wdWxsQ2FsbCx0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNhbmNlbENhbGxdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih0PWUucHJvbWlzZSxQcm9taXNlLnJlc29sdmUodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKTt2YXIgdH0pKSkudGhlbigoZnVuY3Rpb24oKXtkZWxldGUgdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXX0pKX07c3dpdGNoKGUuc3RyZWFtKXtjYXNlInN0YXJ0X2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uc3RhcnRDYWxsLGUuc3VjY2VzcyxmKGUucmVhc29uKSk7YnJlYWs7Y2FzZSJwdWxsX2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0ucHVsbENhbGwsZS5zdWNjZXNzLGYoZS5yZWFzb24pKTticmVhaztjYXNlInB1bGwiOmlmKCF0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdKXtvKHtzdHJlYW06InB1bGxfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KTticmVha310aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxjKHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKChmdW5jdGlvbigpe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpO2JyZWFrO2Nhc2UiZW5xdWV1ZSI6KDAsaS5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0sImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmlzQ2xvc2VkfHx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNvbnRyb2xsZXIuZW5xdWV1ZShlLmNodW5rKTticmVhaztjYXNlImNsb3NlIjppZigoMCxpLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXSwiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmlzQ2xvc2VkKWJyZWFrO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWQ9ITAsdGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jb250cm9sbGVyLmNsb3NlKCkscygpO2JyZWFrO2Nhc2UiZXJyb3IiOigwLGkuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcihmKGUucmVhc29uKSkscygpO2JyZWFrO2Nhc2UiY2FuY2VsX2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY2FuY2VsQ2FsbCxlLnN1Y2Nlc3MsZihlLnJlYXNvbikpLHMoKTticmVhaztjYXNlImNhbmNlbCI6aWYoIXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0pYnJlYWs7Yyh0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLm9uQ2FuY2VsLFtmKGUucmVhc29uKV0pLnRoZW4oKGZ1bmN0aW9uKCl7byh7c3RyZWFtOiJjYW5jZWxfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtvKHtzdHJlYW06ImNhbmNlbF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KGYoZS5yZWFzb24pKSx0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLmlzQ2FuY2VsbGVkPSEwLGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fSxwb3N0TWVzc2FnZTpmdW5jdGlvbihlLHQpe3QmJnRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM/dGhpcy5jb21PYmoucG9zdE1lc3NhZ2UoZSx0KTp0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShlKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19fV0pfSxlLmV4cG9ydHM9YSgpfSkuY2FsbCh0aGlzLHIoMjkpLkJ1ZmZlcixyKDE4KSxyKDI0KSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5yKHQpO3ZhciBuPXIoMCksYT1yKDM1KSxpPXIoMjMpLG89cigxNikscz1yLm4obyksbD0oKT0+bi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIyNCIsaGVpZ2h0OiIyNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToiZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24ifSxuLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTIiLHkxOiI1Iix4MjoiMTIiLHkyOiIxOSJ9KSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiIxOSAxMiAxMiAxOSA1IDEyIn0pKSxjPSgpPT5uLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjI0IixoZWlnaHQ6IjI0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiIifSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiI1IDEyIDE5IDEyIn0pLG4uY3JlYXRlRWxlbWVudCgicG9seWxpbmUiLHtwb2ludHM6IjEyIDUgMTIgMTkifSkpLHU9KCk9Pm4uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMjQiLGhlaWdodDoiMjQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6IiJ9LG4uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI1Iix5MToiMTIiLHgyOiIxOSIseTI6IjEyIn0pKSxmPSgpPT5uLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjI0IixoZWlnaHQ6IjI0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJmZWF0aGVyIGZlYXRoZXItYXJyb3ctdXAifSxuLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTIiLHkxOiIxOSIseDI6IjEyIix5MjoiNSJ9KSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiI1IDEyIDEyIDUgMTkgMTIifSkpO3IoODQpO2NvbnN0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlYWN0LWNvbnRhaW5lciIpLGQ9aS5wZGZqcztkLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPWAvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGYuanMvJHtkLnZlcnNpb259L3BkZi53b3JrZXIuanNgO2NvbnN0IHA9e2NNYXBVcmw6YC8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEAke2QudmVyc2lvbn0vY21hcHMvYCxjTWFwUGFja2VkOiEwfTtjbGFzcyBtIGV4dGVuZHMgbi5Db21wb25lbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3RhdGU9e251bVBhZ2VzOm51bGwsY3VycmVudFBhZ2U6MSxyZWFkeTohMCxwYWdlTG9hZGVkOiExLHBhZ2VSZW5kZXJlZDohMSxnZXRUZXh0OiExLHNjYWxlOi43NX0sdGhpcy5NQVhfU0NBTEU9Mix0aGlzLl9fem9vbUV2ZW50PSExLHRoaXMucGFnZVJlZnM9bmV3IE1hcCx0aGlzLnBhZ2VJbWFnZXM9bmV3IE1hcCx0aGlzLm9uRG9jdW1lbnRMb2FkU3VjY2Vzcz0oe251bVBhZ2VzOmV9KT0+e3RoaXMuc2V0U3RhdGUoe251bVBhZ2VzOmV9KX0sdGhpcy5vbkVycm9yPWU9PndpbmRvdy5hbGVydCgiRXJyb3Igd2hpbGUgbG9hZGluZyBkb2N1bWVudCEgXG4iK2UubWVzc2FnZSksdGhpcy5jYWNoZT1lPT57dGhpcy5wYWdlSW1hZ2VzLmhhcyhlKXx8dGhpcy5wYWdlSW1hZ2VzLnNldChlLHRoaXMucGFnZVJlZnMuZ2V0KGUpLmNoaWxkcmVuWzBdLnRvRGF0YVVSTCgiaW1hZ2UvcG5nIikpfSx0aGlzLnpvb21PdXQ9ZT0+e2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9fem9vbUV2ZW50fHxzKCkodGhpcy56T3V0KX0sdGhpcy56b29tSW49ZT0+e2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9fem9vbUV2ZW50fHxzKCkodGhpcy56SW4pfSx0aGlzLnpPdXQ9KCk9Pnt0aGlzLnN0YXRlLnNjYWxlPj0uNzUmJih0aGlzLl9fem9vbUV2ZW50PSEwLHRoaXMuc2V0U3RhdGUoZT0+KHtzY2FsZTplLnNjYWxlLS4yNX0pKSl9LHRoaXMuekluPSgpPT57dGhpcy5zdGF0ZS5zY2FsZTw9dGhpcy5NQVhfU0NBTEUtLjI1JiYodGhpcy5fX3pvb21FdmVudD0hMCx0aGlzLnNldFN0YXRlKGU9Pih7c2NhbGU6ZS5zY2FsZSsuMjV9KSkpfSx0aGlzLnVwPSgpPT57Y29uc3R7Y3VycmVudFBhZ2U6ZX09dGhpcy5zdGF0ZTtpZihlPjEpe2NvbnN0IHQ9ZS0xO3RoaXMuc2V0U3RhdGUoe2N1cnJlbnRQYWdlOnR9KSx0aGlzLnBhZ2VJbWFnZXMuaGFzKHQpfHx0aGlzLnNldFN0YXRlKHtwYWdlTG9hZGVkOiExLHBhZ2VSZW5kZXJlZDohMSxnZXRUZXh0OiExfSl9T2JqZWN0KG8uY2FuY2VsKSh0aGlzLnVwKX0sdGhpcy5kb3duPSgpPT57Y29uc3R7Y3VycmVudFBhZ2U6ZSxudW1QYWdlczp0fT10aGlzLnN0YXRlO2lmKGU8dCl7Y29uc3QgdD1lKzE7dGhpcy5zZXRTdGF0ZSh7Y3VycmVudFBhZ2U6dH0pLHRoaXMucGFnZUltYWdlcy5oYXModCl8fHRoaXMuc2V0U3RhdGUoe3BhZ2VMb2FkZWQ6ITEscGFnZVJlbmRlcmVkOiExLGdldFRleHQ6ITF9KX1PYmplY3Qoby5jYW5jZWwpKHRoaXMuZG93bil9LHRoaXMuZ29VcD1lPT57ZS5wcmV2ZW50RGVmYXVsdCgpLHMoKSh0aGlzLnVwKX0sdGhpcy5nb0Rvd249ZT0+e2UucHJldmVudERlZmF1bHQoKSxzKCkodGhpcy5kb3duKX0sdGhpcy5yZW5kZXJJbWFnZT1lPT5uLmNyZWF0ZUVsZW1lbnQoImltZyIse3NyYzp0aGlzLnBhZ2VJbWFnZXMuZ2V0KGUpLHN0eWxlOnt3aWR0aDoiMTAwJSJ9fSksdGhpcy5vblBhZ2VSZWFkeVRvQ2FjaGU9ZT0+e3RoaXMuX196b29tRXZlbnQ9ITE7Y29uc3R7cGFnZUxvYWRlZDp0LHBhZ2VSZW5kZXJlZDpyLGdldFRleHQ6bixjdXJyZW50UGFnZTphfT10aGlzLnN0YXRlLGk9T2JqZWN0LmFzc2lnbih7cGFnZUxvYWRlZDp0LHBhZ2VSZW5kZXJlZDpyLGdldFRleHQ6bn0sZSk7aS5wYWdlTG9hZGVkJiZpLnBhZ2VSZW5kZXJlZCYmaS5nZXRUZXh0Pyh0aGlzLmNhY2hlKGEpLHRoaXMuc2V0U3RhdGUoe2NhY2hlZDohMH0pKTp0aGlzLnNldFN0YXRlKE9iamVjdC5hc3NpZ24oe2NhY2hlZDohMX0sZSkpfSx0aGlzLnJlbmRlclBhZ2U9ZT0+bi5jcmVhdGVFbGVtZW50KGkuUGFnZSx7bG9hZGluZzoiICIsaW5wdXRSZWY6dD0+dCYmdGhpcy5wYWdlUmVmcy5zZXQoZSx0KSxrZXk6YHBhZ2VfJHtlfWAscGFnZU51bWJlcjplLG9uTG9hZEVycm9yOnRoaXMub25FcnJvcixvblJlbmRlckVycm9yOnRoaXMub25FcnJvcixvbkdldFRleHRFcnJvcjp0aGlzLm9uRXJyb3Isb25SZW5kZXJTdWNjZXNzOigpPT50aGlzLm9uUGFnZVJlYWR5VG9DYWNoZSh7cGFnZVJlbmRlcmVkOiEwfSksb25HZXRUZXh0U3VjY2VzczooKT0+dGhpcy5vblBhZ2VSZWFkeVRvQ2FjaGUoe2dldFRleHQ6ITB9KSxzY2FsZTp0aGlzLnN0YXRlLnNjYWxlfSl9cmVuZGVyKCl7Y29uc3R7bnVtUGFnZXM6ZSxjdXJyZW50UGFnZTp0fT10aGlzLnN0YXRlO3JldHVybiBuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyIn0sbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyIn0sbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyX19kb2N1bWVudCJ9LG4uY3JlYXRlRWxlbWVudChpLkRvY3VtZW50LE9iamVjdC5hc3NpZ24oe2xvYWRpbmc6IiAiLGlucHV0UmVmOmU9PnRoaXMuX2RvYz1lLGZpbGU6ZyxvbkxvYWRTdWNjZXNzOnRoaXMub25Eb2N1bWVudExvYWRTdWNjZXNzLG9uTG9hZEVycm9yOnRoaXMub25FcnJvcixvblNvdXJjZUVycm9yOnRoaXMub25FcnJvcn0se29wdGlvbnM6cH0pLHRoaXMucmVuZGVyUGFnZSh0KSkpLGUmJm4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVycyJ9LG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVyc19fY29udGVudCJ9LHQsIiAvICIsZSkpLG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fem9vbV9jb250YWluZXIifSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyX19idXR0b24iLG9uQ2xpY2s6dGhpcy56b29tSW59LG4uY3JlYXRlRWxlbWVudChjLG51bGwpKSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyX19idXR0b24iLG9uQ2xpY2s6dGhpcy56b29tT3V0fSxuLmNyZWF0ZUVsZW1lbnQodSxudWxsKSkpLG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbmF2aWdhdGUifSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX25hdmlnYXRlX19hcnJvdyIsc3R5bGU6MT09PXQ/e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuMikifTp7fSxvbkNsaWNrOnRoaXMuZ29VcH0sbi5jcmVhdGVFbGVtZW50KGYsbnVsbCkpLG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbmF2aWdhdGVfX2Fycm93IixzdHlsZTp0PT09ZT97Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC4yKSJ9Ont9LG9uQ2xpY2s6dGhpcy5nb0Rvd259LG4uY3JlYXRlRWxlbWVudChsLG51bGwpKSkpKX19Y29uc3QgZz1kb2N1bWVudC5xdWVyeVNlbGVjdG9yKCIjZmlsZSIpLmdldEF0dHJpYnV0ZSgiZGF0YS1maWxlIik7T2JqZWN0KGEucmVuZGVyKShuLmNyZWF0ZUVsZW1lbnQobSx7ZmlsZTpnfSksaCl9XSk7'; +const bundle = 'IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQodCl7Zm9yKHZhciByLGEsaT10WzBdLG89dFsxXSxzPTAsYz1bXTtzPGkubGVuZ3RoO3MrKylhPWlbc10sT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKG4sYSkmJm5bYV0mJmMucHVzaChuW2FdWzBdKSxuW2FdPTA7Zm9yKHIgaW4gbylPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwobyxyKSYmKGVbcl09b1tyXSk7Zm9yKGwmJmwodCk7Yy5sZW5ndGg7KWMuc2hpZnQoKSgpfXZhciByPXt9LG49ezA6MH07ZnVuY3Rpb24gYSh0KXtpZihyW3RdKXJldHVybiByW3RdLmV4cG9ydHM7dmFyIG49clt0XT17aTp0LGw6ITEsZXhwb3J0czp7fX07cmV0dXJuIGVbdF0uY2FsbChuLmV4cG9ydHMsbixuLmV4cG9ydHMsYSksbi5sPSEwLG4uZXhwb3J0c31hLmU9ZnVuY3Rpb24oKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKCl9LGEubT1lLGEuYz1yLGEuZD1mdW5jdGlvbihlLHQscil7YS5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2VudW1lcmFibGU6ITAsZ2V0OnJ9KX0sYS5yPWZ1bmN0aW9uKGUpeyJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wudG9TdHJpbmdUYWcmJk9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLFN5bWJvbC50b1N0cmluZ1RhZyx7dmFsdWU6Ik1vZHVsZSJ9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSl9LGEudD1mdW5jdGlvbihlLHQpe2lmKDEmdCYmKGU9YShlKSksOCZ0KXJldHVybiBlO2lmKDQmdCYmIm9iamVjdCI9PXR5cGVvZiBlJiZlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihhLnIociksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRlZmF1bHQiLHtlbnVtZXJhYmxlOiEwLHZhbHVlOmV9KSwyJnQmJiJzdHJpbmciIT10eXBlb2YgZSlmb3IodmFyIG4gaW4gZSlhLmQocixuLGZ1bmN0aW9uKHQpe3JldHVybiBlW3RdfS5iaW5kKG51bGwsbikpO3JldHVybiByfSxhLm49ZnVuY3Rpb24oZSl7dmFyIHQ9ZSYmZS5fX2VzTW9kdWxlP2Z1bmN0aW9uKCl7cmV0dXJuIGUuZGVmYXVsdH06ZnVuY3Rpb24oKXtyZXR1cm4gZX07cmV0dXJuIGEuZCh0LCJhIix0KSx0fSxhLm89ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCl9LGEucD0iIixhLm9lPWZ1bmN0aW9uKGUpe3Rocm93IGNvbnNvbGUuZXJyb3IoZSksZX07dmFyIGk9d2luZG93LndlYnBhY2tKc29ucD13aW5kb3cud2VicGFja0pzb25wfHxbXSxvPWkucHVzaC5iaW5kKGkpO2kucHVzaD10LGk9aS5zbGljZSgpO2Zvcih2YXIgcz0wO3M8aS5sZW5ndGg7cysrKXQoaVtzXSk7dmFyIGw9bzthKGEucz0zNil9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1yKDM3KX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX19LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4gZS5leHBvcnRzPXI9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0scih0KX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDU4KSgpfSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7cmV0dXJuIHQgaW4gZT9PYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHt2YWx1ZTpyLGVudW1lcmFibGU6ITAsY29uZmlndXJhYmxlOiEwLHdyaXRhYmxlOiEwfSk6ZVt0XT1yLGV9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LG4pe3JldHVybiB0JiZyKGUucHJvdG90eXBlLHQpLG4mJnIoZSxuKSxlfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMjEpLGE9cig4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1uKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9hKGUpOnR9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cigyNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJm4oZSx0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5sb2FkRnJvbUZpbGU9dC5pc0NhbmNlbEV4Y2VwdGlvbj10Lm1ha2VQYWdlQ2FsbGJhY2s9dC5jYW5jZWxSdW5uaW5nVGFzaz10Lm1ha2VDYW5jZWxsYWJsZT10LmRpc3BsYXlDT1JTV2FybmluZz10LmVycm9yT25EZXY9dC53YXJuT25EZXY9dC5nZXRQaXhlbFJhdGlvPXQuY2FsbElmRGVmaW5lZD10LmRhdGFVUkl0b1VpbnQ4QXJyYXk9dC5pc0RhdGFVUkk9dC5pc0ZpbGU9dC5pc0Jsb2I9dC5pc0FycmF5QnVmZmVyPXQuaXNTdHJpbmc9dC5pc1Byb3ZpZGVkPXQuaXNEZWZpbmVkPXQuaXNQcm9kdWN0aW9uPXQuaXNMb2NhbEZpbGVTeXN0ZW09dC5pc0Jyb3dzZXI9dm9pZCAwO3ZhciBhPW4ocigyKSksaT1uKHIoNykpLG89bihyKDMpKSxzPW4ocig5KSksbD1uKHIoNjMpKSxjPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93O3QuaXNCcm93c2VyPWM7dmFyIHU9YyYmImZpbGU6Ij09PXdpbmRvdy5sb2NhdGlvbi5wcm90b2NvbDt0LmlzTG9jYWxGaWxlU3lzdGVtPXU7dC5pc1Byb2R1Y3Rpb249ITA7dmFyIGY9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWV9O3QuaXNEZWZpbmVkPWY7dC5pc1Byb3ZpZGVkPWZ1bmN0aW9uKGUpe3JldHVybiBmKGUpJiZudWxsIT09ZX07dmFyIGg9ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfTt0LmlzU3RyaW5nPWg7dC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXJ9O3QuaXNCbG9iPWZ1bmN0aW9uKGUpe2lmKCFjKXRocm93IG5ldyBFcnJvcigiQXR0ZW1wdGVkIHRvIGNoZWNrIGlmIGEgdmFyaWFibGUgaXMgYSBCbG9iIG9uIGEgbm9uLWJyb3dzZXIgZW52aXJvbm1lbnQuIik7cmV0dXJuIGUgaW5zdGFuY2VvZiBCbG9ifTt0LmlzRmlsZT1mdW5jdGlvbihlKXtpZighYyl0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBjaGVjayBpZiBhIHZhcmlhYmxlIGlzIGEgRmlsZSBvbiBhIG5vbi1icm93c2VyIGVudmlyb25tZW50LiIpO3JldHVybiBlIGluc3RhbmNlb2YgRmlsZX07dmFyIGQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGgoZSkmJi9eZGF0YTovLnRlc3QoZSl9O3QuaXNEYXRhVVJJPWQ7dC5kYXRhVVJJdG9VaW50OEFycmF5PWZ1bmN0aW9uKGUpe2lmKCFkKGUpKXRocm93IG5ldyBFcnJvcigiZGF0YVVSSXRvVWludDhBcnJheSB3YXMgcHJvdmlkZWQgd2l0aCBhbiBhcmd1bWVudCB3aGljaCBpcyBub3QgYSB2YWxpZCBkYXRhIFVSSS4iKTt2YXIgdDt0PWUuc3BsaXQoIiwiKVswXS5pbmRleE9mKCJiYXNlNjQiKT49MD9hdG9iKGUuc3BsaXQoIiwiKVsxXSk6dW5lc2NhcGUoZS5zcGxpdCgiLCIpWzFdKTtmb3IodmFyIHI9bmV3IFVpbnQ4QXJyYXkodC5sZW5ndGgpLG49MDtuPHQubGVuZ3RoO24rPTEpcltuXT10LmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9O3QuY2FsbElmRGVmaW5lZD1mdW5jdGlvbihlKXtpZihlJiYiZnVuY3Rpb24iPT10eXBlb2YgZSl7Zm9yKHZhciB0PWFyZ3VtZW50cy5sZW5ndGgscj1uZXcgQXJyYXkodD4xP3QtMTowKSxuPTE7bjx0O24rKylyW24tMV09YXJndW1lbnRzW25dO2UuYXBwbHkodm9pZCAwLHIpfX07dC5nZXRQaXhlbFJhdGlvPWZ1bmN0aW9uKCl7cmV0dXJuIGMmJndpbmRvdy5kZXZpY2VQaXhlbFJhdGlvfHwxfTt2YXIgcD1mdW5jdGlvbihlKXt9LG09ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gcC5hcHBseSh2b2lkIDAsWyJ3YXJuIl0uY29uY2F0KHQpKX07dC53YXJuT25EZXY9bTt0LmVycm9yT25EZXY9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gcC5hcHBseSh2b2lkIDAsWyJlcnJvciJdLmNvbmNhdCh0KSl9O3QuZGlzcGxheUNPUlNXYXJuaW5nPWZ1bmN0aW9uKCl7dSYmbSgiTG9hZGluZyBQREYgYXMgYmFzZTY0IHN0cmluZ3MvVVJMcyBtaWdodCBub3Qgd29yayBvbiBwcm90b2NvbHMgb3RoZXIgdGhhbiBIVFRQL0hUVFBTLiBPbiBHb29nbGUgQ2hyb21lLCB5b3UgY2FuIHVzZSAtLWFsbG93LWZpbGUtYWNjZXNzLWZyb20tZmlsZXMgZmxhZyBmb3IgZGVidWdnaW5nIHB1cnBvc2VzLiIpfTt2YXIgZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscil7dmFyIG47cmV0dXJuKDAsYS5kZWZhdWx0KSh0aGlzLHQpLChuPSgwLGkuZGVmYXVsdCkodGhpcywoMCxvLmRlZmF1bHQpKHQpLmNhbGwodGhpcyxlLHIpKSkubmFtZT0iUHJvbWlzZUNhbmNlbGxlZEV4Y2VwdGlvbiIsbi5tZXNzYWdlPWUsbi50eXBlPXIsbn1yZXR1cm4oMCxzLmRlZmF1bHQpKHQsZSksdH0oKDAsbC5kZWZhdWx0KShFcnJvcikpO3QubWFrZUNhbmNlbGxhYmxlPWZ1bmN0aW9uKGUpe3ZhciB0PSExO3JldHVybntwcm9taXNlOm5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gdD9uKG5ldyBnKCJQcm9taXNlIGNhbmNlbGxlZCIpKTpyLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiBuKHQ/bmV3IGcoIlByb21pc2UgY2FuY2VsbGVkIik6ZSl9KSl9KSksY2FuY2VsOmZ1bmN0aW9uKCl7dD0hMH19fTt0LmNhbmNlbFJ1bm5pbmdUYXNrPWZ1bmN0aW9uKGUpe2UmJmUuY2FuY2VsJiZlLmNhbmNlbCgpfTt0Lm1ha2VQYWdlQ2FsbGJhY2s9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIndpZHRoIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1syXSp0fSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaGVpZ2h0Iix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMudmlld1szXSp0fSxjb25maWd1cmFibGU6ITB9KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwib3JpZ2luYWxXaWR0aCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdbMl19LGNvbmZpZ3VyYWJsZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJvcmlnaW5hbEhlaWdodCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnZpZXdbM119LGNvbmZpZ3VyYWJsZTohMH0pLGV9O3QuaXNDYW5jZWxFeGNlcHRpb249ZnVuY3Rpb24oZSl7cmV0dXJuIlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiI9PT1lLm5hbWV8fCJQcm9taXNlQ2FuY2VsbGVkRXhjZXB0aW9uIj09PWUubmFtZX07dC5sb2FkRnJvbUZpbGU9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPW5ldyBGaWxlUmVhZGVyO3JldHVybiBuLm9ubG9hZD1mdW5jdGlvbigpe3JldHVybiB0KG5ldyBVaW50OEFycmF5KG4ucmVzdWx0KSl9LG4ub25lcnJvcj1mdW5jdGlvbihlKXtzd2l0Y2goZS50YXJnZXQuZXJyb3IuY29kZSl7Y2FzZSBlLnRhcmdldC5lcnJvci5OT1RfRk9VTkRfRVJSOnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGU6IEZpbGUgbm90IGZvdW5kLiIpKTtjYXNlIGUudGFyZ2V0LmVycm9yLk5PVF9SRUFEQUJMRV9FUlI6cmV0dXJuIHIobmV3IEVycm9yKCJFcnJvciB3aGlsZSByZWFkaW5nIGEgZmlsZTogRmlsZSBub3QgcmVhZGFibGUuIikpO2Nhc2UgZS50YXJnZXQuZXJyb3IuU0VDVVJJVFlfRVJSOnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGU6IFNlY3VyaXR5IGVycm9yLiIpKTtjYXNlIGUudGFyZ2V0LmVycm9yLkFCT1JUX0VSUjpyZXR1cm4gcihuZXcgRXJyb3IoIkVycm9yIHdoaWxlIHJlYWRpbmcgYSBmaWxlOiBBYm9ydGVkLiIpKTtkZWZhdWx0OnJldHVybiByKG5ldyBFcnJvcigiRXJyb3Igd2hpbGUgcmVhZGluZyBhIGZpbGUuIikpfX0sbi5yZWFkQXNBcnJheUJ1ZmZlcihlKSxudWxsfSkpfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMjEpO2Z1bmN0aW9uIGEoKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgV2Vha01hcClyZXR1cm4gbnVsbDt2YXIgZT1uZXcgV2Vha01hcDtyZXR1cm4gYT1mdW5jdGlvbigpe3JldHVybiBlfSxlfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihlJiZlLl9fZXNNb2R1bGUpcmV0dXJuIGU7aWYobnVsbD09PWV8fCJvYmplY3QiIT09bihlKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUpcmV0dXJue2RlZmF1bHQ6ZX07dmFyIHQ9YSgpO2lmKHQmJnQuaGFzKGUpKXJldHVybiB0LmdldChlKTt2YXIgcj17fSxpPU9iamVjdC5kZWZpbmVQcm9wZXJ0eSYmT2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjtmb3IodmFyIG8gaW4gZSlpZihPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxvKSl7dmFyIHM9aT9PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKGUsbyk6bnVsbDtzJiYocy5nZXR8fHMuc2V0KT9PYmplY3QuZGVmaW5lUHJvcGVydHkocixvLHMpOnJbb109ZVtvXX1yZXR1cm4gci5kZWZhdWx0PWUsdCYmdC5zZXQoZSxyKSxyfX0sZnVuY3Rpb24oZSx0KXtmdW5jdGlvbiByKCl7cmV0dXJuIGUuZXhwb3J0cz1yPU9iamVjdC5hc3NpZ258fGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0xO3Q8YXJndW1lbnRzLmxlbmd0aDt0Kyspe3ZhciByPWFyZ3VtZW50c1t0XTtmb3IodmFyIG4gaW4gcilPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwocixuKSYmKGVbbl09cltuXSl9cmV0dXJuIGV9LHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfWUuZXhwb3J0cz1yfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNSb3RhdGU9dC5pc1JlbmRlck1vZGU9dC5pc1BkZj10LmlzUGFnZU51bWJlcj10LmlzUGFnZUluZGV4PXQuaXNQYWdlPXQuaXNMaW5rVGFyZ2V0PXQuaXNMaW5rU2VydmljZT10LmlzRmlsZT10LmlzQ2xhc3NOYW1lPXQuZXZlbnRzUHJvcHM9dm9pZCAwO3ZhciBhPW4ocigyMSkpLGk9bihyKDY2KSksbz1uKHIoNCkpLHM9bihyKDcwKSksbD1yKDIyKSxjPXIoMTApLHU9bihyKDMyKSksZj0oMCxzLmRlZmF1bHQpKChmdW5jdGlvbigpe3ZhciBlPXt9O3JldHVybltdLmNvbmNhdCgoMCxpLmRlZmF1bHQpKGwubW91c2VFdmVudHMpLCgwLGkuZGVmYXVsdCkobC50b3VjaEV2ZW50cyksKDAsaS5kZWZhdWx0KShsLmtleWJvYXJkRXZlbnRzKSkuZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1vLmRlZmF1bHQuZnVuY30pKSxlfSkpO3QuZXZlbnRzUHJvcHM9Zjt2YXIgaD1bby5kZWZhdWx0LnN0cmluZyxvLmRlZmF1bHQuaW5zdGFuY2VPZihBcnJheUJ1ZmZlciksby5kZWZhdWx0LnNoYXBlKHtkYXRhOm8uZGVmYXVsdC5vYmplY3QsaHR0cEhlYWRlcnM6by5kZWZhdWx0Lm9iamVjdCxyYW5nZTpvLmRlZmF1bHQub2JqZWN0LHVybDpvLmRlZmF1bHQuc3RyaW5nLHdpdGhDcmVkZW50aWFsczpvLmRlZmF1bHQuYm9vbH0pXTsidW5kZWZpbmVkIiE9dHlwZW9mIEZpbGUmJmgucHVzaChvLmRlZmF1bHQuaW5zdGFuY2VPZihGaWxlKSksInVuZGVmaW5lZCIhPXR5cGVvZiBCbG9iJiZoLnB1c2goby5kZWZhdWx0Lmluc3RhbmNlT2YoQmxvYikpO3ZhciBkPW8uZGVmYXVsdC5vbmVPZlR5cGUoW28uZGVmYXVsdC5zdHJpbmcsby5kZWZhdWx0LmFycmF5T2Yoby5kZWZhdWx0LnN0cmluZyldKTt0LmlzQ2xhc3NOYW1lPWQ7dmFyIHA9by5kZWZhdWx0Lm9uZU9mVHlwZShoKTt0LmlzRmlsZT1wO3ZhciBtPW8uZGVmYXVsdC5pbnN0YW5jZU9mKHUuZGVmYXVsdCk7dC5pc0xpbmtTZXJ2aWNlPW07dmFyIGc9by5kZWZhdWx0Lm9uZU9mKFsiX3NlbGYiLCJfYmxhbmsiLCJfcGFyZW50IiwiX3RvcCJdKTt0LmlzTGlua1RhcmdldD1nO3ZhciB2PW8uZGVmYXVsdC5zaGFwZSh7X3RyYW5zcG9ydDpvLmRlZmF1bHQuc2hhcGUoe2ZvbnRMb2FkZXI6by5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZCxjb21tb25PYmpzOm8uZGVmYXVsdC5zaGFwZSh7X29ianM6by5kZWZhdWx0Lm9iamVjdC5pc1JlcXVpcmVkfSkuaXNSZXF1aXJlZCxnZXRBbm5vdGF0aW9uczpvLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFRleHRDb250ZW50Om8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0Vmlld3BvcnQ6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxyZW5kZXI6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZH0pO3QuaXNQYWdlPXY7dC5pc1BhZ2VJbmRleD1mdW5jdGlvbihlLHQscil7dmFyIG49ZVt0XSxpPWUucGFnZU51bWJlcixvPWUucGRmO2lmKCEoMCxjLmlzRGVmaW5lZCkobykpcmV0dXJuIG51bGw7aWYoKDAsYy5pc0RlZmluZWQpKG4pKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgb2YgdHlwZSBgIikuY29uY2F0KCgwLGEuZGVmYXVsdCkobiksImAgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLCBleHBlY3RlZCBgbnVtYmVyYC4iKSk7aWYobjwwKXJldHVybiBuZXcgRXJyb3IoIkV4cGVjdGVkIGAiLmNvbmNhdCh0LCJgIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMC4iKSk7dmFyIHM9by5udW1QYWdlcztpZihuKzE+cylyZXR1cm4gbmV3IEVycm9yKCJFeHBlY3RlZCBgIi5jb25jYXQodCwiYCB0byBiZSBsZXNzIG9yIGVxdWFsIHRvICIpLmNvbmNhdChzLTEsIi4iKSl9ZWxzZSBpZighKDAsYy5pc0RlZmluZWQpKGkpKXJldHVybiBuZXcgRXJyb3IoImAiLmNvbmNhdCh0LCJgIG5vdCBzdXBwbGllZC4gRWl0aGVyIHBhZ2VJbmRleCBvciBwYWdlTnVtYmVyIG11c3QgYmUgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLiIpKTtyZXR1cm4gbnVsbH07dC5pc1BhZ2VOdW1iZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWVbdF0saT1lLnBhZ2VJbmRleCxvPWUucGRmO2lmKCEoMCxjLmlzRGVmaW5lZCkobykpcmV0dXJuIG51bGw7aWYoKDAsYy5pc0RlZmluZWQpKG4pKXtpZigibnVtYmVyIiE9dHlwZW9mIG4pcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgb2YgdHlwZSBgIikuY29uY2F0KCgwLGEuZGVmYXVsdCkobiksImAgc3VwcGxpZWQgdG8gYCIpLmNvbmNhdChyLCJgLCBleHBlY3RlZCBgbnVtYmVyYC4iKSk7aWYobjwxKXJldHVybiBuZXcgRXJyb3IoIkV4cGVjdGVkIGAiLmNvbmNhdCh0LCJgIHRvIGJlIGdyZWF0ZXIgb3IgZXF1YWwgdG8gMS4iKSk7dmFyIHM9by5udW1QYWdlcztpZihuPnMpcmV0dXJuIG5ldyBFcnJvcigiRXhwZWN0ZWQgYCIuY29uY2F0KHQsImAgdG8gYmUgbGVzcyBvciBlcXVhbCB0byAiKS5jb25jYXQocywiLiIpKX1lbHNlIGlmKCEoMCxjLmlzRGVmaW5lZCkoaSkpcmV0dXJuIG5ldyBFcnJvcigiYCIuY29uY2F0KHQsImAgbm90IHN1cHBsaWVkLiBFaXRoZXIgcGFnZUluZGV4IG9yIHBhZ2VOdW1iZXIgbXVzdCBiZSBzdXBwbGllZCB0byBgIikuY29uY2F0KHIsImAuIikpO3JldHVybiBudWxsfTt2YXIgeT1vLmRlZmF1bHQub25lT2ZUeXBlKFtvLmRlZmF1bHQuc2hhcGUoe2dldERlc3RpbmF0aW9uOm8uZGVmYXVsdC5mdW5jLmlzUmVxdWlyZWQsZ2V0T3V0bGluZTpvLmRlZmF1bHQuZnVuYy5pc1JlcXVpcmVkLGdldFBhZ2U6by5kZWZhdWx0LmZ1bmMuaXNSZXF1aXJlZCxudW1QYWdlczpvLmRlZmF1bHQubnVtYmVyLmlzUmVxdWlyZWR9KSxvLmRlZmF1bHQuYm9vbF0pO3QuaXNQZGY9eTt2YXIgYj1vLmRlZmF1bHQub25lT2YoWyJjYW52YXMiLCJub25lIiwic3ZnIl0pO3QuaXNSZW5kZXJNb2RlPWI7dmFyIHc9by5kZWZhdWx0Lm9uZU9mKFswLDkwLDE4MCwyNzBdKTt0LmlzUm90YXRlPXd9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig1Nyl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcihlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxsPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGEpfWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLG49YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oYSxpKXt2YXIgbz1lLmFwcGx5KHQsbik7ZnVuY3Rpb24gcyhlKXtyKG8sYSxpLHMsbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtyKG8sYSxpLHMsbCwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19fSxmdW5jdGlvbihlLHQscil7KGZ1bmN0aW9uKHQpe2Zvcih2YXIgbj1yKDgzKSxhPSJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93P3Q6d2luZG93LGk9WyJtb3oiLCJ3ZWJraXQiXSxvPSJBbmltYXRpb25GcmFtZSIscz1hWyJyZXF1ZXN0IitvXSxsPWFbImNhbmNlbCIrb118fGFbImNhbmNlbFJlcXVlc3QiK29dLGM9MDshcyYmYzxpLmxlbmd0aDtjKyspcz1hW2lbY10rIlJlcXVlc3QiK29dLGw9YVtpW2NdKyJDYW5jZWwiK29dfHxhW2lbY10rIkNhbmNlbFJlcXVlc3QiK29dO2lmKCFzfHwhbCl7dmFyIHU9MCxmPTAsaD1bXTtzPWZ1bmN0aW9uKGUpe2lmKDA9PT1oLmxlbmd0aCl7dmFyIHQ9bigpLHI9TWF0aC5tYXgoMCwxZTMvNjAtKHQtdSkpO3U9cit0LHNldFRpbWVvdXQoKGZ1bmN0aW9uKCl7dmFyIGU9aC5zbGljZSgwKTtoLmxlbmd0aD0wO2Zvcih2YXIgdD0wO3Q8ZS5sZW5ndGg7dCsrKWlmKCFlW3RdLmNhbmNlbGxlZCl0cnl7ZVt0XS5jYWxsYmFjayh1KX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSwwKX19KSxNYXRoLnJvdW5kKHIpKX1yZXR1cm4gaC5wdXNoKHtoYW5kbGU6KytmLGNhbGxiYWNrOmUsY2FuY2VsbGVkOiExfSksZn0sbD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PGgubGVuZ3RoO3QrKyloW3RdLmhhbmRsZT09PWUmJihoW3RdLmNhbmNlbGxlZD0hMCl9fWUuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gcy5jYWxsKGEsZSl9LGUuZXhwb3J0cy5jYW5jZWw9ZnVuY3Rpb24oKXtsLmFwcGx5KGEsYXJndW1lbnRzKX0sZS5leHBvcnRzLnBvbHlmaWxsPWZ1bmN0aW9uKGUpe2V8fChlPWEpLGUucmVxdWVzdEFuaW1hdGlvbkZyYW1lPXMsZS5jYW5jZWxBbmltYXRpb25GcmFtZT1sfX0pLmNhbGwodGhpcyxyKDE4KSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIG49KDAscigwKS5jcmVhdGVDb250ZXh0KShudWxsKTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0KXt2YXIgcjtyPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9KCk7dHJ5e3I9cnx8bmV3IEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCl9Y2F0Y2goZSl7Im9iamVjdCI9PXR5cGVvZiB3aW5kb3cmJihyPXdpbmRvdyl9ZS5leHBvcnRzPXJ9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIG49KDAscigwKS5jcmVhdGVDb250ZXh0KShudWxsKTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0LG4sYSl7dmFyIGk7aT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciBhIGluIGUpci5kKG4sYSxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLGEpKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9IiIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSksYT1yKDE0NiksaT1yKDE2Miksbz1yKDE2Mykscz1yKDE1MSksbD1yKDE2NCksYz1yKDE1NiksdT1yKDE1Myk7aWYocig0KSgpKXt2YXIgZj1yKDE2NSkuUERGTm9kZVN0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGYoZSl9KSl9ZWxzZSBpZigidW5kZWZpbmVkIiE9dHlwZW9mIFJlc3BvbnNlJiYiYm9keSJpbiBSZXNwb25zZS5wcm90b3R5cGUmJiJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pe3ZhciBoPXIoMTY4KS5QREZGZXRjaFN0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGgoZSl9KSl9ZWxzZXt2YXIgZD1yKDE2OSkuUERGTmV0d29ya1N0cmVhbTthLnNldFBERk5ldHdvcmtTdHJlYW1GYWN0b3J5KChmdW5jdGlvbihlKXtyZXR1cm4gbmV3IGQoZSl9KSl9dC5idWlsZD1hLmJ1aWxkLHQudmVyc2lvbj1hLnZlcnNpb24sdC5nZXREb2N1bWVudD1hLmdldERvY3VtZW50LHQuTG9vcGJhY2tQb3J0PWEuTG9vcGJhY2tQb3J0LHQuUERGRGF0YVJhbmdlVHJhbnNwb3J0PWEuUERGRGF0YVJhbmdlVHJhbnNwb3J0LHQuUERGV29ya2VyPWEuUERGV29ya2VyLHQucmVuZGVyVGV4dExheWVyPWkucmVuZGVyVGV4dExheWVyLHQuQW5ub3RhdGlvbkxheWVyPW8uQW5ub3RhdGlvbkxheWVyLHQuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHk9bi5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSx0LlBhc3N3b3JkUmVzcG9uc2VzPW4uUGFzc3dvcmRSZXNwb25zZXMsdC5JbnZhbGlkUERGRXhjZXB0aW9uPW4uSW52YWxpZFBERkV4Y2VwdGlvbix0Lk1pc3NpbmdQREZFeGNlcHRpb249bi5NaXNzaW5nUERGRXhjZXB0aW9uLHQuU1ZHR3JhcGhpY3M9bC5TVkdHcmFwaGljcyx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9bi5OYXRpdmVJbWFnZURlY29kaW5nLHQuQ01hcENvbXByZXNzaW9uVHlwZT1uLkNNYXBDb21wcmVzc2lvblR5cGUsdC5QZXJtaXNzaW9uRmxhZz1uLlBlcm1pc3Npb25GbGFnLHQuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uPW4uVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uLHQuT1BTPW4uT1BTLHQuVmVyYm9zaXR5TGV2ZWw9bi5WZXJib3NpdHlMZXZlbCx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPW4uVU5TVVBQT1JURURfRkVBVFVSRVMsdC5jcmVhdGVWYWxpZEFic29sdXRlVXJsPW4uY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCx0LmNyZWF0ZU9iamVjdFVSTD1uLmNyZWF0ZU9iamVjdFVSTCx0LnJlbW92ZU51bGxDaGFyYWN0ZXJzPW4ucmVtb3ZlTnVsbENoYXJhY3RlcnMsdC5zaGFkb3c9bi5zaGFkb3csdC5VdGlsPW4uVXRpbCx0LlJlYWRhYmxlU3RyZWFtPW4uUmVhZGFibGVTdHJlYW0sdC5VUkw9bi5VUkwsdC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249cy5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb24sdC5nZXRGaWxlbmFtZUZyb21Vcmw9cy5nZXRGaWxlbmFtZUZyb21VcmwsdC5MaW5rVGFyZ2V0PXMuTGlua1RhcmdldCx0LmFkZExpbmtBdHRyaWJ1dGVzPXMuYWRkTGlua0F0dHJpYnV0ZXMsdC5sb2FkU2NyaXB0PXMubG9hZFNjcmlwdCx0Lkdsb2JhbFdvcmtlck9wdGlvbnM9Yy5HbG9iYWxXb3JrZXJPcHRpb25zLHQuYXBpQ29tcGF0aWJpbGl0eVBhcmFtcz11LmFwaUNvbXBhdGliaWxpdHlQYXJhbXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudG9Sb21hbk51bWVyYWxzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtmb3IodmFyIHIsbj1bXTtlPj0xZTM7KWUtPTFlMyxuLnB1c2goIk0iKTtyPWUvMTAwfDAsZSU9MTAwLG4ucHVzaChDW3JdKSxyPWUvMTB8MCxlJT0xMCxuLnB1c2goQ1sxMCtyXSksbi5wdXNoKENbMjArZV0pO3ZhciBhPW4uam9pbigiIik7cmV0dXJuIHQ/YS50b0xvd2VyQ2FzZSgpOmF9LHQuYXJyYXlCeXRlTGVuZ3RoPV8sdC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKGUpe2lmKDE9PT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTt2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKXI9ZVt0XSxuPV8ociksYSs9bjt2YXIgbz0wLHM9bmV3IFVpbnQ4QXJyYXkoYSk7Zm9yKHQ9MDt0PGk7dCsrKShyPWVbdF0paW5zdGFuY2VvZiBVaW50OEFycmF5fHwocj0ic3RyaW5nIj09dHlwZW9mIHI/UyhyKTpuZXcgVWludDhBcnJheShyKSksbj1yLmJ5dGVMZW5ndGgscy5zZXQocixvKSxvKz1uO3JldHVybiBzfSx0LmFzc2VydD11LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXt1KG51bGwhPT1lJiYib2JqZWN0Ij09PWkoZSkmJnZvaWQgMCE9PWUubGVuZ3RoLCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIHQ9ZS5sZW5ndGg7aWYodDw4MTkyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Zm9yKHZhciByPVtdLG49MDtuPHQ7bis9ODE5Mil7dmFyIGE9TWF0aC5taW4obis4MTkyLHQpLG89ZS5zdWJhcnJheShuLGEpO3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbykpfXJldHVybiByLmpvaW4oIiIpfSx0LmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PSExO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0dGxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLGUucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtlLnJlc29sdmU9ZnVuY3Rpb24oZSl7dD0hMCxyKGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXt0PSEwLG4oZSl9fSkpLGV9LHQuZGVwcmVjYXRlZD1mdW5jdGlvbihlKXtjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIrZSl9LHQuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmRpY3Qsbj1lLmtleSxhPWUuZ2V0QXJyYXksaT12b2lkIDAhPT1hJiZhLG89ZS5zdG9wV2hlbkZvdW5kLHM9dm9pZCAwPT09b3x8byxjPTA7cjspe3ZhciB1PWk/ci5nZXRBcnJheShuKTpyLmdldChuKTtpZih2b2lkIDAhPT11KXtpZihzKXJldHVybiB1O3R8fCh0PVtdKSx0LnB1c2godSl9aWYoKytjPjEwMCl7bCgnZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTogbWF4aW11bSBsb29wIGNvdW50IGV4Y2VlZGVkIGZvciAiJy5jb25jYXQobiwnIicpKTticmVha31yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH0sdC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUmJih0PU9iamVjdC5jcmVhdGUobnVsbCksZSh0KSxlPW51bGwpLHR9fSx0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuaW5mbz1mdW5jdGlvbihlKXtzPj1vLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIitlKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09aShlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sdC5pc0VtcHR5T2JqPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSx0LmlzTnVtPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sdC5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LHQuaXNTcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTM9PT1lfHwxMD09PWV9LHQuaXNTYW1lT3JpZ2luPWZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciByPW5ldyBhLlVSTChlKTtpZighci5vcmlnaW58fCJudWxsIj09PXIub3JpZ2luKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfXZhciBuPW5ldyBhLlVSTCh0LHIpO3JldHVybiByLm9yaWdpbj09PW4ub3JpZ2lufSx0LmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHI9dD9uZXcgYS5VUkwoZSx0KTpuZXcgYS5VUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0ocikpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmlzTGl0dGxlRW5kaWFuPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCk7cmV0dXJuIGVbMF09MSwxPT09bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsMSlbMF19LHQuaXNFdmFsU3VwcG9ydGVkPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sdC5sb2cyPWZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6TWF0aC5jZWlsKE1hdGgubG9nMihlKSl9LHQucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fSx0LnJlYWRVaW50MTY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8OHxlW3QrMV19LHQucmVhZFVpbnQzMj1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH0sdC5yZW1vdmVOdWxsQ2hhcmFjdGVycz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/KGwoIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4iKSxlKTplLnJlcGxhY2UoaywiIil9LHQuc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHM9ZSl9LHQuc2hhZG93PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9LHQuc3RyaW5nMzI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9LHQuc3RyaW5nVG9CeXRlcz1TLHQuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aCxuPVtdO2lmKCLDviI9PT1lWzBdJiYiw78iPT09ZVsxXSlmb3IodD0yO3Q8cjt0Kz0yKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCh0KTw8OHxlLmNoYXJDb2RlQXQodCsxKSkpO2Vsc2UgZm9yKHQ9MDt0PHI7Kyt0KXt2YXIgYT1QW2UuY2hhckNvZGVBdCh0KV07bi5wdXNoKGE/U3RyaW5nLmZyb21DaGFyQ29kZShhKTplLmNoYXJBdCh0KSl9cmV0dXJuIG4uam9pbigiIil9LHQuc3RyaW5nVG9VVEY4U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX0sdC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9LHQud2Fybj1sLHQudW5yZWFjaGFibGU9YyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVhZGFibGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlJlYWRhYmxlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVUkwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlVSTH19KSx0LmNyZWF0ZU9iamVjdFVSTD10LkZvcm1hdEVycm9yPXQuWFJlZlBhcnNlRXhjZXB0aW9uPXQuWFJlZkVudHJ5RXhjZXB0aW9uPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlRleHRSZW5kZXJpbmdNb2RlPXQuU3RyZWFtVHlwZT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTWlzc2luZ0RhdGFFeGNlcHRpb249dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuQWJvcnRFeGNlcHRpb249dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuSW1hZ2VLaW5kPXQuRm9udFR5cGU9dC5Bbm5vdGF0aW9uVHlwZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz10LlZlcmJvc2l0eUxldmVsPXQuT1BTPXQuSURFTlRJVFlfTUFUUklYPXQuRk9OVF9JREVOVElUWV9NQVRSSVg9dm9pZCAwLHIoMik7dmFyIG49cigxNDIpLGE9cigxNDQpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX10LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLHQuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9e05PTkU6Im5vbmUiLERFQ09ERToiZGVjb2RlIixESVNQTEFZOiJkaXNwbGF5In0sdC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSx0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9LHQuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M30sdC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9LHQuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LHQuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sdC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSx0LlN0cmVhbVR5cGU9e1VOS05PV046MCxGTEFURToxLExaVzoyLERDVDozLEpQWDo0LEpCSUc6NSxBODU6NixBSFg6NyxDQ0Y6OCxSTDo5fSx0LkZvbnRUeXBlPXtVTktOT1dOOjAsVFlQRTE6MSxUWVBFMUM6MixDSURGT05UVFlQRTA6MyxDSURGT05UVFlQRTBDOjQsVFJVRVRZUEU6NSxDSURGT05UVFlQRTI6NixUWVBFMzo3LE9QRU5UWVBFOjgsVFlQRTA6OSxNTVRZUEUxOjEwfTt2YXIgbz17RVJST1JTOjAsV0FSTklOR1M6MSxJTkZPUzo1fTt0LlZlcmJvc2l0eUxldmVsPW8sdC5DTWFwQ29tcHJlc3Npb25UeXBlPXtOT05FOjAsQklOQVJZOjEsU1RSRUFNOjJ9LHQuT1BTPXtkZXBlbmRlbmN5OjEsc2V0TGluZVdpZHRoOjIsc2V0TGluZUNhcDozLHNldExpbmVKb2luOjQsc2V0TWl0ZXJMaW1pdDo1LHNldERhc2g6NixzZXRSZW5kZXJpbmdJbnRlbnQ6NyxzZXRGbGF0bmVzczo4LHNldEdTdGF0ZTo5LHNhdmU6MTAscmVzdG9yZToxMSx0cmFuc2Zvcm06MTIsbW92ZVRvOjEzLGxpbmVUbzoxNCxjdXJ2ZVRvOjE1LGN1cnZlVG8yOjE2LGN1cnZlVG8zOjE3LGNsb3NlUGF0aDoxOCxyZWN0YW5nbGU6MTksc3Ryb2tlOjIwLGNsb3NlU3Ryb2tlOjIxLGZpbGw6MjIsZW9GaWxsOjIzLGZpbGxTdHJva2U6MjQsZW9GaWxsU3Ryb2tlOjI1LGNsb3NlRmlsbFN0cm9rZToyNixjbG9zZUVPRmlsbFN0cm9rZToyNyxlbmRQYXRoOjI4LGNsaXA6MjksZW9DbGlwOjMwLGJlZ2luVGV4dDozMSxlbmRUZXh0OjMyLHNldENoYXJTcGFjaW5nOjMzLHNldFdvcmRTcGFjaW5nOjM0LHNldEhTY2FsZTozNSxzZXRMZWFkaW5nOjM2LHNldEZvbnQ6Mzcsc2V0VGV4dFJlbmRlcmluZ01vZGU6Mzgsc2V0VGV4dFJpc2U6MzksbW92ZVRleHQ6NDAsc2V0TGVhZGluZ01vdmVUZXh0OjQxLHNldFRleHRNYXRyaXg6NDIsbmV4dExpbmU6NDMsc2hvd1RleHQ6NDQsc2hvd1NwYWNlZFRleHQ6NDUsbmV4dExpbmVTaG93VGV4dDo0NixuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDo0NyxzZXRDaGFyV2lkdGg6NDgsc2V0Q2hhcldpZHRoQW5kQm91bmRzOjQ5LHNldFN0cm9rZUNvbG9yU3BhY2U6NTAsc2V0RmlsbENvbG9yU3BhY2U6NTEsc2V0U3Ryb2tlQ29sb3I6NTIsc2V0U3Ryb2tlQ29sb3JOOjUzLHNldEZpbGxDb2xvcjo1NCxzZXRGaWxsQ29sb3JOOjU1LHNldFN0cm9rZUdyYXk6NTYsc2V0RmlsbEdyYXk6NTcsc2V0U3Ryb2tlUkdCQ29sb3I6NTgsc2V0RmlsbFJHQkNvbG9yOjU5LHNldFN0cm9rZUNNWUtDb2xvcjo2MCxzZXRGaWxsQ01ZS0NvbG9yOjYxLHNoYWRpbmdGaWxsOjYyLGJlZ2luSW5saW5lSW1hZ2U6NjMsYmVnaW5JbWFnZURhdGE6NjQsZW5kSW5saW5lSW1hZ2U6NjUscGFpbnRYT2JqZWN0OjY2LG1hcmtQb2ludDo2NyxtYXJrUG9pbnRQcm9wczo2OCxiZWdpbk1hcmtlZENvbnRlbnQ6NjksYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6NzAsZW5kTWFya2VkQ29udGVudDo3MSxiZWdpbkNvbXBhdDo3MixlbmRDb21wYXQ6NzMscGFpbnRGb3JtWE9iamVjdEJlZ2luOjc0LHBhaW50Rm9ybVhPYmplY3RFbmQ6NzUsYmVnaW5Hcm91cDo3NixlbmRHcm91cDo3NyxiZWdpbkFubm90YXRpb25zOjc4LGVuZEFubm90YXRpb25zOjc5LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SnBlZ1hPYmplY3Q6ODIscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXt1bmtub3duOiJ1bmtub3duIixmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixmb250OiJmb250In0sdC5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgcz1vLldBUk5JTkdTO2Z1bmN0aW9uIGwoZSl7cz49by5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIrZSl9ZnVuY3Rpb24gYyhlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gdShlLHQpe2V8fGModCl9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJQYXNzd29yZEV4Y2VwdGlvbiIsdGhpcy5tZXNzYWdlPWUsdGhpcy5jb2RlPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlBhc3N3b3JkRXhjZXB0aW9uPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmtub3duRXJyb3JFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuZGV0YWlscz10fXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5uYW1lPSJJbnZhbGlkUERGRXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuSW52YWxpZFBERkV4Y2VwdGlvbj1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9Ik1pc3NpbmdQREZFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5NaXNzaW5nUERGRXhjZXB0aW9uPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhdHVzPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuYmVnaW49ZSx0aGlzLmVuZD10LHRoaXMubWVzc2FnZT0iTWlzc2luZyBkYXRhIFsiK2UrIiwgIit0KyIpIn1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9Ik1pc3NpbmdEYXRhRXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPWc7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT0iWFJlZkVudHJ5RXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlhSZWZQYXJzZUV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5YUmVmUGFyc2VFeGNlcHRpb249eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPWV9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJGb3JtYXRFcnJvciIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Gb3JtYXRFcnJvcj1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9IkFib3J0RXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuQWJvcnRFeGNlcHRpb249dzt2YXIgaz0vXHgwMC9nO2Z1bmN0aW9uIFMoZSl7dSgic3RyaW5nIj09dHlwZW9mIGUsIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgVWludDhBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdm9pZCAwIT09ZS5sZW5ndGg/ZS5sZW5ndGg6KHUodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKSxlLmJ5dGVMZW5ndGgpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe312YXIgdD1bInJnYigiLDAsIiwiLDAsIiwiLDAsIikiXTtyZXR1cm4gZS5tYWtlQ3NzUmdiPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFsxXT1lLHRbM109cix0WzVdPW4sdC5qb2luKCIiKX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX0sZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX0sZS5hcHBseUludmVyc2VUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX0sZS5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX0sZS5pbnZlcnNlVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX0sZS5hcHBseTNkVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdLGVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdLGVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdXX0sZS5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydCgocitpKSoocitpKS00KihyKmktYSpuKSkvMixsPW8rc3x8MSxjPW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydChjKV19LGUubm9ybWFsaXplUmVjdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKDApO3JldHVybiBlWzBdPmVbMl0mJih0WzBdPWVbMl0sdFsyXT1lWzBdKSxlWzFdPmVbM10mJih0WzFdPWVbM10sdFszXT1lWzFdKSx0fSxlLmludGVyc2VjdD1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS10fXZhciBhPVt0WzBdLHRbMl0sclswXSxyWzJdXS5zb3J0KG4pLGk9W3RbMV0sdFszXSxyWzFdLHJbM11dLnNvcnQobiksbz1bXTtyZXR1cm4gdD1lLm5vcm1hbGl6ZVJlY3QodCkscj1lLm5vcm1hbGl6ZVJlY3QociksKGFbMF09PT10WzBdJiZhWzFdPT09clswXXx8YVswXT09PXJbMF0mJmFbMV09PT10WzBdKSYmKG9bMF09YVsxXSxvWzJdPWFbMl0sKGlbMF09PT10WzFdJiZpWzFdPT09clsxXXx8aVswXT09PXJbMV0mJmlbMV09PT10WzFdKSYmKG9bMV09aVsxXSxvWzNdPWlbMl0sbykpfSxlfSgpO3QuVXRpbD14O3ZhciBBLEM9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXSxQPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XSxFPShBPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCFyJiZhLlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBuPW5ldyBCbG9iKFtlXSx7dHlwZTp0fSk7cmV0dXJuIGEuVVJMLmNyZWF0ZU9iamVjdFVSTChuKX1mb3IodmFyIGk9ImRhdGE6Iit0KyI7YmFzZTY0LCIsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTMpe3ZhciBsPTI1NSZlW29dLGM9MjU1JmVbbysxXSx1PTI1NSZlW28rMl0sZj1sPj4yLGg9KDMmbCk8PDR8Yz4+NCxkPW8rMTxzPygxNSZjKTw8Mnx1Pj42OjY0LHA9bysyPHM/NjMmdTo2NDtpKz1BW2ZdK0FbaF0rQVtkXStBW3BdfXJldHVybiBpfSk7dC5jcmVhdGVPYmplY3RVUkw9RX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGUpe3JldHVybihhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGk9bigzKTtpZighaS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZCl7aS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMDt2YXIgbz1uKDQpLHM9Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6YSh3aW5kb3cpKSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudD8idW5kZWZpbmVkIjphKGRvY3VtZW50KSk7IWkuYnRvYSYmbygpJiYoaS5idG9hPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWkuYXRvYiYmbygpJiYoaS5hdG9iPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSkscyYmdm9pZCAwPT09RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlJiYoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxmdW5jdGlvbigpe2lmKHMmJiFvKCkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGUuY2xhc3NMaXN0LmFkZCgidGVzdE9uZSIsInRlc3RUd28iKSwhMCE9PWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZXN0T25lIil8fCEwIT09ZS5jbGFzc0xpc3QuY29udGFpbnMoInRlc3RUd28iKSl7dmFyIHQ9RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQscj1ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO3QuY2FsbCh0aGlzLGkpfX0sRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtyLmNhbGwodGhpcyxpKX19fX19KCkscyYmIW8oKSYmITEhPT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5jbGFzc0xpc3QudG9nZ2xlKCJ0ZXN0IiwwKSYmKERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT8hIWFyZ3VtZW50c1sxXTohdGhpcy5jb250YWlucyhlKTtyZXR1cm4gdGhpc1t0PyJhZGQiOiJyZW1vdmUiXShlKSx0fSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHxuKDUpLFN0cmluZy5wcm90b3R5cGUuZW5kc1dpdGh8fG4oMzUpLFN0cmluZy5wcm90b3R5cGUuaW5jbHVkZXN8fG4oMzcpLEFycmF5LnByb3RvdHlwZS5pbmNsdWRlc3x8bigzOSksQXJyYXkuZnJvbXx8big0NiksT2JqZWN0LmFzc2lnbnx8big2OSksTWF0aC5sb2cyfHwoTWF0aC5sb2cyPW4oNzQpKSxOdW1iZXIuaXNOYU58fChOdW1iZXIuaXNOYU49big3NikpLE51bWJlci5pc0ludGVnZXJ8fChOdW1iZXIuaXNJbnRlZ2VyPW4oNzgpKSxpLlByb21pc2UmJmkuUHJvbWlzZS5wcm90b3R5cGUmJmkuUHJvbWlzZS5wcm90b3R5cGUuZmluYWxseXx8KGkuUHJvbWlzZT1uKDgxKSksaS5XZWFrTWFwfHwoaS5XZWFrTWFwPW4oMTAxKSksaS5XZWFrU2V0fHwoaS5XZWFrU2V0PW4oMTE4KSksU3RyaW5nLmNvZGVQb2ludEF0fHwoU3RyaW5nLmNvZGVQb2ludEF0PW4oMTIyKSksU3RyaW5nLmZyb21Db2RlUG9pbnR8fChTdHJpbmcuZnJvbUNvZGVQb2ludD1uKDEyNCkpLGkuU3ltYm9sfHxuKDEyNiksU3RyaW5nLnByb3RvdHlwZS5wYWRTdGFydHx8bigxMzMpLFN0cmluZy5wcm90b3R5cGUucGFkRW5kfHxuKDEzNyksT2JqZWN0LnZhbHVlc3x8KE9iamVjdC52YWx1ZXM9bigxMzkpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09PU1hdGg/d2luZG93OnZvaWQgMCE9PW4mJm4uTWF0aD09PU1hdGg/bjoidW5kZWZpbmVkIiE9dHlwZW9mIHNlbGYmJnNlbGYuTWF0aD09PU1hdGg/c2VsZjp7fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09YT8idW5kZWZpbmVkIjpuKGEpKSYmYSsiIj09IltvYmplY3QgcHJvY2Vzc10iJiYhYS52ZXJzaW9ucy5ud319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig2KSxlLmV4cG9ydHM9cig5KS5TdHJpbmcuc3RhcnRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigyNSksaT1yKDI3KSxvPSIiLnN0YXJ0c1dpdGg7bihuLlArbi5GKnIoMzQpKCJzdGFydHNXaXRoIiksIlN0cmluZyIse3N0YXJ0c1dpdGg6ZnVuY3Rpb24oZSl7dmFyIHQ9aSh0aGlzLGUsInN0YXJ0c1dpdGgiKSxyPWEoTWF0aC5taW4oYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsdC5sZW5ndGgpKSxuPVN0cmluZyhlKTtyZXR1cm4gbz9vLmNhbGwodCxuLHIpOnQuc2xpY2UocixyK24ubGVuZ3RoKT09PW59fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOSksaT1yKDEwKSxvPXIoMjApLHM9cigyMyksbD1mdW5jdGlvbiBlKHQscixsKXt2YXIgYyx1LGYsaCxkPXQmZS5GLHA9dCZlLkcsbT10JmUuUCxnPXQmZS5CLHY9cD9uOnQmZS5TP25bcl18fChuW3JdPXt9KToobltyXXx8e30pLnByb3RvdHlwZSx5PXA/YTphW3JdfHwoYVtyXT17fSksYj15LnByb3RvdHlwZXx8KHkucHJvdG90eXBlPXt9KTtmb3IoYyBpbiBwJiYobD1yKSxsKWY9KCh1PSFkJiZ2JiZ2b2lkIDAhPT12W2NdKT92OmwpW2NdLGg9ZyYmdT9zKGYsbik6bSYmImZ1bmN0aW9uIj09dHlwZW9mIGY/cyhGdW5jdGlvbi5jYWxsLGYpOmYsdiYmbyh2LGMsZix0JmUuVSkseVtjXSE9ZiYmaSh5LGMsaCksbSYmYltjXSE9ZiYmKGJbY109Zil9O24uY29yZT1hLGwuRj0xLGwuRz0yLGwuUz00LGwuUD04LGwuQj0xNixsLlc9MzIsbC5VPTY0LGwuUj0xMjgsZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi42LjIifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMTkpO2UuZXhwb3J0cz1yKDE1KT9mdW5jdGlvbihlLHQscil7cmV0dXJuIG4uZihlLHQsYSgxLHIpKX06ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXIsZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDE0KSxpPXIoMTgpLG89T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1yKDE1KT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2lmKG4oZSksdD1pKHQsITApLG4ociksYSl0cnl7cmV0dXJuIG8oZSx0LHIpfWNhdGNoKGUpe31pZigiZ2V0ImluIHJ8fCJzZXQiaW4gcil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiByJiYoZVt0XT1yLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09bihlKT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSFyKDE1KSYmIXIoMTYpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigxNykoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IXIoMTYpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoOCkuZG9jdW1lbnQsaT1uKGEpJiZuKGEuY3JlYXRlRWxlbWVudCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBpP2EuY3JlYXRlRWxlbWVudChlKTp7fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYoIW4oZSkpcmV0dXJuIGU7dmFyIHIsYTtpZih0JiYiZnVuY3Rpb24iPT10eXBlb2Yocj1lLnRvU3RyaW5nKSYmIW4oYT1yLmNhbGwoZSkpKXJldHVybiBhO2lmKCJmdW5jdGlvbiI9PXR5cGVvZihyPWUudmFsdWVPZikmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTtpZighdCYmImZ1bmN0aW9uIj09dHlwZW9mKHI9ZS50b1N0cmluZykmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTt0aHJvdyBUeXBlRXJyb3IoIkNhbid0IGNvbnZlcnQgb2JqZWN0IHRvIHByaW1pdGl2ZSB2YWx1ZSIpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57ZW51bWVyYWJsZTohKDEmZSksY29uZmlndXJhYmxlOiEoMiZlKSx3cml0YWJsZTohKDQmZSksdmFsdWU6dH19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOCksYT1yKDEwKSxpPXIoMjEpLG89cigyMikoInNyYyIpLHM9RnVuY3Rpb24udG9TdHJpbmcsbD0oIiIrcykuc3BsaXQoInRvU3RyaW5nIik7cig5KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHI7YyYmKGkociwibmFtZSIpfHxhKHIsIm5hbWUiLHQpKSxlW3RdIT09ciYmKGMmJihpKHIsbyl8fGEocixvLGVbdF0/IiIrZVt0XTpsLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1uP2VbdF09cjpzP2VbdF0/ZVt0XT1yOmEoZSx0LHIpOihkZWxldGUgZVt0XSxhKGUsdCxyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHMuY2FsbCh0aGlzKX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPTAsYT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rYSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0LHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUuY2FsbCh0LHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGEpe3JldHVybiBlLmNhbGwodCxyLG4sYSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP2EobihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1NYXRoLmNlaWwsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP2E6bikoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjgpLGE9cigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrcisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLGE9cigyOSksaT1yKDMwKSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJih2b2lkIDAhPT0odD1lW2ldKT8hIXQ6IlJlZ0V4cCI9PWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMSkoIndrcyIpLGE9cigyMiksaT1yKDgpLlN5bWJvbCxvPSJmdW5jdGlvbiI9PXR5cGVvZiBpOyhlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPW8mJmlbZV18fChvP2k6YSkoIlN5bWJvbC4iK2UpKX0pLnN0b3JlPW59LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig5KSxhPXIoOCksaT1hWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KGFbIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnIoMzIpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSExfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5eyIvLi8iW2VdKHQpfWNhdGNoKHIpe3RyeXtyZXR1cm4gdFtuXT0hMSwhIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigzNiksZS5leHBvcnRzPXIoOSkuU3RyaW5nLmVuZHNXaXRofSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI1KSxpPXIoMjcpLG89IiIuZW5kc1dpdGg7bihuLlArbi5GKnIoMzQpKCJlbmRzV2l0aCIpLCJTdHJpbmciLHtlbmRzV2l0aDpmdW5jdGlvbihlKXt2YXIgdD1pKHRoaXMsZSwiZW5kc1dpdGgiKSxyPWFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLG49YSh0Lmxlbmd0aCkscz12b2lkIDA9PT1yP246TWF0aC5taW4oYShyKSxuKSxsPVN0cmluZyhlKTtyZXR1cm4gbz9vLmNhbGwodCxsLHMpOnQuc2xpY2Uocy1sLmxlbmd0aCxzKT09PWx9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigzOCksZS5leHBvcnRzPXIoOSkuU3RyaW5nLmluY2x1ZGVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI3KTtuKG4uUCtuLkYqcigzNCkoImluY2x1ZGVzIiksIlN0cmluZyIse2luY2x1ZGVzOmZ1bmN0aW9uKGUpe3JldHVybiEhfmEodGhpcyxlLCJpbmNsdWRlcyIpLmluZGV4T2YoZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig0MCksZS5leHBvcnRzPXIoOSkuQXJyYXkuaW5jbHVkZXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KSxhPXIoNDEpKCEwKTtuKG4uUCwiQXJyYXkiLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNDUpKCJpbmNsdWRlcyIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDIpLGE9cigyNSksaT1yKDQ0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixvKXt2YXIgcyxsPW4odCksYz1hKGwubGVuZ3RoKSx1PWkobyxjKTtpZihlJiZyIT1yKXtmb3IoO2M+dTspaWYoKHM9bFt1KytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PXIpcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0MyksYT1yKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjkpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9bihlKSk8MD9hKGUrdCwwKTppKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApKCJ1bnNjb3BhYmxlcyIpLGE9QXJyYXkucHJvdG90eXBlO251bGw9PWFbbl0mJnIoMTApKGEsbix7fSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Fbbl1bZV09ITB9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNDcpLHIoNjIpLGUuZXhwb3J0cz1yKDkpLkFycmF5LmZyb219LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCkoITApO3IoNDkpKFN0cmluZywiU3RyaW5nIiwoZnVuY3Rpb24oZSl7dGhpcy5fdD1TdHJpbmcoZSksdGhpcy5faT0wfSksKGZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLl90LHI9dGhpcy5faTtyZXR1cm4gcj49dC5sZW5ndGg/e3ZhbHVlOnZvaWQgMCxkb25lOiEwfTooZT1uKHQsciksdGhpcy5faSs9ZS5sZW5ndGgse3ZhbHVlOmUsZG9uZTohMX0pfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjYpLGE9cigzMyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0LHIpe3ZhciBpLG8scz1TdHJpbmcoYSh0KSksbD1uKHIpLGM9cy5sZW5ndGg7cmV0dXJuIGw8MHx8bD49Yz9lPyIiOnZvaWQgMDooaT1zLmNoYXJDb2RlQXQobCkpPDU1Mjk2fHxpPjU2MzE5fHxsKzE9PT1jfHwobz1zLmNoYXJDb2RlQXQobCsxKSk8NTYzMjB8fG8+NTczNDM/ZT9zLmNoYXJBdChsKTppOmU/cy5zbGljZShsLGwrMik6by01NjMyMCsoaS01NTI5Njw8MTApKzY1NTM2fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMiksYT1yKDcpLGk9cigyMCksbz1yKDEwKSxzPXIoNTApLGw9cig1MSksYz1yKDU5KSx1PXIoNjApLGY9cigzMCkoIml0ZXJhdG9yIiksaD0hKFtdLmtleXMmJiJuZXh0ImluW10ua2V5cygpKSxkPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixwLG0sZyx2KXtsKHIsdCxwKTt2YXIgeSxiLHcsaz1mdW5jdGlvbihlKXtpZighaCYmZSBpbiBBKXJldHVybiBBW2VdO3N3aXRjaChlKXtjYXNlImtleXMiOmNhc2UidmFsdWVzIjpyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyxlKX19cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyByKHRoaXMsZSl9fSxTPXQrIiBJdGVyYXRvciIsXz0idmFsdWVzIj09bSx4PSExLEE9ZS5wcm90b3R5cGUsQz1BW2ZdfHxBWyJAQGl0ZXJhdG9yIl18fG0mJkFbbV0sUD1DfHxrKG0pLEU9bT9fP2soImVudHJpZXMiKTpQOnZvaWQgMCxUPSJBcnJheSI9PXQmJkEuZW50cmllc3x8QztpZihUJiYodz11KFQuY2FsbChuZXcgZSkpKSE9PU9iamVjdC5wcm90b3R5cGUmJncubmV4dCYmKGModyxTLCEwKSxufHwiZnVuY3Rpb24iPT10eXBlb2Ygd1tmXXx8byh3LGYsZCkpLF8mJkMmJiJ2YWx1ZXMiIT09Qy5uYW1lJiYoeD0hMCxQPWZ1bmN0aW9uKCl7cmV0dXJuIEMuY2FsbCh0aGlzKX0pLG4mJiF2fHwhaCYmIXgmJkFbZl18fG8oQSxmLFApLHNbdF09UCxzW1NdPWQsbSlpZih5PXt2YWx1ZXM6Xz9QOmsoInZhbHVlcyIpLGtleXM6Zz9QOmsoImtleXMiKSxlbnRyaWVzOkV9LHYpZm9yKGIgaW4geSliIGluIEF8fGkoQSxiLHlbYl0pO2Vsc2UgYShhLlArYS5GKihofHx4KSx0LHkpO3JldHVybiB5fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9e319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1MiksYT1yKDE5KSxpPXIoNTkpLG89e307cigxMCkobyxyKDMwKSgiaXRlcmF0b3IiKSwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30pKSxlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe2UucHJvdG90eXBlPW4obyx7bmV4dDphKDEscil9KSxpKGUsdCsiIEl0ZXJhdG9yIil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig1MyksaT1yKDU3KSxvPXIoNTYpKCJJRV9QUk9UTyIpLHM9ZnVuY3Rpb24oKXt9LGw9ZnVuY3Rpb24oKXt2YXIgZSx0PXIoMTcpKCJpZnJhbWUiKSxuPWkubGVuZ3RoO2Zvcih0LnN0eWxlLmRpc3BsYXk9Im5vbmUiLHIoNTgpLmFwcGVuZENoaWxkKHQpLHQuc3JjPSJqYXZhc2NyaXB0OiIsKGU9dC5jb250ZW50V2luZG93LmRvY3VtZW50KS5vcGVuKCksZS53cml0ZSgiPHNjcmlwdD5kb2N1bWVudC5GPU9iamVjdDxcL3NjcmlwdD4iKSxlLmNsb3NlKCksbD1lLkY7bi0tOylkZWxldGUgbC5wcm90b3R5cGVbaVtuXV07cmV0dXJuIGwoKX07ZS5leHBvcnRzPU9iamVjdC5jcmVhdGV8fGZ1bmN0aW9uKGUsdCl7dmFyIHI7cmV0dXJuIG51bGwhPT1lPyhzLnByb3RvdHlwZT1uKGUpLHI9bmV3IHMscy5wcm90b3R5cGU9bnVsbCxyW29dPWUpOnI9bCgpLHZvaWQgMD09PXQ/cjphKHIsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxMiksaT1yKDU0KTtlLmV4cG9ydHM9cigxNSk/T2JqZWN0LmRlZmluZVByb3BlcnRpZXM6ZnVuY3Rpb24oZSx0KXthKGUpO2Zvcih2YXIgcixvPWkodCkscz1vLmxlbmd0aCxsPTA7cz5sOyluLmYoZSxyPW9bbCsrXSx0W3JdKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDU3KTtlLmV4cG9ydHM9T2JqZWN0LmtleXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjEpLGE9cig0MiksaT1yKDQxKSghMSksbz1yKDU2KSgiSUVfUFJPVE8iKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixzPWEoZSksbD0wLGM9W107Zm9yKHIgaW4gcylyIT1vJiZuKHMscikmJmMucHVzaChyKTtmb3IoO3QubGVuZ3RoPmw7KW4ocyxyPXRbbCsrXSkmJih+aShjLHIpfHxjLnB1c2gocikpO3JldHVybiBjfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSgia2V5cyIpLGE9cigyMik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHwobltlXT1hKGUpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSJjb25zdHJ1Y3RvcixoYXNPd25Qcm9wZXJ0eSxpc1Byb3RvdHlwZU9mLHByb3BlcnR5SXNFbnVtZXJhYmxlLHRvTG9jYWxlU3RyaW5nLHRvU3RyaW5nLHZhbHVlT2YiLnNwbGl0KCIsIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KS5kb2N1bWVudDtlLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSkuZixhPXIoMjEpLGk9cigzMCkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhYShlPXI/ZTplLnByb3RvdHlwZSxpKSYmbihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjEpLGE9cig2MSksaT1yKDU2KSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YShlKSxuKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNyksaT1yKDYxKSxvPXIoNjMpLHM9cig2NCksbD1yKDI1KSxjPXIoNjUpLHU9cig2Nik7YShhLlMrYS5GKiFyKDY4KSgoZnVuY3Rpb24oZSl7QXJyYXkuZnJvbShlKX0pKSwiQXJyYXkiLHtmcm9tOmZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxmLGg9aShlKSxkPSJmdW5jdGlvbiI9PXR5cGVvZiB0aGlzP3RoaXM6QXJyYXkscD1hcmd1bWVudHMubGVuZ3RoLG09cD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsZz12b2lkIDAhPT1tLHY9MCx5PXUoaCk7aWYoZyYmKG09bihtLHA+Mj9hcmd1bWVudHNbMl06dm9pZCAwLDIpKSxudWxsPT15fHxkPT1BcnJheSYmcyh5KSlmb3Iocj1uZXcgZCh0PWwoaC5sZW5ndGgpKTt0PnY7disrKWMocix2LGc/bShoW3ZdLHYpOmhbdl0pO2Vsc2UgZm9yKGY9eS5jYWxsKGgpLHI9bmV3IGQ7IShhPWYubmV4dCgpKS5kb25lO3YrKyljKHIsdixnP28oZixtLFthLnZhbHVlLHZdLCEwKTphLnZhbHVlKTtyZXR1cm4gci5sZW5ndGg9dixyfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixhKXt0cnl7cmV0dXJuIGE/dChuKHIpWzBdLHJbMV0pOnQocil9Y2F0Y2godCl7dmFyIGk9ZS5yZXR1cm47dGhyb3cgdm9pZCAwIT09aSYmbihpLmNhbGwoZSkpLHR9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDUwKSxhPXIoMzApKCJpdGVyYXRvciIpLGk9QXJyYXkucHJvdG90eXBlO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09ZSYmKG4uQXJyYXk9PT1lfHxpW2FdPT09ZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt0IGluIGU/bi5mKGUsdCxhKDAscikpOmVbdF09cn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig2NyksYT1yKDMwKSgiaXRlcmF0b3IiKSxpPXIoNTApO2UuZXhwb3J0cz1yKDkpLmdldEl0ZXJhdG9yTWV0aG9kPWZ1bmN0aW9uKGUpe2lmKG51bGwhPWUpcmV0dXJuIGVbYV18fGVbIkBAaXRlcmF0b3IiXXx8aVtuKGUpXX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyOSksYT1yKDMwKSgidG9TdHJpbmdUYWciKSxpPSJBcmd1bWVudHMiPT1uKGZ1bmN0aW9uKCl7cmV0dXJuIGFyZ3VtZW50c30oKSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbztyZXR1cm4gdm9pZCAwPT09ZT8iVW5kZWZpbmVkIjpudWxsPT09ZT8iTnVsbCI6InN0cmluZyI9PXR5cGVvZihyPWZ1bmN0aW9uKGUsdCl7dHJ5e3JldHVybiBlW3RdfWNhdGNoKGUpe319KHQ9T2JqZWN0KGUpLGEpKT9yOmk/bih0KToiT2JqZWN0Ij09KG89bih0KSkmJiJmdW5jdGlvbiI9PXR5cGVvZiB0LmNhbGxlZT8iQXJndW1lbnRzIjpvfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMwKSgiaXRlcmF0b3IiKSxhPSExO3RyeXt2YXIgaT1bN11bbl0oKTtpLnJldHVybj1mdW5jdGlvbigpe2E9ITB9LEFycmF5LmZyb20oaSwoZnVuY3Rpb24oKXt0aHJvdyAyfSkpfWNhdGNoKGUpe31lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighdCYmIWEpcmV0dXJuITE7dmFyIHI9ITE7dHJ5e3ZhciBpPVs3XSxvPWlbbl0oKTtvLm5leHQ9ZnVuY3Rpb24oKXtyZXR1cm57ZG9uZTpyPSEwfX0saVtuXT1mdW5jdGlvbigpe3JldHVybiBvfSxlKGkpfWNhdGNoKGUpe31yZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3MCksZS5leHBvcnRzPXIoOSkuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpO24obi5TK24uRiwiT2JqZWN0Iix7YXNzaWduOnIoNzEpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NCksYT1yKDcyKSxpPXIoNzMpLG89cig2MSkscz1yKDQzKSxsPU9iamVjdC5hc3NpZ247ZS5leHBvcnRzPSFsfHxyKDE2KSgoZnVuY3Rpb24oKXt2YXIgZT17fSx0PXt9LHI9U3ltYm9sKCksbj0iYWJjZGVmZ2hpamtsbW5vcHFyc3QiO3JldHVybiBlW3JdPTcsbi5zcGxpdCgiIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dFtlXT1lfSkpLDchPWwoe30sZSlbcl18fE9iamVjdC5rZXlzKGwoe30sdCkpLmpvaW4oIiIpIT1ufSkpP2Z1bmN0aW9uKGUsdCl7Zm9yKHZhciByPW8oZSksbD1hcmd1bWVudHMubGVuZ3RoLGM9MSx1PWEuZixmPWkuZjtsPmM7KWZvcih2YXIgaCxkPXMoYXJndW1lbnRzW2MrK10pLHA9dT9uKGQpLmNvbmNhdCh1KGQpKTpuKGQpLG09cC5sZW5ndGgsZz0wO20+ZzspZi5jYWxsKGQsaD1wW2crK10pJiYocltoXT1kW2hdKTtyZXR1cm4gcn06bH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9sc30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9e30ucHJvcGVydHlJc0VudW1lcmFibGV9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3NSksZS5leHBvcnRzPXIoOSkuTWF0aC5sb2cyfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyk7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc3KSxlLmV4cG9ydHM9cig5KS5OdW1iZXIuaXNOYU59LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KTtuKG4uUywiTnVtYmVyIix7aXNOYU46ZnVuY3Rpb24oZSl7cmV0dXJuIGUhPWV9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig3OSksZS5leHBvcnRzPXIoOSkuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpO24obi5TLCJOdW1iZXIiLHtpc0ludGVnZXI6cig4MCl9KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPU1hdGguZmxvb3I7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiFuKGUpJiZpc0Zpbml0ZShlKSYmYShlKT09PWV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODIpLHIoNDcpLHIoODMpLHIoODYpLHIoOTkpLHIoMTAwKSxlLmV4cG9ydHM9cig5KS5Qcm9taXNlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNjcpLGE9e307YVtyKDMwKSgidG9TdHJpbmdUYWciKV09InoiLGErIiIhPSJbb2JqZWN0IHpdIiYmcigyMCkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9KSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXIoODQpLGE9cig1NCksaT1yKDIwKSxvPXIoOCkscz1yKDEwKSxsPXIoNTApLGM9cigzMCksdT1jKCJpdGVyYXRvciIpLGY9YygidG9TdHJpbmdUYWciKSxoPWwuQXJyYXksZD17Q1NTUnVsZUxpc3Q6ITAsQ1NTU3R5bGVEZWNsYXJhdGlvbjohMSxDU1NWYWx1ZUxpc3Q6ITEsQ2xpZW50UmVjdExpc3Q6ITEsRE9NUmVjdExpc3Q6ITEsRE9NU3RyaW5nTGlzdDohMSxET01Ub2tlbkxpc3Q6ITAsRGF0YVRyYW5zZmVySXRlbUxpc3Q6ITEsRmlsZUxpc3Q6ITEsSFRNTEFsbENvbGxlY3Rpb246ITEsSFRNTENvbGxlY3Rpb246ITEsSFRNTEZvcm1FbGVtZW50OiExLEhUTUxTZWxlY3RFbGVtZW50OiExLE1lZGlhTGlzdDohMCxNaW1lVHlwZUFycmF5OiExLE5hbWVkTm9kZU1hcDohMSxOb2RlTGlzdDohMCxQYWludFJlcXVlc3RMaXN0OiExLFBsdWdpbjohMSxQbHVnaW5BcnJheTohMSxTVkdMZW5ndGhMaXN0OiExLFNWR051bWJlckxpc3Q6ITEsU1ZHUGF0aFNlZ0xpc3Q6ITEsU1ZHUG9pbnRMaXN0OiExLFNWR1N0cmluZ0xpc3Q6ITEsU1ZHVHJhbnNmb3JtTGlzdDohMSxTb3VyY2VCdWZmZXJMaXN0OiExLFN0eWxlU2hlZXRMaXN0OiEwLFRleHRUcmFja0N1ZUxpc3Q6ITEsVGV4dFRyYWNrTGlzdDohMSxUb3VjaExpc3Q6ITF9LHA9YShkKSxtPTA7bTxwLmxlbmd0aDttKyspe3ZhciBnLHY9cFttXSx5PWRbdl0sYj1vW3ZdLHc9YiYmYi5wcm90b3R5cGU7aWYodyYmKHdbdV18fHModyx1LGgpLHdbZl18fHModyxmLHYpLGxbdl09aCx5KSlmb3IoZyBpbiBuKXdbZ118fGkodyxnLG5bZ10sITApfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQ1KSxhPXIoODUpLGk9cig1MCksbz1yKDQyKTtlLmV4cG9ydHM9cig0OSkoQXJyYXksIkFycmF5IiwoZnVuY3Rpb24oZSx0KXt0aGlzLl90PW8oZSksdGhpcy5faT0wLHRoaXMuX2s9dH0pLChmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3QsdD10aGlzLl9rLHI9dGhpcy5faSsrO3JldHVybiFlfHxyPj1lLmxlbmd0aD8odGhpcy5fdD12b2lkIDAsYSgxKSk6YSgwLCJrZXlzIj09dD9yOiJ2YWx1ZXMiPT10P2Vbcl06W3IsZVtyXV0pfSksInZhbHVlcyIpLGkuQXJndW1lbnRzPWkuQXJyYXksbigia2V5cyIpLG4oInZhbHVlcyIpLG4oImVudHJpZXMiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm57dmFsdWU6dCxkb25lOiEhZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvLHM9cigzMiksbD1yKDgpLGM9cigyMyksdT1yKDY3KSxmPXIoNyksaD1yKDEzKSxkPXIoMjQpLHA9cig4NyksbT1yKDg4KSxnPXIoODkpLHY9cig5MCkuc2V0LHk9cig5MikoKSxiPXIoOTMpLHc9cig5NCksaz1yKDk1KSxTPXIoOTYpLF89bC5UeXBlRXJyb3IseD1sLnByb2Nlc3MsQT14JiZ4LnZlcnNpb25zLEM9QSYmQS52OHx8IiIsUD1sLlByb21pc2UsRT0icHJvY2VzcyI9PXUoeCksVD1mdW5jdGlvbigpe30sUj1hPWIuZixPPSEhZnVuY3Rpb24oKXt0cnl7dmFyIGU9UC5yZXNvbHZlKDEpLHQ9KGUuY29uc3RydWN0b3I9e30pW3IoMzApKCJzcGVjaWVzIildPWZ1bmN0aW9uKGUpe2UoVCxUKX07cmV0dXJuKEV8fCJmdW5jdGlvbiI9PXR5cGVvZiBQcm9taXNlUmVqZWN0aW9uRXZlbnQpJiZlLnRoZW4oVClpbnN0YW5jZW9mIHQmJjAhPT1DLmluZGV4T2YoIjYuNiIpJiYtMT09PWsuaW5kZXhPZigiQ2hyb21lLzY2Iil9Y2F0Y2goZSl7fX0oKSxJPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiEoIWgoZSl8fCJmdW5jdGlvbiIhPXR5cGVvZih0PWUudGhlbikpJiZ0fSxGPWZ1bmN0aW9uKGUsdCl7aWYoIWUuX24pe2UuX249ITA7dmFyIHI9ZS5fYzt5KChmdW5jdGlvbigpe2Zvcih2YXIgbj1lLl92LGE9MT09ZS5fcyxpPTAsbz1mdW5jdGlvbih0KXt2YXIgcixpLG8scz1hP3Qub2s6dC5mYWlsLGw9dC5yZXNvbHZlLGM9dC5yZWplY3QsdT10LmRvbWFpbjt0cnl7cz8oYXx8KDI9PWUuX2gmJk4oZSksZS5faD0xKSwhMD09PXM/cj1uOih1JiZ1LmVudGVyKCkscj1zKG4pLHUmJih1LmV4aXQoKSxvPSEwKSkscj09PXQucHJvbWlzZT9jKF8oIlByb21pc2UtY2hhaW4gY3ljbGUiKSk6KGk9SShyKSk/aS5jYWxsKHIsbCxjKTpsKHIpKTpjKG4pfWNhdGNoKGUpe3UmJiFvJiZ1LmV4aXQoKSxjKGUpfX07ci5sZW5ndGg+aTspbyhyW2krK10pO2UuX2M9W10sZS5fbj0hMSx0JiYhZS5faCYmTChlKX0pKX19LEw9ZnVuY3Rpb24oZSl7di5jYWxsKGwsKGZ1bmN0aW9uKCl7dmFyIHQscixuLGE9ZS5fdixpPUQoZSk7aWYoaSYmKHQ9dygoZnVuY3Rpb24oKXtFP3guZW1pdCgidW5oYW5kbGVkUmVqZWN0aW9uIixhLGUpOihyPWwub251bmhhbmRsZWRyZWplY3Rpb24pP3Ioe3Byb21pc2U6ZSxyZWFzb246YX0pOihuPWwuY29uc29sZSkmJm4uZXJyb3ImJm4uZXJyb3IoIlVuaGFuZGxlZCBwcm9taXNlIHJlamVjdGlvbiIsYSl9KSksZS5faD1FfHxEKGUpPzI6MSksZS5fYT12b2lkIDAsaSYmdC5lKXRocm93IHQudn0pKX0sRD1mdW5jdGlvbihlKXtyZXR1cm4gMSE9PWUuX2gmJjA9PT0oZS5fYXx8ZS5fYykubGVuZ3RofSxOPWZ1bmN0aW9uKGUpe3YuY2FsbChsLChmdW5jdGlvbigpe3ZhciB0O0U/eC5lbWl0KCJyZWplY3Rpb25IYW5kbGVkIixlKToodD1sLm9ucmVqZWN0aW9uaGFuZGxlZCkmJnQoe3Byb21pc2U6ZSxyZWFzb246ZS5fdn0pfSkpfSxNPWZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7dC5fZHx8KHQuX2Q9ITAsKHQ9dC5fd3x8dCkuX3Y9ZSx0Ll9zPTIsdC5fYXx8KHQuX2E9dC5fYy5zbGljZSgpKSxGKHQsITApKX0saj1mdW5jdGlvbiBlKHQpe3ZhciByLG49dGhpcztpZighbi5fZCl7bi5fZD0hMCxuPW4uX3d8fG47dHJ5e2lmKG49PT10KXRocm93IF8oIlByb21pc2UgY2FuJ3QgYmUgcmVzb2x2ZWQgaXRzZWxmIik7KHI9SSh0KSk/eSgoZnVuY3Rpb24oKXt2YXIgYT17X3c6bixfZDohMX07dHJ5e3IuY2FsbCh0LGMoZSxhLDEpLGMoTSxhLDEpKX1jYXRjaChlKXtNLmNhbGwoYSxlKX19KSk6KG4uX3Y9dCxuLl9zPTEsRihuLCExKSl9Y2F0Y2goZSl7TS5jYWxsKHtfdzpuLF9kOiExfSxlKX19fTtPfHwoUD1mdW5jdGlvbihlKXtwKHRoaXMsUCwiUHJvbWlzZSIsIl9oIiksZChlKSxuLmNhbGwodGhpcyk7dHJ5e2UoYyhqLHRoaXMsMSksYyhNLHRoaXMsMSkpfWNhdGNoKGUpe00uY2FsbCh0aGlzLGUpfX0sKG49ZnVuY3Rpb24oZSl7dGhpcy5fYz1bXSx0aGlzLl9hPXZvaWQgMCx0aGlzLl9zPTAsdGhpcy5fZD0hMSx0aGlzLl92PXZvaWQgMCx0aGlzLl9oPTAsdGhpcy5fbj0hMX0pLnByb3RvdHlwZT1yKDk3KShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciByPVIoZyh0aGlzLFApKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsci5kb21haW49RT94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZGKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksaT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1jKGosZSwxKSx0aGlzLnJlamVjdD1jKE0sZSwxKX0sYi5mPVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1QfHxlPT09bz9uZXcgaShlKTphKGUpfSksZihmLkcrZi5XK2YuRiohTyx7UHJvbWlzZTpQfSkscig1OSkoUCwiUHJvbWlzZSIpLHIoOTgpKCJQcm9taXNlIiksbz1yKDkpLlByb21pc2UsZihmLlMrZi5GKiFPLCJQcm9taXNlIix7cmVqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PVIodGhpcyk7cmV0dXJuKDAsdC5yZWplY3QpKGUpLHQucHJvbWlzZX19KSxmKGYuUytmLkYqKHN8fCFPKSwiUHJvbWlzZSIse3Jlc29sdmU6ZnVuY3Rpb24oZSl7cmV0dXJuIFMocyYmdGhpcz09PW8/UDp0aGlzLGUpfX0pLGYoZi5TK2YuRiohKE8mJnIoNjgpKChmdW5jdGlvbihlKXtQLmFsbChlKS5jYXRjaChUKX0pKSksIlByb21pc2UiLHthbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPVIodCksbj1yLnJlc29sdmUsYT1yLnJlamVjdCxpPXcoKGZ1bmN0aW9uKCl7dmFyIHI9W10saT0wLG89MTttKGUsITEsKGZ1bmN0aW9uKGUpe3ZhciBzPWkrKyxsPSExO3IucHVzaCh2b2lkIDApLG8rKyx0LnJlc29sdmUoZSkudGhlbigoZnVuY3Rpb24oZSl7bHx8KGw9ITAscltzXT1lLC0tb3x8bihyKSl9KSxhKX0pKSwtLW98fG4ocil9KSk7cmV0dXJuIGkuZSYmYShpLnYpLHIucHJvbWlzZX0scmFjZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9Uih0KSxuPXIucmVqZWN0LGE9dygoZnVuY3Rpb24oKXttKGUsITEsKGZ1bmN0aW9uKGUpe3QucmVzb2x2ZShlKS50aGVuKHIucmVzb2x2ZSxuKX0pKX0pKTtyZXR1cm4gYS5lJiZuKGEudiksci5wcm9taXNlfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscixuKXtpZighKGUgaW5zdGFuY2VvZiB0KXx8dm9pZCAwIT09biYmbiBpbiBlKXRocm93IFR5cGVFcnJvcihyKyI6IGluY29ycmVjdCBpbnZvY2F0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNjMpLGk9cig2NCksbz1yKDEyKSxzPXIoMjUpLGw9cig2NiksYz17fSx1PXt9LGY9ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLGYsaCl7dmFyIGQscCxtLGcsdj1oP2Z1bmN0aW9uKCl7cmV0dXJuIGV9OmwoZSkseT1uKHIsZix0PzI6MSksYj0wO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB2KXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGl0ZXJhYmxlISIpO2lmKGkodikpe2ZvcihkPXMoZS5sZW5ndGgpO2Q+YjtiKyspaWYoKGc9dD95KG8ocD1lW2JdKVswXSxwWzFdKTp5KGVbYl0pKT09PWN8fGc9PT11KXJldHVybiBnfWVsc2UgZm9yKG09di5jYWxsKGUpOyEocD1tLm5leHQoKSkuZG9uZTspaWYoKGc9YShtLHkscC52YWx1ZSx0KSk9PT1jfHxnPT09dSlyZXR1cm4gZ307Zi5CUkVBSz1jLGYuUkVUVVJOPXV9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDI0KSxpPXIoMzApKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbz1uKGUpLmNvbnN0cnVjdG9yO3JldHVybiB2b2lkIDA9PT1vfHxudWxsPT0ocj1uKG8pW2ldKT90OmEocil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuLGEsaSxvPXIoMjMpLHM9cig5MSksbD1yKDU4KSxjPXIoMTcpLHU9cig4KSxmPXUucHJvY2VzcyxoPXUuc2V0SW1tZWRpYXRlLGQ9dS5jbGVhckltbWVkaWF0ZSxwPXUuTWVzc2FnZUNoYW5uZWwsbT11LkRpc3BhdGNoLGc9MCx2PXt9LHk9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7eS5jYWxsKGUuZGF0YSl9O2gmJmR8fChoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXtzKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LG4oZyksZ30sZD1mdW5jdGlvbihlKXtkZWxldGUgdltlXX0sInByb2Nlc3MiPT1yKDI5KShmKT9uPWZ1bmN0aW9uKGUpe2YubmV4dFRpY2sobyh5LGUsMSkpfTptJiZtLm5vdz9uPWZ1bmN0aW9uKGUpe20ubm93KG8oeSxlLDEpKX06cD8oaT0oYT1uZXcgcCkucG9ydDIsYS5wb3J0MS5vbm1lc3NhZ2U9YixuPW8oaS5wb3N0TWVzc2FnZSxpLDEpKTp1LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXUuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXt1LnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sdS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGMoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQoYygic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcykseS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChvKHksZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmgsY2xlYXI6ZH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP2UoKTplLmNhbGwocik7Y2FzZSAxOnJldHVybiBuP2UodFswXSk6ZS5jYWxsKHIsdFswXSk7Y2FzZSAyOnJldHVybiBuP2UodFswXSx0WzFdKTplLmNhbGwocix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwocix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKHIsdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGUuYXBwbHkocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOTApLnNldCxpPW4uTXV0YXRpb25PYnNlcnZlcnx8bi5XZWJLaXRNdXRhdGlvbk9ic2VydmVyLG89bi5wcm9jZXNzLHM9bi5Qcm9taXNlLGw9InByb2Nlc3MiPT1yKDI5KShvKTtlLmV4cG9ydHM9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsYz1mdW5jdGlvbigpe3ZhciBuLGE7Zm9yKGwmJihuPW8uZG9tYWluKSYmbi5leGl0KCk7ZTspe2E9ZS5mbixlPWUubmV4dDt0cnl7YSgpfWNhdGNoKG4pe3Rocm93IGU/cigpOnQ9dm9pZCAwLG59fXQ9dm9pZCAwLG4mJm4uZW50ZXIoKX07aWYobClyPWZ1bmN0aW9uKCl7by5uZXh0VGljayhjKX07ZWxzZSBpZighaXx8bi5uYXZpZ2F0b3ImJm4ubmF2aWdhdG9yLnN0YW5kYWxvbmUpaWYocyYmcy5yZXNvbHZlKXt2YXIgdT1zLnJlc29sdmUodm9pZCAwKTtyPWZ1bmN0aW9uKCl7dS50aGVuKGMpfX1lbHNlIHI9ZnVuY3Rpb24oKXthLmNhbGwobixjKX07ZWxzZXt2YXIgZj0hMCxoPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKCIiKTtuZXcgaShjKS5vYnNlcnZlKGgse2NoYXJhY3RlckRhdGE6ITB9KSxyPWZ1bmN0aW9uKCl7aC5kYXRhPWY9IWZ9fXJldHVybiBmdW5jdGlvbihuKXt2YXIgYT17Zm46bixuZXh0OnZvaWQgMH07dCYmKHQubmV4dD1hKSxlfHwoZT1hLHIoKSksdD1hfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNCk7ZnVuY3Rpb24gYShlKXt2YXIgdCxyO3RoaXMucHJvbWlzZT1uZXcgZSgoZnVuY3Rpb24oZSxuKXtpZih2b2lkIDAhPT10fHx2b2lkIDAhPT1yKXRocm93IFR5cGVFcnJvcigiQmFkIFByb21pc2UgY29uc3RydWN0b3IiKTt0PWUscj1ufSkpLHRoaXMucmVzb2x2ZT1uKHQpLHRoaXMucmVqZWN0PW4ocil9ZS5leHBvcnRzLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBhKGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dHJ5e3JldHVybntlOiExLHY6ZSgpfX1jYXRjaChlKXtyZXR1cm57ZTohMCx2OmV9fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KS5uYXZpZ2F0b3I7ZS5leHBvcnRzPW4mJm4udXNlckFnZW50fHwiIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMTMpLGk9cig5Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobihlKSxhKHQpJiZ0LmNvbnN0cnVjdG9yPT09ZSlyZXR1cm4gdDt2YXIgcj1pLmYoZSk7cmV0dXJuKDAsci5yZXNvbHZlKSh0KSxyLnByb21pc2V9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjApO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBhIGluIHQpbihlLGEsdFthXSxyKTtyZXR1cm4gZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoMTEpLGk9cigxNSksbz1yKDMwKSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uW2VdO2kmJnQmJiF0W29dJiZhLmYodCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDkpLGk9cig4KSxvPXIoODkpLHM9cig5Nik7bihuLlArbi5SLCJQcm9taXNlIix7ZmluYWxseTpmdW5jdGlvbihlKXt2YXIgdD1vKHRoaXMsYS5Qcm9taXNlfHxpLlByb21pc2UpLHI9ImZ1bmN0aW9uIj09dHlwZW9mIGU7cmV0dXJuIHRoaXMudGhlbihyP2Z1bmN0aW9uKHIpe3JldHVybiBzKHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3JldHVybiByfSkpfTplLHI/ZnVuY3Rpb24ocil7cmV0dXJuIHModCxlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7dGhyb3cgcn0pKX06ZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3KSxhPXIoOTMpLGk9cig5NCk7bihuLlMsIlByb21pc2UiLHt0cnk6ZnVuY3Rpb24oZSl7dmFyIHQ9YS5mKHRoaXMpLHI9aShlKTtyZXR1cm4oci5lP3QucmVqZWN0OnQucmVzb2x2ZSkoci52KSx0LnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig4Mikscig4MykscigxMDIpLHIoMTE0KSxyKDExNiksZS5leHBvcnRzPXIoOSkuV2Vha01hcH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXIoMTAzKSgwKSxpPXIoMjApLG89cigxMDcpLHM9cig3MSksbD1yKDEwOCksYz1yKDEzKSx1PXIoMTYpLGY9cigxMDkpLGg9by5nZXRXZWFrLGQ9T2JqZWN0LmlzRXh0ZW5zaWJsZSxwPWwudWZzdG9yZSxtPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXtnZXQ6ZnVuY3Rpb24oZSl7aWYoYyhlKSl7dmFyIHQ9aChlKTtyZXR1cm4hMD09PXQ/cChmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LHk9ZS5leHBvcnRzPXIoMTEwKSgiV2Vha01hcCIsZyx2LGwsITAsITApO3UoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgeSkuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKG0pLDcpLmdldChtKX0pKSYmKHMoKG49bC5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx2KSxvLk5FRUQ9ITAsYShbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLChmdW5jdGlvbihlKXt2YXIgdD15LnByb3RvdHlwZSxyPXRbZV07aSh0LGUsKGZ1bmN0aW9uKHQsYSl7aWYoYyh0KSYmIWQodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBuKTt2YXIgaT10aGlzLl9mW2VdKHQsYSk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiByLmNhbGwodGhpcyx0LGEpfSkpfSkpKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDIzKSxhPXIoNDMpLGk9cig2MSksbz1yKDI1KSxzPXIoMTA0KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xPT1lLGw9Mj09ZSxjPTM9PWUsdT00PT1lLGY9Nj09ZSxoPTU9PWV8fGYsZD10fHxzO3JldHVybiBmdW5jdGlvbih0LHMscCl7Zm9yKHZhciBtLGcsdj1pKHQpLHk9YSh2KSxiPW4ocyxwLDMpLHc9byh5Lmxlbmd0aCksaz0wLFM9cj9kKHQsdyk6bD9kKHQsMCk6dm9pZCAwO3c+aztrKyspaWYoKGh8fGsgaW4geSkmJihnPWIobT15W2tdLGssdiksZSkpaWYocilTW2tdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBtO2Nhc2UgNjpyZXR1cm4gaztjYXNlIDI6Uy5wdXNoKG0pfWVsc2UgaWYodSlyZXR1cm4hMTtyZXR1cm4gZj8tMTpjfHx1P3U6U319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTA1KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KG4oZSkpKHQpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTA2KSxpPXIoMzApKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIWEodC5wcm90b3R5cGUpfHwodD12b2lkIDApLG4odCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI5KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09bihlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMjIpKCJtZXRhIiksaT1yKDEzKSxvPXIoMjEpLHM9cigxMSkuZixsPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFyKDE2KSgoZnVuY3Rpb24oKXtyZXR1cm4gYyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSxmPWZ1bmN0aW9uKGUpe3MoZSxhLHt2YWx1ZTp7aToiTyIrICsrbCx3Ont9fX0pfSxoPWUuZXhwb3J0cz17S0VZOmEsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpcmV0dXJuInN5bWJvbCI9PW4oZSk/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIW8oZSxhKSl7aWYoIWMoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtmKGUpfXJldHVybiBlW2FdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighbyhlLGEpKXtpZighYyhlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtmKGUpfXJldHVybiBlW2FdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiB1JiZoLk5FRUQmJmMoZSkmJiFvKGUsYSkmJmYoZSksZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOTcpLGE9cigxMDcpLmdldFdlYWssaT1yKDEyKSxvPXIoMTMpLHM9cig4NyksbD1yKDg4KSxjPXIoMTAzKSx1PXIoMjEpLGY9cigxMDkpLGg9Yyg1KSxkPWMoNikscD0wLG09ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX2x8fChlLl9sPW5ldyBnKX0sZz1mdW5jdGlvbigpe3RoaXMuYT1bXX0sdj1mdW5jdGlvbihlLHQpe3JldHVybiBoKGUuYSwoZnVuY3Rpb24oZSl7cmV0dXJuIGVbMF09PT10fSkpfTtnLnByb3RvdHlwZT17Z2V0OmZ1bmN0aW9uKGUpe3ZhciB0PXYodGhpcyxlKTtpZih0KXJldHVybiB0WzFdfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuISF2KHRoaXMsZSl9LHNldDpmdW5jdGlvbihlLHQpe3ZhciByPXYodGhpcyxlKTtyP3JbMV09dDp0aGlzLmEucHVzaChbZSx0XSl9LGRlbGV0ZTpmdW5jdGlvbihlKXt2YXIgdD1kKHRoaXMuYSwoZnVuY3Rpb24odCl7cmV0dXJuIHRbMF09PT1lfSkpO3JldHVybn50JiZ0aGlzLmEuc3BsaWNlKHQsMSksISF+dH19LGUuZXhwb3J0cz17Z2V0Q29uc3RydWN0b3I6ZnVuY3Rpb24oZSx0LHIsaSl7dmFyIGM9ZSgoZnVuY3Rpb24oZSxuKXtzKGUsYyx0LCJfaSIpLGUuX3Q9dCxlLl9pPXArKyxlLl9sPXZvaWQgMCxudWxsIT1uJiZsKG4scixlW2ldLGUpfSkpO3JldHVybiBuKGMucHJvdG90eXBlLHtkZWxldGU6ZnVuY3Rpb24oZSl7aWYoIW8oZSkpcmV0dXJuITE7dmFyIHI9YShlKTtyZXR1cm4hMD09PXI/bShmKHRoaXMsdCkpLmRlbGV0ZShlKTpyJiZ1KHIsdGhpcy5faSkmJmRlbGV0ZSByW3RoaXMuX2ldfSxoYXM6ZnVuY3Rpb24oZSl7aWYoIW8oZSkpcmV0dXJuITE7dmFyIHI9YShlKTtyZXR1cm4hMD09PXI/bShmKHRoaXMsdCkpLmhhcyhlKTpyJiZ1KHIsdGhpcy5faSl9fSksY30sZGVmOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1hKGkodCksITApO3JldHVybiEwPT09bj9tKGUpLnNldCh0LHIpOm5bZS5faV09cixlfSx1ZnN0b3JlOm19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFuKGUpfHxlLl90IT09dCl0aHJvdyBUeXBlRXJyb3IoIkluY29tcGF0aWJsZSByZWNlaXZlciwgIit0KyIgcmVxdWlyZWQhIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoOCksYT1yKDcpLGk9cigyMCksbz1yKDk3KSxzPXIoMTA3KSxsPXIoODgpLGM9cig4NyksdT1yKDEzKSxmPXIoMTYpLGg9cig2OCksZD1yKDU5KSxwPXIoMTExKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbSxnLHYpe3ZhciB5PW5bZV0sYj15LHc9Zz8ic2V0IjoiYWRkIixrPWImJmIucHJvdG90eXBlLFM9e30sXz1mdW5jdGlvbihlKXt2YXIgdD1rW2VdO2koayxlLCJkZWxldGUiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiEodiYmIXUoZSkpJiZ0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiaGFzIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHYmJiF1KGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImdldCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHYmJiF1KGUpP3ZvaWQgMDp0LmNhbGwodGhpcywwPT09ZT8wOmUpfToiYWRkIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplKSx0aGlzfTpmdW5jdGlvbihlLHIpe3JldHVybiB0LmNhbGwodGhpcywwPT09ZT8wOmUsciksdGhpc30pfTtpZigiZnVuY3Rpb24iPT10eXBlb2YgYiYmKHZ8fGsuZm9yRWFjaCYmIWYoKGZ1bmN0aW9uKCl7KG5ldyBiKS5lbnRyaWVzKCkubmV4dCgpfSkpKSl7dmFyIHg9bmV3IGIsQT14W3ddKHY/e306LTAsMSkhPXgsQz1mKChmdW5jdGlvbigpe3guaGFzKDEpfSkpLFA9aCgoZnVuY3Rpb24oZSl7bmV3IGIoZSl9KSksRT0hdiYmZigoZnVuY3Rpb24oKXtmb3IodmFyIGU9bmV3IGIsdD01O3QtLTspZVt3XSh0LHQpO3JldHVybiFlLmhhcygtMCl9KSk7UHx8KChiPXQoKGZ1bmN0aW9uKHQscil7Yyh0LGIsZSk7dmFyIG49cChuZXcgeSx0LGIpO3JldHVybiBudWxsIT1yJiZsKHIsZyxuW3ddLG4pLG59KSkpLnByb3RvdHlwZT1rLGsuY29uc3RydWN0b3I9YiksKEN8fEUpJiYoXygiZGVsZXRlIiksXygiaGFzIiksZyYmXygiZ2V0IikpLChFfHxBKSYmXyh3KSx2JiZrLmNsZWFyJiZkZWxldGUgay5jbGVhcn1lbHNlIGI9bS5nZXRDb25zdHJ1Y3Rvcih0LGUsZyx3KSxvKGIucHJvdG90eXBlLHIpLHMuTkVFRD0hMDtyZXR1cm4gZChiLGUpLFNbZV09YixhKGEuRythLlcrYS5GKihiIT15KSxTKSx2fHxtLnNldFN0cm9uZyhiLGUsZyksYn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDExMikuc2V0O2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dmFyIGksbz10LmNvbnN0cnVjdG9yO3JldHVybiBvIT09ciYmImZ1bmN0aW9uIj09dHlwZW9mIG8mJihpPW8ucHJvdG90eXBlKSE9PXIucHJvdG90eXBlJiZuKGkpJiZhJiZhKGUsaSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDEyKSxpPWZ1bmN0aW9uKGUsdCl7aWYoYShlKSwhbih0KSYmbnVsbCE9PXQpdGhyb3cgVHlwZUVycm9yKHQrIjogY2FuJ3Qgc2V0IGFzIHByb3RvdHlwZSEiKX07ZS5leHBvcnRzPXtzZXQ6T2JqZWN0LnNldFByb3RvdHlwZU9mfHwoIl9fcHJvdG9fXyJpbnt9P2Z1bmN0aW9uKGUsdCxuKXt0cnl7KG49cigyMykoRnVuY3Rpb24uY2FsbCxyKDExMykuZihPYmplY3QucHJvdG90eXBlLCJfX3Byb3RvX18iKS5zZXQsMikpKGUsW10pLHQ9IShlIGluc3RhbmNlb2YgQXJyYXkpfWNhdGNoKGUpe3Q9ITB9cmV0dXJuIGZ1bmN0aW9uKGUscil7cmV0dXJuIGkoZSxyKSx0P2UuX19wcm90b19fPXI6bihlLHIpLGV9fSh7fSwhMSk6dm9pZCAwKSxjaGVjazppfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDczKSxhPXIoMTkpLGk9cig0Miksbz1yKDE4KSxzPXIoMjEpLGw9cigxNCksYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yO3QuZj1yKDE1KT9jOmZ1bmN0aW9uKGUsdCl7aWYoZT1pKGUpLHQ9byh0LCEwKSxsKXRyeXtyZXR1cm4gYyhlLHQpfWNhdGNoKGUpe31pZihzKGUsdCkpcmV0dXJuIGEoIW4uZi5jYWxsKGUsdCksZVt0XSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTE1KSgiV2Vha01hcCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse29mOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1uZXcgQXJyYXkoZSk7ZS0tOyl0W2VdPWFyZ3VtZW50c1tlXTtyZXR1cm4gbmV3IHRoaXModCl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTE3KSgiV2Vha01hcCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDI0KSxpPXIoMjMpLG89cig4OCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQscixuLHMsbD1hcmd1bWVudHNbMV07cmV0dXJuIGEodGhpcyksKHQ9dm9pZCAwIT09bCkmJmEobCksbnVsbD09ZT9uZXcgdGhpczoocj1bXSx0PyhuPTAscz1pKGwsYXJndW1lbnRzWzJdLDIpLG8oZSwhMSwoZnVuY3Rpb24oZSl7ci5wdXNoKHMoZSxuKyspKX0pKSk6byhlLCExLHIucHVzaCxyKSxuZXcgdGhpcyhyKSl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODIpLHIoODMpLHIoMTE5KSxyKDEyMCkscigxMjEpLGUuZXhwb3J0cz1yKDkpLldlYWtTZXR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMDgpLGE9cigxMDkpO3IoMTEwKSgiV2Vha1NldCIsKGZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbigpe3JldHVybiBlKHRoaXMsYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApfX0pLHthZGQ6ZnVuY3Rpb24oZSl7cmV0dXJuIG4uZGVmKGEodGhpcywiV2Vha1NldCIpLGUsITApfX0sbiwhMSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMTUpKCJXZWFrU2V0Iil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMTcpKCJXZWFrU2V0Iil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMjMpLGUuZXhwb3J0cz1yKDkpLlN0cmluZy5jb2RlUG9pbnRBdH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cig0OCkoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI1KSxlLmV4cG9ydHM9cig5KS5TdHJpbmcuZnJvbUNvZGVQb2ludH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cig0NCksaT1TdHJpbmcuZnJvbUNoYXJDb2RlLG89U3RyaW5nLmZyb21Db2RlUG9pbnQ7bihuLlMrbi5GKighIW8mJjEhPW8ubGVuZ3RoKSwiU3RyaW5nIix7ZnJvbUNvZGVQb2ludDpmdW5jdGlvbihlKXtmb3IodmFyIHQscj1bXSxuPWFyZ3VtZW50cy5sZW5ndGgsbz0wO24+bzspe2lmKHQ9K2FyZ3VtZW50c1tvKytdLGEodCwxMTE0MTExKSE9PXQpdGhyb3cgUmFuZ2VFcnJvcih0KyIgaXMgbm90IGEgdmFsaWQgY29kZSBwb2ludCIpO3IucHVzaCh0PDY1NTM2P2kodCk6aSg1NTI5NisoKHQtPTY1NTM2KT4+MTApLHQlMTAyNCs1NjMyMCkpfXJldHVybiByLmpvaW4oIiIpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI3KSxyKDgyKSxlLmV4cG9ydHM9cig5KS5TeW1ib2x9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoOCksaT1yKDIxKSxvPXIoMTUpLHM9cig3KSxsPXIoMjApLGM9cigxMDcpLktFWSx1PXIoMTYpLGY9cigzMSksaD1yKDU5KSxkPXIoMjIpLHA9cigzMCksbT1yKDEyOCksZz1yKDEyOSksdj1yKDEzMCkseT1yKDEwNiksYj1yKDEyKSx3PXIoMTMpLGs9cig0MiksUz1yKDE4KSxfPXIoMTkpLHg9cig1MiksQT1yKDEzMSksQz1yKDExMyksUD1yKDExKSxFPXIoNTQpLFQ9Qy5mLFI9UC5mLE89QS5mLEk9YS5TeW1ib2wsRj1hLkpTT04sTD1GJiZGLnN0cmluZ2lmeSxEPXAoIl9oaWRkZW4iKSxOPXAoInRvUHJpbWl0aXZlIiksTT17fS5wcm9wZXJ0eUlzRW51bWVyYWJsZSxqPWYoInN5bWJvbC1yZWdpc3RyeSIpLEI9Zigic3ltYm9scyIpLFU9Zigib3Atc3ltYm9scyIpLHE9T2JqZWN0LnByb3RvdHlwZSx6PSJmdW5jdGlvbiI9PXR5cGVvZiBJLFc9YS5RT2JqZWN0LEg9IVd8fCFXLnByb3RvdHlwZXx8IVcucHJvdG90eXBlLmZpbmRDaGlsZCxHPW8mJnUoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPXgoUih7fSwiYSIse2dldDpmdW5jdGlvbigpe3JldHVybiBSKHRoaXMsImEiLHt2YWx1ZTo3fSkuYX19KSkuYX0pKT9mdW5jdGlvbihlLHQscil7dmFyIG49VChxLHQpO24mJmRlbGV0ZSBxW3RdLFIoZSx0LHIpLG4mJmUhPT1xJiZSKHEsdCxuKX06UixWPWZ1bmN0aW9uKGUpe3ZhciB0PUJbZV09eChJLnByb3RvdHlwZSk7cmV0dXJuIHQuX2s9ZSx0fSxYPXomJiJzeW1ib2wiPT1uKEkuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiJzeW1ib2wiPT1uKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIEl9LFk9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPT09cSYmWShVLHQsciksYihlKSx0PVModCwhMCksYihyKSxpKEIsdCk/KHIuZW51bWVyYWJsZT8oaShlLEQpJiZlW0RdW3RdJiYoZVtEXVt0XT0hMSkscj14KHIse2VudW1lcmFibGU6XygwLCExKX0pKTooaShlLEQpfHxSKGUsRCxfKDEse30pKSxlW0RdW3RdPSEwKSxHKGUsdCxyKSk6UihlLHQscil9LEs9ZnVuY3Rpb24oZSx0KXtiKGUpO2Zvcih2YXIgcixuPXYodD1rKHQpKSxhPTAsaT1uLmxlbmd0aDtpPmE7KVkoZSxyPW5bYSsrXSx0W3JdKTtyZXR1cm4gZX0sSj1mdW5jdGlvbihlKXt2YXIgdD1NLmNhbGwodGhpcyxlPVMoZSwhMCkpO3JldHVybiEodGhpcz09PXEmJmkoQixlKSYmIWkoVSxlKSkmJighKHR8fCFpKHRoaXMsZSl8fCFpKEIsZSl8fGkodGhpcyxEKSYmdGhpc1tEXVtlXSl8fHQpfSxRPWZ1bmN0aW9uKGUsdCl7aWYoZT1rKGUpLHQ9Uyh0LCEwKSxlIT09cXx8IWkoQix0KXx8aShVLHQpKXt2YXIgcj1UKGUsdCk7cmV0dXJuIXJ8fCFpKEIsdCl8fGkoZSxEKSYmZVtEXVt0XXx8KHIuZW51bWVyYWJsZT0hMCkscn19LFo9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9TyhrKGUpKSxuPVtdLGE9MDtyLmxlbmd0aD5hOylpKEIsdD1yW2ErK10pfHx0PT1EfHx0PT1jfHxuLnB1c2godCk7cmV0dXJuIG59LCQ9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9ZT09PXEsbj1PKHI/VTprKGUpKSxhPVtdLG89MDtuLmxlbmd0aD5vOykhaShCLHQ9bltvKytdKXx8ciYmIWkocSx0KXx8YS5wdXNoKEJbdF0pO3JldHVybiBhfTt6fHwobCgoST1mdW5jdGlvbigpe2lmKHRoaXMgaW5zdGFuY2VvZiBJKXRocm93IFR5cGVFcnJvcigiU3ltYm9sIGlzIG5vdCBhIGNvbnN0cnVjdG9yISIpO3ZhciBlPWQoYXJndW1lbnRzLmxlbmd0aD4wP2FyZ3VtZW50c1swXTp2b2lkIDApLHQ9ZnVuY3Rpb24gdChyKXt0aGlzPT09cSYmdC5jYWxsKFUsciksaSh0aGlzLEQpJiZpKHRoaXNbRF0sZSkmJih0aGlzW0RdW2VdPSExKSxHKHRoaXMsZSxfKDEscikpfTtyZXR1cm4gbyYmSCYmRyhxLGUse2NvbmZpZ3VyYWJsZTohMCxzZXQ6dH0pLFYoZSl9KS5wcm90b3R5cGUsInRvU3RyaW5nIiwoZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fa30pKSxDLmY9USxQLmY9WSxyKDEzMikuZj1BLmY9WixyKDczKS5mPUoscig3MikuZj0kLG8mJiFyKDMyKSYmbChxLCJwcm9wZXJ0eUlzRW51bWVyYWJsZSIsSiwhMCksbS5mPWZ1bmN0aW9uKGUpe3JldHVybiBWKHAoZSkpfSkscyhzLkcrcy5XK3MuRioheix7U3ltYm9sOkl9KTtmb3IodmFyIGVlPSJoYXNJbnN0YW5jZSxpc0NvbmNhdFNwcmVhZGFibGUsaXRlcmF0b3IsbWF0Y2gscmVwbGFjZSxzZWFyY2gsc3BlY2llcyxzcGxpdCx0b1ByaW1pdGl2ZSx0b1N0cmluZ1RhZyx1bnNjb3BhYmxlcyIuc3BsaXQoIiwiKSx0ZT0wO2VlLmxlbmd0aD50ZTspcChlZVt0ZSsrXSk7Zm9yKHZhciByZT1FKHAuc3RvcmUpLG5lPTA7cmUubGVuZ3RoPm5lOylnKHJlW25lKytdKTtzKHMuUytzLkYqIXosIlN5bWJvbCIse2ZvcjpmdW5jdGlvbihlKXtyZXR1cm4gaShqLGUrPSIiKT9qW2VdOmpbZV09SShlKX0sa2V5Rm9yOmZ1bmN0aW9uKGUpe2lmKCFYKGUpKXRocm93IFR5cGVFcnJvcihlKyIgaXMgbm90IGEgc3ltYm9sISIpO2Zvcih2YXIgdCBpbiBqKWlmKGpbdF09PT1lKXJldHVybiB0fSx1c2VTZXR0ZXI6ZnVuY3Rpb24oKXtIPSEwfSx1c2VTaW1wbGU6ZnVuY3Rpb24oKXtIPSExfX0pLHMocy5TK3MuRioheiwiT2JqZWN0Iix7Y3JlYXRlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHZvaWQgMD09PXQ/eChlKTpLKHgoZSksdCl9LGRlZmluZVByb3BlcnR5OlksZGVmaW5lUHJvcGVydGllczpLLGdldE93blByb3BlcnR5RGVzY3JpcHRvcjpRLGdldE93blByb3BlcnR5TmFtZXM6WixnZXRPd25Qcm9wZXJ0eVN5bWJvbHM6JH0pLEYmJnMocy5TK3MuRiooIXp8fHUoKGZ1bmN0aW9uKCl7dmFyIGU9SSgpO3JldHVybiJbbnVsbF0iIT1MKFtlXSl8fCJ7fSIhPUwoe2E6ZX0pfHwie30iIT1MKE9iamVjdChlKSl9KSkpLCJKU09OIix7c3RyaW5naWZ5OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49W2VdLGE9MTthcmd1bWVudHMubGVuZ3RoPmE7KW4ucHVzaChhcmd1bWVudHNbYSsrXSk7aWYocj10PW5bMV0sKHcodCl8fHZvaWQgMCE9PWUpJiYhWChlKSlyZXR1cm4geSh0KXx8KHQ9ZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iPT10eXBlb2YgciYmKHQ9ci5jYWxsKHRoaXMsZSx0KSksIVgodCkpcmV0dXJuIHR9KSxuWzFdPXQsTC5hcHBseShGLG4pfX0pLEkucHJvdG90eXBlW05dfHxyKDEwKShJLnByb3RvdHlwZSxOLEkucHJvdG90eXBlLnZhbHVlT2YpLGgoSSwiU3ltYm9sIiksaChNYXRoLCJNYXRoIiwhMCksaChhLkpTT04sIkpTT04iLCEwKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt0LmY9cigzMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig4KSxhPXIoOSksaT1yKDMyKSxvPXIoMTI4KSxzPXIoMTEpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PWEuU3ltYm9sfHwoYS5TeW1ib2w9aT97fTpuLlN5bWJvbHx8e30pOyJfIj09ZS5jaGFyQXQoMCl8fGUgaW4gdHx8cyh0LGUse3ZhbHVlOm8uZihlKX0pfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDU0KSxhPXIoNzIpLGk9cig3Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0PW4oZSkscj1hLmY7aWYocilmb3IodmFyIG8scz1yKGUpLGw9aS5mLGM9MDtzLmxlbmd0aD5jOylsLmNhbGwoZSxvPXNbYysrXSkmJnQucHVzaChvKTtyZXR1cm4gdH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoNDIpLGk9cigxMzIpLmYsbz17fS50b1N0cmluZyxzPSJvYmplY3QiPT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6bih3aW5kb3cpKSYmd2luZG93JiZPYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcz9PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyh3aW5kb3cpOltdO2UuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBzJiYiW29iamVjdCBXaW5kb3ddIj09by5jYWxsKGUpP2Z1bmN0aW9uKGUpe3RyeXtyZXR1cm4gaShlKX1jYXRjaChlKXtyZXR1cm4gcy5zbGljZSgpfX0oZSk6aShhKGUpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDU3KS5jb25jYXQoImxlbmd0aCIsInByb3RvdHlwZSIpO3QuZj1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lc3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMzQpLGUuZXhwb3J0cz1yKDkpLlN0cmluZy5wYWRTdGFydH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigxMzUpLGk9cig5NSk7bihuLlArbi5GKi9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8gU2FmYXJpXC8vLnRlc3QoaSksIlN0cmluZyIse3BhZFN0YXJ0OmZ1bmN0aW9uKGUpe3JldHVybiBhKHRoaXMsZSxhcmd1bWVudHMubGVuZ3RoPjE/YXJndW1lbnRzWzFdOnZvaWQgMCwhMCl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNSksYT1yKDEzNiksaT1yKDMzKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsbyl7dmFyIHM9U3RyaW5nKGkoZSkpLGw9cy5sZW5ndGgsYz12b2lkIDA9PT1yPyIgIjpTdHJpbmcociksdT1uKHQpO2lmKHU8PWx8fCIiPT1jKXJldHVybiBzO3ZhciBmPXUtbCxoPWEuY2FsbChjLE1hdGguY2VpbChmL2MubGVuZ3RoKSk7cmV0dXJuIGgubGVuZ3RoPmYmJihoPWguc2xpY2UoMCxmKSksbz9oK3M6cytofX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI2KSxhPXIoMzMpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1TdHJpbmcoYSh0aGlzKSkscj0iIixpPW4oZSk7aWYoaTwwfHxpPT0xLzApdGhyb3cgUmFuZ2VFcnJvcigiQ291bnQgY2FuJ3QgYmUgbmVnYXRpdmUiKTtmb3IoO2k+MDsoaT4+Pj0xKSYmKHQrPXQpKTEmaSYmKHIrPXQpO3JldHVybiByfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDEzOCksZS5leHBvcnRzPXIoOSkuU3RyaW5nLnBhZEVuZH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDcpLGE9cigxMzUpLGk9cig5NSk7bihuLlArbi5GKi9WZXJzaW9uXC8xMFwuXGQrKFwuXGQrKT8gU2FmYXJpXC8vLnRlc3QoaSksIlN0cmluZyIse3BhZEVuZDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITEpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTQwKSxlLmV4cG9ydHM9cig5KS5PYmplY3QudmFsdWVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNyksYT1yKDE0MSkoITEpO24obi5TLCJPYmplY3QiLHt2YWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NCksYT1yKDQyKSxpPXIoNzMpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHIsbz1hKHQpLHM9bihvKSxsPXMubGVuZ3RoLGM9MCx1PVtdO2w+YzspaS5jYWxsKG8scj1zW2MrK10pJiZ1LnB1c2goZT9bcixvW3JdXTpvW3JdKTtyZXR1cm4gdX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pdHJ5e25ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfX0pLG49ITB9Y2F0Y2goZSl7fXQuUmVhZGFibGVTdHJlYW09bj9SZWFkYWJsZVN0cmVhbTpyKDE0MykuUmVhZGFibGVTdHJlYW19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTcpfShbZnVuY3Rpb24oZSx0LHIpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09bihTeW1ib2wuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6bihlKX0saT1yKDEpLmFzc2VydDtmdW5jdGlvbiBvKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8InN5bWJvbCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKX1mdW5jdGlvbiBzKGUsdCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9dC50eXBlSXNPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfSx0LmNyZWF0ZURhdGFQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7aSh0LnR5cGVJc09iamVjdChlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7dmFsdWU6bix3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfSx0LmNyZWF0ZUFycmF5RnJvbUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5BcnJheUJ1ZmZlckNvcHk9ZnVuY3Rpb24oZSx0LHIsbixhKXtuZXcgVWludDhBcnJheShlKS5zZXQobmV3IFVpbnQ4QXJyYXkocixuLGEpLHQpfSx0LkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3Q9ZnVuY3Rpb24oZSx0KXtpKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkociwidmFsdWUiLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRvbmUiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn0sdC5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiEoTnVtYmVyLmlzTmFOKGUpfHxlPT09MS8wfHxlPDApfSx0Lkludm9rZU9yTm9vcD1mdW5jdGlvbihlLHQscil7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSk7dmFyIG49ZVt0XTtpZih2b2lkIDAhPT1uKXJldHVybiBzKG4sZSxyKX0sdC5Qcm9taXNlSW52b2tlT3JOb29wPWZ1bmN0aW9uKGUscixuKXtpKHZvaWQgMCE9PWUpLGkobyhyKSksaShBcnJheS5pc0FycmF5KG4pKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0Lkludm9rZU9yTm9vcChlLHIsbikpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19LHQuUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSksaShBcnJheS5pc0FycmF5KGEpKTt2YXIgbD12b2lkIDA7dHJ5e2w9ZVt0XX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9aWYodm9pZCAwPT09bClyZXR1cm4gbi5hcHBseShudWxsLGEpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobCxlLHIpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSx0LlRyYW5zZmVyQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7aWYoZT1OdW1iZXIoZSksTnVtYmVyLmlzTmFOKGUpfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImhpZ2hXYXRlck1hcmsgcHJvcGVydHkgb2YgYSBxdWV1aW5nIHN0cmF0ZWd5IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub24tTmFOIik7cmV0dXJuIGV9LHQuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3k9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm57c2l6ZTplLGhpZ2hXYXRlck1hcms6cj10LlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhyKX19fSxmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLm1lc3NhZ2U9ZXx8IiIsdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9e3JldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjpmdW5jdGlvbihlKXtlJiZlLmNvbnN0cnVjdG9yPT09biYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9LEFzc2VydGlvbkVycm9yOm4sYXNzZXJ0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IG4odCl9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5JbnZva2VPck5vb3Ascz1pLlByb21pc2VJbnZva2VPck5vb3AsbD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LGM9aS50eXBlSXNPYmplY3QsdT1yKDEpLGY9dS5hc3NlcnQsaD11LnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixkPXIoMykscD1kLkRlcXVldWVWYWx1ZSxtPWQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsZz1kLlBlZWtRdWV1ZVZhbHVlLHY9ZC5SZXNldFF1ZXVlLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrLG89dm9pZCAwPT09aT8xOmk7YSh0aGlzLGUpLHRoaXMuX3N0YXRlPSJ3cml0YWJsZSIsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX3dyaXRlcj12b2lkIDAsdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyPXZvaWQgMCx0aGlzLl93cml0ZVJlcXVlc3RzPVtdLHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCx0aGlzLl9jbG9zZVJlcXVlc3Q9dm9pZCAwLHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCx0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCx0aGlzLl9iYWNrcHJlc3N1cmU9ITE7dmFyIHM9dC50eXBlO2lmKHZvaWQgMCE9PXMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGoodGhpcyx0LG4sbyksdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fc3RhcnRTdGVwcygpfXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PXcodGhpcyk/UHJvbWlzZS5yZWplY3QoSCgiYWJvcnQiKSk6ITA9PT1rKHRoaXMpP1Byb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhYm9ydCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyIikpOlModGhpcyxlKX19LHtrZXk6ImdldFdyaXRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXcodGhpcykpdGhyb3cgSCgiZ2V0V3JpdGVyIik7cmV0dXJuIGIodGhpcyl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09dyh0aGlzKSl0aHJvdyBIKCJsb2NrZWQiKTtyZXR1cm4gayh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBiKGUpe3JldHVybiBuZXcgTyhlKX1mdW5jdGlvbiB3KGUpe3JldHVybiEhYyhlKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGYoITA9PT13KGUpLCJJc1dyaXRhYmxlU3RyZWFtTG9ja2VkIHNob3VsZCBvbmx5IGJlIHVzZWQgb24ga25vd24gd3JpdGFibGUgc3RyZWFtcyIpLHZvaWQgMCE9PWUuX3dyaXRlcn1mdW5jdGlvbiBTKGUsdCl7dmFyIHI9ZS5fc3RhdGU7aWYoImNsb3NlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlc29sdmUodm9pZCAwKTtpZigiZXJyb3JlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlamVjdChlLl9zdG9yZWRFcnJvcik7dmFyIG49bmV3IFR5cGVFcnJvcigiUmVxdWVzdGVkIHRvIGFib3J0Iik7aWYodm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIsInN0YXRlIG11c3QgYmUgd3JpdGFibGUgb3IgZXJyb3JpbmciKTt2YXIgYT0hMTsiZXJyb3JpbmciPT09ciYmKGE9ITAsdD12b2lkIDApO3ZhciBpPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9e19yZXNvbHZlOnIsX3JlamVjdDpuLF9yZWFzb246dCxfd2FzQWxyZWFkeUVycm9yaW5nOmF9fSkpO3JldHVybiExPT09YSYmeChlLG4pLGl9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuX3N0YXRlOyJ3cml0YWJsZSIhPT1yPyhmKCJlcnJvcmluZyI9PT1yKSxBKGUpKTp4KGUsdCl9ZnVuY3Rpb24geChlLHQpe2Yodm9pZCAwPT09ZS5fc3RvcmVkRXJyb3IsInN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCIpLGYoIndyaXRhYmxlIj09PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIik7dmFyIHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO2Yodm9pZCAwIT09ciwiY29udHJvbGxlciBtdXN0IG5vdCBiZSB1bmRlZmluZWQiKSxlLl9zdGF0ZT0iZXJyb3JpbmciLGUuX3N0b3JlZEVycm9yPXQ7dmFyIG49ZS5fd3JpdGVyO3ZvaWQgMCE9PW4mJkQobix0KSwhMT09PUUoZSkmJiEwPT09ci5fc3RhcnRlZCYmQShlKX1mdW5jdGlvbiBBKGUpe2YoImVycm9yaW5nIj09PWUuX3N0YXRlLCJzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZyIpLGYoITE9PT1FKGUpLCJXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlIiksZS5fc3RhdGU9ImVycm9yZWQiLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtmb3IodmFyIHQ9ZS5fc3RvcmVkRXJyb3Iscj0wO3I8ZS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7cisrKWUuX3dyaXRlUmVxdWVzdHNbcl0uX3JlamVjdCh0KTtpZihlLl93cml0ZVJlcXVlc3RzPVtdLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Qpe3ZhciBuPWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q7aWYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsITA9PT1uLl93YXNBbHJlYWR5RXJyb3JpbmcpcmV0dXJuIG4uX3JlamVjdCh0KSx2b2lkIFQoZSk7ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhuLl9yZWFzb24pLnRoZW4oKGZ1bmN0aW9uKCl7bi5fcmVzb2x2ZSgpLFQoZSl9KSwoZnVuY3Rpb24odCl7bi5fcmVqZWN0KHQpLFQoZSl9KSl9ZWxzZSBUKGUpfWZ1bmN0aW9uIEMoZSl7Zih2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3Jlc29sdmUodm9pZCAwKSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDA7dmFyIHQ9ZS5fc3RhdGU7Zigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLCJlcnJvcmluZyI9PT10JiYoZS5fc3RvcmVkRXJyb3I9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmZnVuY3Rpb24oZSl7Zih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0LCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxmKCJwZW5kaW5nIj09PWUuX2Nsb3NlZFByb21pc2VTdGF0ZSwid3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZyIpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icmVzb2x2ZWQifShyKSxmKHZvaWQgMD09PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QsInN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9zdG9yZWRFcnJvciwic3RyZWFtLl9zdG9yZWRFcnJvciA9PT0gdW5kZWZpbmVkIil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0fHx2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdH1mdW5jdGlvbiBFKGUpe3JldHVybiB2b2lkIDAhPT1lLl9pbkZsaWdodFdyaXRlUmVxdWVzdHx8dm9pZCAwIT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3R9ZnVuY3Rpb24gVChlKXtmKCJlcnJvcmVkIj09PWUuX3N0YXRlLCdfc3RyZWFtXy5bW3N0YXRlXV0gaXMgYCJlcnJvcmVkImAnKSx2b2lkIDAhPT1lLl9jbG9zZVJlcXVlc3QmJihmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9jbG9zZVJlcXVlc3QuX3JlamVjdChlLl9zdG9yZWRFcnJvciksZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMCk7dmFyIHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJihZKHQsZS5fc3RvcmVkRXJyb3IpLHQuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBSKGUsdCl7Zigid3JpdGFibGUiPT09ZS5fc3RhdGUpLGYoITE9PT1QKGUpKTt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmdCE9PWUuX2JhY2twcmVzc3VyZSYmKCEwPT09dD9mdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQiKSxmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2UuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXQsZS5fcmVhZHlQcm9taXNlX3JlamVjdD1yfSkpLGUuX3JlYWR5UHJvbWlzZVN0YXRlPSJwZW5kaW5nIn0ocik6KGYoITE9PT10KSxRKHIpKSksZS5fYmFja3ByZXNzdXJlPXR9ZS5leHBvcnRzPXtBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOmIsSXNXcml0YWJsZVN0cmVhbTp3LElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6ayxXcml0YWJsZVN0cmVhbTp5LFdyaXRhYmxlU3RyZWFtQWJvcnQ6UyxXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6VyxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT10KTt2YXIgcj10Ll9zdGF0ZTtyZXR1cm4hMD09PVAodCl8fCJjbG9zZWQiPT09cj9Qcm9taXNlLnJlc29sdmUoKToiZXJyb3JlZCI9PT1yP1Byb21pc2UucmVqZWN0KHQuX3N0b3JlZEVycm9yKTooZigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLEYoZSkpfSxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOk4sV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6TSxXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodDpQfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1rKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlciIpO3RoaXMuX293bmVyV3JpdGFibGVTdHJlYW09dCx0Ll93cml0ZXI9dGhpczt2YXIgcixuPXQuX3N0YXRlO2lmKCJ3cml0YWJsZSI9PT1uKSExPT09UCh0KSYmITA9PT10Ll9iYWNrcHJlc3N1cmU/KChyPXRoaXMpLl9yZWFkeVByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7ci5fcmVhZHlQcm9taXNlX3Jlc29sdmU9ZSxyLl9yZWFkeVByb21pc2VfcmVqZWN0PXR9KSksci5fcmVhZHlQcm9taXNlU3RhdGU9InBlbmRpbmciKTpKKHRoaXMpLFgodGhpcyk7ZWxzZSBpZigiZXJyb3JpbmciPT09bilLKHRoaXMsdC5fc3RvcmVkRXJyb3IpLHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksWCh0aGlzKTtlbHNlIGlmKCJjbG9zZWQiPT09bilKKHRoaXMpLGZ1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZXNvbHZlZCJ9KHRoaXMpO2Vsc2V7ZigiZXJyb3JlZCI9PT1uLCJzdGF0ZSBtdXN0IGJlIGVycm9yZWQiKTt2YXIgaT10Ll9zdG9yZWRFcnJvcjtLKHRoaXMsaSksdGhpcy5fcmVhZHlQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxmdW5jdGlvbihlLHQpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZWplY3RlZCJ9KHRoaXMsaSksdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9fXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygiYWJvcnQiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChWKCJhYm9ydCIpKTpmdW5jdGlvbihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07cmV0dXJuIGYodm9pZCAwIT09ciksUyhyLHQpfSh0aGlzLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChHKCJjbG9zZSIpKTt2YXIgZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO3JldHVybiB2b2lkIDA9PT1lP1Byb21pc2UucmVqZWN0KFYoImNsb3NlIikpOiEwPT09UChlKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbSIpKTpGKHRoaXMpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXRocm93IEcoInJlbGVhc2VMb2NrIik7dmFyIGU9dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTt2b2lkIDAhPT1lJiYoZih2b2lkIDAhPT1lLl93cml0ZXIpLE4odGhpcykpfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09SSh0aGlzKT9Qcm9taXNlLnJlamVjdChHKCJ3cml0ZSIpKTp2b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KFYoIndyaXRlIHRvIikpOk0odGhpcyxlKX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITE9PT1JKHRoaXMpP1Byb21pc2UucmVqZWN0KEcoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX0se2tleToiZGVzaXJlZFNpemUiLGdldDpmdW5jdGlvbigpe2lmKCExPT09SSh0aGlzKSl0aHJvdyBHKCJkZXNpcmVkU2l6ZSIpO2lmKHZvaWQgMD09PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0pdGhyb3cgVigiZGVzaXJlZFNpemUiKTtyZXR1cm4gZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtLCJlcnJvcmVkIj09PSh0PWUuX3N0YXRlKXx8ImVycm9yaW5nIj09PXQ/bnVsbDoiY2xvc2VkIj09PXQ/MDpCKGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7dmFyIGUsdH19LHtrZXk6InJlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygicmVhZHkiKSk6dGhpcy5fcmVhZHlQcm9taXNlfX1dKSxlfSgpO2Z1bmN0aW9uIEkoZSl7cmV0dXJuISFjKGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfb3duZXJXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpO3ZhciByPXQuX3N0YXRlO2lmKCJjbG9zZWQiPT09cnx8ImVycm9yZWQiPT09cilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIityKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKSk7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLGYoITE9PT1QKHQpKTt2YXIgbixhPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXtfcmVzb2x2ZTplLF9yZWplY3Q6cn07dC5fY2xvc2VSZXF1ZXN0PW59KSk7cmV0dXJuITA9PT10Ll9iYWNrcHJlc3N1cmUmJiJ3cml0YWJsZSI9PT1yJiZRKGUpLG49dC5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLG0obiwiY2xvc2UiLDApLFUobiksYX1mdW5jdGlvbiBMKGUsdCl7InBlbmRpbmciPT09ZS5fY2xvc2VkUHJvbWlzZVN0YXRlP1koZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZigicGVuZGluZyIhPT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nIiksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiBEKGUsdCl7InBlbmRpbmciPT09ZS5fcmVhZHlQcm9taXNlU3RhdGU/ZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlX3JlamVjdCh0KSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fcmVhZHlQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCIpLGYodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9yZWFkeVByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpLGYodC5fd3JpdGVyPT09ZSk7dmFyIHI9bmV3IFR5cGVFcnJvcigiV3JpdGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKTtEKGUsciksTChlLHIpLHQuX3dyaXRlcj12b2lkIDAsZS5fb3duZXJXcml0YWJsZVN0cmVhbT12b2lkIDB9ZnVuY3Rpb24gTShlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT1yKTt2YXIgbj1yLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsYT1mdW5jdGlvbihlLHQpe3ZhciByPWUuX3N0cmF0ZWd5U2l6ZTtpZih2b2lkIDA9PT1yKXJldHVybiAxO3RyeXtyZXR1cm4gcih0KX1jYXRjaCh0KXtyZXR1cm4gcShlLHQpLDF9fShuLHQpO2lmKHIhPT1lLl9vd25lcldyaXRhYmxlU3RyZWFtKXJldHVybiBQcm9taXNlLnJlamVjdChWKCJ3cml0ZSB0byIpKTt2YXIgaT1yLl9zdGF0ZTtpZigiZXJyb3JlZCI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7aWYoITA9PT1QKHIpfHwiY2xvc2VkIj09PWkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvIikpO2lmKCJlcnJvcmluZyI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7Zigid3JpdGFibGUiPT09aSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGYoITA9PT1rKGUpKSxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl93cml0ZVJlcXVlc3RzLnB1c2gobil9KSl9KHIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49e2NodW5rOnR9O3RyeXttKGUsbixyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBxKGUsdCl9dmFyIGE9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCExPT09UChhKSYmIndyaXRhYmxlIj09PWEuX3N0YXRlKXt2YXIgaT16KGUpO1IoYSxpKX1VKGUpfShuLHQsYSksb312YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTaW5rPXIsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCx2KHRoaXMpLHRoaXMuX3N0YXJ0ZWQ9ITE7dmFyIG89bChuLGkpO3RoaXMuX3N0cmF0ZWd5U2l6ZT1vLnNpemUsdGhpcy5fc3RyYXRlZ3lIV009by5oaWdoV2F0ZXJNYXJrLFIodCx6KHRoaXMpKX1yZXR1cm4gbihlLFt7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PSghIWModD10aGlzKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiX3VuZGVybHlpbmdTaW5rIikpKXRocm93IG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIik7dmFyIHQ7IndyaXRhYmxlIj09PXRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGUmJlcodGhpcyxlKX19LHtrZXk6Il9fYWJvcnRTdGVwcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5fdW5kZXJseWluZ1NpbmssImFib3J0IixbZV0pfX0se2tleToiX19lcnJvclN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3YodGhpcyl9fSx7a2V5OiJfX3N0YXJ0U3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW8odGhpcy5fdW5kZXJseWluZ1NpbmssInN0YXJ0IixbdGhpc10pLHI9dGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1Byb21pc2UucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbigpe2YoIndyaXRhYmxlIj09PXIuX3N0YXRlfHwiZXJyb3JpbmciPT09ci5fc3RhdGUpLGUuX3N0YXJ0ZWQ9ITAsVShlKX0pLChmdW5jdGlvbih0KXtmKCJ3cml0YWJsZSI9PT1yLl9zdGF0ZXx8ImVycm9yaW5nIj09PXIuX3N0YXRlKSxlLl9zdGFydGVkPSEwLF8ocix0KX0pKS5jYXRjaChoKX19XSksZX0oKTtmdW5jdGlvbiBCKGUpe3JldHVybiBlLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtpZighMSE9PWUuX3N0YXJ0ZWQmJnZvaWQgMD09PXQuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KXt2YXIgcj10Ll9zdGF0ZTtpZigiY2xvc2VkIiE9PXImJiJlcnJvcmVkIiE9PXIpaWYoImVycm9yaW5nIiE9PXIpe2lmKDAhPT1lLl9xdWV1ZS5sZW5ndGgpe3ZhciBuPWcoZSk7ImNsb3NlIj09PW4/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxmKHZvaWQgMCE9PWUuX2Nsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9ZS5fY2xvc2VSZXF1ZXN0LGUuX2Nsb3NlUmVxdWVzdD12b2lkIDB9KSh0KSxwKGUpLGYoMD09PWUuX3F1ZXVlLmxlbmd0aCwicXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQiKSxzKGUuX3VuZGVybHlpbmdTaW5rLCJjbG9zZSIsW10pLnRoZW4oKGZ1bmN0aW9uKCl7Qyh0KX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSx2b2lkIDAhPT1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0JiYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KHQpLGUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwKSxfKGUsdCl9KHQsZSl9KSkuY2F0Y2goaCl9KGUpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0LCJ0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCIpLGYoMCE9PWUuX3dyaXRlUmVxdWVzdHMubGVuZ3RoLCJ3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5IiksZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9ZS5fd3JpdGVSZXF1ZXN0cy5zaGlmdCgpfSkocikscyhlLl91bmRlcmx5aW5nU2luaywid3JpdGUiLFt0LGVdKS50aGVuKChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVzb2x2ZSh2b2lkIDApLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMH0ocik7dmFyIHQ9ci5fc3RhdGU7aWYoZigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLHAoZSksITE9PT1QKHIpJiYid3JpdGFibGUiPT09dCl7dmFyIG49eihlKTtSKHIsbil9VShlKX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSxfKGUsdCl9KHIsZSl9KSkuY2F0Y2goaCl9KGUsbi5jaHVuayl9fWVsc2UgQSh0KX19ZnVuY3Rpb24gcShlLHQpeyJ3cml0YWJsZSI9PT1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZXKGUsdCl9ZnVuY3Rpb24geihlKXtyZXR1cm4gQihlKTw9MH1mdW5jdGlvbiBXKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2YoIndyaXRhYmxlIj09PXIuX3N0YXRlKSx4KHIsdCl9ZnVuY3Rpb24gSChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHdyaXRlciIpfWZ1bmN0aW9uIFgoZSl7ZS5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD1yLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icGVuZGluZyJ9KSl9ZnVuY3Rpb24gWShlLHQpe2Yodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkIiksZih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZigicGVuZGluZyI9PT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmciKSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn1mdW5jdGlvbiBLKGUsdCl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0icmVqZWN0ZWQifWZ1bmN0aW9uIEooZSl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn1mdW5jdGlvbiBRKGUpe2Yodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCIpLGYodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDApLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYT1yKDEpLmFzc2VydDt0LkRlcXVldWVWYWx1ZT1mdW5jdGlvbihlKXthKCJfcXVldWUiaW4gZSYmIl9xdWV1ZVRvdGFsU2l6ZSJpbiBlLCJTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxhKGUuX3F1ZXVlLmxlbmd0aD4wLCJTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuIik7dmFyIHQ9ZS5fcXVldWUuc2hpZnQoKTtyZXR1cm4gZS5fcXVldWVUb3RhbFNpemUtPXQuc2l6ZSxlLl9xdWV1ZVRvdGFsU2l6ZTwwJiYoZS5fcXVldWVUb3RhbFNpemU9MCksdC52YWx1ZX0sdC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZT1mdW5jdGlvbihlLHQscil7aWYoYSgiX3F1ZXVlImluIGUmJiJfcXVldWVUb3RhbFNpemUiaW4gZSwiU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxyPU51bWJlcihyKSwhbihyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLiIpO2UuX3F1ZXVlLnB1c2goe3ZhbHVlOnQsc2l6ZTpyfSksZS5fcXVldWVUb3RhbFNpemUrPXJ9LHQuUGVla1F1ZXVlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uIiksYShlLl9xdWV1ZS5sZW5ndGg+MCwiU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4iKSxlLl9xdWV1ZVswXS52YWx1ZX0sdC5SZXNldFF1ZXVlPWZ1bmN0aW9uKGUpe2EoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxlLl9xdWV1ZT1bXSxlLl9xdWV1ZVRvdGFsU2l6ZT0wfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5BcnJheUJ1ZmZlckNvcHkscz1pLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsbD1pLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYz1pLkludm9rZU9yTm9vcCx1PWkuUHJvbWlzZUludm9rZU9yTm9vcCxmPWkuVHJhbnNmZXJBcnJheUJ1ZmZlcixoPWkuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksZD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayxwPXIoMCksbT1wLmNyZWF0ZUFycmF5RnJvbUxpc3QsZz1wLmNyZWF0ZURhdGFQcm9wZXJ0eSx2PXAudHlwZUlzT2JqZWN0LHk9cigxKSxiPXkuYXNzZXJ0LHc9eS5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24saz1yKDMpLFM9ay5EZXF1ZXVlVmFsdWUsXz1rLkVucXVldWVWYWx1ZVdpdGhTaXplLHg9ay5SZXNldFF1ZXVlLEE9cigyKSxDPUEuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixQPUEuSXNXcml0YWJsZVN0cmVhbSxFPUEuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxUPUEuV3JpdGFibGVTdHJlYW1BYm9ydCxSPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixPPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxJPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUsRj1BLldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrO2EodGhpcyxlKSx0aGlzLl9zdGF0ZT0icmVhZGFibGUiLHRoaXMuX3JlYWRlcj12b2lkIDAsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX2Rpc3R1cmJlZD0hMSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwO3ZhciBvPXQudHlwZSxzPVN0cmluZyhvKTtpZigiYnl0ZXMiPT09cyl2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGRlKHRoaXMsdCxpKTtlbHNle2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt2b2lkIDA9PT1pJiYoaT0xKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGFlKHRoaXMsdCxuLGkpfX1yZXR1cm4gbihlLFt7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09TSh0aGlzKT9Qcm9taXNlLnJlamVjdChSZSgiY2FuY2VsIikpOiEwPT09aih0aGlzKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXIiKSk6eih0aGlzLGUpfX0se2tleToiZ2V0UmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubW9kZTtpZighMT09PU0odGhpcykpdGhyb3cgUmUoImdldFJlYWRlciIpO2lmKHZvaWQgMD09PXQpcmV0dXJuIE4odGhpcyk7aWYoImJ5b2IiPT09KHQ9U3RyaW5nKHQpKSlyZXR1cm4gRCh0aGlzKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBtb2RlIGlzIHNwZWNpZmllZCIpfX0se2tleToicGlwZVRocm91Z2giLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS53cml0YWJsZSxuPWUucmVhZGFibGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3RyeXtQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoZSx2b2lkIDAsKGZ1bmN0aW9uKCl7fSkpfWNhdGNoKGUpe319KHRoaXMucGlwZVRvKHIsdCkpLG59fSx7a2V5OiJwaXBlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLnByZXZlbnRDbG9zZSxhPXIucHJldmVudEFib3J0LGk9ci5wcmV2ZW50Q2FuY2VsO2lmKCExPT09TSh0aGlzKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoUmUoInBpcGVUbyIpKTtpZighMT09PVAoZSkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8ncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0iKSk7aWYobj1Cb29sZWFuKG4pLGE9Qm9vbGVhbihhKSxpPUJvb2xlYW4oaSksITA9PT1qKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtIikpO2lmKCEwPT09RShlKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbyBjYW5ub3QgYmUgdXNlZCBvbiBhIGxvY2tlZCBXcml0YWJsZVN0cmVhbSIpKTt2YXIgbz1OKHRoaXMpLHM9QyhlKSxsPSExLGM9UHJvbWlzZS5yZXNvbHZlKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHUpe3ZhciBmLGgsZDtpZihnKHQsby5fY2xvc2VkUHJvbWlzZSwoZnVuY3Rpb24odCl7ITE9PT1hP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIFQoZSx0KX0pLCEwLHQpOnkoITAsdCl9KSksZyhlLHMuX2Nsb3NlZFByb21pc2UsKGZ1bmN0aW9uKGUpeyExPT09aT92KChmdW5jdGlvbigpe3JldHVybiB6KHQsZSl9KSwhMCxlKTp5KCEwLGUpfSkpLGY9dCxoPW8uX2Nsb3NlZFByb21pc2UsZD1mdW5jdGlvbigpeyExPT09bj92KChmdW5jdGlvbigpe3JldHVybiBSKHMpfSkpOnkoKX0sImNsb3NlZCI9PT1mLl9zdGF0ZT9kKCk6aC50aGVuKGQpLmNhdGNoKHcpLCEwPT09RihlKXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSl7dmFyIHA9bmV3IFR5cGVFcnJvcigidGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Iik7ITE9PT1pP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIHoodCxwKX0pLCEwLHApOnkoITAscCl9ZnVuY3Rpb24gbSgpe3ZhciBlPWM7cmV0dXJuIGMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZSE9PWM/bSgpOnZvaWQgMH0pKX1mdW5jdGlvbiBnKGUsdCxyKXsiZXJyb3JlZCI9PT1lLl9zdGF0ZT9yKGUuX3N0b3JlZEVycm9yKTp0LmNhdGNoKHIpLmNhdGNoKHcpfWZ1bmN0aW9uIHYodCxyLG4pe2Z1bmN0aW9uIGEoKXt0KCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYihyLG4pfSksKGZ1bmN0aW9uKGUpe3JldHVybiBiKCEwLGUpfSkpLmNhdGNoKHcpfSEwIT09bCYmKGw9ITAsIndyaXRhYmxlIj09PWUuX3N0YXRlJiYhMT09PUYoZSk/bSgpLnRoZW4oYSk6YSgpKX1mdW5jdGlvbiB5KHQscil7ITAhPT1sJiYobD0hMCwid3JpdGFibGUiPT09ZS5fc3RhdGUmJiExPT09RihlKT9tKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYih0LHIpfSkpLmNhdGNoKHcpOmIodCxyKSl9ZnVuY3Rpb24gYihlLHQpe08ocykscmUobyksZT91KHQpOnIodm9pZCAwKX0oZnVuY3Rpb24gZSgpe3JldHVybiBjPVByb21pc2UucmVzb2x2ZSgpLCEwPT09bD9Qcm9taXNlLnJlc29sdmUoKTpzLl9yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmUobykudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTshMCE9PWUuZG9uZSYmKGM9SShzLHQpLmNhdGNoKChmdW5jdGlvbigpe30pKSl9KSl9KSkudGhlbihlKX0pKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe2M9UHJvbWlzZS5yZXNvbHZlKCksdyhlKX0pKX0pKX19LHtrZXk6InRlZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PU0odGhpcykpdGhyb3cgUmUoInRlZSIpO3ZhciBlPUIodGhpcywhMSk7cmV0dXJuIG0oZSl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09TSh0aGlzKSl0aHJvdyBSZSgibG9ja2VkIik7cmV0dXJuIGoodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFEoZSl9ZnVuY3Rpb24gTihlKXtyZXR1cm4gbmV3IEooZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIiKX1mdW5jdGlvbiBqKGUpe3JldHVybiBiKCEwPT09TShlKSwiSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSx2b2lkIDAhPT1lLl9yZWFkZXJ9ZnVuY3Rpb24gQihlLHQpe2IoITA9PT1NKGUpKSxiKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPU4oZSksbj17Y2xvc2VkT3JFcnJvcmVkOiExLGNhbmNlbGVkMTohMSxjYW5jZWxlZDI6ITEscmVhc29uMTp2b2lkIDAscmVhc29uMjp2b2lkIDB9O24ucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5fcmVzb2x2ZT1lfSkpO3ZhciBhPWZ1bmN0aW9uIGUoKXt2YXIgdD1lLl9icmFuY2gxLHI9ZS5fYnJhbmNoMixuPWUuX3RlZVN0YXRlO3JldHVybiBuZShlLl9yZWFkZXIpLnRoZW4oKGZ1bmN0aW9uKGUpe2IodihlKSk7dmFyIGE9ZS52YWx1ZSxpPWUuZG9uZTtpZihiKCJib29sZWFuIj09dHlwZW9mIGkpLCEwPT09aSYmITE9PT1uLmNsb3NlZE9yRXJyb3JlZCYmKCExPT09bi5jYW5jZWxlZDEmJnNlKHQpLCExPT09bi5jYW5jZWxlZDImJnNlKHIpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKSwhMCE9PW4uY2xvc2VkT3JFcnJvcmVkKXt2YXIgbz1hLHM9YTshMT09PW4uY2FuY2VsZWQxJiZsZSh0LG8pLCExPT09bi5jYW5jZWxlZDImJmxlKHIscyl9fSkpfTthLl9yZWFkZXI9cixhLl90ZWVTdGF0ZT1uLGEuX2Nsb25lRm9yQnJhbmNoMj10O3ZhciBpPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDE9ITAsbi5yZWFzb24xPXQsITA9PT1uLmNhbmNlbGVkMil7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtpLl9zdHJlYW09ZSxpLl90ZWVTdGF0ZT1uO3ZhciBvPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDI9ITAsbi5yZWFzb24yPXQsITA9PT1uLmNhbmNlbGVkMSl7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtvLl9zdHJlYW09ZSxvLl90ZWVTdGF0ZT1uO3ZhciBzPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7ZyhzLCJwdWxsIixhKSxnKHMsImNhbmNlbCIsaSk7dmFyIGw9bmV3IEwocyksYz1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO2coYywicHVsbCIsYSksZyhjLCJjYW5jZWwiLG8pO3ZhciB1PW5ldyBMKGMpO3JldHVybiBhLl9icmFuY2gxPWwuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixhLl9icmFuY2gyPXUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixyLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXshMCE9PW4uY2xvc2VkT3JFcnJvcmVkJiYoY2UoYS5fYnJhbmNoMSxlKSxjZShhLl9icmFuY2gyLGUpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKX0pKSxbbCx1XX1mdW5jdGlvbiBVKGUpe3JldHVybiBiKCEwPT09WihlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMucHVzaChuKX0pKX1mdW5jdGlvbiBxKGUpe3JldHVybiBiKCEwPT09JChlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKG4pfSkpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6ImVycm9yZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpOihXKGUpLGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBXKGUpe2IoInJlYWRhYmxlIj09PWUuX3N0YXRlKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgdD1lLl9yZWFkZXI7aWYodm9pZCAwIT09dCl7aWYoITA9PT0kKHQpKXtmb3IodmFyIHI9MDtyPHQuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7cisrKSgwLHQuX3JlYWRSZXF1ZXN0c1tyXS5fcmVzb2x2ZSkocyh2b2lkIDAsITApKTt0Ll9yZWFkUmVxdWVzdHM9W119IWZ1bmN0aW9uKGUpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodm9pZCAwKSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH0odCl9fWZ1bmN0aW9uIEgoZSx0KXtiKCEwPT09TShlKSwic3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0iKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSwic3RhdGUgbXVzdCBiZSByZWFkYWJsZSIpLGUuX3N0YXRlPSJlcnJvcmVkIixlLl9zdG9yZWRFcnJvcj10O3ZhciByPWUuX3JlYWRlcjtpZih2b2lkIDAhPT1yKXtpZighMD09PSQocikpe2Zvcih2YXIgbj0wO248ci5fcmVhZFJlcXVlc3RzLmxlbmd0aDtuKyspci5fcmVhZFJlcXVlc3RzW25dLl9yZWplY3QodCk7ci5fcmVhZFJlcXVlc3RzPVtdfWVsc2V7YihaKHIpLCJyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiKTtmb3IodmFyIGE9MDthPHIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO2ErKylyLl9yZWFkSW50b1JlcXVlc3RzW2FdLl9yZWplY3QodCk7ci5fcmVhZEludG9SZXF1ZXN0cz1bXX1GZShyLHQpLHIuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfX1mdW5jdGlvbiBHKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkUmVxdWVzdHMubGVuZ3RoPjApLG4uX3JlYWRSZXF1ZXN0cy5zaGlmdCgpLl9yZXNvbHZlKHModCxyKSl9ZnVuY3Rpb24gVihlKXtyZXR1cm4gZS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aH1mdW5jdGlvbiBYKGUpe3JldHVybiBlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGh9ZnVuY3Rpb24gWShlKXt2YXIgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiExIT09Wih0KX1mdW5jdGlvbiBLKGUpe3ZhciB0PWUuX3JlYWRlcjtyZXR1cm4gdm9pZCAwIT09dCYmITEhPT0kKHQpfWUuZXhwb3J0cz17UmVhZGFibGVTdHJlYW06TCxJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3JldHVybiBiKCEwPT09TShlKSwiSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSxlLl9kaXN0dXJiZWR9LFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTpzZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTpsZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6Y2UsUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOmZlfTt2YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09TSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1qKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlciIpO2VlKHRoaXMsdCksdGhpcy5fcmVhZFJlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT0kKHRoaXMpP1Byb21pc2UucmVqZWN0KEllKCJjYW5jZWwiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSl9fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExPT09JCh0aGlzKT9Qcm9taXNlLnJlamVjdChJZSgicmVhZCIpKTp2b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KE9lKCJyZWFkIGZyb20iKSk6bmUodGhpcyl9fSx7a2V5OiJyZWxlYXNlTG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PSQodGhpcykpdGhyb3cgSWUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aD4wKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkIik7cmUodGhpcyl9fX0se2tleToiY2xvc2VkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PSQodGhpcyk/UHJvbWlzZS5yZWplY3QoSWUoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX1dKSxlfSgpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKGEodGhpcyxlKSwhTSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZighMT09PXBlKHQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlIHNvdXJjZSIpO2lmKGoodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyIik7ZWUodGhpcyx0KSx0aGlzLl9yZWFkSW50b1JlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFoodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSk6UHJvbWlzZS5yZWplY3QoTGUoImNhbmNlbCIpKX19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaKHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0/UHJvbWlzZS5yZWplY3QoT2UoInJlYWQgZnJvbSIpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoZSk/MD09PWUuYnl0ZUxlbmd0aD9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJ2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoIikpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtyZXR1cm4gYih2b2lkIDAhPT1yKSxyLl9kaXN0dXJiZWQ9ITAsImVycm9yZWQiPT09ci5fc3RhdGU/UHJvbWlzZS5yZWplY3Qoci5fc3RvcmVkRXJyb3IpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLG49MTt0LmNvbnN0cnVjdG9yIT09RGF0YVZpZXcmJihuPXQuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQpO3ZhciBhPXQuY29uc3RydWN0b3IsaT17YnVmZmVyOnQuYnVmZmVyLGJ5dGVPZmZzZXQ6dC5ieXRlT2Zmc2V0LGJ5dGVMZW5ndGg6dC5ieXRlTGVuZ3RoLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6bixjdG9yOmEscmVhZGVyVHlwZToiYnlvYiJ9O2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApcmV0dXJuIGkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKSxVKHIpO2lmKCJjbG9zZWQiPT09ci5fc3RhdGUpe3ZhciBvPW5ldyB0LmNvbnN0cnVjdG9yKGkuYnVmZmVyLGkuYnl0ZU9mZnNldCwwKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobywhMCkpfWlmKGUuX3F1ZXVlVG90YWxTaXplPjApe2lmKCEwPT09a2UoZSxpKSl7dmFyIGw9YmUoaSk7cmV0dXJuIF9lKGUpLFByb21pc2UucmVzb2x2ZShzKGwsITEpKX1pZighMD09PWUuX2Nsb3NlUmVxdWVzdGVkKXt2YXIgYz1uZXcgVHlwZUVycm9yKCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyIik7cmV0dXJuIEVlKGUsYyksUHJvbWlzZS5yZWplY3QoYyl9fWkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKTt2YXIgdT1VKHIpO3JldHVybiBnZShlKSx1fShyLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsdCl9KHRoaXMsZSk6UHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigidmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3IikpOlByb21pc2UucmVqZWN0KExlKCJyZWFkIikpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIVoodGhpcykpdGhyb3cgTGUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg+MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCIpO3JlKHRoaXMpfX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpQcm9taXNlLnJlamVjdChMZSgiY2xvc2VkIikpfX1dKSxlfSgpO2Z1bmN0aW9uIFooZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZEludG9SZXF1ZXN0cyIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZFJlcXVlc3RzIil9ZnVuY3Rpb24gZWUoZSx0KXtlLl9vd25lclJlYWRhYmxlU3RyZWFtPXQsdC5fcmVhZGVyPWUsInJlYWRhYmxlIj09PXQuX3N0YXRlP2Z1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXQsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9cn0pKX0oZSk6ImNsb3NlZCI9PT10Ll9zdGF0ZT9mdW5jdGlvbihlKXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlKTooYigiZXJyb3JlZCI9PT10Ll9zdGF0ZSwic3RhdGUgbXVzdCBiZSBlcnJvcmVkIiksZnVuY3Rpb24oZSx0KXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlLHQuX3N0b3JlZEVycm9yKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgcj1lLl9vd25lclJlYWRhYmxlU3RyZWFtO3JldHVybiBiKHZvaWQgMCE9PXIpLHoocix0KX1mdW5jdGlvbiByZShlKXtiKHZvaWQgMCE9PWUuX293bmVyUmVhZGFibGVTdHJlYW0pLGIoZS5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyPT09ZSksInJlYWRhYmxlIj09PWUuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlP0ZlKGUsbmV3IFR5cGVFcnJvcigiUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKSk6ZnVuY3Rpb24oZSx0KXtiKHZvaWQgMD09PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSksYih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KX0oZSxuZXcgVHlwZUVycm9yKCJSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzcyIpKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxlLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXI9dm9pZCAwLGUuX293bmVyUmVhZGFibGVTdHJlYW09dm9pZCAwfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PWUuX293bmVyUmVhZGFibGVTdHJlYW07cmV0dXJuIGIodm9pZCAwIT09dCksdC5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHModm9pZCAwLCEwKSk6ImVycm9yZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZWplY3QodC5fc3RvcmVkRXJyb3IpOihiKCJyZWFkYWJsZSI9PT10Ll9zdGF0ZSksdC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCkpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09TSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTb3VyY2U9cix0aGlzLl9xdWV1ZT12b2lkIDAsdGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jbG9zZVJlcXVlc3RlZD0hMSx0aGlzLl9wdWxsQWdhaW49ITEsdGhpcy5fcHVsbGluZz0hMTt2YXIgbz1oKG4saSk7dGhpcy5fc3RyYXRlZ3lTaXplPW8uc2l6ZSx0aGlzLl9zdHJhdGVneUhXTT1vLmhpZ2hXYXRlck1hcms7dmFyIHM9dGhpcyxsPWMociwic3RhcnQiLFt0aGlzXSk7UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKCl7cy5fc3RhcnRlZD0hMCxiKCExPT09cy5fcHVsbGluZyksYighMT09PXMuX3B1bGxBZ2Fpbiksb2Uocyl9KSwoZnVuY3Rpb24oZSl7dWUocyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTtzZSh0aGlzKX19LHtrZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09aWUodGhpcykpdGhyb3cgRGUoImVucXVldWUiKTtpZighMD09PXRoaXMuX2Nsb3NlUmVxdWVzdGVkKXRocm93IG5ldyBUeXBlRXJyb3IoInN0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmciKTt2YXIgdD10aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO2lmKCJyZWFkYWJsZSIhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gKGluICIrdCsiIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8iKTtyZXR1cm4gbGUodGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7Y2UodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwiY2FuY2VsIixbZV0pfX0se2tleToiX19wdWxsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD4wKXt2YXIgdD1TKHRoaXMpO3JldHVybiEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQmJjA9PT10aGlzLl9xdWV1ZS5sZW5ndGg/VyhlKTpvZSh0aGlzKSxQcm9taXNlLnJlc29sdmUocyh0LCExKSl9dmFyIHI9cShlKTtyZXR1cm4gb2UodGhpcykscn19LHtrZXk6ImRlc2lyZWRTaXplIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJkZXNpcmVkU2l6ZSIpO3JldHVybiBmZSh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBpZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl91bmRlcmx5aW5nU291cmNlIil9ZnVuY3Rpb24gb2UoZSl7ITEhPT1mdW5jdGlvbihlKXt2YXIgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07cmV0dXJuImNsb3NlZCIhPT10Ll9zdGF0ZSYmImVycm9yZWQiIT09dC5fc3RhdGUmJighMCE9PWUuX2Nsb3NlUmVxdWVzdGVkJiYoITEhPT1lLl9zdGFydGVkJiYoITA9PT1qKHQpJiZYKHQpPjB8fGZlKGUpPjApKSl9KGUpJiYoITAhPT1lLl9wdWxsaW5nPyhiKCExPT09ZS5fcHVsbEFnYWluKSxlLl9wdWxsaW5nPSEwLHUoZS5fdW5kZXJseWluZ1NvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2lmKGUuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4pcmV0dXJuIGUuX3B1bGxBZ2Fpbj0hMSxvZShlKX0pLChmdW5jdGlvbih0KXt1ZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtiKCExPT09ZS5fY2xvc2VSZXF1ZXN0ZWQpLGIoInJlYWRhYmxlIj09PXQuX3N0YXRlKSxlLl9jbG9zZVJlcXVlc3RlZD0hMCwwPT09ZS5fcXVldWUubGVuZ3RoJiZXKHQpfWZ1bmN0aW9uIGxlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpLCEwPT09aihyKSYmWChyKT4wKUcocix0LCExKTtlbHNle3ZhciBuPTE7aWYodm9pZCAwIT09ZS5fc3RyYXRlZ3lTaXplKXt2YXIgYT1lLl9zdHJhdGVneVNpemU7dHJ5e249YSh0KX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fXRyeXtfKGUsdCxuKX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fW9lKGUpfWZ1bmN0aW9uIGNlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoInJlYWRhYmxlIj09PXIuX3N0YXRlKSx4KGUpLEgocix0KX1mdW5jdGlvbiB1ZShlLHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZjZShlLHQpfWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfXZhciBoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI9dCx0aGlzLl92aWV3PXJ9cmV0dXJuIG4oZSxbe2tleToicmVzcG9uZCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1tZSh0aGlzKSl0aHJvdyBOZSgicmVzcG9uZCIpO2lmKHZvaWQgMD09PXRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkIik7IWZ1bmN0aW9uKGUsdCl7aWYodD1OdW1iZXIodCksITE9PT1sKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gbXVzdCBiZSBhIGZpbml0ZSIpO2IoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCksQ2UoZSx0KX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9fSx7a2V5OiJyZXNwb25kV2l0aE5ld1ZpZXciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09bWUodGhpcykpdGhyb3cgTmUoInJlc3BvbmQiKTtpZih2b2lkIDA9PT10aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IHJlc3BvbmQgd2l0aCBhcnJheSBidWZmZXIgdmlld3MiKTshZnVuY3Rpb24oZSx0KXtiKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApO3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF07aWYoci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQhPT10LmJ5dGVPZmZzZXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QiKTtpZihyLmJ5dGVMZW5ndGghPT10LmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QiKTtyLmJ1ZmZlcj10LmJ1ZmZlcixDZShlLHQuYnl0ZUxlbmd0aCl9KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLGUpfX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXd9fV0pLGV9KCksZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtpZihhKHRoaXMsZSksITE9PT1NKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZih2b2lkIDAhPT10Ll9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZ2l2ZW4gYSBieXRlIHNvdXJjZSIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlPXIsdGhpcy5fcHVsbEFnYWluPSExLHRoaXMuX3B1bGxpbmc9ITEsdmUodGhpcyksdGhpcy5fcXVldWU9dGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fY2xvc2VSZXF1ZXN0ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9zdHJhdGVneUhXTT1kKG4pO3ZhciBpPXIuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKHZvaWQgMCE9PWkmJighMT09PU51bWJlci5pc0ludGVnZXIoaSl8fGk8PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTt0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU9aSx0aGlzLl9wZW5kaW5nUHVsbEludG9zPVtdO3ZhciBvPXRoaXMscz1jKHIsInN0YXJ0IixbdGhpc10pO1Byb21pc2UucmVzb2x2ZShzKS50aGVuKChmdW5jdGlvbigpe28uX3N0YXJ0ZWQ9ITAsYighMT09PW8uX3B1bGxpbmcpLGIoITE9PT1vLl9wdWxsQWdhaW4pLGdlKG8pfSksKGZ1bmN0aW9uKGUpeyJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmRWUobyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXBlKHRoaXMpKXRocm93IE1lKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09dC5fc3RhdGUpLGUuX3F1ZXVlVG90YWxTaXplPjApZS5fY2xvc2VSZXF1ZXN0ZWQ9ITA7ZWxzZXtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiZlLl9wZW5kaW5nUHVsbEludG9zWzBdLmJ5dGVzRmlsbGVkPjApe3ZhciByPW5ldyBUeXBlRXJyb3IoIkluc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXIiKTt0aHJvdyBFZShlLHIpLHJ9Vyh0KX19KHRoaXMpfX0se2tleToiZW5xdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiZW5xdWV1ZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigic3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZyIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIit0KyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0byIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIik7IWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpO3ZhciBuPXQuYnVmZmVyLGE9dC5ieXRlT2Zmc2V0LGk9dC5ieXRlTGVuZ3RoLG89ZihuKTtpZighMD09PUsocikpaWYoMD09PVgocikpd2UoZSxvLGEsaSk7ZWxzZXtiKDA9PT1lLl9xdWV1ZS5sZW5ndGgpO3ZhciBzPW5ldyBVaW50OEFycmF5KG8sYSxpKTtHKHIscywhMSl9ZWxzZSEwPT09WShyKT8od2UoZSxvLGEsaSksQWUoZSkpOihiKCExPT09aihyKSwic3RyZWFtIG11c3Qgbm90IGJlIGxvY2tlZCIpLHdlKGUsbyxhLGkpKX0odGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PXBlKHRoaXMpKXRocm93IE1lKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7RWUodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiYodGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXS5ieXRlc0ZpbGxlZD0wKSx4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UsImNhbmNlbCIsW2VdKX19LHtrZXk6Il9fcHVsbFN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZihiKCEwPT09SyhlKSksdGhpcy5fcXVldWVUb3RhbFNpemU+MCl7YigwPT09WChlKSk7dmFyIHQ9dGhpcy5fcXVldWUuc2hpZnQoKTt0aGlzLl9xdWV1ZVRvdGFsU2l6ZS09dC5ieXRlTGVuZ3RoLF9lKHRoaXMpO3ZhciByPXZvaWQgMDt0cnl7cj1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKHIsITEpKX12YXIgbj10aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7aWYodm9pZCAwIT09bil7dmFyIGE9dm9pZCAwO3RyeXthPW5ldyBBcnJheUJ1ZmZlcihuKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9dmFyIGk9e2J1ZmZlcjphLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOm4sYnl0ZXNGaWxsZWQ6MCxlbGVtZW50U2l6ZToxLGN0b3I6VWludDhBcnJheSxyZWFkZXJUeXBlOiJkZWZhdWx0In07dGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGkpfXZhciBvPXEoZSk7cmV0dXJuIGdlKHRoaXMpLG99fSx7a2V5OiJieW9iUmVxdWVzdCIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiYnlvYlJlcXVlc3QiKTtpZih2b2lkIDA9PT10aGlzLl9ieW9iUmVxdWVzdCYmdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXSx0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtlLmJ5dGVzRmlsbGVkLGUuYnl0ZUxlbmd0aC1lLmJ5dGVzRmlsbGVkKTt0aGlzLl9ieW9iUmVxdWVzdD1uZXcgaGUodGhpcyx0KX1yZXR1cm4gdGhpcy5fYnlvYlJlcXVlc3R9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiZGVzaXJlZFNpemUiKTtyZXR1cm4gVGUodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdW5kZXJseWluZ0J5dGVTb3VyY2UiKX1mdW5jdGlvbiBtZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGdlKGUpeyExIT09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO3JldHVybiJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmKCEwIT09ZS5fY2xvc2VSZXF1ZXN0ZWQmJighMSE9PWUuX3N0YXJ0ZWQmJighMD09PUsodCkmJlgodCk+MHx8KCEwPT09WSh0KSYmVih0KT4wfHxUZShlKT4wKSkpKX0oZSkmJighMCE9PWUuX3B1bGxpbmc/KGIoITE9PT1lLl9wdWxsQWdhaW4pLGUuX3B1bGxpbmc9ITAsdShlLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2UuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsZ2UoZSkpfSksKGZ1bmN0aW9uKHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZFZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHZlKGUpe3hlKGUpLGUuX3BlbmRpbmdQdWxsSW50b3M9W119ZnVuY3Rpb24geWUoZSx0KXtiKCJlcnJvcmVkIiE9PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IG5vdCBiZSBlcnJvcmVkIik7dmFyIHI9ITE7ImNsb3NlZCI9PT1lLl9zdGF0ZSYmKGIoMD09PXQuYnl0ZXNGaWxsZWQpLHI9ITApO3ZhciBuPWJlKHQpOyJkZWZhdWx0Ij09PXQucmVhZGVyVHlwZT9HKGUsbixyKTooYigiYnlvYiI9PT10LnJlYWRlclR5cGUpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aD4wKSxuLl9yZWFkSW50b1JlcXVlc3RzLnNoaWZ0KCkuX3Jlc29sdmUocyh0LHIpKX0oZSxuLHIpKX1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLmJ5dGVzRmlsbGVkLHI9ZS5lbGVtZW50U2l6ZTtyZXR1cm4gYih0PD1lLmJ5dGVMZW5ndGgpLGIodCVyPT0wKSxuZXcgZS5jdG9yKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCx0L3IpfWZ1bmN0aW9uIHdlKGUsdCxyLG4pe2UuX3F1ZXVlLnB1c2goe2J1ZmZlcjp0LGJ5dGVPZmZzZXQ6cixieXRlTGVuZ3RoOm59KSxlLl9xdWV1ZVRvdGFsU2l6ZSs9bn1mdW5jdGlvbiBrZShlLHQpe3ZhciByPXQuZWxlbWVudFNpemUsbj10LmJ5dGVzRmlsbGVkLXQuYnl0ZXNGaWxsZWQlcixhPU1hdGgubWluKGUuX3F1ZXVlVG90YWxTaXplLHQuYnl0ZUxlbmd0aC10LmJ5dGVzRmlsbGVkKSxpPXQuYnl0ZXNGaWxsZWQrYSxzPWktaSVyLGw9YSxjPSExO3M+biYmKGw9cy10LmJ5dGVzRmlsbGVkLGM9ITApO2Zvcih2YXIgdT1lLl9xdWV1ZTtsPjA7KXt2YXIgZj11WzBdLGg9TWF0aC5taW4obCxmLmJ5dGVMZW5ndGgpLGQ9dC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQ7byh0LmJ1ZmZlcixkLGYuYnVmZmVyLGYuYnl0ZU9mZnNldCxoKSxmLmJ5dGVMZW5ndGg9PT1oP3Uuc2hpZnQoKTooZi5ieXRlT2Zmc2V0Kz1oLGYuYnl0ZUxlbmd0aC09aCksZS5fcXVldWVUb3RhbFNpemUtPWgsU2UoZSxoLHQpLGwtPWh9cmV0dXJuITE9PT1jJiYoYigwPT09ZS5fcXVldWVUb3RhbFNpemUsInF1ZXVlIG11c3QgYmUgZW1wdHkiKSxiKHQuYnl0ZXNGaWxsZWQ+MCksYih0LmJ5dGVzRmlsbGVkPHQuZWxlbWVudFNpemUpKSxjfWZ1bmN0aW9uIFNlKGUsdCxyKXtiKDA9PT1lLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aHx8ZS5fcGVuZGluZ1B1bGxJbnRvc1swXT09PXIpLHhlKGUpLHIuYnl0ZXNGaWxsZWQrPXR9ZnVuY3Rpb24gX2UoZSl7YigicmVhZGFibGUiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSksMD09PWUuX3F1ZXVlVG90YWxTaXplJiYhMD09PWUuX2Nsb3NlUmVxdWVzdGVkP1coZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTpnZShlKX1mdW5jdGlvbiB4ZShlKXt2b2lkIDAhPT1lLl9ieW9iUmVxdWVzdCYmKGUuX2J5b2JSZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsZS5fYnlvYlJlcXVlc3QuX3ZpZXc9dm9pZCAwLGUuX2J5b2JSZXF1ZXN0PXZvaWQgMCl9ZnVuY3Rpb24gQWUoZSl7Zm9yKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCk7ZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MDspe2lmKDA9PT1lLl9xdWV1ZVRvdGFsU2l6ZSlyZXR1cm47dmFyIHQ9ZS5fcGVuZGluZ1B1bGxJbnRvc1swXTshMD09PWtlKGUsdCkmJihQZShlKSx5ZShlLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sdCkpfX1mdW5jdGlvbiBDZShlLHQpe3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF0sbj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07aWYoImNsb3NlZCI9PT1uLl9zdGF0ZSl7aWYoMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbSIpOyFmdW5jdGlvbihlLHQpe3QuYnVmZmVyPWYodC5idWZmZXIpLGIoMD09PXQuYnl0ZXNGaWxsZWQsImJ5dGVzRmlsbGVkIG11c3QgYmUgMCIpO3ZhciByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZighMD09PVkocikpZm9yKDtWKHIpPjA7KXllKHIsUGUoZSkpfShlLHIpfWVsc2UgYigicmVhZGFibGUiPT09bi5fc3RhdGUpLGZ1bmN0aW9uKGUsdCxyKXtpZihyLmJ5dGVzRmlsbGVkK3Q+ci5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlIik7aWYoU2UoZSx0LHIpLCEoci5ieXRlc0ZpbGxlZDxyLmVsZW1lbnRTaXplKSl7UGUoZSk7dmFyIG49ci5ieXRlc0ZpbGxlZCVyLmVsZW1lbnRTaXplO2lmKG4+MCl7dmFyIGE9ci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQsaT1yLmJ1ZmZlci5zbGljZShhLW4sYSk7d2UoZSxpLDAsaS5ieXRlTGVuZ3RoKX1yLmJ1ZmZlcj1mKHIuYnVmZmVyKSxyLmJ5dGVzRmlsbGVkLT1uLHllKGUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSxyKSxBZShlKX19KGUsdCxyKX1mdW5jdGlvbiBQZShlKXt2YXIgdD1lLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7cmV0dXJuIHhlKGUpLHR9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgcj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07YigicmVhZGFibGUiPT09ci5fc3RhdGUpLHZlKGUpLHgoZSksSChyLHQpfWZ1bmN0aW9uIFRlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtIil9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlciIpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiKX1mdW5jdGlvbiBGZShlLHQpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH1mdW5jdGlvbiBMZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIil9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIil9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Iil9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIil9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2KSxhPXIoNCksaT1yKDIpO3QuVHJhbnNmb3JtU3RyZWFtPW4uVHJhbnNmb3JtU3RyZWFtLHQuUmVhZGFibGVTdHJlYW09YS5SZWFkYWJsZVN0cmVhbSx0LklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ9YS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlPWEuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU9YS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSx0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZT1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx0LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI9aS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLHQuSXNXcml0YWJsZVN0cmVhbT1pLklzV3JpdGFibGVTdHJlYW0sdC5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkPWkuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCx0LldyaXRhYmxlU3RyZWFtPWkuV3JpdGFibGVTdHJlYW0sdC5Xcml0YWJsZVN0cmVhbUFib3J0PWkuV3JpdGFibGVTdHJlYW1BYm9ydCx0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb249aS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLHQuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsdC5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlfSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBpPXIoMSkuYXNzZXJ0LG89cigwKSxzPW8uSW52b2tlT3JOb29wLGw9by5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssYz1vLlByb21pc2VJbnZva2VPck5vb3AsdT1vLnR5cGVJc09iamVjdCxmPXIoNCksaD1mLlJlYWRhYmxlU3RyZWFtLGQ9Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UscD1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLG09Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsZz1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx2PXIoMikseT12LldyaXRhYmxlU3RyZWFtLGI9di5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7ZnVuY3Rpb24gdyhlLHQpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7dmFyIHI9ZS5fcmVhZGFibGVDb250cm9sbGVyO3RyeXtwKHIsdCl9Y2F0Y2godCl7dGhyb3cgZS5fcmVhZGFibGVDbG9zZWQ9ITAsUyhlLHQpLGUuX3N0b3JlZEVycm9yfSEwPT1nKHIpPD0wJiYhMT09PWUuX2JhY2twcmVzc3VyZSYmQShlLCEwKX1mdW5jdGlvbiBrKGUpe2koITE9PT1lLl9lcnJvcmVkKSxpKCExPT09ZS5fcmVhZGFibGVDbG9zZWQpO3RyeXtkKGUuX3JlYWRhYmxlQ29udHJvbGxlcil9Y2F0Y2goZSl7aSghMSl9ZS5fcmVhZGFibGVDbG9zZWQ9ITB9ZnVuY3Rpb24gUyhlLHQpeyExPT09ZS5fZXJyb3JlZCYmXyhlLHQpfWZ1bmN0aW9uIF8oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksZS5fZXJyb3JlZD0hMCxlLl9zdG9yZWRFcnJvcj10LCExPT09ZS5fd3JpdGFibGVEb25lJiZiKGUuX3dyaXRhYmxlQ29udHJvbGxlcix0KSwhMT09PWUuX3JlYWRhYmxlQ2xvc2VkJiZtKGUuX3JlYWRhYmxlQ29udHJvbGxlcix0KX1mdW5jdGlvbiB4KGUpe3JldHVybiBpKHZvaWQgMCE9PWUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMT09PWUuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMD09PWUuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9ZnVuY3Rpb24gQShlLHQpe2koZS5fYmFja3ByZXNzdXJlIT09dCwiVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gYmFja3ByZXNzdXJlIGlzIGNoYW5nZWQiKSx2b2lkIDAhPT1lLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlJiZlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUodCksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlPXR9KSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpKGUhPT10LCJfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCIpfSkpLGUuX2JhY2twcmVzc3VyZT10fWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdyh0Ll9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSIpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciIpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdHJlYW09dCx0aGlzLl9zdGFydFByb21pc2U9cn1yZXR1cm4gbihlLFt7a2V5OiJzdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHJhbnNmb3JtU3RyZWFtO3JldHVybiB0Ll93cml0YWJsZUNvbnRyb2xsZXI9ZSx0aGlzLl9zdGFydFByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geCh0KX0pKX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksaSghMT09PWUuX3RyYW5zZm9ybWluZyksaSghMT09PWUuX2JhY2twcmVzc3VyZSksZS5fdHJhbnNmb3JtaW5nPSEwO3ZhciByPWUuX3RyYW5zZm9ybWVyLG49ZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcjtyZXR1cm4gbChyLCJ0cmFuc2Zvcm0iLFt0LG5dLEMsW3Qsbl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3RyYW5zZm9ybWluZz0hMSx4KGUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QodCl9KSl9KHRoaXMuX3RyYW5zZm9ybVN0cmVhbSxlKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtlLl93cml0YWJsZURvbmU9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlIHNpZGUgYWJvcnRlZCIpKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMT09PWUuX3RyYW5zZm9ybWluZyksZS5fd3JpdGFibGVEb25lPSEwLGMoZS5fdHJhbnNmb3JtZXIsImZsdXNoIixbZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1lLl9lcnJvcmVkP1Byb21pc2UucmVqZWN0KGUuX3N0b3JlZEVycm9yKTooITE9PT1lLl9yZWFkYWJsZUNsb3NlZCYmayhlKSxQcm9taXNlLnJlc29sdmUoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpfSkpfX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7YSh0aGlzLGUpLHRoaXMuX3RyYW5zZm9ybVN0cmVhbT10LHRoaXMuX3N0YXJ0UHJvbWlzZT1yfXJldHVybiBuKGUsW3trZXk6InN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdHJlYW07cmV0dXJuIHQuX3JlYWRhYmxlQ29udHJvbGxlcj1lLHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3JldHVybiBpKHZvaWQgMCE9PXQuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMD09PXQuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMT09PXQuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksdC5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9KSl9fSx7a2V5OiJwdWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMD09PWUuX2JhY2twcmVzc3VyZSwicHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZSIpLGkodm9pZCAwIT09ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSwiX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLEEoZSwhMSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZX19LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdHJlYW07ZS5fcmVhZGFibGVDbG9zZWQ9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlIHNpZGUgY2FuY2VsZWQiKSl9fV0pLGV9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09RSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlIik7aWYodm9pZCAwIT09dC5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yIik7dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbT10fXJldHVybiBuKGUsW3trZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09UCh0aGlzKSl0aHJvdyBGKCJlbnF1ZXVlIik7dyh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImNsb3NlIik7IWZ1bmN0aW9uKGUpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7ayhlKX0odGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImVycm9yIik7IWZ1bmN0aW9uKGUsdCl7aWYoITA9PT1lLl9lcnJvcmVkKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQiKTtfKGUsdCl9KHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0sZSl9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImRlc2lyZWRTaXplIik7dmFyIGU9dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyO3JldHVybiBnKGUpfX1dKSxlfSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1lcj10O3ZhciByPXQucmVhZGFibGVTdHJhdGVneSxuPXQud3JpdGFibGVTdHJhdGVneTt0aGlzLl90cmFuc2Zvcm1pbmc9ITEsdGhpcy5fZXJyb3JlZD0hMSx0aGlzLl9zdG9yZWRFcnJvcj12b2lkIDAsdGhpcy5fd3JpdGFibGVDb250cm9sbGVyPXZvaWQgMCx0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3dyaXRhYmxlRG9uZT0hMSx0aGlzLl9yZWFkYWJsZUNsb3NlZD0hMSx0aGlzLl9iYWNrcHJlc3N1cmU9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT12b2lkIDAsdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj1uZXcgTyh0aGlzKTt2YXIgbz12b2lkIDAsbD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bz1lfSkpLGM9bmV3IFIodGhpcyxsKTt0aGlzLl9yZWFkYWJsZT1uZXcgaChjLHIpO3ZhciB1PW5ldyBUKHRoaXMsbCk7dGhpcy5fd3JpdGFibGU9bmV3IHkodSxuKSxpKHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciksaSh2b2lkIDAhPT10aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO3ZhciBmPWcodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtBKHRoaXMsZjw9MCk7dmFyIGQ9dGhpcyxwPXModCwic3RhcnQiLFtkLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7byhwKSxsLmNhdGNoKChmdW5jdGlvbihlKXshMT09PWQuX2Vycm9yZWQmJihkLl9lcnJvcmVkPSEwLGQuX3N0b3JlZEVycm9yPWUpfSkpfXJldHVybiBuKGUsW3trZXk6InJlYWRhYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PUUodGhpcykpdGhyb3cgTCgicmVhZGFibGUiKTtyZXR1cm4gdGhpcy5fcmVhZGFibGV9fSx7a2V5OiJ3cml0YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1FKHRoaXMpKXRocm93IEwoIndyaXRhYmxlIik7cmV0dXJuIHRoaXMuX3dyaXRhYmxlfX1dKSxlfSgpO2Z1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiKX1mdW5jdGlvbiBMKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0iKX1lLmV4cG9ydHM9e1RyYW5zZm9ybVN0cmVhbTpJfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpfV0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ITE7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVUkwmJiJvYmplY3QiPT09bihVUkwucHJvdG90eXBlKSYmIm9yaWdpbiJpbiBVUkwucHJvdG90eXBlKXt2YXIgaT1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtpLnBhdGhuYW1lPSJjJTIwZCIsYT0iaHR0cDovL2EvYyUyMGQiPT09aS5ocmVmfX1jYXRjaChlKXt9aWYoYSl0LlVSTD1VUkw7ZWxzZXt2YXIgbz1yKDE0NSkuVVJMLHM9cigzKS5VUkw7cyYmKG8uY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNyZWF0ZU9iamVjdFVSTC5hcHBseShzLGFyZ3VtZW50cyl9LG8ucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3MucmV2b2tlT2JqZWN0VVJMKGUpfSksdC5VUkw9b319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmZ0cD0yMSxlLmZpbGU9MCxlLmdvcGhlcj03MCxlLmh0dHA9ODAsZS5odHRwcz00NDMsZS53cz04MCxlLndzcz00NDM7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBuKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfWZ1bmN0aW9uIGEoKXtoLmNhbGwodGhpcyksdGhpcy5faXNJbnZhbGlkPSEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIiI9PT1lJiZhLmNhbGwodGhpcyksZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO3JldHVybiB0PjMyJiZ0PDEyNyYmLTE9PT1bMzQsMzUsNjAsNjIsNjMsOTZdLmluZGV4T2YodCk/ZTplbmNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ+MzImJnQ8MTI3JiYtMT09PVszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZih0KT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX1yWyIlMmUiXT0iLiIsclsiLiUyZSJdPSIuLiIsclsiJTJlLiJdPSIuLiIsclsiJTJlJTJlIl09Ii4uIjt2YXIgbCxjPS9bYS16QS1aXS8sdT0vW2EtekEtWjAtOVwrXC1cLl0vO2Z1bmN0aW9uIGYodCxmLGgpe2Z1bmN0aW9uIGQoZSl7Yi5wdXNoKGUpfXZhciBwPWZ8fCJzY2hlbWUgc3RhcnQiLG09MCxnPSIiLHY9ITEseT0hMSxiPVtdO2U6Zm9yKDsodFttLTFdIT09bHx8MD09PW0pJiYhdGhpcy5faXNJbnZhbGlkOyl7dmFyIHc9dFttXTtzd2l0Y2gocCl7Y2FzZSJzY2hlbWUgc3RhcnQiOmlmKCF3fHwhYy50ZXN0KHcpKXtpZihmKXtkKCJJbnZhbGlkIHNjaGVtZS4iKTticmVhayBlfWc9IiIscD0ibm8gc2NoZW1lIjtjb250aW51ZX1nKz13LnRvTG93ZXJDYXNlKCkscD0ic2NoZW1lIjticmVhaztjYXNlInNjaGVtZSI6aWYodyYmdS50ZXN0KHcpKWcrPXcudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9PXcpe2lmKGYpe2lmKHc9PT1sKWJyZWFrIGU7ZCgiQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICIrdyk7YnJlYWsgZX1nPSIiLG09MCxwPSJubyBzY2hlbWUiO2NvbnRpbnVlfWlmKHRoaXMuX3NjaGVtZT1nLGc9IiIsZilicmVhayBlO24odGhpcy5fc2NoZW1lKSYmKHRoaXMuX2lzUmVsYXRpdmU9ITApLHA9ImZpbGUiPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSI6dGhpcy5faXNSZWxhdGl2ZSYmaCYmaC5fc2NoZW1lPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOnRoaXMuX2lzUmVsYXRpdmU/ImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6InNjaGVtZSBkYXRhIn1icmVhaztjYXNlInNjaGVtZSBkYXRhIjoiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13Pyh0aGlzLl9mcmFnbWVudD0iIyIscD0iZnJhZ21lbnQiKTp3IT09bCYmIlx0IiE9PXcmJiJcbiIhPT13JiYiXHIiIT09dyYmKHRoaXMuX3NjaGVtZURhdGErPW8odykpO2JyZWFrO2Nhc2Uibm8gc2NoZW1lIjppZihoJiZuKGguX3NjaGVtZSkpe3A9InJlbGF0aXZlIjtjb250aW51ZX1kKCJNaXNzaW5nIHNjaGVtZS4iKSxhLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOmlmKCIvIiE9PXd8fCIvIiE9PXRbbSsxXSl7ZCgiRXhwZWN0ZWQgLywgZ290OiAiK3cpLHA9InJlbGF0aXZlIjtjb250aW51ZX1wPSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiO2JyZWFrO2Nhc2UicmVsYXRpdmUiOmlmKHRoaXMuX2lzUmVsYXRpdmU9ITAsImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5fc2NoZW1lPWguX3NjaGVtZSksdz09PWwpe3RoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQ7YnJlYWsgZX1pZigiLyI9PT13fHwiXFwiPT09dykiXFwiPT09dyYmZCgiXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LiIpLHA9InJlbGF0aXZlIHNsYXNoIjtlbHNlIGlmKCI/Ij09PXcpdGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl9wYXRoPWguX3BhdGguc2xpY2UoKSx0aGlzLl9xdWVyeT0iPyIsdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQscD0icXVlcnkiO2Vsc2V7aWYoIiMiIT09dyl7dmFyIGs9dFttKzFdLFM9dFttKzJdOygiZmlsZSIhPT10aGlzLl9zY2hlbWV8fCFjLnRlc3Qodyl8fCI6IiE9PWsmJiJ8IiE9PWt8fFMhPT1sJiYiLyIhPT1TJiYiXFwiIT09UyYmIj8iIT09UyYmIiMiIT09UykmJih0aGlzLl9ob3N0PWguX2hvc3QsdGhpcy5fcG9ydD1oLl9wb3J0LHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHRoaXMuX3BhdGg9aC5fcGF0aC5zbGljZSgpLHRoaXMuX3BhdGgucG9wKCkpLHA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfXRoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fZnJhZ21lbnQ9IiMiLHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHA9ImZyYWdtZW50In1icmVhaztjYXNlInJlbGF0aXZlIHNsYXNoIjppZigiLyIhPT13JiYiXFwiIT09dyl7ImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl91c2VybmFtZT1oLl91c2VybmFtZSx0aGlzLl9wYXNzd29yZD1oLl9wYXNzd29yZCkscD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9IlxcIj09PXcmJmQoIlxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4iKSxwPSJmaWxlIj09PXRoaXMuX3NjaGVtZT8iZmlsZSBob3N0IjoiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjticmVhaztjYXNlImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6aWYoIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdykscD0iYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjtjb250aW51ZX1wPSJhdXRob3JpdHkgc2Vjb25kIHNsYXNoIjticmVhaztjYXNlImF1dGhvcml0eSBzZWNvbmQgc2xhc2giOmlmKHA9ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyIsIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdyk7Y29udGludWV9YnJlYWs7Y2FzZSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiOmlmKCIvIiE9PXcmJiJcXCIhPT13KXtwPSJhdXRob3JpdHkiO2NvbnRpbnVlfWQoIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiAiK3cpO2JyZWFrO2Nhc2UiYXV0aG9yaXR5IjppZigiQCI9PT13KXt2JiYoZCgiQCBhbHJlYWR5IHNlZW4uIiksZys9IiU0MCIpLHY9ITA7Zm9yKHZhciBfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB4PWdbX107aWYoIlx0IiE9PXgmJiJcbiIhPT14JiYiXHIiIT09eClpZigiOiIhPT14fHxudWxsIT09dGhpcy5fcGFzc3dvcmQpe3ZhciBBPW8oeCk7bnVsbCE9PXRoaXMuX3Bhc3N3b3JkP3RoaXMuX3Bhc3N3b3JkKz1BOnRoaXMuX3VzZXJuYW1lKz1BfWVsc2UgdGhpcy5fcGFzc3dvcmQ9IiI7ZWxzZSBkKCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LiIpfWc9IiJ9ZWxzZXtpZih3PT09bHx8Ii8iPT09d3x8IlxcIj09PXd8fCI/Ij09PXd8fCIjIj09PXcpe20tPWcubGVuZ3RoLGc9IiIscD0iaG9zdCI7Y29udGludWV9Zys9d31icmVhaztjYXNlImZpbGUgaG9zdCI6aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXsyIT09Zy5sZW5ndGh8fCFjLnRlc3QoZ1swXSl8fCI6IiE9PWdbMV0mJiJ8IiE9PWdbMV0/MD09PWcubGVuZ3RoP3A9InJlbGF0aXZlIHBhdGggc3RhcnQiOih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIpOnA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGZpbGUgaG9zdC4iKTpnKz13O2JyZWFrO2Nhc2UiaG9zdCI6Y2FzZSJob3N0bmFtZSI6aWYoIjoiIT09d3x8eSl7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXtpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIsZilicmVhayBlO2NvbnRpbnVlfSJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXc/KCJbIj09PXc/eT0hMDoiXSI9PT13JiYoeT0hMSksZys9dyk6ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6ICIrdyl9ZWxzZSBpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icG9ydCIsImhvc3RuYW1lIj09PWYpYnJlYWsgZTticmVhaztjYXNlInBvcnQiOmlmKC9bMC05XS8udGVzdCh3KSlnKz13O2Vsc2V7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13fHxmKXtpZigiIiE9PWcpe3ZhciBDPXBhcnNlSW50KGcsMTApO0MhPT1lW3RoaXMuX3NjaGVtZV0mJih0aGlzLl9wb3J0PUMrIiIpLGc9IiJ9aWYoZilicmVhayBlO3A9InJlbGF0aXZlIHBhdGggc3RhcnQiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIHBvcnQ6ICIrdyk6YS5jYWxsKHRoaXMpfWJyZWFrO2Nhc2UicmVsYXRpdmUgcGF0aCBzdGFydCI6aWYoIlxcIj09PXcmJmQoIidcXCcgbm90IGFsbG93ZWQgaW4gcGF0aC4iKSxwPSJyZWxhdGl2ZSBwYXRoIiwiLyIhPT13JiYiXFwiIT09dyljb250aW51ZTticmVhaztjYXNlInJlbGF0aXZlIHBhdGgiOnZhciBQO3chPT1sJiYiLyIhPT13JiYiXFwiIT09dyYmKGZ8fCI/IiE9PXcmJiIjIiE9PXcpPyJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJihnKz1vKHcpKTooIlxcIj09PXcmJmQoIlxcIG5vdCBhbGxvd2VkIGluIHJlbGF0aXZlIHBhdGguIiksKFA9cltnLnRvTG93ZXJDYXNlKCldKSYmKGc9UCksIi4uIj09PWc/KHRoaXMuX3BhdGgucG9wKCksIi8iIT09dyYmIlxcIiE9PXcmJnRoaXMuX3BhdGgucHVzaCgiIikpOiIuIj09PWcmJiIvIiE9PXcmJiJcXCIhPT13P3RoaXMuX3BhdGgucHVzaCgiIik6Ii4iIT09ZyYmKCJmaWxlIj09PXRoaXMuX3NjaGVtZSYmMD09PXRoaXMuX3BhdGgubGVuZ3RoJiYyPT09Zy5sZW5ndGgmJmMudGVzdChnWzBdKSYmInwiPT09Z1sxXSYmKGc9Z1swXSsiOiIpLHRoaXMuX3BhdGgucHVzaChnKSksZz0iIiwiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13JiYodGhpcy5fZnJhZ21lbnQ9IiMiLHA9ImZyYWdtZW50IikpO2JyZWFrO2Nhc2UicXVlcnkiOmZ8fCIjIiE9PXc/dyE9PWwmJiJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJih0aGlzLl9xdWVyeSs9cyh3KSk6KHRoaXMuX2ZyYWdtZW50PSIjIixwPSJmcmFnbWVudCIpO2JyZWFrO2Nhc2UiZnJhZ21lbnQiOnchPT1sJiYiXHQiIT09dyYmIlxuIiE9PXcmJiJcciIhPT13JiYodGhpcy5fZnJhZ21lbnQrPXcpfW0rK319ZnVuY3Rpb24gaCgpe3RoaXMuX3NjaGVtZT0iIix0aGlzLl9zY2hlbWVEYXRhPSIiLHRoaXMuX3VzZXJuYW1lPSIiLHRoaXMuX3Bhc3N3b3JkPW51bGwsdGhpcy5faG9zdD0iIix0aGlzLl9wb3J0PSIiLHRoaXMuX3BhdGg9W10sdGhpcy5fcXVlcnk9IiIsdGhpcy5fZnJhZ21lbnQ9IiIsdGhpcy5faXNJbnZhbGlkPSExLHRoaXMuX2lzUmVsYXRpdmU9ITF9ZnVuY3Rpb24gZChlLHQpe3ZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBkfHwodD1uZXcgZChTdHJpbmcodCkpKSx0aGlzLl91cmw9ZSxoLmNhbGwodGhpcyk7dmFyIHI9ZS5yZXBsYWNlKC9eWyBcdFxyXG5cZl0rfFsgXHRcclxuXGZdKyQvZywiIik7Zi5jYWxsKHRoaXMscixudWxsLHQpfWQucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWZ9LGdldCBocmVmKCl7aWYodGhpcy5faXNJbnZhbGlkKXJldHVybiB0aGlzLl91cmw7dmFyIGU9IiI7cmV0dXJuIiI9PT10aGlzLl91c2VybmFtZSYmbnVsbD09PXRoaXMuX3Bhc3N3b3JkfHwoZT10aGlzLl91c2VybmFtZSsobnVsbCE9PXRoaXMuX3Bhc3N3b3JkPyI6Iit0aGlzLl9wYXNzd29yZDoiIikrIkAiKSx0aGlzLnByb3RvY29sKyh0aGlzLl9pc1JlbGF0aXZlPyIvLyIrZSt0aGlzLmhvc3Q6IiIpK3RoaXMucGF0aG5hbWUrdGhpcy5fcXVlcnkrdGhpcy5fZnJhZ21lbnR9LHNldCBocmVmKGUpe2guY2FsbCh0aGlzKSxmLmNhbGwodGhpcyxlKX0sZ2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX3NjaGVtZSsiOiJ9LHNldCBwcm90b2NvbChlKXt0aGlzLl9pc0ludmFsaWR8fGYuY2FsbCh0aGlzLGUrIjoiLCJzY2hlbWUgc3RhcnQiKX0sZ2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX3BvcnQ/dGhpcy5faG9zdCsiOiIrdGhpcy5fcG9ydDp0aGlzLl9ob3N0fSxzZXQgaG9zdChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZmLmNhbGwodGhpcyxlLCJob3N0Iil9LGdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9ob3N0fSxzZXQgaG9zdG5hbWUoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwiaG9zdG5hbWUiKX0sZ2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fcG9ydH0sc2V0IHBvcnQoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwicG9ydCIpfSxnZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX2lzUmVsYXRpdmU/Ii8iK3RoaXMuX3BhdGguam9pbigiLyIpOnRoaXMuX3NjaGVtZURhdGF9LHNldCBwYXRobmFtZShlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcGF0aD1bXSxmLmNhbGwodGhpcyxlLCJyZWxhdGl2ZSBwYXRoIHN0YXJ0IikpfSxnZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3F1ZXJ5fHwiPyI9PT10aGlzLl9xdWVyeT8iIjp0aGlzLl9xdWVyeX0sc2V0IHNlYXJjaChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcXVlcnk9Ij8iLCI/Ij09PWVbMF0mJihlPWUuc2xpY2UoMSkpLGYuY2FsbCh0aGlzLGUsInF1ZXJ5IikpfSxnZXQgaGFzaCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9mcmFnbWVudHx8IiMiPT09dGhpcy5fZnJhZ21lbnQ/IiI6dGhpcy5fZnJhZ21lbnR9LHNldCBoYXNoKGUpe3RoaXMuX2lzSW52YWxpZHx8KHRoaXMuX2ZyYWdtZW50PSIjIiwiIyI9PT1lWzBdJiYoZT1lLnNsaWNlKDEpKSxmLmNhbGwodGhpcyxlLCJmcmFnbWVudCIpKX0sZ2V0IG9yaWdpbigpe3ZhciBlO2lmKHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3NjaGVtZSlyZXR1cm4iIjtzd2l0Y2godGhpcy5fc2NoZW1lKXtjYXNlImRhdGEiOmNhc2UiZmlsZSI6Y2FzZSJqYXZhc2NyaXB0IjpjYXNlIm1haWx0byI6cmV0dXJuIm51bGwiO2Nhc2UiYmxvYiI6dHJ5e3JldHVybiBuZXcgZCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW58fCJudWxsIn1jYXRjaChlKXt9cmV0dXJuIm51bGwifXJldHVybihlPXRoaXMuaG9zdCk/dGhpcy5fc2NoZW1lKyI6Ly8iK2U6IiJ9fSx0LlVSTD1kfSgpfSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldERvY3VtZW50PWZ1bmN0aW9uKGUpe3ZhciB0LHI9bmV3IEk7aWYoInN0cmluZyI9PXR5cGVvZiBlKXQ9e3VybDplfTtlbHNlIGlmKCgwLGkuaXNBcnJheUJ1ZmZlcikoZSkpdD17ZGF0YTplfTtlbHNlIGlmKGUgaW5zdGFuY2VvZiBGKXQ9e3JhbmdlOmV9O2Vsc2V7aWYoIm9iamVjdCIhPT1fKGUpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgaW4gZ2V0RG9jdW1lbnQsIG5lZWQgZWl0aGVyIFVpbnQ4QXJyYXksIHN0cmluZyBvciBhIHBhcmFtZXRlciBvYmplY3QiKTtpZighZS51cmwmJiFlLmRhdGEmJiFlLnJhbmdlKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBwYXJhbWV0ZXIgb2JqZWN0OiBuZWVkIGVpdGhlciAuZGF0YSwgLnJhbmdlIG9yIC51cmwiKTt0PWV9dmFyIG49T2JqZWN0LmNyZWF0ZShudWxsKSxhPW51bGwscz1udWxsO2Zvcih2YXIgYyBpbiB0KWlmKCJ1cmwiIT09Y3x8InVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3cpaWYoInJhbmdlIiE9PWMpaWYoIndvcmtlciIhPT1jKWlmKCJkYXRhIiE9PWN8fHRbY11pbnN0YW5jZW9mIFVpbnQ4QXJyYXkpbltjXT10W2NdO2Vsc2V7dmFyIHU9dFtjXTtpZigic3RyaW5nIj09dHlwZW9mIHUpbltjXT0oMCxpLnN0cmluZ1RvQnl0ZXMpKHUpO2Vsc2UgaWYoIm9iamVjdCIhPT1fKHUpfHxudWxsPT09dXx8aXNOYU4odS5sZW5ndGgpKXtpZighKDAsaS5pc0FycmF5QnVmZmVyKSh1KSl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgUERGIGJpbmFyeSBkYXRhOiBlaXRoZXIgdHlwZWQgYXJyYXksIHN0cmluZyBvciBhcnJheS1saWtlIG9iamVjdCBpcyBleHBlY3RlZCBpbiB0aGUgZGF0YSBwcm9wZXJ0eS4iKTtuW2NdPW5ldyBVaW50OEFycmF5KHUpfWVsc2UgbltjXT1uZXcgVWludDhBcnJheSh1KX1lbHNlIHM9dFtjXTtlbHNlIGE9dFtjXTtlbHNlIG5bY109bmV3IGkuVVJMKHRbY10sd2luZG93LmxvY2F0aW9uKS5ocmVmO24ucmFuZ2VDaHVua1NpemU9bi5yYW5nZUNodW5rU2l6ZXx8NjU1MzYsbi5DTWFwUmVhZGVyRmFjdG9yeT1uLkNNYXBSZWFkZXJGYWN0b3J5fHxvLkRPTUNNYXBSZWFkZXJGYWN0b3J5LG4uaWdub3JlRXJyb3JzPSEwIT09bi5zdG9wQXRFcnJvcnMsbi5wZGZCdWc9ITA9PT1uLnBkZkJ1Zzt2YXIgZD1PYmplY3QudmFsdWVzKGkuTmF0aXZlSW1hZ2VEZWNvZGluZyk7aWYodm9pZCAwIT09bi5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0JiZkLmluY2x1ZGVzKG4ubmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydCl8fChuLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnR8fGkuTmF0aXZlSW1hZ2VEZWNvZGluZy5ERUNPREUpLE51bWJlci5pc0ludGVnZXIobi5tYXhJbWFnZVNpemUpfHwobi5tYXhJbWFnZVNpemU9LTEpLCJib29sZWFuIiE9dHlwZW9mIG4uaXNFdmFsU3VwcG9ydGVkJiYobi5pc0V2YWxTdXBwb3J0ZWQ9ITApLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZUZvbnRGYWNlJiYobi5kaXNhYmxlRm9udEZhY2U9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVGb250RmFjZXx8ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZVJhbmdlJiYobi5kaXNhYmxlUmFuZ2U9ITEpLCJib29sZWFuIiE9dHlwZW9mIG4uZGlzYWJsZVN0cmVhbSYmKG4uZGlzYWJsZVN0cmVhbT0hMSksImJvb2xlYW4iIT10eXBlb2Ygbi5kaXNhYmxlQXV0b0ZldGNoJiYobi5kaXNhYmxlQXV0b0ZldGNoPSExKSwiYm9vbGVhbiIhPXR5cGVvZiBuLmRpc2FibGVDcmVhdGVPYmplY3RVUkwmJihuLmRpc2FibGVDcmVhdGVPYmplY3RVUkw9bC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zLmRpc2FibGVDcmVhdGVPYmplY3RVUkx8fCExKSwoMCxpLnNldFZlcmJvc2l0eUxldmVsKShuLnZlcmJvc2l0eSksIXMpe3ZhciBtPXtwb3N0TWVzc2FnZVRyYW5zZmVyczpuLnBvc3RNZXNzYWdlVHJhbnNmZXJzLHZlcmJvc2l0eTpuLnZlcmJvc2l0eSxwb3J0OmYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJQb3J0fTtzPW0ucG9ydD9NLmZyb21Qb3J0KG0pOm5ldyBNKG0pLHIuX3dvcmtlcj1zfXZhciBnPXIuZG9jSWQ7cmV0dXJuIHMucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe2lmKHIuZGVzdHJveWVkKXRocm93IG5ldyBFcnJvcigiTG9hZGluZyBhYm9ydGVkIik7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiBlLmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOihyJiYodC5sZW5ndGg9ci5sZW5ndGgsdC5pbml0aWFsRGF0YT1yLmluaXRpYWxEYXRhKSxlLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RG9jUmVxdWVzdCIse2RvY0lkOm4sYXBpVmVyc2lvbjoiMi4xLjI2NiIsc291cmNlOntkYXRhOnQuZGF0YSx1cmw6dC51cmwscGFzc3dvcmQ6dC5wYXNzd29yZCxkaXNhYmxlQXV0b0ZldGNoOnQuZGlzYWJsZUF1dG9GZXRjaCxyYW5nZUNodW5rU2l6ZTp0LnJhbmdlQ2h1bmtTaXplLGxlbmd0aDp0Lmxlbmd0aH0sbWF4SW1hZ2VTaXplOnQubWF4SW1hZ2VTaXplLGRpc2FibGVGb250RmFjZTp0LmRpc2FibGVGb250RmFjZSxkaXNhYmxlQ3JlYXRlT2JqZWN0VVJMOnQuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxwb3N0TWVzc2FnZVRyYW5zZmVyczplLnBvc3RNZXNzYWdlVHJhbnNmZXJzLGRvY0Jhc2VVcmw6dC5kb2NCYXNlVXJsLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6dC5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0LGlnbm9yZUVycm9yczp0Lmlnbm9yZUVycm9ycyxpc0V2YWxTdXBwb3J0ZWQ6dC5pc0V2YWxTdXBwb3J0ZWR9KS50aGVuKChmdW5jdGlvbih0KXtpZihlLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIik7cmV0dXJuIHR9KSkpfShzLG4sYSxnKS50aGVuKChmdW5jdGlvbihlKXtpZihyLmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIkxvYWRpbmcgYWJvcnRlZCIpO3ZhciB0O2E/dD1uZXcgcC5QREZEYXRhVHJhbnNwb3J0U3RyZWFtKHtsZW5ndGg6bi5sZW5ndGgsaW5pdGlhbERhdGE6bi5pbml0aWFsRGF0YSxkaXNhYmxlUmFuZ2U6bi5kaXNhYmxlUmFuZ2UsZGlzYWJsZVN0cmVhbTpuLmRpc2FibGVTdHJlYW19LGEpOm4uZGF0YXx8KHQ9RSh7dXJsOm4udXJsLGxlbmd0aDpuLmxlbmd0aCxodHRwSGVhZGVyczpuLmh0dHBIZWFkZXJzLHdpdGhDcmVkZW50aWFsczpuLndpdGhDcmVkZW50aWFscyxyYW5nZUNodW5rU2l6ZTpuLnJhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpuLmRpc2FibGVSYW5nZSxkaXNhYmxlU3RyZWFtOm4uZGlzYWJsZVN0cmVhbX0pKTt2YXIgaT1uZXcgaC5NZXNzYWdlSGFuZGxlcihnLGUscy5wb3J0KTtpLnBvc3RNZXNzYWdlVHJhbnNmZXJzPXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM7dmFyIG89bmV3IEIoaSxyLHQsbik7ci5fdHJhbnNwb3J0PW8saS5zZW5kKCJSZWFkeSIsbnVsbCl9KSl9KSkuY2F0Y2goci5fY2FwYWJpbGl0eS5yZWplY3QpLHJ9LHQuc2V0UERGTmV0d29ya1N0cmVhbUZhY3Rvcnk9ZnVuY3Rpb24oZSl7RT1lfSx0LmJ1aWxkPXQudmVyc2lvbj10LlBERlBhZ2VQcm94eT10LlBERkRvY3VtZW50UHJveHk9dC5QREZXb3JrZXI9dC5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ9dC5Mb29wYmFja1BvcnQ9dm9pZCAwO3ZhciBhPWcobigxNDcpKSxpPW4oMSksbz1uKDE1MSkscz1uKDE1MiksbD1uKDE1MyksYz1uKDE1NCksdT1nKG4oMykpLGY9bigxNTYpLGg9bigxNTcpLGQ9bigxNTgpLHA9bigxNjApLG09bigxNjEpO2Z1bmN0aW9uIGcoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHYoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiB5KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBiKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIHcoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBrKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gUyhlLHQscil7cmV0dXJuIHQmJmsoZS5wcm90b3R5cGUsdCksciYmayhlLHIpLGV9ZnVuY3Rpb24gXyhlKXtyZXR1cm4oXz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciB4LEEsQz0hMSxQPSExOyJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyhDPSEwLFA9ITApOlA9ITAsInVuZGVmaW5lZCIhPXR5cGVvZiByZXF1aXJlanMmJnJlcXVpcmVqcy50b1VybCYmKHg9cmVxdWlyZWpzLnRvVXJsKCJwZGZqcy1kaXN0L2J1aWxkL3BkZi53b3JrZXIuanMiKSk7dmFyIEUsVD0idW5kZWZpbmVkIiE9dHlwZW9mIHJlcXVpcmVqcyYmcmVxdWlyZWpzLmxvYWQ7aWYoQT1QP2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe1Byb21pc2UucmVzb2x2ZSgpLnRoZW4oZnVuY3Rpb24oKXt0cnl7dmFyIG47bj1yKDg4KSxlKG4uV29ya2VyTWVzc2FnZUhhbmRsZXIpfWNhdGNoKGUpe3QoZSl9fS5iaW5kKG51bGwscikpLmNhdGNoKHQpfSkpfTpUP2Z1bmN0aW9uKCl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3JlcXVpcmVqcyhbInBkZmpzLWRpc3QvYnVpbGQvcGRmLndvcmtlciJdLChmdW5jdGlvbihyKXt0cnl7ZShyLldvcmtlck1lc3NhZ2VIYW5kbGVyKX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpfTpudWxsLCF4JiYib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50PyJ1bmRlZmluZWQiOl8oZG9jdW1lbnQpKSYmImN1cnJlbnRTY3JpcHQiaW4gZG9jdW1lbnQpe3ZhciBSPWRvY3VtZW50LmN1cnJlbnRTY3JpcHQmJmRvY3VtZW50LmN1cnJlbnRTY3JpcHQuc3JjO1ImJih4PVIucmVwbGFjZSgvKFwuKD86bWluXC4pP2pzKShcPy4qKT8kL2ksIi53b3JrZXIkMSQyIikpfXZhciBPLEk9KE89MCxmdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt3KHRoaXMsZSksdGhpcy5fY2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3RyYW5zcG9ydD1udWxsLHRoaXMuX3dvcmtlcj1udWxsLHRoaXMuZG9jSWQ9ImQiK08rKyx0aGlzLmRlc3Ryb3llZD0hMSx0aGlzLm9uUGFzc3dvcmQ9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLm9uVW5zdXBwb3J0ZWRGZWF0dXJlPW51bGx9cmV0dXJuIFMoZSxbe2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmRlc3Ryb3llZD0hMCwodGhpcy5fdHJhbnNwb3J0P3RoaXMuX3RyYW5zcG9ydC5kZXN0cm95KCk6UHJvbWlzZS5yZXNvbHZlKCkpLnRoZW4oKGZ1bmN0aW9uKCl7ZS5fdHJhbnNwb3J0PW51bGwsZS5fd29ya2VyJiYoZS5fd29ya2VyLmRlc3Ryb3koKSxlLl93b3JrZXI9bnVsbCl9KSl9fSx7a2V5OiJ0aGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybigwLGkuZGVwcmVjYXRlZCkoIlBERkRvY3VtZW50TG9hZGluZ1Rhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLiIpLHRoaXMucHJvbWlzZS50aGVuLmFwcGx5KHRoaXMucHJvbWlzZSxhcmd1bWVudHMpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NhcGFiaWxpdHkucHJvbWlzZX19XSksZX0oKSksRj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt3KHRoaXMsZSksdGhpcy5sZW5ndGg9dCx0aGlzLmluaXRpYWxEYXRhPXIsdGhpcy5fcmFuZ2VMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NMaXN0ZW5lcnM9W10sdGhpcy5fcHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXJzPVtdLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpfXJldHVybiBTKGUsW3trZXk6ImFkZFJhbmdlTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JhbmdlTGlzdGVuZXJzLnB1c2goZSl9fSx7a2V5OiJhZGRQcm9ncmVzc0xpc3RlbmVyIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9wcm9ncmVzc0xpc3RlbmVycy5wdXNoKGUpfX0se2tleToiYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVycy5wdXNoKGUpfX0se2tleToib25EYXRhUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ITAsbj0hMSxhPXZvaWQgMDt0cnl7Zm9yKHZhciBpLG89dGhpcy5fcmFuZ2VMaXN0ZW5lcnNbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1vLm5leHQoKSkuZG9uZSk7cj0hMCkoMCxpLnZhbHVlKShlLHQpfWNhdGNoKGUpe249ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBhfX19fSx7a2V5OiJvbkRhdGFQcm9ncmVzcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPXQuX3Byb2dyZXNzTGlzdGVuZXJzW1N5bWJvbC5pdGVyYXRvcl0oKTshKHI9KGk9by5uZXh0KCkpLmRvbmUpO3I9ITApKDAsaS52YWx1ZSkoZSl9Y2F0Y2goZSl7bj0hMCxhPWV9ZmluYWxseXt0cnl7cnx8bnVsbD09by5yZXR1cm58fG8ucmV0dXJuKCl9ZmluYWxseXtpZihuKXRocm93IGF9fX0pKX19LHtrZXk6Im9uRGF0YVByb2dyZXNzaXZlUmVhZCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3ZhciByPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPXQuX3Byb2dyZXNzaXZlUmVhZExpc3RlbmVyc1tTeW1ib2wuaXRlcmF0b3JdKCk7IShyPShpPW8ubmV4dCgpKS5kb25lKTtyPSEwKSgwLGkudmFsdWUpKGUpfWNhdGNoKGUpe249ITAsYT1lfWZpbmFsbHl7dHJ5e3J8fG51bGw9PW8ucmV0dXJufHxvLnJldHVybigpfWZpbmFsbHl7aWYobil0aHJvdyBhfX19KSl9fSx7a2V5OiJ0cmFuc3BvcnRSZWFkeSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9yZWFkeUNhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToicmVxdWVzdERhdGFSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIFBERkRhdGFSYW5nZVRyYW5zcG9ydC5yZXF1ZXN0RGF0YVJhbmdlIil9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt9fV0pLGV9KCk7dC5QREZEYXRhUmFuZ2VUcmFuc3BvcnQ9Rjt2YXIgTD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3codGhpcyxlKSx0aGlzLmxvYWRpbmdUYXNrPW4sdGhpcy5fcGRmSW5mbz10LHRoaXMuX3RyYW5zcG9ydD1yfXJldHVybiBTKGUsW3trZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZShlKX19LHtrZXk6ImdldFBhZ2VJbmRleCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRQYWdlSW5kZXgoZSl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbnMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXREZXN0aW5hdGlvbnMoKX19LHtrZXk6ImdldERlc3RpbmF0aW9uIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldERlc3RpbmF0aW9uKGUpfX0se2tleToiZ2V0UGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBhZ2VMYWJlbHMoKX19LHtrZXk6ImdldFBhZ2VNb2RlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0UGFnZU1vZGUoKX19LHtrZXk6ImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbigpfX0se2tleToiZ2V0QXR0YWNobWVudHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRBdHRhY2htZW50cygpfX0se2tleToiZ2V0SmF2YVNjcmlwdCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldEphdmFTY3JpcHQoKX19LHtrZXk6ImdldE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRPdXRsaW5lKCl9fSx7a2V5OiJnZXRQZXJtaXNzaW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldFBlcm1pc3Npb25zKCl9fSx7a2V5OiJnZXRNZXRhZGF0YSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0LmdldE1ldGFkYXRhKCl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZ2V0RGF0YSgpfX0se2tleToiZ2V0RG93bmxvYWRJbmZvIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToiZ2V0U3RhdHMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zcG9ydC5nZXRTdGF0cygpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl90cmFuc3BvcnQuc3RhcnRDbGVhbnVwKCl9fSx7a2V5OiJkZXN0cm95Iix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmxvYWRpbmdUYXNrLmRlc3Ryb3koKX19LHtrZXk6Im51bVBhZ2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGRmSW5mby5udW1QYWdlc319LHtrZXk6ImZpbmdlcnByaW50IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fcGRmSW5mby5maW5nZXJwcmludH19LHtrZXk6ImxvYWRpbmdQYXJhbXMiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl90cmFuc3BvcnQubG9hZGluZ1BhcmFtc319XSksZX0oKTt0LlBERkRvY3VtZW50UHJveHk9TDt2YXIgRD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe3ZhciBhPWFyZ3VtZW50cy5sZW5ndGg+MyYmdm9pZCAwIT09YXJndW1lbnRzWzNdJiZhcmd1bWVudHNbM107dyh0aGlzLGUpLHRoaXMucGFnZUluZGV4PXQsdGhpcy5fcGFnZUluZm89cix0aGlzLl90cmFuc3BvcnQ9bix0aGlzLl9zdGF0cz1hP25ldyBvLlN0YXRUaW1lcjpvLkR1bW15U3RhdFRpbWVyLHRoaXMuX3BkZkJ1Zz1hLHRoaXMuY29tbW9uT2Jqcz1uLmNvbW1vbk9ianMsdGhpcy5vYmpzPW5ldyBVLHRoaXMuY2xlYW51cEFmdGVyUmVuZGVyPSExLHRoaXMucGVuZGluZ0NsZWFudXA9ITEsdGhpcy5pbnRlbnRTdGF0ZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmRlc3Ryb3llZD0hMX1yZXR1cm4gUyhlLFt7a2V5OiJnZXRWaWV3cG9ydCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLnNjYWxlLHI9ZS5yb3RhdGlvbixuPXZvaWQgMD09PXI/dGhpcy5yb3RhdGU6cixhPWUuZG9udEZsaXAscz12b2lkIDAhPT1hJiZhO3JldHVybihhcmd1bWVudHMubGVuZ3RoPjF8fCJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzBdKSYmKCgwLGkuZGVwcmVjYXRlZCkoImdldFZpZXdwb3J0IGlzIGNhbGxlZCB3aXRoIG9ic29sZXRlIGFyZ3VtZW50cy4iKSx0PWFyZ3VtZW50c1swXSxuPSJudW1iZXIiPT10eXBlb2YgYXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTp0aGlzLnJvdGF0ZSxzPSJib29sZWFuIj09dHlwZW9mIGFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdKSxuZXcgby5QYWdlVmlld3BvcnQoe3ZpZXdCb3g6dGhpcy52aWV3LHNjYWxlOnQscm90YXRpb246bixkb250RmxpcDpzfSl9fSx7a2V5OiJnZXRBbm5vdGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06e30sdD1lLmludGVudCxyPXZvaWQgMD09PXQ/bnVsbDp0O3JldHVybiB0aGlzLmFubm90YXRpb25zUHJvbWlzZSYmdGhpcy5hbm5vdGF0aW9uc0ludGVudD09PXJ8fCh0aGlzLmFubm90YXRpb25zUHJvbWlzZT10aGlzLl90cmFuc3BvcnQuZ2V0QW5ub3RhdGlvbnModGhpcy5wYWdlSW5kZXgsciksdGhpcy5hbm5vdGF0aW9uc0ludGVudD1yKSx0aGlzLmFubm90YXRpb25zUHJvbWlzZX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuY2FudmFzQ29udGV4dCxuPWUudmlld3BvcnQsYT1lLmludGVudCxzPXZvaWQgMD09PWE/ImRpc3BsYXkiOmEsbD1lLmVuYWJsZVdlYkdMLGM9dm9pZCAwIT09bCYmbCx1PWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcyxmPXZvaWQgMCE9PXUmJnUsaD1lLnRyYW5zZm9ybSxkPXZvaWQgMD09PWg/bnVsbDpoLHA9ZS5pbWFnZUxheWVyLGc9dm9pZCAwPT09cD9udWxsOnAsdj1lLmNhbnZhc0ZhY3RvcnkseT12b2lkIDA9PT12P251bGw6dixiPWUuYmFja2dyb3VuZCx3PXZvaWQgMD09PWI/bnVsbDpiLGs9dGhpcy5fc3RhdHM7ay50aW1lKCJPdmVyYWxsIiksdGhpcy5wZW5kaW5nQ2xlYW51cD0hMTt2YXIgUz0icHJpbnQiPT09cz8icHJpbnQiOiJkaXNwbGF5IixfPXl8fG5ldyBvLkRPTUNhbnZhc0ZhY3RvcnkseD1uZXcgbS5XZWJHTENvbnRleHQoe2VuYWJsZTpjfSk7dGhpcy5pbnRlbnRTdGF0ZXNbU118fCh0aGlzLmludGVudFN0YXRlc1tTXT1PYmplY3QuY3JlYXRlKG51bGwpKTt2YXIgQT10aGlzLmludGVudFN0YXRlc1tTXTtBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHl8fChBLnJlY2VpdmluZ09wZXJhdG9yTGlzdD0hMCxBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxBLm9wZXJhdG9yTGlzdD17Zm5BcnJheTpbXSxhcmdzQXJyYXk6W10sbGFzdENodW5rOiExfSxrLnRpbWUoIlBhZ2UgUmVxdWVzdCIpLHRoaXMuX3RyYW5zcG9ydC5tZXNzYWdlSGFuZGxlci5zZW5kKCJSZW5kZXJQYWdlUmVxdWVzdCIse3BhZ2VJbmRleDp0aGlzLnBhZ2VOdW1iZXItMSxpbnRlbnQ6UyxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOiEwPT09Zn0pKTt2YXIgQz1mdW5jdGlvbihlKXt2YXIgcj1BLnJlbmRlclRhc2tzLmluZGV4T2YoUCk7cj49MCYmQS5yZW5kZXJUYXNrcy5zcGxpY2UociwxKSx0LmNsZWFudXBBZnRlclJlbmRlciYmKHQucGVuZGluZ0NsZWFudXA9ITApLHQuX3RyeUNsZWFudXAoKSxlP1AuY2FwYWJpbGl0eS5yZWplY3QoZSk6UC5jYXBhYmlsaXR5LnJlc29sdmUoKSxrLnRpbWVFbmQoIlJlbmRlcmluZyIpLGsudGltZUVuZCgiT3ZlcmFsbCIpfSxQPW5ldyB6KHtjYWxsYmFjazpDLHBhcmFtczp7Y2FudmFzQ29udGV4dDpyLHZpZXdwb3J0Om4sdHJhbnNmb3JtOmQsaW1hZ2VMYXllcjpnLGJhY2tncm91bmQ6d30sb2Jqczp0aGlzLm9ianMsY29tbW9uT2Jqczp0aGlzLmNvbW1vbk9ianMsb3BlcmF0b3JMaXN0OkEub3BlcmF0b3JMaXN0LHBhZ2VOdW1iZXI6dGhpcy5wYWdlTnVtYmVyLGNhbnZhc0ZhY3Rvcnk6Xyx3ZWJHTENvbnRleHQ6eCx1c2VSZXF1ZXN0QW5pbWF0aW9uRnJhbWU6InByaW50IiE9PVMscGRmQnVnOnRoaXMuX3BkZkJ1Z30pO0EucmVuZGVyVGFza3N8fChBLnJlbmRlclRhc2tzPVtdKSxBLnJlbmRlclRhc2tzLnB1c2goUCk7dmFyIEU9UC50YXNrO3JldHVybiBBLmRpc3BsYXlSZWFkeUNhcGFiaWxpdHkucHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXt0LnBlbmRpbmdDbGVhbnVwP0MoKTooay50aW1lKCJSZW5kZXJpbmciKSxQLmluaXRpYWxpemVHcmFwaGljcyhlKSxQLm9wZXJhdG9yTGlzdENoYW5nZWQoKSl9KSkuY2F0Y2goQyksRX19LHtrZXk6ImdldE9wZXJhdG9yTGlzdCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmludGVudFN0YXRlcy5vcGxpc3R8fCh0aGlzLmludGVudFN0YXRlcy5vcGxpc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSk7dmFyIGUsdD10aGlzLmludGVudFN0YXRlcy5vcGxpc3Q7cmV0dXJuIHQub3BMaXN0UmVhZENhcGFiaWxpdHl8fCgoZT17fSkub3BlcmF0b3JMaXN0Q2hhbmdlZD1mdW5jdGlvbigpe2lmKHQub3BlcmF0b3JMaXN0Lmxhc3RDaHVuayl7dC5vcExpc3RSZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKHQub3BlcmF0b3JMaXN0KTt2YXIgcj10LnJlbmRlclRhc2tzLmluZGV4T2YoZSk7cj49MCYmdC5yZW5kZXJUYXNrcy5zcGxpY2UociwxKX19LHQucmVjZWl2aW5nT3BlcmF0b3JMaXN0PSEwLHQub3BMaXN0UmVhZENhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0LnJlbmRlclRhc2tzPVtdLHQucmVuZGVyVGFza3MucHVzaChlKSx0Lm9wZXJhdG9yTGlzdD17Zm5BcnJheTpbXSxhcmdzQXJyYXk6W10sbGFzdENodW5rOiExfSx0aGlzLl9zdGF0cy50aW1lKCJQYWdlIFJlcXVlc3QiKSx0aGlzLl90cmFuc3BvcnQubWVzc2FnZUhhbmRsZXIuc2VuZCgiUmVuZGVyUGFnZVJlcXVlc3QiLHtwYWdlSW5kZXg6dGhpcy5wYWdlSW5kZXgsaW50ZW50OiJvcGxpc3QifSkpLHQub3BMaXN0UmVhZENhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InN0cmVhbVRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubm9ybWFsaXplV2hpdGVzcGFjZSxyPXZvaWQgMCE9PXQmJnQsbj1lLmRpc2FibGVDb21iaW5lVGV4dEl0ZW1zLGE9dm9pZCAwIT09biYmbixpPTEwMDtyZXR1cm4gdGhpcy5fdHJhbnNwb3J0Lm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRUZXh0Q29udGVudCIse3BhZ2VJbmRleDp0aGlzLnBhZ2VOdW1iZXItMSxub3JtYWxpemVXaGl0ZXNwYWNlOiEwPT09cixjb21iaW5lVGV4dEl0ZW1zOiEwIT09YX0se2hpZ2hXYXRlck1hcms6aSxzaXplOmZ1bmN0aW9uKGUpe3JldHVybiBlLml0ZW1zLmxlbmd0aH19KX19LHtrZXk6ImdldFRleHRDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PXRoaXMuc3RyZWFtVGV4dENvbnRlbnQoZSk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXQuZ2V0UmVhZGVyKCksYT17aXRlbXM6W10sc3R5bGVzOk9iamVjdC5jcmVhdGUobnVsbCl9OyFmdW5jdGlvbiB0KCl7bi5yZWFkKCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG4saT1yLnZhbHVlO3IuZG9uZT9lKGEpOihPYmplY3QuYXNzaWduKGEuc3R5bGVzLGkuc3R5bGVzKSwobj1hLml0ZW1zKS5wdXNoLmFwcGx5KG4sYihpLml0ZW1zKSksdCgpKX0pLHIpfSgpfSkpfX0se2tleToiX2Rlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5fdHJhbnNwb3J0LnBhZ2VDYWNoZVt0aGlzLnBhZ2VJbmRleF09bnVsbDt2YXIgZT1bXTtyZXR1cm4gT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKHQpeyJvcGxpc3QiIT09dCYmdGhpcy5pbnRlbnRTdGF0ZXNbdF0ucmVuZGVyVGFza3MuZm9yRWFjaCgoZnVuY3Rpb24odCl7dmFyIHI9dC5jYXBhYmlsaXR5LnByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpO2UucHVzaChyKSx0LmNhbmNlbCgpfSkpfSksdGhpcyksdGhpcy5vYmpzLmNsZWFyKCksdGhpcy5hbm5vdGF0aW9uc1Byb21pc2U9bnVsbCx0aGlzLnBlbmRpbmdDbGVhbnVwPSExLFByb21pc2UuYWxsKGUpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO3RoaXMucGVuZGluZ0NsZWFudXA9ITAsdGhpcy5fdHJ5Q2xlYW51cChlKX19LHtrZXk6Il90cnlDbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07dGhpcy5wZW5kaW5nQ2xlYW51cCYmIU9iamVjdC5rZXlzKHRoaXMuaW50ZW50U3RhdGVzKS5zb21lKChmdW5jdGlvbihlKXt2YXIgdD10aGlzLmludGVudFN0YXRlc1tlXTtyZXR1cm4gMCE9PXQucmVuZGVyVGFza3MubGVuZ3RofHx0LnJlY2VpdmluZ09wZXJhdG9yTGlzdH0pLHRoaXMpJiYoT2JqZWN0LmtleXModGhpcy5pbnRlbnRTdGF0ZXMpLmZvckVhY2goKGZ1bmN0aW9uKGUpe2RlbGV0ZSB0aGlzLmludGVudFN0YXRlc1tlXX0pLHRoaXMpLHRoaXMub2Jqcy5jbGVhcigpLHRoaXMuYW5ub3RhdGlvbnNQcm9taXNlPW51bGwsZSYmdGhpcy5fc3RhdHMgaW5zdGFuY2VvZiBvLlN0YXRUaW1lciYmKHRoaXMuX3N0YXRzPW5ldyBvLlN0YXRUaW1lciksdGhpcy5wZW5kaW5nQ2xlYW51cD0hMSl9fSx7a2V5OiJfc3RhcnRSZW5kZXJQYWdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuaW50ZW50U3RhdGVzW3RdO3IuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSYmci5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoZSl9fSx7a2V5OiJfcmVuZGVyUGFnZUNodW5rIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLmludGVudFN0YXRlc1t0XSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXIub3BlcmF0b3JMaXN0LmZuQXJyYXkucHVzaChlLmZuQXJyYXlbbl0pLHIub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5wdXNoKGUuYXJnc0FycmF5W25dKTtyLm9wZXJhdG9yTGlzdC5sYXN0Q2h1bms9ZS5sYXN0Q2h1bms7Zm9yKHZhciBpPTA7aTxyLnJlbmRlclRhc2tzLmxlbmd0aDtpKyspci5yZW5kZXJUYXNrc1tpXS5vcGVyYXRvckxpc3RDaGFuZ2VkKCk7ZS5sYXN0Q2h1bmsmJihyLnJlY2VpdmluZ09wZXJhdG9yTGlzdD0hMSx0aGlzLl90cnlDbGVhbnVwKCkpfX0se2tleToicGFnZU51bWJlciIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZUluZGV4KzF9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby5yb3RhdGV9fSx7a2V5OiJyZWYiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wYWdlSW5mby5yZWZ9fSx7a2V5OiJ1c2VyVW5pdCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnVzZXJVbml0fX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BhZ2VJbmZvLnZpZXd9fSx7a2V5OiJzdGF0cyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3N0YXRzIGluc3RhbmNlb2Ygby5TdGF0VGltZXI/dGhpcy5fc3RhdHM6bnVsbH19XSksZX0oKTt0LlBERlBhZ2VQcm94eT1EO3ZhciBOPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07dyh0aGlzLGUpLHRoaXMuX2xpc3RlbmVycz1bXSx0aGlzLl9kZWZlcj10LHRoaXMuX2RlZmVycmVkPVByb21pc2UucmVzb2x2ZSh2b2lkIDApfXJldHVybiBTKGUsW3trZXk6InBvc3RNZXNzYWdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7aWYodGhpcy5fZGVmZXIpe3ZhciBuPW5ldyBXZWFrTWFwLGE9e2RhdGE6ZnVuY3Rpb24gZShyKXtpZigib2JqZWN0IiE9PV8ocil8fG51bGw9PT1yKXJldHVybiByO2lmKG4uaGFzKHIpKXJldHVybiBuLmdldChyKTt2YXIgYSxvO2lmKChhPXIuYnVmZmVyKSYmKDAsaS5pc0FycmF5QnVmZmVyKShhKSl7dmFyIHM9dCYmdC5pbmNsdWRlcyhhKTtyZXR1cm4gbz1yPT09YT9yOnM/bmV3IHIuY29uc3RydWN0b3IoYSxyLmJ5dGVPZmZzZXQsci5ieXRlTGVuZ3RoKTpuZXcgci5jb25zdHJ1Y3RvcihyKSxuLnNldChyLG8pLG99Zm9yKHZhciBsIGluIG89QXJyYXkuaXNBcnJheShyKT9bXTp7fSxuLnNldChyLG8pLHIpe2Zvcih2YXIgYz12b2lkIDAsdT1yOyEoYz1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHUsbCkpOyl1PU9iamVjdC5nZXRQcm90b3R5cGVPZih1KTt2b2lkIDAhPT1jLnZhbHVlJiYiZnVuY3Rpb24iIT10eXBlb2YgYy52YWx1ZSYmKG9bbF09ZShjLnZhbHVlKSl9cmV0dXJuIG99KGUpfTt0aGlzLl9kZWZlcnJlZC50aGVuKChmdW5jdGlvbigpe3IuX2xpc3RlbmVycy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmNhbGwodGhpcyxhKX0pLHIpfSkpfWVsc2UgdGhpcy5fbGlzdGVuZXJzLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FsbCh0aGlzLHtkYXRhOmV9KX0pLHRoaXMpfX0se2tleToiYWRkRXZlbnRMaXN0ZW5lciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9saXN0ZW5lcnMucHVzaCh0KX19LHtrZXk6InJlbW92ZUV2ZW50TGlzdGVuZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fbGlzdGVuZXJzLmluZGV4T2YodCk7dGhpcy5fbGlzdGVuZXJzLnNwbGljZShyLDEpfX0se2tleToidGVybWluYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuX2xpc3RlbmVycz1bXX19XSksZX0oKTt0Lkxvb3BiYWNrUG9ydD1OO3ZhciBNPWZ1bmN0aW9uKCl7dmFyIGUsdD1uZXcgV2Vha01hcCxyPTA7ZnVuY3Rpb24gbigpe2lmKGYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmMpcmV0dXJuIGYuR2xvYmFsV29ya2VyT3B0aW9ucy53b3JrZXJTcmM7aWYodm9pZCAwIT09eClyZXR1cm4geDt0aHJvdyBuZXcgRXJyb3IoJ05vICJHbG9iYWxXb3JrZXJPcHRpb25zLndvcmtlclNyYyIgc3BlY2lmaWVkLicpfWZ1bmN0aW9uIGEoKXt0cnl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiB3aW5kb3cpcmV0dXJuIHdpbmRvdy5wZGZqc1dvcmtlciYmd2luZG93LnBkZmpzV29ya2VyLldvcmtlck1lc3NhZ2VIYW5kbGVyfWNhdGNoKGUpe31yZXR1cm4gbnVsbH1yZXR1cm4gZnVuY3Rpb24oKXtmdW5jdGlvbiBzKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9ZS5uYW1lLG49dm9pZCAwPT09cj9udWxsOnIsYT1lLnBvcnQsbz12b2lkIDA9PT1hP251bGw6YSxsPWUucG9zdE1lc3NhZ2VUcmFuc2ZlcnMsYz12b2lkIDA9PT1sfHxsLHU9ZS52ZXJib3NpdHksZj12b2lkIDA9PT11PygwLGkuZ2V0VmVyYm9zaXR5TGV2ZWwpKCk6dTtpZih3KHRoaXMscyksbyYmdC5oYXMobykpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgdXNlIG1vcmUgdGhhbiBvbmUgUERGV29ya2VyIHBlciBwb3J0Iik7aWYodGhpcy5uYW1lPW4sdGhpcy5kZXN0cm95ZWQ9ITEsdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz0hMSE9PWMsdGhpcy52ZXJib3NpdHk9Zix0aGlzLl9yZWFkeUNhcGFiaWxpdHk9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9wb3J0PW51bGwsdGhpcy5fd2ViV29ya2VyPW51bGwsdGhpcy5fbWVzc2FnZUhhbmRsZXI9bnVsbCxvKXJldHVybiB0LnNldChvLHRoaXMpLHZvaWQgdGhpcy5faW5pdGlhbGl6ZUZyb21Qb3J0KG8pO3RoaXMuX2luaXRpYWxpemUoKX1yZXR1cm4gUyhzLFt7a2V5OiJfaW5pdGlhbGl6ZUZyb21Qb3J0Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9wb3J0PWUsdGhpcy5fbWVzc2FnZUhhbmRsZXI9bmV3IGguTWVzc2FnZUhhbmRsZXIoIm1haW4iLCJ3b3JrZXIiLGUpLHRoaXMuX21lc3NhZ2VIYW5kbGVyLm9uKCJyZWFkeSIsKGZ1bmN0aW9uKCl7fSkpLHRoaXMuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCl9fSx7a2V5OiJfaW5pdGlhbGl6ZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcztpZigidW5kZWZpbmVkIiE9dHlwZW9mIFdvcmtlciYmIUMmJiFhKCkpe3ZhciBvPW4oKTt0cnl7KDAsaS5pc1NhbWVPcmlnaW4pKHdpbmRvdy5sb2NhdGlvbi5ocmVmLG8pfHwoZT1uZXcgaS5VUkwobyx3aW5kb3cubG9jYXRpb24pLmhyZWYsdD0iaW1wb3J0U2NyaXB0cygnIitlKyInKTsiLG89aS5VUkwuY3JlYXRlT2JqZWN0VVJMKG5ldyBCbG9iKFt0XSkpKTt2YXIgcz1uZXcgV29ya2VyKG8pLGw9bmV3IGguTWVzc2FnZUhhbmRsZXIoIm1haW4iLCJ3b3JrZXIiLHMpLGM9ZnVuY3Rpb24oKXtzLnJlbW92ZUV2ZW50TGlzdGVuZXIoImVycm9yIix1KSxsLmRlc3Ryb3koKSxzLnRlcm1pbmF0ZSgpLHIuZGVzdHJveWVkP3IuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTpyLl9zZXR1cEZha2VXb3JrZXIoKX0sdT1mdW5jdGlvbigpe3IuX3dlYldvcmtlcnx8YygpfTtzLmFkZEV2ZW50TGlzdGVuZXIoImVycm9yIix1KSxsLm9uKCJ0ZXN0IiwoZnVuY3Rpb24oZSl7cy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdSksci5kZXN0cm95ZWQ/YygpOmUmJmUuc3VwcG9ydFR5cGVkQXJyYXk/KHIuX21lc3NhZ2VIYW5kbGVyPWwsci5fcG9ydD1zLHIuX3dlYldvcmtlcj1zLGUuc3VwcG9ydFRyYW5zZmVyc3x8KHIucG9zdE1lc3NhZ2VUcmFuc2ZlcnM9ITEpLHIuX3JlYWR5Q2FwYWJpbGl0eS5yZXNvbHZlKCksbC5zZW5kKCJjb25maWd1cmUiLHt2ZXJib3NpdHk6ci52ZXJib3NpdHl9KSk6KHIuX3NldHVwRmFrZVdvcmtlcigpLGwuZGVzdHJveSgpLHMudGVybWluYXRlKCkpfSkpLGwub24oInJlYWR5IiwoZnVuY3Rpb24oZSl7aWYocy5yZW1vdmVFdmVudExpc3RlbmVyKCJlcnJvciIsdSksci5kZXN0cm95ZWQpYygpO2Vsc2UgdHJ5e2YoKX1jYXRjaChlKXtyLl9zZXR1cEZha2VXb3JrZXIoKX19KSk7dmFyIGY9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbci5wb3N0TWVzc2FnZVRyYW5zZmVycz8yNTU6MF0pO3RyeXtsLnNlbmQoInRlc3QiLGUsW2UuYnVmZmVyXSl9Y2F0Y2godCl7KDAsaS5pbmZvKSgiQ2Fubm90IHVzZSBwb3N0TWVzc2FnZSB0cmFuc2ZlcnMiKSxlWzBdPTAsbC5zZW5kKCJ0ZXN0IixlKX19O3JldHVybiB2b2lkIGYoKX1jYXRjaChlKXsoMCxpLmluZm8pKCJUaGUgd29ya2VyIGhhcyBiZWVuIGRpc2FibGVkLiIpfX10aGlzLl9zZXR1cEZha2VXb3JrZXIoKX19LHtrZXk6Il9zZXR1cEZha2VXb3JrZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcztDfHwoKDAsaS53YXJuKSgiU2V0dGluZyB1cCBmYWtlIHdvcmtlci4iKSxDPSEwKSxmdW5jdGlvbigpe2lmKGUpcmV0dXJuIGUucHJvbWlzZTtlPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dmFyIHQ9YSgpO3JldHVybiB0PyhlLnJlc29sdmUodCksZS5wcm9taXNlKTooKEF8fGZ1bmN0aW9uKCl7cmV0dXJuKDAsby5sb2FkU2NyaXB0KShuKCkpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHdpbmRvdy5wZGZqc1dvcmtlci5Xb3JrZXJNZXNzYWdlSGFuZGxlcn0pKX0pKCkudGhlbihlLnJlc29sdmUsZS5yZWplY3QpLGUucHJvbWlzZSl9KCkudGhlbigoZnVuY3Rpb24oZSl7aWYodC5kZXN0cm95ZWQpdC5fcmVhZHlDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpO2Vsc2V7dmFyIG49bmV3IE47dC5fcG9ydD1uO3ZhciBhPSJmYWtlIityKyssaT1uZXcgaC5NZXNzYWdlSGFuZGxlcihhKyJfd29ya2VyIixhLG4pO2Uuc2V0dXAoaSxuKTt2YXIgbz1uZXcgaC5NZXNzYWdlSGFuZGxlcihhLGErIl93b3JrZXIiLG4pO3QuX21lc3NhZ2VIYW5kbGVyPW8sdC5fcmVhZHlDYXBhYmlsaXR5LnJlc29sdmUoKX19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuX3JlYWR5Q2FwYWJpbGl0eS5yZWplY3QobmV3IEVycm9yKCdTZXR0aW5nIHVwIGZha2Ugd29ya2VyIGZhaWxlZDogIicuY29uY2F0KGUubWVzc2FnZSwnIi4nKSkpfSkpfX0se2tleToiZGVzdHJveSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRlc3Ryb3llZD0hMCx0aGlzLl93ZWJXb3JrZXImJih0aGlzLl93ZWJXb3JrZXIudGVybWluYXRlKCksdGhpcy5fd2ViV29ya2VyPW51bGwpLHQuZGVsZXRlKHRoaXMuX3BvcnQpLHRoaXMuX3BvcnQ9bnVsbCx0aGlzLl9tZXNzYWdlSGFuZGxlciYmKHRoaXMuX21lc3NhZ2VIYW5kbGVyLmRlc3Ryb3koKSx0aGlzLl9tZXNzYWdlSGFuZGxlcj1udWxsKX19LHtrZXk6InByb21pc2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkeUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InBvcnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9wb3J0fX0se2tleToibWVzc2FnZUhhbmRsZXIiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXNzYWdlSGFuZGxlcn19XSxbe2tleToiZnJvbVBvcnQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlfHwhZS5wb3J0KXRocm93IG5ldyBFcnJvcigiUERGV29ya2VyLmZyb21Qb3J0IC0gaW52YWxpZCBtZXRob2Qgc2lnbmF0dXJlLiIpO3JldHVybiB0LmhhcyhlLnBvcnQpP3QuZ2V0KGUucG9ydCk6bmV3IHMoZSl9fSx7a2V5OiJnZXRXb3JrZXJTcmMiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIG4oKX19XSksc30oKX0oKTt0LlBERldvcmtlcj1NO3ZhciBqLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuLGEpe3codGhpcyxlKSx0aGlzLm1lc3NhZ2VIYW5kbGVyPXQsdGhpcy5sb2FkaW5nVGFzaz1yLHRoaXMuY29tbW9uT2Jqcz1uZXcgVSx0aGlzLmZvbnRMb2FkZXI9bmV3IHMuRm9udExvYWRlcih7ZG9jSWQ6ci5kb2NJZCxvblVuc3VwcG9ydGVkRmVhdHVyZTp0aGlzLl9vblVuc3VwcG9ydGVkRmVhdHVyZS5iaW5kKHRoaXMpfSksdGhpcy5fcGFyYW1zPWEsdGhpcy5DTWFwUmVhZGVyRmFjdG9yeT1uZXcgYS5DTWFwUmVhZGVyRmFjdG9yeSh7YmFzZVVybDphLmNNYXBVcmwsaXNDb21wcmVzc2VkOmEuY01hcFBhY2tlZH0pLHRoaXMuZGVzdHJveWVkPSExLHRoaXMuZGVzdHJveUNhcGFiaWxpdHk9bnVsbCx0aGlzLl9wYXNzd29yZENhcGFiaWxpdHk9bnVsbCx0aGlzLl9uZXR3b3JrU3RyZWFtPW4sdGhpcy5fZnVsbFJlYWRlcj1udWxsLHRoaXMuX2xhc3RQcm9ncmVzcz1udWxsLHRoaXMucGFnZUNhY2hlPVtdLHRoaXMucGFnZVByb21pc2VzPVtdLHRoaXMuZG93bmxvYWRJbmZvQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuc2V0dXBNZXNzYWdlSGFuZGxlcigpfXJldHVybiBTKGUsW3trZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztpZih0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5KXJldHVybiB0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnByb21pc2U7dGhpcy5kZXN0cm95ZWQ9ITAsdGhpcy5kZXN0cm95Q2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eSYmdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIGR1cmluZyBvblBhc3N3b3JkIGNhbGxiYWNrIikpO3ZhciB0PVtdO3RoaXMucGFnZUNhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UmJnQucHVzaChlLl9kZXN0cm95KCkpfSkpLHRoaXMucGFnZUNhY2hlPVtdLHRoaXMucGFnZVByb21pc2VzPVtdO3ZhciByPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJUZXJtaW5hdGUiLG51bGwpO3JldHVybiB0LnB1c2gociksUHJvbWlzZS5hbGwodCkudGhlbigoZnVuY3Rpb24oKXtlLmZvbnRMb2FkZXIuY2xlYXIoKSxlLl9uZXR3b3JrU3RyZWFtJiZlLl9uZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKCksZS5tZXNzYWdlSGFuZGxlciYmKGUubWVzc2FnZUhhbmRsZXIuZGVzdHJveSgpLGUubWVzc2FnZUhhbmRsZXI9bnVsbCksZS5kZXN0cm95Q2FwYWJpbGl0eS5yZXNvbHZlKCl9KSx0aGlzLmRlc3Ryb3lDYXBhYmlsaXR5LnJlamVjdCksdGhpcy5kZXN0cm95Q2FwYWJpbGl0eS5wcm9taXNlfX0se2tleToic2V0dXBNZXNzYWdlSGFuZGxlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm1lc3NhZ2VIYW5kbGVyLHQ9dGhpcy5sb2FkaW5nVGFzaztlLm9uKCJHZXRSZWFkZXIiLChmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7KDAsaS5hc3NlcnQpKHRoaXMuX25ldHdvcmtTdHJlYW0pLHRoaXMuX2Z1bGxSZWFkZXI9dGhpcy5fbmV0d29ya1N0cmVhbS5nZXRGdWxsUmVhZGVyKCksdGhpcy5fZnVsbFJlYWRlci5vblByb2dyZXNzPWZ1bmN0aW9uKGUpe3IuX2xhc3RQcm9ncmVzcz17bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9fSx0Lm9uUHVsbD1mdW5jdGlvbigpe3IuX2Z1bGxSZWFkZXIucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciByPWUudmFsdWU7ZS5kb25lP3QuY2xvc2UoKTooKDAsaS5hc3NlcnQpKCgwLGkuaXNBcnJheUJ1ZmZlcikocikpLHQuZW5xdWV1ZShuZXcgVWludDhBcnJheShyKSwxLFtyXSkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXt0LmVycm9yKGUpfSkpfSx0Lm9uQ2FuY2VsPWZ1bmN0aW9uKGUpe3IuX2Z1bGxSZWFkZXIuY2FuY2VsKGUpfX0pLHRoaXMpLGUub24oIlJlYWRlckhlYWRlcnNSZWFkeSIsKGZ1bmN0aW9uKGUpe3ZhciByPXRoaXMsbj0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGE9dGhpcy5fZnVsbFJlYWRlcjtyZXR1cm4gYS5oZWFkZXJzUmVhZHkudGhlbigoZnVuY3Rpb24oKXthLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZhLmlzUmFuZ2VTdXBwb3J0ZWR8fChyLl9sYXN0UHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHIuX2xhc3RQcm9ncmVzcyksYS5vblByb2dyZXNzPWZ1bmN0aW9uKGUpe3Qub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS50b3RhbH0pfSksbi5yZXNvbHZlKHtpc1N0cmVhbWluZ1N1cHBvcnRlZDphLmlzU3RyZWFtaW5nU3VwcG9ydGVkLGlzUmFuZ2VTdXBwb3J0ZWQ6YS5pc1JhbmdlU3VwcG9ydGVkLGNvbnRlbnRMZW5ndGg6YS5jb250ZW50TGVuZ3RofSl9KSxuLnJlamVjdCksbi5wcm9taXNlfSksdGhpcyksZS5vbigiR2V0UmFuZ2VSZWFkZXIiLChmdW5jdGlvbihlLHQpeygwLGkuYXNzZXJ0KSh0aGlzLl9uZXR3b3JrU3RyZWFtKTt2YXIgcj10aGlzLl9uZXR3b3JrU3RyZWFtLmdldFJhbmdlUmVhZGVyKGUuYmVnaW4sZS5lbmQpO3Qub25QdWxsPWZ1bmN0aW9uKCl7ci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHI9ZS52YWx1ZTtlLmRvbmU/dC5jbG9zZSgpOigoMCxpLmFzc2VydCkoKDAsaS5pc0FycmF5QnVmZmVyKShyKSksdC5lbnF1ZXVlKG5ldyBVaW50OEFycmF5KHIpLDEsW3JdKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe3QuZXJyb3IoZSl9KSl9LHQub25DYW5jZWw9ZnVuY3Rpb24oZSl7ci5jYW5jZWwoZSl9fSksdGhpcyksZS5vbigiR2V0RG9jIiwoZnVuY3Rpb24oZSl7dmFyIHI9ZS5wZGZJbmZvO3RoaXMubnVtUGFnZXM9ci5udW1QYWdlcyx0aGlzLnBkZkRvY3VtZW50PW5ldyBMKHIsdGhpcyx0KSx0Ll9jYXBhYmlsaXR5LnJlc29sdmUodGhpcy5wZGZEb2N1bWVudCl9KSx0aGlzKSxlLm9uKCJQYXNzd29yZFJlcXVlc3QiLChmdW5jdGlvbihlKXt2YXIgcj10aGlzO2lmKHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHQub25QYXNzd29yZCl0cnl7dC5vblBhc3N3b3JkKChmdW5jdGlvbihlKXtyLl9wYXNzd29yZENhcGFiaWxpdHkucmVzb2x2ZSh7cGFzc3dvcmQ6ZX0pfSksZS5jb2RlKX1jYXRjaChlKXt0aGlzLl9wYXNzd29yZENhcGFiaWxpdHkucmVqZWN0KGUpfWVsc2UgdGhpcy5fcGFzc3dvcmRDYXBhYmlsaXR5LnJlamVjdChuZXcgaS5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKSk7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkQ2FwYWJpbGl0eS5wcm9taXNlfSksdGhpcyksZS5vbigiUGFzc3dvcmRFeGNlcHRpb24iLChmdW5jdGlvbihlKXt0Ll9jYXBhYmlsaXR5LnJlamVjdChuZXcgaS5QYXNzd29yZEV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5jb2RlKSl9KSx0aGlzKSxlLm9uKCJJbnZhbGlkUERGIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuSW52YWxpZFBERkV4Y2VwdGlvbihlLm1lc3NhZ2UpKX0pLHRoaXMpLGUub24oIk1pc3NpbmdQREYiLChmdW5jdGlvbihlKXt0Ll9jYXBhYmlsaXR5LnJlamVjdChuZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSkpfSksdGhpcyksZS5vbigiVW5leHBlY3RlZFJlc3BvbnNlIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9uKGUubWVzc2FnZSxlLnN0YXR1cykpfSksdGhpcyksZS5vbigiVW5rbm93bkVycm9yIiwoZnVuY3Rpb24oZSl7dC5fY2FwYWJpbGl0eS5yZWplY3QobmV3IGkuVW5rbm93bkVycm9yRXhjZXB0aW9uKGUubWVzc2FnZSxlLmRldGFpbHMpKX0pLHRoaXMpLGUub24oIkRhdGFMb2FkZWQiLChmdW5jdGlvbihlKXt0Lm9uUHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyh7bG9hZGVkOmUubGVuZ3RoLHRvdGFsOmUubGVuZ3RofSksdGhpcy5kb3dubG9hZEluZm9DYXBhYmlsaXR5LnJlc29sdmUoZSl9KSx0aGlzKSxlLm9uKCJTdGFydFJlbmRlclBhZ2UiLChmdW5jdGlvbihlKXtpZighdGhpcy5kZXN0cm95ZWQpe3ZhciB0PXRoaXMucGFnZUNhY2hlW2UucGFnZUluZGV4XTt0Ll9zdGF0cy50aW1lRW5kKCJQYWdlIFJlcXVlc3QiKSx0Ll9zdGFydFJlbmRlclBhZ2UoZS50cmFuc3BhcmVuY3ksZS5pbnRlbnQpfX0pLHRoaXMpLGUub24oIlJlbmRlclBhZ2VDaHVuayIsKGZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveWVkfHx0aGlzLnBhZ2VDYWNoZVtlLnBhZ2VJbmRleF0uX3JlbmRlclBhZ2VDaHVuayhlLm9wZXJhdG9yTGlzdCxlLmludGVudCl9KSx0aGlzKSxlLm9uKCJjb21tb25vYmoiLChmdW5jdGlvbih0KXt2YXIgcj10aGlzO2lmKCF0aGlzLmRlc3Ryb3llZCl7dmFyIG49eSh0LDMpLGE9blswXSxvPW5bMV0sbD1uWzJdO2lmKCF0aGlzLmNvbW1vbk9ianMuaGFzKGEpKXN3aXRjaChvKXtjYXNlIkZvbnQiOnZhciBjPXRoaXMuX3BhcmFtcztpZigiZXJyb3IiaW4gbCl7dmFyIGY9bC5lcnJvcjsoMCxpLndhcm4pKCJFcnJvciBkdXJpbmcgZm9udCBsb2FkaW5nOiAiLmNvbmNhdChmKSksdGhpcy5jb21tb25PYmpzLnJlc29sdmUoYSxmKTticmVha312YXIgaD1udWxsO2MucGRmQnVnJiZ1LmRlZmF1bHQuRm9udEluc3BlY3RvciYmdS5kZWZhdWx0LkZvbnRJbnNwZWN0b3IuZW5hYmxlZCYmKGg9e3JlZ2lzdGVyRm9udDpmdW5jdGlvbihlLHQpe3UuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmZvbnRBZGRlZChlLHQpfX0pO3ZhciBkPW5ldyBzLkZvbnRGYWNlT2JqZWN0KGwse2lzRXZhbFN1cHBvcnRlZDpjLmlzRXZhbFN1cHBvcnRlZCxkaXNhYmxlRm9udEZhY2U6Yy5kaXNhYmxlRm9udEZhY2UsaWdub3JlRXJyb3JzOmMuaWdub3JlRXJyb3JzLG9uVW5zdXBwb3J0ZWRGZWF0dXJlOnRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLmJpbmQodGhpcyksZm9udFJlZ2lzdHJ5Omh9KTt0aGlzLmZvbnRMb2FkZXIuYmluZChkKS50aGVuKChmdW5jdGlvbigpe3IuY29tbW9uT2Jqcy5yZXNvbHZlKGEsZCl9KSwoZnVuY3Rpb24odCl7ZS5zZW5kV2l0aFByb21pc2UoIkZvbnRGYWxsYmFjayIse2lkOmF9KS5maW5hbGx5KChmdW5jdGlvbigpe3IuY29tbW9uT2Jqcy5yZXNvbHZlKGEsZCl9KSl9KSk7YnJlYWs7Y2FzZSJGb250UGF0aCI6dGhpcy5jb21tb25PYmpzLnJlc29sdmUoYSxsKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gY29tbW9uIG9iamVjdCB0eXBlICIuY29uY2F0KG8pKX19fSksdGhpcyksZS5vbigib2JqIiwoZnVuY3Rpb24oZSl7aWYoIXRoaXMuZGVzdHJveWVkKXt2YXIgdD15KGUsNCkscj10WzBdLG49dFsxXSxhPXRbMl0saT10WzNdLG89dGhpcy5wYWdlQ2FjaGVbbl07aWYoIW8ub2Jqcy5oYXMocikpc3dpdGNoKGEpe2Nhc2UiSnBlZ1N0cmVhbSI6cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe3ZhciByPW5ldyBJbWFnZTtyLm9ubG9hZD1mdW5jdGlvbigpe2Uocil9LHIub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJFcnJvciBkdXJpbmcgSlBFRyBpbWFnZSBsb2FkaW5nIikpfSxyLnNyYz1pfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe28ub2Jqcy5yZXNvbHZlKHIsZSl9KSk7Y2FzZSJJbWFnZSI6by5vYmpzLnJlc29sdmUocixpKSxpJiYiZGF0YSJpbiBpJiZpLmRhdGEubGVuZ3RoPjhlNiYmKG8uY2xlYW51cEFmdGVyUmVuZGVyPSEwKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiR290IHVua25vd24gb2JqZWN0IHR5cGUgIi5jb25jYXQoYSkpfX19KSx0aGlzKSxlLm9uKCJEb2NQcm9ncmVzcyIsKGZ1bmN0aW9uKGUpe3RoaXMuZGVzdHJveWVkfHx0Lm9uUHJvZ3Jlc3MmJnQub25Qcm9ncmVzcyh7bG9hZGVkOmUubG9hZGVkLHRvdGFsOmUudG90YWx9KX0pLHRoaXMpLGUub24oIlBhZ2VFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCF0aGlzLmRlc3Ryb3llZCl7dmFyIHQ9dGhpcy5wYWdlQ2FjaGVbZS5wYWdlTnVtLTFdLmludGVudFN0YXRlc1tlLmludGVudF07aWYoIXQuZGlzcGxheVJlYWR5Q2FwYWJpbGl0eSl0aHJvdyBuZXcgRXJyb3IoZS5lcnJvcik7aWYodC5kaXNwbGF5UmVhZHlDYXBhYmlsaXR5LnJlamVjdChlLmVycm9yKSx0Lm9wZXJhdG9yTGlzdCl7dC5vcGVyYXRvckxpc3QubGFzdENodW5rPSEwO2Zvcih2YXIgcj0wO3I8dC5yZW5kZXJUYXNrcy5sZW5ndGg7cisrKXQucmVuZGVyVGFza3Nbcl0ub3BlcmF0b3JMaXN0Q2hhbmdlZCgpfX19KSx0aGlzKSxlLm9uKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlLHRoaXMpLGUub24oIkpwZWdEZWNvZGUiLChmdW5jdGlvbihlKXtpZih0aGlzLmRlc3Ryb3llZClyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJXb3JrZXIgd2FzIGRlc3Ryb3llZCIpKTtpZigidW5kZWZpbmVkIj09dHlwZW9mIGRvY3VtZW50KXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoJyJkb2N1bWVudCIgaXMgbm90IGRlZmluZWQuJykpO3ZhciB0PXkoZSwyKSxyPXRbMF0sbj10WzFdO3JldHVybiAzIT09biYmMSE9PW4/UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJPbmx5IDMgY29tcG9uZW50cyBvciAxIGNvbXBvbmVudCBjYW4gYmUgcmV0dXJuZWQiKSk6bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7dmFyIGE9bmV3IEltYWdlO2Eub25sb2FkPWZ1bmN0aW9uKCl7dmFyIHQ9YS53aWR0aCxyPWEuaGVpZ2h0LGk9dCpyLG89NCppLHM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkqbiksbD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtsLndpZHRoPXQsbC5oZWlnaHQ9cjt2YXIgYz1sLmdldENvbnRleHQoIjJkIik7Yy5kcmF3SW1hZ2UoYSwwLDApO3ZhciB1PWMuZ2V0SW1hZ2VEYXRhKDAsMCx0LHIpLmRhdGE7aWYoMz09PW4pZm9yKHZhciBmPTAsaD0wO2Y8bztmKz00LGgrPTMpc1toXT11W2ZdLHNbaCsxXT11W2YrMV0sc1toKzJdPXVbZisyXTtlbHNlIGlmKDE9PT1uKWZvcih2YXIgZD0wLHA9MDtkPG87ZCs9NCxwKyspc1twXT11W2RdO2Uoe2RhdGE6cyx3aWR0aDp0LGhlaWdodDpyfSl9LGEub25lcnJvcj1mdW5jdGlvbigpe3QobmV3IEVycm9yKCJKcGVnRGVjb2RlIGZhaWxlZCB0byBsb2FkIGltYWdlIikpfSxhLnNyYz1yfSkpfSksdGhpcyksZS5vbigiRmV0Y2hCdWlsdEluQ01hcCIsKGZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmRlc3Ryb3llZD9Qcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIldvcmtlciB3YXMgZGVzdHJveWVkIikpOnRoaXMuQ01hcFJlYWRlckZhY3RvcnkuZmV0Y2goe25hbWU6ZS5uYW1lfSl9KSx0aGlzKX19LHtrZXk6Il9vblVuc3VwcG9ydGVkRmVhdHVyZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5mZWF0dXJlSWQ7dGhpcy5kZXN0cm95ZWR8fHRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUmJnRoaXMubG9hZGluZ1Rhc2sub25VbnN1cHBvcnRlZEZlYXR1cmUodCl9fSx7a2V5OiJnZXREYXRhIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGF0YSIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGUpfHxlPD0wfHxlPnRoaXMubnVtUGFnZXMpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBwYWdlIHJlcXVlc3QiKSk7dmFyIHI9ZS0xO2lmKHIgaW4gdGhpcy5wYWdlUHJvbWlzZXMpcmV0dXJuIHRoaXMucGFnZVByb21pc2VzW3JdO3ZhciBuPXRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRQYWdlIix7cGFnZUluZGV4OnJ9KS50aGVuKChmdW5jdGlvbihlKXtpZih0LmRlc3Ryb3llZCl0aHJvdyBuZXcgRXJyb3IoIlRyYW5zcG9ydCBkZXN0cm95ZWQiKTt2YXIgbj1uZXcgRChyLGUsdCx0Ll9wYXJhbXMucGRmQnVnKTtyZXR1cm4gdC5wYWdlQ2FjaGVbcl09bixufSkpO3JldHVybiB0aGlzLnBhZ2VQcm9taXNlc1tyXT1uLG59fSx7a2V5OiJnZXRQYWdlSW5kZXgiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUluZGV4Iix7cmVmOmV9KS5jYXRjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBFcnJvcihlKSl9KSl9fSx7a2V5OiJnZXRBbm5vdGF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEFubm90YXRpb25zIix7cGFnZUluZGV4OmUsaW50ZW50OnR9KX19LHtrZXk6ImdldERlc3RpbmF0aW9ucyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldERlc3RpbmF0aW9ucyIsbnVsbCl9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyIhPXR5cGVvZiBlP1Byb21pc2UucmVqZWN0KG5ldyBFcnJvcigiSW52YWxpZCBkZXN0aW5hdGlvbiByZXF1ZXN0LiIpKTp0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0RGVzdGluYXRpb24iLHtpZDplfSl9fSx7a2V5OiJnZXRQYWdlTGFiZWxzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGFnZUxhYmVscyIsbnVsbCl9fSx7a2V5OiJnZXRQYWdlTW9kZSIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFBhZ2VNb2RlIixudWxsKX19LHtrZXk6ImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoImdldE9wZW5BY3Rpb25EZXN0aW5hdGlvbiIsbnVsbCl9fSx7a2V5OiJnZXRBdHRhY2htZW50cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldEF0dGFjaG1lbnRzIixudWxsKX19LHtrZXk6ImdldEphdmFTY3JpcHQiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRKYXZhU2NyaXB0IixudWxsKX19LHtrZXk6ImdldE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJHZXRPdXRsaW5lIixudWxsKX19LHtrZXk6ImdldFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm1lc3NhZ2VIYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgiR2V0UGVybWlzc2lvbnMiLG51bGwpfX0se2tleToiZ2V0TWV0YWRhdGEiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldE1ldGFkYXRhIixudWxsKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm57aW5mbzp0WzBdLG1ldGFkYXRhOnRbMV0/bmV3IGQuTWV0YWRhdGEodFsxXSk6bnVsbCxjb250ZW50RGlzcG9zaXRpb25GaWxlbmFtZTplLl9mdWxsUmVhZGVyP2UuX2Z1bGxSZWFkZXIuZmlsZW5hbWU6bnVsbH19KSl9fSx7a2V5OiJnZXRTdGF0cyIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkdldFN0YXRzIixudWxsKX19LHtrZXk6InN0YXJ0Q2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMubWVzc2FnZUhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJDbGVhbnVwIixudWxsKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgdD0wLHI9ZS5wYWdlQ2FjaGUubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWUucGFnZUNhY2hlW3RdO24mJm4uY2xlYW51cCgpfWUuY29tbW9uT2Jqcy5jbGVhcigpLGUuZm9udExvYWRlci5jbGVhcigpfSkpfX0se2tleToibG9hZGluZ1BhcmFtcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcGFyYW1zO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJsb2FkaW5nUGFyYW1zIix7ZGlzYWJsZUF1dG9GZXRjaDplLmRpc2FibGVBdXRvRmV0Y2gsZGlzYWJsZUNyZWF0ZU9iamVjdFVSTDplLmRpc2FibGVDcmVhdGVPYmplY3RVUkwsZGlzYWJsZUZvbnRGYWNlOmUuZGlzYWJsZUZvbnRGYWNlLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6ZS5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0fSl9fV0pLGV9KCksVT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt3KHRoaXMsZSksdGhpcy5fb2Jqcz1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBTKGUsW3trZXk6Il9lbnN1cmVPYmoiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9vYmpzW2VdP3RoaXMuX29ianNbZV06dGhpcy5fb2Jqc1tlXT17Y2FwYWJpbGl0eTooMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGRhdGE6bnVsbCxyZXNvbHZlZDohMX19fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO2lmKHQpcmV0dXJuIHRoaXMuX2Vuc3VyZU9iaihlKS5jYXBhYmlsaXR5LnByb21pc2UudGhlbih0KSxudWxsO3ZhciByPXRoaXMuX29ianNbZV07aWYoIXJ8fCFyLnJlc29sdmVkKXRocm93IG5ldyBFcnJvcigiUmVxdWVzdGluZyBvYmplY3QgdGhhdCBpc24ndCByZXNvbHZlZCB5ZXQgIi5jb25jYXQoZSwiLiIpKTtyZXR1cm4gci5kYXRhfX0se2tleToiaGFzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9vYmpzW2VdO3JldHVybiEhdCYmdC5yZXNvbHZlZH19LHtrZXk6InJlc29sdmUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fZW5zdXJlT2JqKGUpO3IucmVzb2x2ZWQ9ITAsci5kYXRhPXQsci5jYXBhYmlsaXR5LnJlc29sdmUodCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9vYmpzPU9iamVjdC5jcmVhdGUobnVsbCl9fV0pLGV9KCkscT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dyh0aGlzLGUpLHRoaXMuX2ludGVybmFsUmVuZGVyVGFzaz10LHRoaXMub25Db250aW51ZT1udWxsfXJldHVybiBTKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLl9pbnRlcm5hbFJlbmRlclRhc2suY2FuY2VsKCl9fSx7a2V5OiJ0aGVuIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybigwLGkuZGVwcmVjYXRlZCkoIlJlbmRlclRhc2sudGhlbiBtZXRob2QsIHVzZSB0aGUgYHByb21pc2VgIGdldHRlciBpbnN0ZWFkLiIpLHRoaXMucHJvbWlzZS50aGVuLmFwcGx5KHRoaXMucHJvbWlzZSxhcmd1bWVudHMpfX0se2tleToicHJvbWlzZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ludGVybmFsUmVuZGVyVGFzay5jYXBhYmlsaXR5LnByb21pc2V9fV0pLGV9KCksej0oaj1uZXcgV2Vha1NldCxmdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC5jYWxsYmFjayxuPXQucGFyYW1zLGE9dC5vYmpzLG89dC5jb21tb25PYmpzLHM9dC5vcGVyYXRvckxpc3QsbD10LnBhZ2VOdW1iZXIsYz10LmNhbnZhc0ZhY3RvcnksdT10LndlYkdMQ29udGV4dCxmPXQudXNlUmVxdWVzdEFuaW1hdGlvbkZyYW1lLGg9dm9pZCAwIT09ZiYmZixkPXQucGRmQnVnLHA9dm9pZCAwIT09ZCYmZDt3KHRoaXMsZSksdGhpcy5jYWxsYmFjaz1yLHRoaXMucGFyYW1zPW4sdGhpcy5vYmpzPWEsdGhpcy5jb21tb25PYmpzPW8sdGhpcy5vcGVyYXRvckxpc3RJZHg9bnVsbCx0aGlzLm9wZXJhdG9yTGlzdD1zLHRoaXMucGFnZU51bWJlcj1sLHRoaXMuY2FudmFzRmFjdG9yeT1jLHRoaXMud2ViR0xDb250ZXh0PXUsdGhpcy5fcGRmQnVnPXAsdGhpcy5ydW5uaW5nPSExLHRoaXMuZ3JhcGhpY3NSZWFkeUNhbGxiYWNrPW51bGwsdGhpcy5ncmFwaGljc1JlYWR5PSExLHRoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT0hMD09PWgmJiJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93LHRoaXMuY2FuY2VsbGVkPSExLHRoaXMuY2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMudGFzaz1uZXcgcSh0aGlzKSx0aGlzLl9jb250aW51ZUJvdW5kPXRoaXMuX2NvbnRpbnVlLmJpbmQodGhpcyksdGhpcy5fc2NoZWR1bGVOZXh0Qm91bmQ9dGhpcy5fc2NoZWR1bGVOZXh0LmJpbmQodGhpcyksdGhpcy5fbmV4dEJvdW5kPXRoaXMuX25leHQuYmluZCh0aGlzKSx0aGlzLl9jYW52YXM9bi5jYW52YXNDb250ZXh0LmNhbnZhc312YXIgdCxyO3JldHVybiBTKGUsW3trZXk6ImluaXRpYWxpemVHcmFwaGljcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO2lmKCF0aGlzLmNhbmNlbGxlZCl7aWYodGhpcy5fY2FudmFzKXtpZihqLmhhcyh0aGlzLl9jYW52YXMpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHVzZSB0aGUgc2FtZSBjYW52YXMgZHVyaW5nIG11bHRpcGxlIHJlbmRlcigpIG9wZXJhdGlvbnMuIFVzZSBkaWZmZXJlbnQgY2FudmFzIG9yIGVuc3VyZSBwcmV2aW91cyBvcGVyYXRpb25zIHdlcmUgY2FuY2VsbGVkIG9yIGNvbXBsZXRlZC4iKTtqLmFkZCh0aGlzLl9jYW52YXMpfXRoaXMuX3BkZkJ1ZyYmdS5kZWZhdWx0LlN0ZXBwZXJNYW5hZ2VyJiZ1LmRlZmF1bHQuU3RlcHBlck1hbmFnZXIuZW5hYmxlZCYmKHRoaXMuc3RlcHBlcj11LmRlZmF1bHQuU3RlcHBlck1hbmFnZXIuY3JlYXRlKHRoaXMucGFnZU51bWJlci0xKSx0aGlzLnN0ZXBwZXIuaW5pdCh0aGlzLm9wZXJhdG9yTGlzdCksdGhpcy5zdGVwcGVyLm5leHRCcmVha1BvaW50PXRoaXMuc3RlcHBlci5nZXROZXh0QnJlYWtQb2ludCgpKTt2YXIgdD10aGlzLnBhcmFtcyxyPXQuY2FudmFzQ29udGV4dCxuPXQudmlld3BvcnQsYT10LnRyYW5zZm9ybSxpPXQuaW1hZ2VMYXllcixvPXQuYmFja2dyb3VuZDt0aGlzLmdmeD1uZXcgYy5DYW52YXNHcmFwaGljcyhyLHRoaXMuY29tbW9uT2Jqcyx0aGlzLm9ianMsdGhpcy5jYW52YXNGYWN0b3J5LHRoaXMud2ViR0xDb250ZXh0LGkpLHRoaXMuZ2Z4LmJlZ2luRHJhd2luZyh7dHJhbnNmb3JtOmEsdmlld3BvcnQ6bix0cmFuc3BhcmVuY3k6ZSxiYWNrZ3JvdW5kOm99KSx0aGlzLm9wZXJhdG9yTGlzdElkeD0wLHRoaXMuZ3JhcGhpY3NSZWFkeT0hMCx0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjayYmdGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2soKX19fSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOm51bGw7dGhpcy5ydW5uaW5nPSExLHRoaXMuY2FuY2VsbGVkPSEwLHRoaXMuZ2Z4JiZ0aGlzLmdmeC5lbmREcmF3aW5nKCksdGhpcy5fY2FudmFzJiZqLmRlbGV0ZSh0aGlzLl9jYW52YXMpLHRoaXMuY2FsbGJhY2soZXx8bmV3IG8uUmVuZGVyaW5nQ2FuY2VsbGVkRXhjZXB0aW9uKCJSZW5kZXJpbmcgY2FuY2VsbGVkLCBwYWdlICIuY29uY2F0KHRoaXMucGFnZU51bWJlciksImNhbnZhcyIpKX19LHtrZXk6Im9wZXJhdG9yTGlzdENoYW5nZWQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5ncmFwaGljc1JlYWR5Pyh0aGlzLnN0ZXBwZXImJnRoaXMuc3RlcHBlci51cGRhdGVPcGVyYXRvckxpc3QodGhpcy5vcGVyYXRvckxpc3QpLHRoaXMucnVubmluZ3x8dGhpcy5fY29udGludWUoKSk6dGhpcy5ncmFwaGljc1JlYWR5Q2FsbGJhY2t8fCh0aGlzLmdyYXBoaWNzUmVhZHlDYWxsYmFjaz10aGlzLl9jb250aW51ZUJvdW5kKX19LHtrZXk6Il9jb250aW51ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJ1bm5pbmc9ITAsdGhpcy5jYW5jZWxsZWR8fCh0aGlzLnRhc2sub25Db250aW51ZT90aGlzLnRhc2sub25Db250aW51ZSh0aGlzLl9zY2hlZHVsZU5leHRCb3VuZCk6dGhpcy5fc2NoZWR1bGVOZXh0KCkpfX0se2tleToiX3NjaGVkdWxlTmV4dCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMuX3VzZVJlcXVlc3RBbmltYXRpb25GcmFtZT93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKChmdW5jdGlvbigpe2UuX25leHRCb3VuZCgpLmNhdGNoKGUuY2FuY2VsLmJpbmQoZSkpfSkpOlByb21pc2UucmVzb2x2ZSgpLnRoZW4odGhpcy5fbmV4dEJvdW5kKS5jYXRjaCh0aGlzLmNhbmNlbC5iaW5kKHRoaXMpKX19LHtrZXk6Il9uZXh0Iix2YWx1ZToodD1hLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXRoaXMuY2FuY2VsbGVkKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjp0aGlzLm9wZXJhdG9yTGlzdElkeD10aGlzLmdmeC5leGVjdXRlT3BlcmF0b3JMaXN0KHRoaXMub3BlcmF0b3JMaXN0LHRoaXMub3BlcmF0b3JMaXN0SWR4LHRoaXMuX2NvbnRpbnVlQm91bmQsdGhpcy5zdGVwcGVyKSx0aGlzLm9wZXJhdG9yTGlzdElkeD09PXRoaXMub3BlcmF0b3JMaXN0LmFyZ3NBcnJheS5sZW5ndGgmJih0aGlzLnJ1bm5pbmc9ITEsdGhpcy5vcGVyYXRvckxpc3QubGFzdENodW5rJiYodGhpcy5nZnguZW5kRHJhd2luZygpLHRoaXMuX2NhbnZhcyYmai5kZWxldGUodGhpcy5fY2FudmFzKSx0aGlzLmNhbGxiYWNrKCkpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXt2KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt2KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX1dKSxlfSgpKTt0LnZlcnNpb249IjIuMS4yNjYiLHQuYnVpbGQ9IjgxZjU4MzVjIn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cigxNDgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgYT1mdW5jdGlvbigpe3JldHVybiB0aGlzfHwib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/InVuZGVmaW5lZCI6bihzZWxmKSkmJnNlbGZ9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCksaT1hLnJlZ2VuZXJhdG9yUnVudGltZSYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMoYSkuaW5kZXhPZigicmVnZW5lcmF0b3JSdW50aW1lIik+PTAsbz1pJiZhLnJlZ2VuZXJhdG9yUnVudGltZTtpZihhLnJlZ2VuZXJhdG9yUnVudGltZT12b2lkIDAsZS5leHBvcnRzPXIoMTQ5KSxpKWEucmVnZW5lcmF0b3JSdW50aW1lPW87ZWxzZSB0cnl7ZGVsZXRlIGEucmVnZW5lcmF0b3JSdW50aW1lfWNhdGNoKGUpe2EucmVnZW5lcmF0b3JSdW50aW1lPXZvaWQgMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7KGZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuKHQ9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX0hZnVuY3Rpb24ocil7dmFyIG49T2JqZWN0LnByb3RvdHlwZSxhPW4uaGFzT3duUHJvcGVydHksaT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sP1N5bWJvbDp7fSxvPWkuaXRlcmF0b3J8fCJAQGl0ZXJhdG9yIixzPWkuYXN5bmNJdGVyYXRvcnx8IkBAYXN5bmNJdGVyYXRvciIsbD1pLnRvU3RyaW5nVGFnfHwiQEB0b1N0cmluZ1RhZyIsYz0ib2JqZWN0Ij09PXQoZSksdT1yLnJlZ2VuZXJhdG9yUnVudGltZTtpZih1KWMmJihlLmV4cG9ydHM9dSk7ZWxzZXsodT1yLnJlZ2VuZXJhdG9yUnVudGltZT1jP2UuZXhwb3J0czp7fSkud3JhcD1nO3ZhciBmPXt9LGg9e307aFtvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgZD1PYmplY3QuZ2V0UHJvdG90eXBlT2YscD1kJiZkKGQoUChbXSkpKTtwJiZwIT09biYmYS5jYWxsKHAsbykmJihoPXApO3ZhciBtPXcucHJvdG90eXBlPXkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaCk7Yi5wcm90b3R5cGU9bS5jb25zdHJ1Y3Rvcj13LHcuY29uc3RydWN0b3I9Yix3W2xdPWIuZGlzcGxheU5hbWU9IkdlbmVyYXRvckZ1bmN0aW9uIix1LmlzR2VuZXJhdG9yRnVuY3Rpb249ZnVuY3Rpb24oZSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUmJmUuY29uc3RydWN0b3I7cmV0dXJuISF0JiYodD09PWJ8fCJHZW5lcmF0b3JGdW5jdGlvbiI9PT0odC5kaXNwbGF5TmFtZXx8dC5uYW1lKSl9LHUubWFyaz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5zZXRQcm90b3R5cGVPZihlLHcpOihlLl9fcHJvdG9fXz13LGwgaW4gZXx8KGVbbF09IkdlbmVyYXRvckZ1bmN0aW9uIikpLGUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUobSksZX0sdS5hd3JhcD1mdW5jdGlvbihlKXtyZXR1cm57X19hd2FpdDplfX0sayhTLnByb3RvdHlwZSksUy5wcm90b3R5cGVbc109ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc30sdS5Bc3luY0l0ZXJhdG9yPVMsdS5hc3luYz1mdW5jdGlvbihlLHQscixuKXt2YXIgYT1uZXcgUyhnKGUsdCxyLG4pKTtyZXR1cm4gdS5pc0dlbmVyYXRvckZ1bmN0aW9uKHQpP2E6YS5uZXh0KCkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuZG9uZT9lLnZhbHVlOmEubmV4dCgpfSkpfSxrKG0pLG1bbF09IkdlbmVyYXRvciIsbVtvXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxtLnRvU3RyaW5nPWZ1bmN0aW9uKCl7cmV0dXJuIltvYmplY3QgR2VuZXJhdG9yXSJ9LHUua2V5cz1mdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSl0LnB1c2gocik7cmV0dXJuIHQucmV2ZXJzZSgpLGZ1bmN0aW9uIHIoKXtmb3IoO3QubGVuZ3RoOyl7dmFyIG49dC5wb3AoKTtpZihuIGluIGUpcmV0dXJuIHIudmFsdWU9bixyLmRvbmU9ITEscn1yZXR1cm4gci5kb25lPSEwLHJ9fSx1LnZhbHVlcz1QLEMucHJvdG90eXBlPXtjb25zdHJ1Y3RvcjpDLHJlc2V0OmZ1bmN0aW9uKGUpe2lmKHRoaXMucHJldj0wLHRoaXMubmV4dD0wLHRoaXMuc2VudD10aGlzLl9zZW50PXZvaWQgMCx0aGlzLmRvbmU9ITEsdGhpcy5kZWxlZ2F0ZT1udWxsLHRoaXMubWV0aG9kPSJuZXh0Iix0aGlzLmFyZz12b2lkIDAsdGhpcy50cnlFbnRyaWVzLmZvckVhY2goQSksIWUpZm9yKHZhciB0IGluIHRoaXMpInQiPT09dC5jaGFyQXQoMCkmJmEuY2FsbCh0aGlzLHQpJiYhaXNOYU4oK3Quc2xpY2UoMSkpJiYodGhpc1t0XT12b2lkIDApfSxzdG9wOmZ1bmN0aW9uKCl7dGhpcy5kb25lPSEwO3ZhciBlPXRoaXMudHJ5RW50cmllc1swXS5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuIHRoaXMucnZhbH0sZGlzcGF0Y2hFeGNlcHRpb246ZnVuY3Rpb24oZSl7aWYodGhpcy5kb25lKXRocm93IGU7dmFyIHQ9dGhpcztmdW5jdGlvbiByKHIsbil7cmV0dXJuIG8udHlwZT0idGhyb3ciLG8uYXJnPWUsdC5uZXh0PXIsbiYmKHQubWV0aG9kPSJuZXh0Iix0LmFyZz12b2lkIDApLCEhbn1mb3IodmFyIG49dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO24+PTA7LS1uKXt2YXIgaT10aGlzLnRyeUVudHJpZXNbbl0sbz1pLmNvbXBsZXRpb247aWYoInJvb3QiPT09aS50cnlMb2MpcmV0dXJuIHIoImVuZCIpO2lmKGkudHJ5TG9jPD10aGlzLnByZXYpe3ZhciBzPWEuY2FsbChpLCJjYXRjaExvYyIpLGw9YS5jYWxsKGksImZpbmFsbHlMb2MiKTtpZihzJiZsKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gcihpLmNhdGNoTG9jLCEwKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiByKGkuZmluYWxseUxvYyl9ZWxzZSBpZihzKXtpZih0aGlzLnByZXY8aS5jYXRjaExvYylyZXR1cm4gcihpLmNhdGNoTG9jLCEwKX1lbHNle2lmKCFsKXRocm93IG5ldyBFcnJvcigidHJ5IHN0YXRlbWVudCB3aXRob3V0IGNhdGNoIG9yIGZpbmFsbHkiKTtpZih0aGlzLnByZXY8aS5maW5hbGx5TG9jKXJldHVybiByKGkuZmluYWxseUxvYyl9fX19LGFicnVwdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7cj49MDstLXIpe3ZhciBuPXRoaXMudHJ5RW50cmllc1tyXTtpZihuLnRyeUxvYzw9dGhpcy5wcmV2JiZhLmNhbGwobiwiZmluYWxseUxvYyIpJiZ0aGlzLnByZXY8bi5maW5hbGx5TG9jKXt2YXIgaT1uO2JyZWFrfX1pJiYoImJyZWFrIj09PWV8fCJjb250aW51ZSI9PT1lKSYmaS50cnlMb2M8PXQmJnQ8PWkuZmluYWxseUxvYyYmKGk9bnVsbCk7dmFyIG89aT9pLmNvbXBsZXRpb246e307cmV0dXJuIG8udHlwZT1lLG8uYXJnPXQsaT8odGhpcy5tZXRob2Q9Im5leHQiLHRoaXMubmV4dD1pLmZpbmFsbHlMb2MsZik6dGhpcy5jb21wbGV0ZShvKX0sY29tcGxldGU6ZnVuY3Rpb24oZSx0KXtpZigidGhyb3ciPT09ZS50eXBlKXRocm93IGUuYXJnO3JldHVybiJicmVhayI9PT1lLnR5cGV8fCJjb250aW51ZSI9PT1lLnR5cGU/dGhpcy5uZXh0PWUuYXJnOiJyZXR1cm4iPT09ZS50eXBlPyh0aGlzLnJ2YWw9dGhpcy5hcmc9ZS5hcmcsdGhpcy5tZXRob2Q9InJldHVybiIsdGhpcy5uZXh0PSJlbmQiKToibm9ybWFsIj09PWUudHlwZSYmdCYmKHRoaXMubmV4dD10KSxmfSxmaW5pc2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIuZmluYWxseUxvYz09PWUpcmV0dXJuIHRoaXMuY29tcGxldGUoci5jb21wbGV0aW9uLHIuYWZ0ZXJMb2MpLEEociksZn19LGNhdGNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7dD49MDstLXQpe3ZhciByPXRoaXMudHJ5RW50cmllc1t0XTtpZihyLnRyeUxvYz09PWUpe3ZhciBuPXIuY29tcGxldGlvbjtpZigidGhyb3ciPT09bi50eXBlKXt2YXIgYT1uLmFyZztBKHIpfXJldHVybiBhfX10aHJvdyBuZXcgRXJyb3IoImlsbGVnYWwgY2F0Y2ggYXR0ZW1wdCIpfSxkZWxlZ2F0ZVlpZWxkOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdGhpcy5kZWxlZ2F0ZT17aXRlcmF0b3I6UChlKSxyZXN1bHROYW1lOnQsbmV4dExvYzpyfSwibmV4dCI9PT10aGlzLm1ldGhvZCYmKHRoaXMuYXJnPXZvaWQgMCksZn19fWZ1bmN0aW9uIGcoZSx0LHIsbil7dmFyIGE9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiB5P3Q6eSxpPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLG89bmV3IEMobnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1fKG8scik7aWYocyl7aWYocz09PWYpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgbD12KGUsdCxyKTtpZigibm9ybWFsIj09PWwudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIixsLmFyZz09PWYpY29udGludWU7cmV0dXJue3ZhbHVlOmwuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09bC50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPWwuYXJnKX19fShlLHIsbyksaX1mdW5jdGlvbiB2KGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZnVuY3Rpb24geSgpe31mdW5jdGlvbiBiKCl7fWZ1bmN0aW9uIHcoKXt9ZnVuY3Rpb24gayhlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfX0pKX1mdW5jdGlvbiBTKGUpe3ZhciByO3RoaXMuX2ludm9rZT1mdW5jdGlvbihuLGkpe2Z1bmN0aW9uIG8oKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbyl7IWZ1bmN0aW9uIHIobixpLG8scyl7dmFyIGw9dihlW25dLGUsaSk7aWYoInRocm93IiE9PWwudHlwZSl7dmFyIGM9bC5hcmcsdT1jLnZhbHVlO3JldHVybiB1JiYib2JqZWN0Ij09PXQodSkmJmEuY2FsbCh1LCJfX2F3YWl0Iik/UHJvbWlzZS5yZXNvbHZlKHUuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7cigibmV4dCIsZSxvLHMpfSksKGZ1bmN0aW9uKGUpe3IoInRocm93IixlLG8scyl9KSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxvKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiByKCJ0aHJvdyIsZSxvLHMpfSkpfXMobC5hcmcpfShuLGkscixvKX0pKX1yZXR1cm4gcj1yP3IudGhlbihvLG8pOm8oKX19ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLF8oZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBmO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBmfXZhciBuPXYocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxmO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGYpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsZil9ZnVuY3Rpb24geChlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBBKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBDKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2goeCx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBQKGUpe2lmKGUpe3ZhciB0PWVbb107aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIHI9LTEsbj1mdW5jdGlvbiB0KCl7Zm9yKDsrK3I8ZS5sZW5ndGg7KWlmKGEuY2FsbChlLHIpKXJldHVybiB0LnZhbHVlPWVbcl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gbi5uZXh0PW59fXJldHVybntuZXh0OkV9fWZ1bmN0aW9uIEUoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fX0oZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmPyJ1bmRlZmluZWQiOnQoc2VsZikpJiZzZWxmfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpKX0pLmNhbGwodGhpcyxyKDE1MCkoZSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuYWRkTGlua0F0dHJpYnV0ZXM9ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LHI9dC51cmwsYT10LnRhcmdldCxpPXQucmVsO2lmKGUuaHJlZj1lLnRpdGxlPXI/KDAsbi5yZW1vdmVOdWxsQ2hhcmFjdGVycykocik6IiIscil7dmFyIG89T2JqZWN0LnZhbHVlcyhkKSxzPW8uaW5jbHVkZXMoYSk/YTpkLk5PTkU7ZS50YXJnZXQ9cFtzXSxlLnJlbD0ic3RyaW5nIj09dHlwZW9mIGk/aToibm9vcGVuZXIgbm9yZWZlcnJlciBub2ZvbGxvdyJ9fSx0LmdldEZpbGVuYW1lRnJvbVVybD1mdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4T2YoIiMiKSxyPWUuaW5kZXhPZigiPyIpLG49TWF0aC5taW4odD4wP3Q6ZS5sZW5ndGgscj4wP3I6ZS5sZW5ndGgpO3JldHVybiBlLnN1YnN0cmluZyhlLmxhc3RJbmRleE9mKCIvIixuKSsxLG4pfSx0LmxvYWRTY3JpcHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe3ZhciBuPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNjcmlwdCIpO24uc3JjPWUsbi5vbmxvYWQ9dCxuLm9uZXJyb3I9ZnVuY3Rpb24oKXtyKG5ldyBFcnJvcigiQ2Fubm90IGxvYWQgc2NyaXB0IGF0OiAiLmNvbmNhdChuLnNyYykpKX0sKGRvY3VtZW50LmhlYWR8fGRvY3VtZW50LmRvY3VtZW50RWxlbWVudCkuYXBwZW5kQ2hpbGQobil9KSl9LHQuRHVtbXlTdGF0VGltZXI9dC5TdGF0VGltZXI9dC5ET01TVkdGYWN0b3J5PXQuRE9NQ01hcFJlYWRlckZhY3Rvcnk9dC5ET01DYW52YXNGYWN0b3J5PXQuREVGQVVMVF9MSU5LX1JFTD10LkxpbmtUYXJnZXQ9dC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249dC5QYWdlVmlld3BvcnQ9dm9pZCAwO3ZhciBuPXIoMSk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBvKGUsdCxyKXtyZXR1cm4gdCYmaShlLnByb3RvdHlwZSx0KSxyJiZpKGUsciksZX10LkRFRkFVTFRfTElOS19SRUw9Im5vb3BlbmVyIG5vcmVmZXJyZXIgbm9mb2xsb3ciO3ZhciBzPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXthKHRoaXMsZSl9cmV0dXJuIG8oZSxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKGU8PTB8fHQ8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbnZhcyBzaXplIik7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiY2FudmFzIiksbj1yLmdldENvbnRleHQoIjJkIik7cmV0dXJuIHIud2lkdGg9ZSxyLmhlaWdodD10LHtjYW52YXM6cixjb250ZXh0Om59fX0se2tleToicmVzZXQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXtpZighZS5jYW52YXMpdGhyb3cgbmV3IEVycm9yKCJjYW52YXMgaXMgbm90IHNwZWNpZmllZCIpO2lmKHQ8PTB8fHI8PTApdGhyb3cgbmV3IEVycm9yKCJpbnZhbGlkIGNhbnZhcyBzaXplIik7ZS5jYW52YXMud2lkdGg9dCxlLmNhbnZhcy5oZWlnaHQ9cn19LHtrZXk6ImRlc3Ryb3kiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCFlLmNhbnZhcyl0aHJvdyBuZXcgRXJyb3IoImNhbnZhcyBpcyBub3Qgc3BlY2lmaWVkIik7ZS5jYW52YXMud2lkdGg9MCxlLmNhbnZhcy5oZWlnaHQ9MCxlLmNhbnZhcz1udWxsLGUuY29udGV4dD1udWxsfX1dKSxlfSgpO3QuRE9NQ2FudmFzRmFjdG9yeT1sO3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmJhc2VVcmwsbj12b2lkIDA9PT1yP251bGw6cixpPXQuaXNDb21wcmVzc2VkLG89dm9pZCAwIT09aSYmaTthKHRoaXMsZSksdGhpcy5iYXNlVXJsPW4sdGhpcy5pc0NvbXByZXNzZWQ9b31yZXR1cm4gbyhlLFt7a2V5OiJmZXRjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUubmFtZTtyZXR1cm4gdGhpcy5iYXNlVXJsP3I/bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsYSl7dmFyIGk9dC5iYXNlVXJsK3IrKHQuaXNDb21wcmVzc2VkPyIuYmNtYXAiOiIiKSxvPW5ldyBYTUxIdHRwUmVxdWVzdDtvLm9wZW4oIkdFVCIsaSwhMCksdC5pc0NvbXByZXNzZWQmJihvLnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiKSxvLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2lmKG8ucmVhZHlTdGF0ZT09PVhNTEh0dHBSZXF1ZXN0LkRPTkUpe3ZhciByO2lmKCgyMDA9PT1vLnN0YXR1c3x8MD09PW8uc3RhdHVzKSYmKHQuaXNDb21wcmVzc2VkJiZvLnJlc3BvbnNlP3I9bmV3IFVpbnQ4QXJyYXkoby5yZXNwb25zZSk6IXQuaXNDb21wcmVzc2VkJiZvLnJlc3BvbnNlVGV4dCYmKHI9KDAsbi5zdHJpbmdUb0J5dGVzKShvLnJlc3BvbnNlVGV4dCkpLHIpKXJldHVybiB2b2lkIGUoe2NNYXBEYXRhOnIsY29tcHJlc3Npb25UeXBlOnQuaXNDb21wcmVzc2VkP24uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlk6bi5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkV9KTthKG5ldyBFcnJvcigiVW5hYmxlIHRvIGxvYWQgIisodC5pc0NvbXByZXNzZWQ/ImJpbmFyeSAiOiIiKSsiQ01hcCBhdDogIitpKSl9fSxvLnNlbmQobnVsbCl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJDTWFwIG5hbWUgbXVzdCBiZSBzcGVjaWZpZWQuIikpOlByb21pc2UucmVqZWN0KG5ldyBFcnJvcignVGhlIENNYXAgImJhc2VVcmwiIHBhcmFtZXRlciBtdXN0IGJlIHNwZWNpZmllZCwgZW5zdXJlIHRoYXQgdGhlICJjTWFwVXJsIiBhbmQgImNNYXBQYWNrZWQiIEFQSSBwYXJhbWV0ZXJzIGFyZSBwcm92aWRlZC4nKSl9fV0pLGV9KCk7dC5ET01DTWFwUmVhZGVyRmFjdG9yeT1jO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2EodGhpcyxlKX1yZXR1cm4gbyhlLFt7a2V5OiJjcmVhdGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi5hc3NlcnQpKGU+MCYmdD4wLCJJbnZhbGlkIFNWRyBkaW1lbnNpb25zIik7dmFyIHI9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudE5TKHMsInN2ZzpzdmciKTtyZXR1cm4gci5zZXRBdHRyaWJ1dGUoInZlcnNpb24iLCIxLjEiKSxyLnNldEF0dHJpYnV0ZSgid2lkdGgiLGUrInB4Iiksci5zZXRBdHRyaWJ1dGUoImhlaWdodCIsdCsicHgiKSxyLnNldEF0dHJpYnV0ZSgicHJlc2VydmVBc3BlY3RSYXRpbyIsIm5vbmUiKSxyLnNldEF0dHJpYnV0ZSgidmlld0JveCIsIjAgMCAiK2UrIiAiK3QpLHJ9fSx7a2V5OiJjcmVhdGVFbGVtZW50Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4oMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiBlLCJJbnZhbGlkIFNWRyBlbGVtZW50IHR5cGUiKSxkb2N1bWVudC5jcmVhdGVFbGVtZW50TlMocyxlKX19XSksZX0oKTt0LkRPTVNWR0ZhY3Rvcnk9dTt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9dC52aWV3Qm94LG49dC5zY2FsZSxpPXQucm90YXRpb24sbz10Lm9mZnNldFgscz12b2lkIDA9PT1vPzA6byxsPXQub2Zmc2V0WSxjPXZvaWQgMD09PWw/MDpsLHU9dC5kb250RmxpcCxmPXZvaWQgMCE9PXUmJnU7YSh0aGlzLGUpLHRoaXMudmlld0JveD1yLHRoaXMuc2NhbGU9bix0aGlzLnJvdGF0aW9uPWksdGhpcy5vZmZzZXRYPXMsdGhpcy5vZmZzZXRZPWM7dmFyIGgsZCxwLG0sZyx2LHksYix3PShyWzJdK3JbMF0pLzIsaz0oclszXStyWzFdKS8yO3N3aXRjaChpPShpJT0zNjApPDA/aSszNjA6aSl7Y2FzZSAxODA6aD0tMSxkPTAscD0wLG09MTticmVhaztjYXNlIDkwOmg9MCxkPTEscD0xLG09MDticmVhaztjYXNlIDI3MDpoPTAsZD0tMSxwPS0xLG09MDticmVhaztkZWZhdWx0Omg9MSxkPTAscD0wLG09LTF9ZiYmKHA9LXAsbT0tbSksMD09PWg/KGc9TWF0aC5hYnMoay1yWzFdKSpuK3Msdj1NYXRoLmFicyh3LXJbMF0pKm4rYyx5PU1hdGguYWJzKHJbM10tclsxXSkqbixiPU1hdGguYWJzKHJbMl0tclswXSkqbik6KGc9TWF0aC5hYnMody1yWzBdKSpuK3Msdj1NYXRoLmFicyhrLXJbMV0pKm4rYyx5PU1hdGguYWJzKHJbMl0tclswXSkqbixiPU1hdGguYWJzKHJbM10tclsxXSkqbiksdGhpcy50cmFuc2Zvcm09W2gqbixkKm4scCpuLG0qbixnLWgqbip3LXAqbiprLHYtZCpuKnctbSpuKmtdLHRoaXMud2lkdGg9eSx0aGlzLmhlaWdodD1ifXJldHVybiBvKGUsW3trZXk6ImNsb25lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuc2NhbGUsbj12b2lkIDA9PT1yP3RoaXMuc2NhbGU6cixhPXQucm90YXRpb24saT12b2lkIDA9PT1hP3RoaXMucm90YXRpb246YSxvPXQuZG9udEZsaXAscz12b2lkIDAhPT1vJiZvO3JldHVybiBuZXcgZSh7dmlld0JveDp0aGlzLnZpZXdCb3guc2xpY2UoKSxzY2FsZTpuLHJvdGF0aW9uOmksb2Zmc2V0WDp0aGlzLm9mZnNldFgsb2Zmc2V0WTp0aGlzLm9mZnNldFksZG9udEZsaXA6c30pfX0se2tleToiY29udmVydFRvVmlld3BvcnRQb2ludCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlLHRdLHRoaXMudHJhbnNmb3JtKX19LHtrZXk6ImNvbnZlcnRUb1ZpZXdwb3J0UmVjdGFuZ2xlIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW2VbMF0sZVsxXV0sdGhpcy50cmFuc2Zvcm0pLHI9bi5VdGlsLmFwcGx5VHJhbnNmb3JtKFtlWzJdLGVbM11dLHRoaXMudHJhbnNmb3JtKTtyZXR1cm5bdFswXSx0WzFdLHJbMF0sclsxXV19fSx7a2V5OiJjb252ZXJ0VG9QZGZQb2ludCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5VdGlsLmFwcGx5SW52ZXJzZVRyYW5zZm9ybShbZSx0XSx0aGlzLnRyYW5zZm9ybSl9fV0pLGV9KCk7dC5QYWdlVmlld3BvcnQ9Zjt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm1lc3NhZ2U9ZSx0aGlzLnR5cGU9dH1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlJlbmRlcmluZ0NhbmNlbGxlZEV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5SZW5kZXJpbmdDYW5jZWxsZWRFeGNlcHRpb249aDt2YXIgZD17Tk9ORTowLFNFTEY6MSxCTEFOSzoyLFBBUkVOVDozLFRPUDo0fTt0LkxpbmtUYXJnZXQ9ZDt2YXIgcD1bIiIsIl9zZWxmIiwiX2JsYW5rIiwiX3BhcmVudCIsIl90b3AiXSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07YSh0aGlzLGUpLHRoaXMuZW5hYmxlZD0hIXQsdGhpcy5zdGFydGVkPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy50aW1lcz1bXX1yZXR1cm4gbyhlLFt7a2V5OiJ0aW1lIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmVuYWJsZWQmJihlIGluIHRoaXMuc3RhcnRlZCYmKDAsbi53YXJuKSgiVGltZXIgaXMgYWxyZWFkeSBydW5uaW5nIGZvciAiK2UpLHRoaXMuc3RhcnRlZFtlXT1EYXRlLm5vdygpKX19LHtrZXk6InRpbWVFbmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuZW5hYmxlZCYmKGUgaW4gdGhpcy5zdGFydGVkfHwoMCxuLndhcm4pKCJUaW1lciBoYXMgbm90IGJlZW4gc3RhcnRlZCBmb3IgIitlKSx0aGlzLnRpbWVzLnB1c2goe25hbWU6ZSxzdGFydDp0aGlzLnN0YXJ0ZWRbZV0sZW5kOkRhdGUubm93KCl9KSxkZWxldGUgdGhpcy5zdGFydGVkW2VdKX19LHtrZXk6InRvU3RyaW5nIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnRpbWVzLHQ9IiIscj0wLG49MCxhPWUubGVuZ3RoO248YTsrK24pe3ZhciBpPWVbbl0ubmFtZTtpLmxlbmd0aD5yJiYocj1pLmxlbmd0aCl9Zm9yKHZhciBvPTAscz1lLmxlbmd0aDtvPHM7KytvKXt2YXIgbD1lW29dLGM9bC5lbmQtbC5zdGFydDt0Kz0iIi5jb25jYXQobC5uYW1lLnBhZEVuZChyKSwiICIpLmNvbmNhdChjLCJtc1xuIil9cmV0dXJuIHR9fV0pLGV9KCk7dC5TdGF0VGltZXI9bTt2YXIgZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXthKHRoaXMsZSksKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIER1bW15U3RhdFRpbWVyLiIpfXJldHVybiBvKGUsbnVsbCxbe2tleToidGltZSIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToidGltZUVuZCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToidG9TdHJpbmciLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIiJ9fV0pLGV9KCk7dC5EdW1teVN0YXRUaW1lcj1nfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkZvbnRMb2FkZXI9dC5Gb250RmFjZU9iamVjdD12b2lkIDA7dmFyIG4sYT0obj1yKDE0NykpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoMSk7ZnVuY3Rpb24gbyhlKXtyZXR1cm4obz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1vKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbChlKXtyZXR1cm4obD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiB1KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksZX12YXIgcCxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10LmRvY0lkLG49dC5vblVuc3VwcG9ydGVkRmVhdHVyZTtmKHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlRm9udExvYWRlci4iKSx0aGlzLmRvY0lkPXIsdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9bix0aGlzLm5hdGl2ZUZvbnRGYWNlcz1bXSx0aGlzLnN0eWxlRWxlbWVudD1udWxsfXZhciB0LHI7cmV0dXJuIGQoZSxbe2tleToiYWRkTmF0aXZlRm9udEZhY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubmF0aXZlRm9udEZhY2VzLnB1c2goZSksZG9jdW1lbnQuZm9udHMuYWRkKGUpfX0se2tleToiaW5zZXJ0UnVsZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHlsZUVsZW1lbnQ7dHx8KCh0PXRoaXMuc3R5bGVFbGVtZW50PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInN0eWxlIikpLmlkPSJQREZKU19GT05UX1NUWUxFX1RBR18iLmNvbmNhdCh0aGlzLmRvY0lkKSxkb2N1bWVudC5kb2N1bWVudEVsZW1lbnQuZ2V0RWxlbWVudHNCeVRhZ05hbWUoImhlYWQiKVswXS5hcHBlbmRDaGlsZCh0KSk7dmFyIHI9dC5zaGVldDtyLmluc2VydFJ1bGUoZSxyLmNzc1J1bGVzLmxlbmd0aCl9fSx7a2V5OiJjbGVhciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLm5hdGl2ZUZvbnRGYWNlcy5mb3JFYWNoKChmdW5jdGlvbihlKXtkb2N1bWVudC5mb250cy5kZWxldGUoZSl9KSksdGhpcy5uYXRpdmVGb250RmFjZXMubGVuZ3RoPTAsdGhpcy5zdHlsZUVsZW1lbnQmJih0aGlzLnN0eWxlRWxlbWVudC5yZW1vdmUoKSx0aGlzLnN0eWxlRWxlbWVudD1udWxsKX19LHtrZXk6ImJpbmQiLHZhbHVlOih0PWEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQpe3ZhciByLG4sbz10aGlzO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoIXQuYXR0YWNoZWQmJiF0Lm1pc3NpbmdGaWxlKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMjppZih0LmF0dGFjaGVkPSEwLCF0aGlzLmlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQpe2UubmV4dD0xOTticmVha31pZighKHI9dC5jcmVhdGVOYXRpdmVGb250RmFjZSgpKSl7ZS5uZXh0PTE4O2JyZWFrfXJldHVybiB0aGlzLmFkZE5hdGl2ZUZvbnRGYWNlKHIpLGUucHJldj03LGUubmV4dD0xMCxyLmxvYWRlZDtjYXNlIDEwOmUubmV4dD0xODticmVhaztjYXNlIDEyOnRocm93IGUucHJldj0xMixlLnQwPWUuY2F0Y2goNyksdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUoe2ZlYXR1cmVJZDppLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmZvbnR9KSwoMCxpLndhcm4pKCJGYWlsZWQgdG8gbG9hZCBmb250ICciLmNvbmNhdChyLmZhbWlseSwiJzogJyIpLmNvbmNhdChlLnQwLCInLiIpKSx0LmRpc2FibGVGb250RmFjZT0hMCxlLnQwO2Nhc2UgMTg6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDE5OmlmKCEobj10LmNyZWF0ZUZvbnRGYWNlUnVsZSgpKSl7ZS5uZXh0PTI1O2JyZWFrfWlmKHRoaXMuaW5zZXJ0UnVsZShuKSwhdGhpcy5pc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZCl7ZS5uZXh0PTI0O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAyNDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbmV3IFByb21pc2UoKGZ1bmN0aW9uKGUpe3ZhciByPW8uX3F1ZXVlTG9hZGluZ0NhbGxiYWNrKGUpO28uX3ByZXBhcmVGb250TG9hZEV2ZW50KFtuXSxbdF0scil9KSkpO2Nhc2UgMjU6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1s3LDEyXV0pfSkpLHI9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT10LmFwcGx5KGUscik7ZnVuY3Rpb24gbyhlKXt1KGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXt1KGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX0sZnVuY3Rpb24oZSl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6Il9xdWV1ZUxvYWRpbmdDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgX3F1ZXVlTG9hZGluZ0NhbGxiYWNrYC4iKX19LHtrZXk6Il9wcmVwYXJlRm9udExvYWRFdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYF9wcmVwYXJlRm9udExvYWRFdmVudGAuIil9fSx7a2V5OiJpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBpc0ZvbnRMb2FkaW5nQVBJU3VwcG9ydGVkYC4iKX19LHtrZXk6ImlzU3luY0ZvbnRMb2FkaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBpc1N5bmNGb250TG9hZGluZ1N1cHBvcnRlZGAuIil9fSx7a2V5OiJfbG9hZFRlc3RGb250IixnZXQ6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBfbG9hZFRlc3RGb250YC4iKX19XSksZX0oKTt0LkZvbnRMb2FkZXI9cCx0LkZvbnRMb2FkZXI9cD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBmKHRoaXMsdCksKHI9cyh0aGlzLGwodCkuY2FsbCh0aGlzLGUpKSkubG9hZGluZ0NvbnRleHQ9e3JlcXVlc3RzOltdLG5leHRSZXF1ZXN0SWQ6MH0sci5sb2FkVGVzdEZvbnRJZD0wLHJ9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmMoZSx0KX0odCxlKSxkKHQsW3trZXk6Il9xdWV1ZUxvYWRpbmdDYWxsYmFjayIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5sb2FkaW5nQ29udGV4dCxyPXtpZDoicGRmanMtZm9udC1sb2FkaW5nLSIuY29uY2F0KHQubmV4dFJlcXVlc3RJZCsrKSxkb25lOiExLGNvbXBsZXRlOmZ1bmN0aW9uKCl7Zm9yKCgwLGkuYXNzZXJ0KSghci5kb25lLCJjb21wbGV0ZVJlcXVlc3QoKSBjYW5ub3QgYmUgY2FsbGVkIHR3aWNlLiIpLHIuZG9uZT0hMDt0LnJlcXVlc3RzLmxlbmd0aD4wJiZ0LnJlcXVlc3RzWzBdLmRvbmU7KXt2YXIgZT10LnJlcXVlc3RzLnNoaWZ0KCk7c2V0VGltZW91dChlLmNhbGxiYWNrLDApfX0sY2FsbGJhY2s6ZX07cmV0dXJuIHQucmVxdWVzdHMucHVzaChyKSxyfX0se2tleToiX3ByZXBhcmVGb250TG9hZEV2ZW50Iix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBlLmNoYXJDb2RlQXQodCk8PDI0fGUuY2hhckNvZGVBdCh0KzEpPDwxNnxlLmNoYXJDb2RlQXQodCsyKTw8OHwyNTUmZS5jaGFyQ29kZUF0KHQrMyl9ZnVuY3Rpb24gYShlLHQscixuKXtyZXR1cm4gZS5zdWJzdHJpbmcoMCx0KStuK2Uuc3Vic3RyaW5nKHQrcil9dmFyIG8scyxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpO2wud2lkdGg9MSxsLmhlaWdodD0xO3ZhciBjPWwuZ2V0Q29udGV4dCgiMmQiKSx1PTAsZj0ibHQiLmNvbmNhdChEYXRlLm5vdygpKS5jb25jYXQodGhpcy5sb2FkVGVzdEZvbnRJZCsrKSxoPXRoaXMuX2xvYWRUZXN0Rm9udCxkPW4oaD1hKGgsOTc2LGYubGVuZ3RoLGYpLDE2KTtmb3Iobz0wLHM9Zi5sZW5ndGgtMztvPHM7bys9NClkPWQtMTQ4MjE4NDc5MituKGYsbyl8MDtvPGYubGVuZ3RoJiYoZD1kLTE0ODIxODQ3OTIrbihmKyJYWFgiLG8pfDApLGg9YShoLDE2LDQsKDAsaS5zdHJpbmczMikoZCkpO3ZhciBwPSJ1cmwoZGF0YTpmb250L29wZW50eXBlO2Jhc2U2NCwiLmNvbmNhdChidG9hKGgpLCIpOyIpLG09J0Bmb250LWZhY2Uge2ZvbnQtZmFtaWx5OiInLmNvbmNhdChmLCciO3NyYzonKS5jb25jYXQocCwifSIpO3RoaXMuaW5zZXJ0UnVsZShtKTt2YXIgZz1bXTtmb3Iobz0wLHM9dC5sZW5ndGg7bzxzO28rKylnLnB1c2godFtvXS5sb2FkZWROYW1lKTtnLnB1c2goZik7dmFyIHY9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2Iik7Zm9yKHYuc2V0QXR0cmlidXRlKCJzdHlsZSIsInZpc2liaWxpdHk6IGhpZGRlbjt3aWR0aDogMTBweDsgaGVpZ2h0OiAxMHB4O3Bvc2l0aW9uOiBhYnNvbHV0ZTsgdG9wOiAwcHg7IGxlZnQ6IDBweDsiKSxvPTAscz1nLmxlbmd0aDtvPHM7KytvKXt2YXIgeT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzcGFuIik7eS50ZXh0Q29udGVudD0iSGkiLHkuc3R5bGUuZm9udEZhbWlseT1nW29dLHYuYXBwZW5kQ2hpbGQoeSl9ZG9jdW1lbnQuYm9keS5hcHBlbmRDaGlsZCh2KSxmdW5jdGlvbiBlKHQscil7aWYoKyt1PjMwKXJldHVybigwLGkud2FybikoIkxvYWQgdGVzdCBmb250IG5ldmVyIGxvYWRlZC4iKSx2b2lkIHIoKTtjLmZvbnQ9IjMwcHggIit0LGMuZmlsbFRleHQoIi4iLDAsMjApLGMuZ2V0SW1hZ2VEYXRhKDAsMCwxLDEpLmRhdGFbM10+MD9yKCk6c2V0VGltZW91dChlLmJpbmQobnVsbCx0LHIpKX0oZiwoZnVuY3Rpb24oKXtkb2N1bWVudC5ib2R5LnJlbW92ZUNoaWxkKHYpLHIuY29tcGxldGUoKX0pKX19LHtrZXk6ImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciBlPSJ1bmRlZmluZWQiIT10eXBlb2YgZG9jdW1lbnQmJiEhZG9jdW1lbnQuZm9udHM7aWYoZSYmInVuZGVmaW5lZCIhPXR5cGVvZiBuYXZpZ2F0b3Ipe3ZhciB0PS9Nb3ppbGxhXC81LjAuKj9ydjooXGQrKS4qPyBHZWNrby8uZXhlYyhuYXZpZ2F0b3IudXNlckFnZW50KTt0JiZ0WzFdPDYzJiYoZT0hMSl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImlzRm9udExvYWRpbmdBUElTdXBwb3J0ZWQiLGUpfX0se2tleToiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3ZhciBlPSExO2lmKCJ1bmRlZmluZWQiPT10eXBlb2YgbmF2aWdhdG9yKWU9ITA7ZWxzZXt2YXIgdD0vTW96aWxsYVwvNS4wLio/cnY6KFxkKykuKj8gR2Vja28vLmV4ZWMobmF2aWdhdG9yLnVzZXJBZ2VudCk7dCYmdFsxXT49MTQmJihlPSEwKX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiaXNTeW5jRm9udExvYWRpbmdTdXBwb3J0ZWQiLGUpfX0se2tleToiX2xvYWRUZXN0Rm9udCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIl9sb2FkVGVzdEZvbnQiLGF0b2IoIlQxUlVUd0FMQUlBQUF3QXdRMFpHSURIdFpnNEFBQU9ZQUFBQWdVWkdWRTFsa3pad0FBQUVIQUFBQUJ4SFJFVkdBQlFBRlFBQUJEZ0FBQUFlVDFNdk1sWU5Zd2tBQUFFZ0FBQUFZR050WVhBQkRRTFVBQUFDTkFBQUFVSm9aV0ZrL3hWRkRRQUFBTHdBQUFBMmFHaGxZUWRrQStvQUFBRDBBQUFBSkdodGRIZ0Q2QUFBQUFBRVdBQUFBQVp0WVhod0FBSlFBQUFBQVJnQUFBQUdibUZ0WlZqbWRINEFBQUdBQUFBQXNYQnZjM1QvaGdBekFBQURlQUFBQUNBQUFRQUFBQUVBQUxaUkZzUmZEenoxQUFzRDZBQUFBQURPQk9UTEFBQUFBTTRLSER3QUFBQUFBK2dESVFBQUFBZ0FBZ0FBQUFBQUFBQUJBQUFESVFBQUFGb0Q2QUFBQUFBRDZBQUJBQUFBQUFBQUFBQUFBQUFBQUFBQUFRQUFVQUFBQWdBQUFBUUQ2QUgwQUFVQUFBS0tBcndBQUFDTUFvb0N2QUFBQWVBQU1RRUNBQUFDQUFZSkFBQUFBQUFBQUFBQUFRQUFBQUFBQUFBQUFBQUFBRkJtUldRQXdBQXVBQzRESVA4NEFGb0RJUUFBQUFBQUFRQUFBQUFBQUFBQUFDQUFJQUFCQUFBQURnQ3VBQUVBQUFBQUFBQUFBUUFBQUFFQUFBQUFBQUVBQVFBQUFBRUFBQUFBQUFJQUFRQUFBQUVBQUFBQUFBTUFBUUFBQUFFQUFBQUFBQVFBQVFBQUFBRUFBQUFBQUFVQUFRQUFBQUVBQUFBQUFBWUFBUUFBQUFNQUFRUUpBQUFBQWdBQkFBTUFBUVFKQUFFQUFnQUJBQU1BQVFRSkFBSUFBZ0FCQUFNQUFRUUpBQU1BQWdBQkFBTUFBUVFKQUFRQUFnQUJBQU1BQVFRSkFBVUFBZ0FCQUFNQUFRUUpBQVlBQWdBQldBQllBQUFBQUFBQUF3QUFBQU1BQUFBY0FBRUFBQUFBQUR3QUF3QUJBQUFBSEFBRUFDQUFBQUFFQUFRQUFRQUFBQzcvL3dBQUFDNy8vLy9UQUFFQUFBQUFBQUFCQmdBQUFRQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBRUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFBQUFNQUFBQUFBQUQvZ3dBeUFBQUFBUUFBQUFBQUFBQUFBQUFBQUFBQUFBQUJBQVFFQUFFQkFRSllBQUVCQVNINER3RDRHd0hFQXZnY0EvZ1hCSXdNQVl1TCtuejV0UVhrRDVqM0NCTG5FUUFDQVFFQklWaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZV0ZoWVdGaFlXRmhZQUFBQkFRQUFEd0FDQVFFRUUvdDNEb3Y2ZkFINmZBVCtmUHA4K253SERvc01Ddm0xQ3ZtMURBejZmQlFBQUFBQUFBQUJBQUFBQU1tSmJ6RUFBQUFBemdUakZRQUFBQURPQk9RcEFBRUFBQUFBQUFBQURBQVVBQVFBQUFBQkFBQUFBZ0FCQUFBQUFBQUFBQUFENkFBQUFBQUFBQT09IikpfX1dKSx0fShtKTt2YXIgZz17Z2V0IHZhbHVlKCl7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsInZhbHVlIiwoMCxpLmlzRXZhbFN1cHBvcnRlZCkoKSl9fSx2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBuPXIuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bixpPXIuZGlzYWJsZUZvbnRGYWNlLG89dm9pZCAwIT09aSYmaSxzPXIuaWdub3JlRXJyb3JzLGw9dm9pZCAwIT09cyYmcyxjPXIub25VbnN1cHBvcnRlZEZlYXR1cmUsdT12b2lkIDA9PT1jP251bGw6YyxoPXIuZm9udFJlZ2lzdHJ5LGQ9dm9pZCAwPT09aD9udWxsOmg7Zm9yKHZhciBwIGluIGYodGhpcyxlKSx0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCksdCl0aGlzW3BdPXRbcF07dGhpcy5pc0V2YWxTdXBwb3J0ZWQ9ITEhPT1hLHRoaXMuZGlzYWJsZUZvbnRGYWNlPSEwPT09byx0aGlzLmlnbm9yZUVycm9ycz0hMD09PWwsdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmU9dSx0aGlzLmZvbnRSZWdpc3RyeT1kfXJldHVybiBkKGUsW3trZXk6ImNyZWF0ZU5hdGl2ZUZvbnRGYWNlIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmRhdGF8fHRoaXMuZGlzYWJsZUZvbnRGYWNlKXJldHVybiBudWxsO3ZhciBlPW5ldyBGb250RmFjZSh0aGlzLmxvYWRlZE5hbWUsdGhpcy5kYXRhLHt9KTtyZXR1cm4gdGhpcy5mb250UmVnaXN0cnkmJnRoaXMuZm9udFJlZ2lzdHJ5LnJlZ2lzdGVyRm9udCh0aGlzKSxlfX0se2tleToiY3JlYXRlRm9udEZhY2VSdWxlIix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLmRhdGF8fHRoaXMuZGlzYWJsZUZvbnRGYWNlKXJldHVybiBudWxsO3ZhciBlPSgwLGkuYnl0ZXNUb1N0cmluZykobmV3IFVpbnQ4QXJyYXkodGhpcy5kYXRhKSksdD0idXJsKGRhdGE6Ii5jb25jYXQodGhpcy5taW1ldHlwZSwiO2Jhc2U2NCwiKS5jb25jYXQoYnRvYShlKSwiKTsiKSxyPSdAZm9udC1mYWNlIHtmb250LWZhbWlseToiJy5jb25jYXQodGhpcy5sb2FkZWROYW1lLCciO3NyYzonKS5jb25jYXQodCwifSIpO3JldHVybiB0aGlzLmZvbnRSZWdpc3RyeSYmdGhpcy5mb250UmVnaXN0cnkucmVnaXN0ZXJGb250KHRoaXMsdCkscn19LHtrZXk6ImdldFBhdGhHZW5lcmF0b3IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYodm9pZCAwIT09dGhpcy5jb21waWxlZEdseXBoc1t0XSlyZXR1cm4gdGhpcy5jb21waWxlZEdseXBoc1t0XTt2YXIgcixuO3RyeXtyPWUuZ2V0KHRoaXMubG9hZGVkTmFtZSsiX3BhdGhfIit0KX1jYXRjaChlKXtpZighdGhpcy5pZ25vcmVFcnJvcnMpdGhyb3cgZTtyZXR1cm4gdGhpcy5fb25VbnN1cHBvcnRlZEZlYXR1cmUmJnRoaXMuX29uVW5zdXBwb3J0ZWRGZWF0dXJlKHtmZWF0dXJlSWQ6aS5VTlNVUFBPUlRFRF9GRUFUVVJFUy5mb250fSksKDAsaS53YXJuKSgnZ2V0UGF0aEdlbmVyYXRvciAtIGlnbm9yaW5nIGNoYXJhY3RlcjogIicuY29uY2F0KGUsJyIuJykpLHRoaXMuY29tcGlsZWRHbHlwaHNbdF09ZnVuY3Rpb24oZSx0KXt9fWlmKHRoaXMuaXNFdmFsU3VwcG9ydGVkJiZnLnZhbHVlKXtmb3IodmFyIGEsbz0iIixzPTAsbD1yLmxlbmd0aDtzPGw7cysrKWE9dm9pZCAwIT09KG49cltzXSkuYXJncz9uLmFyZ3Muam9pbigiLCIpOiIiLG8rPSJjLiIrbi5jbWQrIigiK2ErIik7XG4iO3JldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW3RdPW5ldyBGdW5jdGlvbigiYyIsInNpemUiLG8pfXJldHVybiB0aGlzLmNvbXBpbGVkR2x5cGhzW3RdPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBhPTAsaT1yLmxlbmd0aDthPGk7YSsrKSJzY2FsZSI9PT0obj1yW2FdKS5jbWQmJihuLmFyZ3M9W3QsLXRdKSxlW24uY21kXS5hcHBseShlLG4uYXJncyl9fX1dKSxlfSgpO3QuRm9udEZhY2VPYmplY3Q9dn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpLGE9cig0KSxpPSJ1bmRlZmluZWQiIT10eXBlb2YgbmF2aWdhdG9yJiZuYXZpZ2F0b3IudXNlckFnZW50fHwiIixvPS9UcmlkZW50Ly50ZXN0KGkpLHM9L0NyaU9TLy50ZXN0KGkpOyhvfHxzKSYmKG4uZGlzYWJsZUNyZWF0ZU9iamVjdFVSTD0hMCksYSgpJiYobi5kaXNhYmxlRm9udEZhY2U9ITAsbi5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0PSJub25lIiksdC5hcGlDb21wYXRpYmlsaXR5UGFyYW1zPU9iamVjdC5mcmVlemUobil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ2FudmFzR3JhcGhpY3M9dm9pZCAwO3ZhciBuPXIoMSksYT1yKDE1NSksaT17Z2V0IHZhbHVlKCl7cmV0dXJuKDAsbi5zaGFkb3cpKGksInZhbHVlIiwoMCxuLmlzTGl0dGxlRW5kaWFuKSgpKX19O2Z1bmN0aW9uIG8oZSl7ZS5tb3pDdXJyZW50VHJhbnNmb3JtfHwoZS5fb3JpZ2luYWxTYXZlPWUuc2F2ZSxlLl9vcmlnaW5hbFJlc3RvcmU9ZS5yZXN0b3JlLGUuX29yaWdpbmFsUm90YXRlPWUucm90YXRlLGUuX29yaWdpbmFsU2NhbGU9ZS5zY2FsZSxlLl9vcmlnaW5hbFRyYW5zbGF0ZT1lLnRyYW5zbGF0ZSxlLl9vcmlnaW5hbFRyYW5zZm9ybT1lLnRyYW5zZm9ybSxlLl9vcmlnaW5hbFNldFRyYW5zZm9ybT1lLnNldFRyYW5zZm9ybSxlLl90cmFuc2Zvcm1NYXRyaXg9ZS5fdHJhbnNmb3JtTWF0cml4fHxbMSwwLDAsMSwwLDBdLGUuX3RyYW5zZm9ybVN0YWNrPVtdLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJtb3pDdXJyZW50VHJhbnNmb3JtIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3RyYW5zZm9ybU1hdHJpeH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwibW96Q3VycmVudFRyYW5zZm9ybUludmVyc2UiLHtnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1NYXRyaXgsdD1lWzBdLHI9ZVsxXSxuPWVbMl0sYT1lWzNdLGk9ZVs0XSxvPWVbNV0scz10KmEtcipuLGw9cipuLXQqYTtyZXR1cm5bYS9zLHIvbCxuL2wsdC9zLChhKmktbipvKS9sLChyKmktdCpvKS9zXX19KSxlLnNhdmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1NYXRyaXg7dGhpcy5fdHJhbnNmb3JtU3RhY2sucHVzaChlKSx0aGlzLl90cmFuc2Zvcm1NYXRyaXg9ZS5zbGljZSgwLDYpLHRoaXMuX29yaWdpbmFsU2F2ZSgpfSxlLnJlc3RvcmU9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdGFjay5wb3AoKTtlJiYodGhpcy5fdHJhbnNmb3JtTWF0cml4PWUsdGhpcy5fb3JpZ2luYWxSZXN0b3JlKCkpfSxlLnRyYW5zbGF0ZT1mdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuX3RyYW5zZm9ybU1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XSx0aGlzLl9vcmlnaW5hbFRyYW5zbGF0ZShlLHQpfSxlLnNjYWxlPWZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fdHJhbnNmb3JtTWF0cml4O3JbMF09clswXSplLHJbMV09clsxXSplLHJbMl09clsyXSp0LHJbM109clszXSp0LHRoaXMuX29yaWdpbmFsU2NhbGUoZSx0KX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24odCxyLG4sYSxpLG8pe3ZhciBzPXRoaXMuX3RyYW5zZm9ybU1hdHJpeDt0aGlzLl90cmFuc2Zvcm1NYXRyaXg9W3NbMF0qdCtzWzJdKnIsc1sxXSp0K3NbM10qcixzWzBdKm4rc1syXSphLHNbMV0qbitzWzNdKmEsc1swXSppK3NbMl0qbytzWzRdLHNbMV0qaStzWzNdKm8rc1s1XV0sZS5fb3JpZ2luYWxUcmFuc2Zvcm0odCxyLG4sYSxpLG8pfSxlLnNldFRyYW5zZm9ybT1mdW5jdGlvbih0LHIsbixhLGksbyl7dGhpcy5fdHJhbnNmb3JtTWF0cml4PVt0LHIsbixhLGksb10sZS5fb3JpZ2luYWxTZXRUcmFuc2Zvcm0odCxyLG4sYSxpLG8pfSxlLnJvdGF0ZT1mdW5jdGlvbihlKXt2YXIgdD1NYXRoLmNvcyhlKSxyPU1hdGguc2luKGUpLG49dGhpcy5fdHJhbnNmb3JtTWF0cml4O3RoaXMuX3RyYW5zZm9ybU1hdHJpeD1bblswXSp0K25bMl0qcixuWzFdKnQrblszXSpyLG5bMF0qLXIrblsyXSp0LG5bMV0qLXIrblszXSp0LG5bNF0sbls1XV0sdGhpcy5fb3JpZ2luYWxSb3RhdGUoZSl9KX12YXIgcz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5jYW52YXNGYWN0b3J5PWUsdGhpcy5jYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpfXJldHVybiBlLnByb3RvdHlwZT17Z2V0Q2FudmFzOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhO3JldHVybiB2b2lkIDAhPT10aGlzLmNhY2hlW2VdPyhhPXRoaXMuY2FjaGVbZV0sdGhpcy5jYW52YXNGYWN0b3J5LnJlc2V0KGEsdCxyKSxhLmNvbnRleHQuc2V0VHJhbnNmb3JtKDEsMCwwLDEsMCwwKSk6KGE9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSh0LHIpLHRoaXMuY2FjaGVbZV09YSksbiYmbyhhLmNvbnRleHQpLGF9LGNsZWFyOmZ1bmN0aW9uKCl7Zm9yKHZhciBlIGluIHRoaXMuY2FjaGUpe3ZhciB0PXRoaXMuY2FjaGVbZV07dGhpcy5jYW52YXNGYWN0b3J5LmRlc3Ryb3kodCksZGVsZXRlIHRoaXMuY2FjaGVbZV19fX0sZX0oKSxsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuYWxwaGFJc1NoYXBlPSExLHRoaXMuZm9udFNpemU9MCx0aGlzLmZvbnRTaXplU2NhbGU9MSx0aGlzLnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy50ZXh0TWF0cml4U2NhbGU9MSx0aGlzLmZvbnRNYXRyaXg9bi5GT05UX0lERU5USVRZX01BVFJJWCx0aGlzLmxlYWRpbmc9MCx0aGlzLng9MCx0aGlzLnk9MCx0aGlzLmxpbmVYPTAsdGhpcy5saW5lWT0wLHRoaXMuY2hhclNwYWNpbmc9MCx0aGlzLndvcmRTcGFjaW5nPTAsdGhpcy50ZXh0SFNjYWxlPTEsdGhpcy50ZXh0UmVuZGVyaW5nTW9kZT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwsdGhpcy50ZXh0UmlzZT0wLHRoaXMuZmlsbENvbG9yPSIjMDAwMDAwIix0aGlzLnN0cm9rZUNvbG9yPSIjMDAwMDAwIix0aGlzLnBhdHRlcm5GaWxsPSExLHRoaXMuZmlsbEFscGhhPTEsdGhpcy5zdHJva2VBbHBoYT0xLHRoaXMubGluZVdpZHRoPTEsdGhpcy5hY3RpdmVTTWFzaz1udWxsLHRoaXMucmVzdW1lU01hc2tDdHg9bnVsbH1yZXR1cm4gZS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9LHNldEN1cnJlbnRQb2ludDpmdW5jdGlvbihlLHQpe3RoaXMueD1lLHRoaXMueT10fX0sZX0oKSxjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEsaSl7dGhpcy5jdHg9ZSx0aGlzLmN1cnJlbnQ9bmV3IGwsdGhpcy5zdGF0ZVN0YWNrPVtdLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEsdGhpcy5yZXM9bnVsbCx0aGlzLnhvYmpzPW51bGwsdGhpcy5jb21tb25PYmpzPXQsdGhpcy5vYmpzPXIsdGhpcy5jYW52YXNGYWN0b3J5PW4sdGhpcy53ZWJHTENvbnRleHQ9YSx0aGlzLmltYWdlTGF5ZXI9aSx0aGlzLmdyb3VwU3RhY2s9W10sdGhpcy5wcm9jZXNzaW5nVHlwZTM9bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm09bnVsbCx0aGlzLmJhc2VUcmFuc2Zvcm1TdGFjaz1bXSx0aGlzLmdyb3VwTGV2ZWw9MCx0aGlzLnNtYXNrU3RhY2s9W10sdGhpcy5zbWFza0NvdW50ZXI9MCx0aGlzLnRlbXBTTWFzaz1udWxsLHRoaXMuY2FjaGVkQ2FudmFzZXM9bmV3IHModGhpcy5jYW52YXNGYWN0b3J5KSxlJiZvKGUpLHRoaXMuX2NhY2hlZEdldFNpbmdsZVBpeGVsV2lkdGg9bnVsbH1mdW5jdGlvbiB0KGUsdCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBJbWFnZURhdGEmJnQgaW5zdGFuY2VvZiBJbWFnZURhdGEpZS5wdXRJbWFnZURhdGEodCwwLDApO2Vsc2V7dmFyIHIsYSxvLHMsbCxjPXQuaGVpZ2h0LHU9dC53aWR0aCxmPWMlMTYsaD0oYy1mKS8xNixkPTA9PT1mP2g6aCsxLHA9ZS5jcmVhdGVJbWFnZURhdGEodSwxNiksbT0wLGc9dC5kYXRhLHY9cC5kYXRhO2lmKHQua2luZD09PW4uSW1hZ2VLaW5kLkdSQVlTQ0FMRV8xQlBQKXt2YXIgeT1nLmJ5dGVMZW5ndGgsYj1uZXcgVWludDMyQXJyYXkodi5idWZmZXIsMCx2LmJ5dGVMZW5ndGg+PjIpLHc9Yi5sZW5ndGgsaz11Kzc+PjMsUz00Mjk0OTY3Mjk1LF89aS52YWx1ZT80Mjc4MTkwMDgwOjI1NTtmb3IoYT0wO2E8ZDthKyspe2ZvcihzPWE8aD8xNjpmLHI9MCxvPTA7bzxzO28rKyl7Zm9yKHZhciB4PXktbSxBPTAsQz14Pms/dTo4KngtNyxQPS04JkMsRT0wLFQ9MDtBPFA7QSs9OClUPWdbbSsrXSxiW3IrK109MTI4JlQ/UzpfLGJbcisrXT02NCZUP1M6XyxiW3IrK109MzImVD9TOl8sYltyKytdPTE2JlQ/UzpfLGJbcisrXT04JlQ/UzpfLGJbcisrXT00JlQ/UzpfLGJbcisrXT0yJlQ/UzpfLGJbcisrXT0xJlQ/UzpfO2Zvcig7QTxDO0ErKykwPT09RSYmKFQ9Z1ttKytdLEU9MTI4KSxiW3IrK109VCZFP1M6XyxFPj49MX1mb3IoO3I8dzspYltyKytdPTA7ZS5wdXRJbWFnZURhdGEocCwwLDE2KmEpfX1lbHNlIGlmKHQua2luZD09PW4uSW1hZ2VLaW5kLlJHQkFfMzJCUFApe2ZvcihvPTAsbD0xNip1KjQsYT0wO2E8aDthKyspdi5zZXQoZy5zdWJhcnJheShtLG0rbCkpLG0rPWwsZS5wdXRJbWFnZURhdGEocCwwLG8pLG8rPTE2O2E8ZCYmKGw9dSpmKjQsdi5zZXQoZy5zdWJhcnJheShtLG0rbCkpLGUucHV0SW1hZ2VEYXRhKHAsMCxvKSl9ZWxzZXtpZih0LmtpbmQhPT1uLkltYWdlS2luZC5SR0JfMjRCUFApdGhyb3cgbmV3IEVycm9yKCJiYWQgaW1hZ2Uga2luZDogIi5jb25jYXQodC5raW5kKSk7Zm9yKGw9dSoocz0xNiksYT0wO2E8ZDthKyspe2ZvcihhPj1oJiYobD11KihzPWYpKSxyPTAsbz1sO28tLTspdltyKytdPWdbbSsrXSx2W3IrK109Z1ttKytdLHZbcisrXT1nW20rK10sdltyKytdPTI1NTtlLnB1dEltYWdlRGF0YShwLDAsMTYqYSl9fX19ZnVuY3Rpb24gcihlLHQpe2Zvcih2YXIgcj10LmhlaWdodCxuPXQud2lkdGgsYT1yJTE2LGk9KHItYSkvMTYsbz0wPT09YT9pOmkrMSxzPWUuY3JlYXRlSW1hZ2VEYXRhKG4sMTYpLGw9MCxjPXQuZGF0YSx1PXMuZGF0YSxmPTA7ZjxvO2YrKyl7Zm9yKHZhciBoPWY8aT8xNjphLGQ9MyxwPTA7cDxoO3ArKylmb3IodmFyIG09MCxnPTA7ZzxuO2crKyl7aWYoIW0pe3ZhciB2PWNbbCsrXTttPTEyOH11W2RdPXYmbT8wOjI1NSxkKz00LG0+Pj0xfWUucHV0SW1hZ2VEYXRhKHMsMCwxNipmKX19ZnVuY3Rpb24gYyhlLHQpe2Zvcih2YXIgcj1bInN0cm9rZVN0eWxlIiwiZmlsbFN0eWxlIiwiZmlsbFJ1bGUiLCJnbG9iYWxBbHBoYSIsImxpbmVXaWR0aCIsImxpbmVDYXAiLCJsaW5lSm9pbiIsIm1pdGVyTGltaXQiLCJnbG9iYWxDb21wb3NpdGVPcGVyYXRpb24iLCJmb250Il0sbj0wLGE9ci5sZW5ndGg7bjxhO24rKyl7dmFyIGk9cltuXTt2b2lkIDAhPT1lW2ldJiYodFtpXT1lW2ldKX12b2lkIDAhPT1lLnNldExpbmVEYXNoJiYodC5zZXRMaW5lRGFzaChlLmdldExpbmVEYXNoKCkpLHQubGluZURhc2hPZmZzZXQ9ZS5saW5lRGFzaE9mZnNldCl9ZnVuY3Rpb24gdShlKXtlLnN0cm9rZVN0eWxlPSIjMDAwMDAwIixlLmZpbGxTdHlsZT0iIzAwMDAwMCIsZS5maWxsUnVsZT0ibm9uemVybyIsZS5nbG9iYWxBbHBoYT0xLGUubGluZVdpZHRoPTEsZS5saW5lQ2FwPSJidXR0IixlLmxpbmVKb2luPSJtaXRlciIsZS5taXRlckxpbWl0PTEwLGUuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2Utb3ZlciIsZS5mb250PSIxMHB4IHNhbnMtc2VyaWYiLHZvaWQgMCE9PWUuc2V0TGluZURhc2gmJihlLnNldExpbmVEYXNoKFtdKSxlLmxpbmVEYXNoT2Zmc2V0PTApfWZ1bmN0aW9uIGYoZSx0LHIsbil7Zm9yKHZhciBhPWUubGVuZ3RoLGk9MztpPGE7aSs9NCl7dmFyIG89ZVtpXTtpZigwPT09byllW2ktM109dCxlW2ktMl09cixlW2ktMV09bjtlbHNlIGlmKG88MjU1KXt2YXIgcz0yNTUtbztlW2ktM109ZVtpLTNdKm8rdCpzPj44LGVbaS0yXT1lW2ktMl0qbytyKnM+PjgsZVtpLTFdPWVbaS0xXSpvK24qcz4+OH19fWZ1bmN0aW9uIGgoZSx0LHIpe2Zvcih2YXIgbj1lLmxlbmd0aCxhPTM7YTxuO2ErPTQpe3ZhciBpPXI/cltlW2FdXTplW2FdO3RbYV09dFthXSppKigxLzI1NSl8MH19ZnVuY3Rpb24gZChlLHQscil7Zm9yKHZhciBuPWUubGVuZ3RoLGE9MzthPG47YSs9NCl7dmFyIGk9NzcqZVthLTNdKzE1MiplW2EtMl0rMjgqZVthLTFdO3RbYV09cj90W2FdKnJbaT4+OF0+Pjg6dFthXSppPj4xNn19ZnVuY3Rpb24gcChlLHQscixuKXt2YXIgYT10LmNhbnZhcyxpPXQuY29udGV4dDtlLnNldFRyYW5zZm9ybSh0LnNjYWxlWCwwLDAsdC5zY2FsZVksdC5vZmZzZXRYLHQub2Zmc2V0WSk7dmFyIG89dC5iYWNrZHJvcHx8bnVsbDtpZighdC50cmFuc2Zlck1hcCYmbi5pc0VuYWJsZWQpe3ZhciBzPW4uY29tcG9zZVNNYXNrKHtsYXllcjpyLmNhbnZhcyxtYXNrOmEscHJvcGVydGllczp7c3VidHlwZTp0LnN1YnR5cGUsYmFja2Ryb3A6b319KTtyZXR1cm4gZS5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHZvaWQgZS5kcmF3SW1hZ2Uocyx0Lm9mZnNldFgsdC5vZmZzZXRZKX0hZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsbD0hIWksYz1sP2lbMF06MCx1PWw/aVsxXTowLHA9bD9pWzJdOjA7cz0iTHVtaW5vc2l0eSI9PT1hP2Q6aDtmb3IodmFyIG09TWF0aC5taW4obixNYXRoLmNlaWwoMTA0ODU3Ni9yKSksZz0wO2c8bjtnKz1tKXt2YXIgdj1NYXRoLm1pbihtLG4tZykseT1lLmdldEltYWdlRGF0YSgwLGcscix2KSxiPXQuZ2V0SW1hZ2VEYXRhKDAsZyxyLHYpO2wmJmYoeS5kYXRhLGMsdSxwKSxzKHkuZGF0YSxiLmRhdGEsbyksZS5wdXRJbWFnZURhdGEoYiwwLGcpfX0oaSxyLGEud2lkdGgsYS5oZWlnaHQsdC5zdWJ0eXBlLG8sdC50cmFuc2Zlck1hcCksZS5kcmF3SW1hZ2UoYSwwLDApfXZhciBtPVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0sZz1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLHY9e30seT17fTtmb3IodmFyIGIgaW4gZS5wcm90b3R5cGU9e2JlZ2luRHJhd2luZzpmdW5jdGlvbihlKXt2YXIgdD1lLnRyYW5zZm9ybSxyPWUudmlld3BvcnQsbj1lLnRyYW5zcGFyZW5jeSxhPXZvaWQgMCE9PW4mJm4saT1lLmJhY2tncm91bmQsbz12b2lkIDA9PT1pP251bGw6aSxzPXRoaXMuY3R4LmNhbnZhcy53aWR0aCxsPXRoaXMuY3R4LmNhbnZhcy5oZWlnaHQ7aWYodGhpcy5jdHguc2F2ZSgpLHRoaXMuY3R4LmZpbGxTdHlsZT1vfHwicmdiKDI1NSwgMjU1LCAyNTUpIix0aGlzLmN0eC5maWxsUmVjdCgwLDAscyxsKSx0aGlzLmN0eC5yZXN0b3JlKCksYSl7dmFyIGM9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoInRyYW5zcGFyZW50IixzLGwsITApO3RoaXMuY29tcG9zaXRlQ3R4PXRoaXMuY3R4LHRoaXMudHJhbnNwYXJlbnRDYW52YXM9Yy5jYW52YXMsdGhpcy5jdHg9Yy5jb250ZXh0LHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsdGhpcy5jb21wb3NpdGVDdHgubW96Q3VycmVudFRyYW5zZm9ybSl9dGhpcy5jdHguc2F2ZSgpLHUodGhpcy5jdHgpLHQmJnRoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KSx0aGlzLmN0eC50cmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsci50cmFuc2Zvcm0pLHRoaXMuYmFzZVRyYW5zZm9ybT10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtLnNsaWNlKCksdGhpcy5pbWFnZUxheWVyJiZ0aGlzLmltYWdlTGF5ZXIuYmVnaW5MYXlvdXQoKX0sZXhlY3V0ZU9wZXJhdG9yTGlzdDpmdW5jdGlvbihlLHQscixhKXt2YXIgaT1lLmFyZ3NBcnJheSxvPWUuZm5BcnJheSxzPXR8fDAsbD1pLmxlbmd0aDtpZihsPT09cylyZXR1cm4gcztmb3IodmFyIGMsdT1sLXM+MTAmJiJmdW5jdGlvbiI9PXR5cGVvZiByLGY9dT9EYXRlLm5vdygpKzE1OjAsaD0wLGQ9dGhpcy5jb21tb25PYmpzLHA9dGhpcy5vYmpzOzspe2lmKHZvaWQgMCE9PWEmJnM9PT1hLm5leHRCcmVha1BvaW50KXJldHVybiBhLmJyZWFrSXQocyxyKSxzO2lmKChjPW9bc10pIT09bi5PUFMuZGVwZW5kZW5jeSl0aGlzW2NdLmFwcGx5KHRoaXMsaVtzXSk7ZWxzZSBmb3IodmFyIG09aVtzXSxnPTAsdj1tLmxlbmd0aDtnPHY7ZysrKXt2YXIgeT1tW2ddLGI9ImciPT09eVswXSYmIl8iPT09eVsxXT9kOnA7aWYoIWIuaGFzKHkpKXJldHVybiBiLmdldCh5LHIpLHN9aWYoKytzPT09bClyZXR1cm4gcztpZih1JiYrK2g+MTApe2lmKERhdGUubm93KCk+ZilyZXR1cm4gcigpLHM7aD0wfX19LGVuZERyYXdpbmc6ZnVuY3Rpb24oKXtudWxsIT09dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiZ0aGlzLmVuZFNNYXNrR3JvdXAoKSx0aGlzLmN0eC5yZXN0b3JlKCksdGhpcy50cmFuc3BhcmVudENhbnZhcyYmKHRoaXMuY3R4PXRoaXMuY29tcG9zaXRlQ3R4LHRoaXMuY3R4LnNhdmUoKSx0aGlzLmN0eC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHRoaXMuY3R4LmRyYXdJbWFnZSh0aGlzLnRyYW5zcGFyZW50Q2FudmFzLDAsMCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMudHJhbnNwYXJlbnRDYW52YXM9bnVsbCksdGhpcy5jYWNoZWRDYW52YXNlcy5jbGVhcigpLHRoaXMud2ViR0xDb250ZXh0LmNsZWFyKCksdGhpcy5pbWFnZUxheWVyJiZ0aGlzLmltYWdlTGF5ZXIuZW5kTGF5b3V0KCl9LHNldExpbmVXaWR0aDpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQubGluZVdpZHRoPWUsdGhpcy5jdHgubGluZVdpZHRoPWV9LHNldExpbmVDYXA6ZnVuY3Rpb24oZSl7dGhpcy5jdHgubGluZUNhcD1tW2VdfSxzZXRMaW5lSm9pbjpmdW5jdGlvbihlKXt0aGlzLmN0eC5saW5lSm9pbj1nW2VdfSxzZXRNaXRlckxpbWl0OmZ1bmN0aW9uKGUpe3RoaXMuY3R4Lm1pdGVyTGltaXQ9ZX0sc2V0RGFzaDpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMuY3R4O3ZvaWQgMCE9PXIuc2V0TGluZURhc2gmJihyLnNldExpbmVEYXNoKGUpLHIubGluZURhc2hPZmZzZXQ9dCl9LHNldFJlbmRlcmluZ0ludGVudDpmdW5jdGlvbihlKXt9LHNldEZsYXRuZXNzOmZ1bmN0aW9uKGUpe30sc2V0R1N0YXRlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKyl7dmFyIG49ZVt0XSxhPW5bMF0saT1uWzFdO3N3aXRjaChhKXtjYXNlIkxXIjp0aGlzLnNldExpbmVXaWR0aChpKTticmVhaztjYXNlIkxDIjp0aGlzLnNldExpbmVDYXAoaSk7YnJlYWs7Y2FzZSJMSiI6dGhpcy5zZXRMaW5lSm9pbihpKTticmVhaztjYXNlIk1MIjp0aGlzLnNldE1pdGVyTGltaXQoaSk7YnJlYWs7Y2FzZSJEIjp0aGlzLnNldERhc2goaVswXSxpWzFdKTticmVhaztjYXNlIlJJIjp0aGlzLnNldFJlbmRlcmluZ0ludGVudChpKTticmVhaztjYXNlIkZMIjp0aGlzLnNldEZsYXRuZXNzKGkpO2JyZWFrO2Nhc2UiRm9udCI6dGhpcy5zZXRGb250KGlbMF0saVsxXSk7YnJlYWs7Y2FzZSJDQSI6dGhpcy5jdXJyZW50LnN0cm9rZUFscGhhPW5bMV07YnJlYWs7Y2FzZSJjYSI6dGhpcy5jdXJyZW50LmZpbGxBbHBoYT1uWzFdLHRoaXMuY3R4Lmdsb2JhbEFscGhhPW5bMV07YnJlYWs7Y2FzZSJCTSI6dGhpcy5jdHguZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPWk7YnJlYWs7Y2FzZSJTTWFzayI6dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiYodGhpcy5zdGF0ZVN0YWNrLmxlbmd0aD4wJiZ0aGlzLnN0YXRlU3RhY2tbdGhpcy5zdGF0ZVN0YWNrLmxlbmd0aC0xXS5hY3RpdmVTTWFzaz09PXRoaXMuY3VycmVudC5hY3RpdmVTTWFzaz90aGlzLnN1c3BlbmRTTWFza0dyb3VwKCk6dGhpcy5lbmRTTWFza0dyb3VwKCkpLHRoaXMuY3VycmVudC5hY3RpdmVTTWFzaz1pP3RoaXMudGVtcFNNYXNrOm51bGwsdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrJiZ0aGlzLmJlZ2luU01hc2tHcm91cCgpLHRoaXMudGVtcFNNYXNrPW51bGx9fX0sYmVnaW5TTWFza0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLHQ9ZS5jYW52YXMud2lkdGgscj1lLmNhbnZhcy5oZWlnaHQsbj0ic21hc2tHcm91cEF0Iit0aGlzLmdyb3VwTGV2ZWwsYT10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcyhuLHQsciwhMCksaT10aGlzLmN0eCxvPWkubW96Q3VycmVudFRyYW5zZm9ybTt0aGlzLmN0eC5zYXZlKCk7dmFyIHM9YS5jb250ZXh0O3Muc2NhbGUoMS9lLnNjYWxlWCwxL2Uuc2NhbGVZKSxzLnRyYW5zbGF0ZSgtZS5vZmZzZXRYLC1lLm9mZnNldFkpLHMudHJhbnNmb3JtLmFwcGx5KHMsbyksZS5zdGFydFRyYW5zZm9ybUludmVyc2U9cy5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSxjKGkscyksdGhpcy5jdHg9cyx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKSx0aGlzLmdyb3VwU3RhY2sucHVzaChpKSx0aGlzLmdyb3VwTGV2ZWwrK30sc3VzcGVuZFNNYXNrR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN0eDt0aGlzLmdyb3VwTGV2ZWwtLSx0aGlzLmN0eD10aGlzLmdyb3VwU3RhY2sucG9wKCkscCh0aGlzLmN0eCx0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2ssZSx0aGlzLndlYkdMQ29udGV4dCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMuY3R4LnNhdmUoKSxjKGUsdGhpcy5jdHgpLHRoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eD1lO3ZhciB0PW4uVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSxlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO3RoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KSxlLnNhdmUoKSxlLnNldFRyYW5zZm9ybSgxLDAsMCwxLDAsMCksZS5jbGVhclJlY3QoMCwwLGUuY2FudmFzLndpZHRoLGUuY2FudmFzLmhlaWdodCksZS5yZXN0b3JlKCl9LHJlc3VtZVNNYXNrR3JvdXA6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHgsdD10aGlzLmN0eDt0aGlzLmN0eD1lLHRoaXMuZ3JvdXBTdGFjay5wdXNoKHQpLHRoaXMuZ3JvdXBMZXZlbCsrfSxlbmRTTWFza0dyb3VwOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdHg7dGhpcy5ncm91cExldmVsLS0sdGhpcy5jdHg9dGhpcy5ncm91cFN0YWNrLnBvcCgpLHAodGhpcy5jdHgsdGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLGUsdGhpcy53ZWJHTENvbnRleHQpLHRoaXMuY3R4LnJlc3RvcmUoKSxjKGUsdGhpcy5jdHgpO3ZhciB0PW4uVXRpbC50cmFuc2Zvcm0odGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrLnN0YXJ0VHJhbnNmb3JtSW52ZXJzZSxlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO3RoaXMuY3R4LnRyYW5zZm9ybS5hcHBseSh0aGlzLmN0eCx0KX0sc2F2ZTpmdW5jdGlvbigpe3RoaXMuY3R4LnNhdmUoKTt2YXIgZT10aGlzLmN1cnJlbnQ7dGhpcy5zdGF0ZVN0YWNrLnB1c2goZSksdGhpcy5jdXJyZW50PWUuY2xvbmUoKSx0aGlzLmN1cnJlbnQucmVzdW1lU01hc2tDdHg9bnVsbH0scmVzdG9yZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5yZXN1bWVTTWFza0N0eCYmdGhpcy5yZXN1bWVTTWFza0dyb3VwKCksbnVsbD09PXRoaXMuY3VycmVudC5hY3RpdmVTTWFza3x8MCE9PXRoaXMuc3RhdGVTdGFjay5sZW5ndGgmJnRoaXMuc3RhdGVTdGFja1t0aGlzLnN0YXRlU3RhY2subGVuZ3RoLTFdLmFjdGl2ZVNNYXNrPT09dGhpcy5jdXJyZW50LmFjdGl2ZVNNYXNrfHx0aGlzLmVuZFNNYXNrR3JvdXAoKSwwIT09dGhpcy5zdGF0ZVN0YWNrLmxlbmd0aCYmKHRoaXMuY3VycmVudD10aGlzLnN0YXRlU3RhY2sucG9wKCksdGhpcy5jdHgucmVzdG9yZSgpLHRoaXMucGVuZGluZ0NsaXA9bnVsbCx0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3RoaXMuY3R4LnRyYW5zZm9ybShlLHQscixuLGEsaSksdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aD1udWxsfSxjb25zdHJ1Y3RQYXRoOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMuY3R4LGE9dGhpcy5jdXJyZW50LGk9YS54LG89YS55LHM9MCxsPTAsYz1lLmxlbmd0aDtzPGM7cysrKXN3aXRjaCgwfGVbc10pe2Nhc2Ugbi5PUFMucmVjdGFuZ2xlOmk9dFtsKytdLG89dFtsKytdO3ZhciB1PXRbbCsrXSxmPXRbbCsrXTswPT09dSYmKHU9dGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpLDA9PT1mJiYoZj10aGlzLmdldFNpbmdsZVBpeGVsV2lkdGgoKSk7dmFyIGg9aSt1LGQ9bytmO3RoaXMuY3R4Lm1vdmVUbyhpLG8pLHRoaXMuY3R4LmxpbmVUbyhoLG8pLHRoaXMuY3R4LmxpbmVUbyhoLGQpLHRoaXMuY3R4LmxpbmVUbyhpLGQpLHRoaXMuY3R4LmxpbmVUbyhpLG8pLHRoaXMuY3R4LmNsb3NlUGF0aCgpO2JyZWFrO2Nhc2Ugbi5PUFMubW92ZVRvOmk9dFtsKytdLG89dFtsKytdLHIubW92ZVRvKGksbyk7YnJlYWs7Y2FzZSBuLk9QUy5saW5lVG86aT10W2wrK10sbz10W2wrK10sci5saW5lVG8oaSxvKTticmVhaztjYXNlIG4uT1BTLmN1cnZlVG86aT10W2wrNF0sbz10W2wrNV0sci5iZXppZXJDdXJ2ZVRvKHRbbF0sdFtsKzFdLHRbbCsyXSx0W2wrM10saSxvKSxsKz02O2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzI6ci5iZXppZXJDdXJ2ZVRvKGksbyx0W2xdLHRbbCsxXSx0W2wrMl0sdFtsKzNdKSxpPXRbbCsyXSxvPXRbbCszXSxsKz00O2JyZWFrO2Nhc2Ugbi5PUFMuY3VydmVUbzM6aT10W2wrMl0sbz10W2wrM10sci5iZXppZXJDdXJ2ZVRvKHRbbF0sdFtsKzFdLGksbyxpLG8pLGwrPTQ7YnJlYWs7Y2FzZSBuLk9QUy5jbG9zZVBhdGg6ci5jbG9zZVBhdGgoKX1hLnNldEN1cnJlbnRQb2ludChpLG8pfSxjbG9zZVBhdGg6ZnVuY3Rpb24oKXt0aGlzLmN0eC5jbG9zZVBhdGgoKX0sc3Ryb2tlOmZ1bmN0aW9uKGUpe2U9dm9pZCAwPT09ZXx8ZTt2YXIgdD10aGlzLmN0eCxyPXRoaXMuY3VycmVudC5zdHJva2VDb2xvcjt0LmxpbmVXaWR0aD1NYXRoLm1heCguNjUqdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCksdGhpcy5jdXJyZW50LmxpbmVXaWR0aCksdC5nbG9iYWxBbHBoYT10aGlzLmN1cnJlbnQuc3Ryb2tlQWxwaGEsciYmci5oYXNPd25Qcm9wZXJ0eSgidHlwZSIpJiYiUGF0dGVybiI9PT1yLnR5cGU/KHQuc2F2ZSgpLHQuc3Ryb2tlU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcyksdC5zdHJva2UoKSx0LnJlc3RvcmUoKSk6dC5zdHJva2UoKSxlJiZ0aGlzLmNvbnN1bWVQYXRoKCksdC5nbG9iYWxBbHBoYT10aGlzLmN1cnJlbnQuZmlsbEFscGhhfSxjbG9zZVN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5zdHJva2UoKX0sZmlsbDpmdW5jdGlvbihlKXtlPXZvaWQgMD09PWV8fGU7dmFyIHQ9dGhpcy5jdHgscj10aGlzLmN1cnJlbnQuZmlsbENvbG9yLG49ITE7dGhpcy5jdXJyZW50LnBhdHRlcm5GaWxsJiYodC5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiZ0LnNldFRyYW5zZm9ybS5hcHBseSh0LHRoaXMuYmFzZVRyYW5zZm9ybSksdC5maWxsU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcyksbj0hMCksdGhpcy5wZW5kaW5nRU9GaWxsPyh0LmZpbGwoImV2ZW5vZGQiKSx0aGlzLnBlbmRpbmdFT0ZpbGw9ITEpOnQuZmlsbCgpLG4mJnQucmVzdG9yZSgpLGUmJnRoaXMuY29uc3VtZVBhdGgoKX0sZW9GaWxsOmZ1bmN0aW9uKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwLHRoaXMuZmlsbCgpfSxmaWxsU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5maWxsKCExKSx0aGlzLnN0cm9rZSghMSksdGhpcy5jb25zdW1lUGF0aCgpfSxlb0ZpbGxTdHJva2U6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdFT0ZpbGw9ITAsdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlRU9GaWxsU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5wZW5kaW5nRU9GaWxsPSEwLHRoaXMuY2xvc2VQYXRoKCksdGhpcy5maWxsU3Ryb2tlKCl9LGVuZFBhdGg6ZnVuY3Rpb24oKXt0aGlzLmNvbnN1bWVQYXRoKCl9LGNsaXA6ZnVuY3Rpb24oKXt0aGlzLnBlbmRpbmdDbGlwPXZ9LGVvQ2xpcDpmdW5jdGlvbigpe3RoaXMucGVuZGluZ0NsaXA9eX0sYmVnaW5UZXh0OmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LnRleHRNYXRyaXg9bi5JREVOVElUWV9NQVRSSVgsdGhpcy5jdXJyZW50LnRleHRNYXRyaXhTY2FsZT0xLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfSxlbmRUZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wZW5kaW5nVGV4dFBhdGhzLHQ9dGhpcy5jdHg7aWYodm9pZCAwIT09ZSl7dC5zYXZlKCksdC5iZWdpblBhdGgoKTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKyl7dmFyIG49ZVtyXTt0LnNldFRyYW5zZm9ybS5hcHBseSh0LG4udHJhbnNmb3JtKSx0LnRyYW5zbGF0ZShuLngsbi55KSxuLmFkZFRvUGF0aCh0LG4uZm9udFNpemUpfXQucmVzdG9yZSgpLHQuY2xpcCgpLHQuYmVnaW5QYXRoKCksZGVsZXRlIHRoaXMucGVuZGluZ1RleHRQYXRoc31lbHNlIHQuYmVnaW5QYXRoKCl9LHNldENoYXJTcGFjaW5nOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC5jaGFyU3BhY2luZz1lfSxzZXRXb3JkU3BhY2luZzpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9ZX0sc2V0SFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPWUvMTAwfSxzZXRMZWFkaW5nOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC5sZWFkaW5nPS1lfSxzZXRGb250OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb21tb25PYmpzLmdldChlKSxhPXRoaXMuY3VycmVudDtpZighcil0aHJvdyBuZXcgRXJyb3IoIkNhbid0IGZpbmQgZm9udCBmb3IgIi5jb25jYXQoZSkpO2lmKGEuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXg/ci5mb250TWF0cml4Om4uRk9OVF9JREVOVElUWV9NQVRSSVgsMCE9PWEuZm9udE1hdHJpeFswXSYmMCE9PWEuZm9udE1hdHJpeFszXXx8KDAsbi53YXJuKSgiSW52YWxpZCBmb250IG1hdHJpeCBmb3IgZm9udCAiK2UpLHQ8MD8odD0tdCxhLmZvbnREaXJlY3Rpb249LTEpOmEuZm9udERpcmVjdGlvbj0xLHRoaXMuY3VycmVudC5mb250PXIsdGhpcy5jdXJyZW50LmZvbnRTaXplPXQsIXIuaXNUeXBlM0ZvbnQpe3ZhciBpPXIubG9hZGVkTmFtZXx8InNhbnMtc2VyaWYiLG89ci5ibGFjaz8iOTAwIjpyLmJvbGQ/ImJvbGQiOiJub3JtYWwiLHM9ci5pdGFsaWM/Iml0YWxpYyI6Im5vcm1hbCIsbD0nIicuY29uY2F0KGksJyIsICcpLmNvbmNhdChyLmZhbGxiYWNrTmFtZSksYz10PDE2PzE2OnQ+MTAwPzEwMDp0O3RoaXMuY3VycmVudC5mb250U2l6ZVNjYWxlPXQvYyx0aGlzLmN0eC5mb250PSIiLmNvbmNhdChzLCIgIikuY29uY2F0KG8sIiAiKS5jb25jYXQoYywicHggIikuY29uY2F0KGwpfX0sc2V0VGV4dFJlbmRlcmluZ01vZGU6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LnRleHRSZW5kZXJpbmdNb2RlPWV9LHNldFRleHRSaXNlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0UmlzZT1lfSxtb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9ZSx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPXR9LHNldExlYWRpbmdNb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuc2V0TGVhZGluZygtdCksdGhpcy5tb3ZlVGV4dChlLHQpfSxzZXRUZXh0TWF0cml4OmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt0aGlzLmN1cnJlbnQudGV4dE1hdHJpeD1bZSx0LHIsbixhLGldLHRoaXMuY3VycmVudC50ZXh0TWF0cml4U2NhbGU9TWF0aC5zcXJ0KGUqZSt0KnQpLHRoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWD0wLHRoaXMuY3VycmVudC55PXRoaXMuY3VycmVudC5saW5lWT0wfSxuZXh0TGluZTpmdW5jdGlvbigpe3RoaXMubW92ZVRleHQoMCx0aGlzLmN1cnJlbnQubGVhZGluZyl9LHBhaW50Q2hhcjpmdW5jdGlvbihlLHQscixhKXt2YXIgaSxvPXRoaXMuY3R4LHM9dGhpcy5jdXJyZW50LGw9cy5mb250LGM9cy50ZXh0UmVuZGVyaW5nTW9kZSx1PXMuZm9udFNpemUvcy5mb250U2l6ZVNjYWxlLGY9YyZuLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFX01BU0ssaD0hIShjJm4uVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBRyksZD1zLnBhdHRlcm5GaWxsJiZsLmRhdGE7KGwuZGlzYWJsZUZvbnRGYWNlfHxofHxkKSYmKGk9bC5nZXRQYXRoR2VuZXJhdG9yKHRoaXMuY29tbW9uT2JqcyxlKSksbC5kaXNhYmxlRm9udEZhY2V8fGQ/KG8uc2F2ZSgpLG8udHJhbnNsYXRlKHQsciksby5iZWdpblBhdGgoKSxpKG8sdSksYSYmby5zZXRUcmFuc2Zvcm0uYXBwbHkobyxhKSxmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMJiZmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8by5maWxsKCksZiE9PW4uVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8by5zdHJva2UoKSxvLnJlc3RvcmUoKSk6KGYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTEwmJmYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFfHxvLmZpbGxUZXh0KGUsdCxyKSxmIT09bi5UZXh0UmVuZGVyaW5nTW9kZS5TVFJPS0UmJmYhPT1uLlRleHRSZW5kZXJpbmdNb2RlLkZJTExfU1RST0tFfHxvLnN0cm9rZVRleHQoZSx0LHIpKSxoJiYodGhpcy5wZW5kaW5nVGV4dFBhdGhzfHwodGhpcy5wZW5kaW5nVGV4dFBhdGhzPVtdKSkucHVzaCh7dHJhbnNmb3JtOm8ubW96Q3VycmVudFRyYW5zZm9ybSx4OnQseTpyLGZvbnRTaXplOnUsYWRkVG9QYXRoOml9KX0sZ2V0IGlzRm9udFN1YnBpeGVsQUFFbmFibGVkKCl7dmFyIGU9dGhpcy5jYW52YXNGYWN0b3J5LmNyZWF0ZSgxMCwxMCkuY29udGV4dDtlLnNjYWxlKDEuNSwxKSxlLmZpbGxUZXh0KCJJIiwwLDEwKTtmb3IodmFyIHQ9ZS5nZXRJbWFnZURhdGEoMCwwLDEwLDEwKS5kYXRhLHI9ITEsYT0zO2E8dC5sZW5ndGg7YSs9NClpZih0W2FdPjAmJnRbYV08MjU1KXtyPSEwO2JyZWFrfXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJpc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCIscil9LHNob3dUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3VycmVudCxyPXQuZm9udDtpZihyLmlzVHlwZTNGb250KXJldHVybiB0aGlzLnNob3dUeXBlM1RleHQoZSk7dmFyIGE9dC5mb250U2l6ZTtpZigwIT09YSl7dmFyIGksbz10aGlzLmN0eCxzPXQuZm9udFNpemVTY2FsZSxsPXQuY2hhclNwYWNpbmcsYz10LndvcmRTcGFjaW5nLHU9dC5mb250RGlyZWN0aW9uLGY9dC50ZXh0SFNjYWxlKnUsaD1lLmxlbmd0aCxkPXIudmVydGljYWwscD1kPzE6LTEsbT1yLmRlZmF1bHRWTWV0cmljcyxnPWEqdC5mb250TWF0cml4WzBdLHY9dC50ZXh0UmVuZGVyaW5nTW9kZT09PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTCYmIXIuZGlzYWJsZUZvbnRGYWNlJiYhdC5wYXR0ZXJuRmlsbDtpZihvLnNhdmUoKSx0LnBhdHRlcm5GaWxsKXtvLnNhdmUoKTt2YXIgeT10LmZpbGxDb2xvci5nZXRQYXR0ZXJuKG8sdGhpcyk7aT1vLm1vekN1cnJlbnRUcmFuc2Zvcm0sby5yZXN0b3JlKCksby5maWxsU3R5bGU9eX1vLnRyYW5zZm9ybS5hcHBseShvLHQudGV4dE1hdHJpeCksby50cmFuc2xhdGUodC54LHQueSt0LnRleHRSaXNlKSx1PjA/by5zY2FsZShmLC0xKTpvLnNjYWxlKGYsMSk7dmFyIGI9dC5saW5lV2lkdGgsdz10LnRleHRNYXRyaXhTY2FsZTtpZigwPT09d3x8MD09PWIpe3ZhciBrPXQudGV4dFJlbmRlcmluZ01vZGUmbi5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRV9NQVNLO2shPT1uLlRleHRSZW5kZXJpbmdNb2RlLlNUUk9LRSYmayE9PW4uVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0V8fCh0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsYj0uNjUqdGhpcy5nZXRTaW5nbGVQaXhlbFdpZHRoKCkpfWVsc2UgYi89dzsxIT09cyYmKG8uc2NhbGUocyxzKSxiLz1zKSxvLmxpbmVXaWR0aD1iO3ZhciBTLF89MDtmb3IoUz0wO1M8aDsrK1Mpe3ZhciB4PWVbU107aWYoKDAsbi5pc051bSkoeCkpXys9cCp4KmEvMWUzO2Vsc2V7dmFyIEEsQyxQLEUsVCxSLE8sST0hMSxGPSh4LmlzU3BhY2U/YzowKStsLEw9eC5mb250Q2hhcixEPXguYWNjZW50LE49eC53aWR0aDtpZihkPyhUPXgudm1ldHJpY3x8bSxSPS0oUj14LnZtZXRyaWM/VFsxXTouNSpOKSpnLE89VFsyXSpnLE49VD8tVFswXTpOLEE9Ui9zLEM9KF8rTykvcyk6KEE9Xy9zLEM9MCksci5yZW1lYXN1cmUmJk4+MCl7dmFyIE09MWUzKm8ubWVhc3VyZVRleHQoTCkud2lkdGgvYSpzO2lmKE48TSYmdGhpcy5pc0ZvbnRTdWJwaXhlbEFBRW5hYmxlZCl7dmFyIGo9Ti9NO0k9ITAsby5zYXZlKCksby5zY2FsZShqLDEpLEEvPWp9ZWxzZSBOIT09TSYmKEErPShOLU0pLzJlMyphL3MpfSh4LmlzSW5Gb250fHxyLm1pc3NpbmdGaWxlKSYmKHYmJiFEP28uZmlsbFRleHQoTCxBLEMpOih0aGlzLnBhaW50Q2hhcihMLEEsQyxpKSxEJiYoUD1BK0Qub2Zmc2V0LngvcyxFPUMtRC5vZmZzZXQueS9zLHRoaXMucGFpbnRDaGFyKEQuZm9udENoYXIsUCxFLGkpKSkpLF8rPU4qZytGKnUsSSYmby5yZXN0b3JlKCl9fWQ/dC55LT1fKmY6dC54Kz1fKmYsby5yZXN0b3JlKCl9fSxzaG93VHlwZTNUZXh0OmZ1bmN0aW9uKGUpe3ZhciB0LHIsYSxpLG89dGhpcy5jdHgscz10aGlzLmN1cnJlbnQsbD1zLmZvbnQsYz1zLmZvbnRTaXplLHU9cy5mb250RGlyZWN0aW9uLGY9bC52ZXJ0aWNhbD8xOi0xLGg9cy5jaGFyU3BhY2luZyxkPXMud29yZFNwYWNpbmcscD1zLnRleHRIU2NhbGUqdSxtPXMuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWCxnPWUubGVuZ3RoO2lmKHMudGV4dFJlbmRlcmluZ01vZGUhPT1uLlRleHRSZW5kZXJpbmdNb2RlLklOVklTSUJMRSYmMCE9PWMpe2Zvcih0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPW51bGwsby5zYXZlKCksby50cmFuc2Zvcm0uYXBwbHkobyxzLnRleHRNYXRyaXgpLG8udHJhbnNsYXRlKHMueCxzLnkpLG8uc2NhbGUocCx1KSx0PTA7dDxnOysrdClpZihyPWVbdF0sKDAsbi5pc051bSkocikpaT1mKnIqYy8xZTMsdGhpcy5jdHgudHJhbnNsYXRlKGksMCkscy54Kz1pKnA7ZWxzZXt2YXIgdj0oci5pc1NwYWNlP2Q6MCkraCx5PWwuY2hhclByb2NPcGVyYXRvckxpc3Rbci5vcGVyYXRvckxpc3RJZF07eT8odGhpcy5wcm9jZXNzaW5nVHlwZTM9cix0aGlzLnNhdmUoKSxvLnNjYWxlKGMsYyksby50cmFuc2Zvcm0uYXBwbHkobyxtKSx0aGlzLmV4ZWN1dGVPcGVyYXRvckxpc3QoeSksdGhpcy5yZXN0b3JlKCksYT1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0oW3Iud2lkdGgsMF0sbSlbMF0qYyt2LG8udHJhbnNsYXRlKGEsMCkscy54Kz1hKnApOigwLG4ud2FybikoJ1R5cGUzIGNoYXJhY3RlciAiJy5jb25jYXQoci5vcGVyYXRvckxpc3RJZCwnIiBpcyBub3QgYXZhaWxhYmxlLicpKX1vLnJlc3RvcmUoKSx0aGlzLnByb2Nlc3NpbmdUeXBlMz1udWxsfX0sc2V0Q2hhcldpZHRoOmZ1bmN0aW9uKGUsdCl7fSxzZXRDaGFyV2lkdGhBbmRCb3VuZHM6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3RoaXMuY3R4LnJlY3QocixuLGEtcixpLW4pLHRoaXMuY2xpcCgpLHRoaXMuZW5kUGF0aCgpfSxnZXRDb2xvck5fUGF0dGVybjpmdW5jdGlvbih0KXt2YXIgcixuPXRoaXM7aWYoIlRpbGluZ1BhdHRlcm4iPT09dFswXSl7dmFyIGk9dFsxXSxvPXRoaXMuYmFzZVRyYW5zZm9ybXx8dGhpcy5jdHgubW96Q3VycmVudFRyYW5zZm9ybS5zbGljZSgpLHM9e2NyZWF0ZUNhbnZhc0dyYXBoaWNzOmZ1bmN0aW9uKHQpe3JldHVybiBuZXcgZSh0LG4uY29tbW9uT2JqcyxuLm9ianMsbi5jYW52YXNGYWN0b3J5LG4ud2ViR0xDb250ZXh0KX19O3I9bmV3IGEuVGlsaW5nUGF0dGVybih0LGksdGhpcy5jdHgscyxvKX1lbHNlIHI9KDAsYS5nZXRTaGFkaW5nUGF0dGVybkZyb21JUikodCk7cmV0dXJuIHJ9LHNldFN0cm9rZUNvbG9yTjpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5zdHJva2VDb2xvcj10aGlzLmdldENvbG9yTl9QYXR0ZXJuKGFyZ3VtZW50cyl9LHNldEZpbGxDb2xvck46ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnQuZmlsbENvbG9yPXRoaXMuZ2V0Q29sb3JOX1BhdHRlcm4oYXJndW1lbnRzKSx0aGlzLmN1cnJlbnQucGF0dGVybkZpbGw9ITB9LHNldFN0cm9rZVJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdHguc3Ryb2tlU3R5bGU9YSx0aGlzLmN1cnJlbnQuc3Ryb2tlQ29sb3I9YX0sc2V0RmlsbFJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT1uLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdHguZmlsbFN0eWxlPWEsdGhpcy5jdXJyZW50LmZpbGxDb2xvcj1hLHRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbD0hMX0sc2hhZGluZ0ZpbGw6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5jdHg7dGhpcy5zYXZlKCk7dmFyIHI9KDAsYS5nZXRTaGFkaW5nUGF0dGVybkZyb21JUikoZSk7dC5maWxsU3R5bGU9ci5nZXRQYXR0ZXJuKHQsdGhpcywhMCk7dmFyIGk9dC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTtpZihpKXt2YXIgbz10LmNhbnZhcyxzPW8ud2lkdGgsbD1vLmhlaWdodCxjPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCwwXSxpKSx1PW4uVXRpbC5hcHBseVRyYW5zZm9ybShbMCxsXSxpKSxmPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbcywwXSxpKSxoPW4uVXRpbC5hcHBseVRyYW5zZm9ybShbcyxsXSxpKSxkPU1hdGgubWluKGNbMF0sdVswXSxmWzBdLGhbMF0pLHA9TWF0aC5taW4oY1sxXSx1WzFdLGZbMV0saFsxXSksbT1NYXRoLm1heChjWzBdLHVbMF0sZlswXSxoWzBdKSxnPU1hdGgubWF4KGNbMV0sdVsxXSxmWzFdLGhbMV0pO3RoaXMuY3R4LmZpbGxSZWN0KGQscCxtLWQsZy1wKX1lbHNlIHRoaXMuY3R4LmZpbGxSZWN0KC0xZTEwLC0xZTEwLDJlMTAsMmUxMCk7dGhpcy5yZXN0b3JlKCl9LGJlZ2luSW5saW5lSW1hZ2U6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW5saW5lSW1hZ2UiKX0sYmVnaW5JbWFnZURhdGE6ZnVuY3Rpb24oKXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIGJlZ2luSW1hZ2VEYXRhIil9LHBhaW50Rm9ybVhPYmplY3RCZWdpbjpmdW5jdGlvbihlLHQpe2lmKHRoaXMuc2F2ZSgpLHRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnB1c2godGhpcy5iYXNlVHJhbnNmb3JtKSxBcnJheS5pc0FycmF5KGUpJiY2PT09ZS5sZW5ndGgmJnRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMsZSksdGhpcy5iYXNlVHJhbnNmb3JtPXRoaXMuY3R4Lm1vekN1cnJlbnRUcmFuc2Zvcm0sdCl7dmFyIHI9dFsyXS10WzBdLG49dFszXS10WzFdO3RoaXMuY3R4LnJlY3QodFswXSx0WzFdLHIsbiksdGhpcy5jbGlwKCksdGhpcy5lbmRQYXRoKCl9fSxwYWludEZvcm1YT2JqZWN0RW5kOmZ1bmN0aW9uKCl7dGhpcy5yZXN0b3JlKCksdGhpcy5iYXNlVHJhbnNmb3JtPXRoaXMuYmFzZVRyYW5zZm9ybVN0YWNrLnBvcCgpfSxiZWdpbkdyb3VwOmZ1bmN0aW9uKGUpe3RoaXMuc2F2ZSgpO3ZhciB0PXRoaXMuY3R4O2UuaXNvbGF0ZWR8fCgwLG4uaW5mbykoIlRPRE86IFN1cHBvcnQgbm9uLWlzb2xhdGVkIGdyb3Vwcy4iKSxlLmtub2Nrb3V0JiYoMCxuLndhcm4pKCJLbm9ja291dCBncm91cHMgbm90IHN1cHBvcnRlZC4iKTt2YXIgcj10Lm1vekN1cnJlbnRUcmFuc2Zvcm07aWYoZS5tYXRyaXgmJnQudHJhbnNmb3JtLmFwcGx5KHQsZS5tYXRyaXgpLCFlLmJib3gpdGhyb3cgbmV3IEVycm9yKCJCb3VuZGluZyBib3ggaXMgcmVxdWlyZWQuIik7dmFyIGE9bi5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KGUuYmJveCx0Lm1vekN1cnJlbnRUcmFuc2Zvcm0pLGk9WzAsMCx0LmNhbnZhcy53aWR0aCx0LmNhbnZhcy5oZWlnaHRdO2E9bi5VdGlsLmludGVyc2VjdChhLGkpfHxbMCwwLDAsMF07dmFyIG89TWF0aC5mbG9vcihhWzBdKSxzPU1hdGguZmxvb3IoYVsxXSksbD1NYXRoLm1heChNYXRoLmNlaWwoYVsyXSktbywxKSx1PU1hdGgubWF4KE1hdGguY2VpbChhWzNdKS1zLDEpLGY9MSxoPTE7bD40MDk2JiYoZj1sLzQwOTYsbD00MDk2KSx1PjQwOTYmJihoPXUvNDA5Nix1PTQwOTYpO3ZhciBkPSJncm91cEF0Iit0aGlzLmdyb3VwTGV2ZWw7ZS5zbWFzayYmKGQrPSJfc21hc2tfIit0aGlzLnNtYXNrQ291bnRlcisrJTIpO3ZhciBwPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKGQsbCx1LCEwKSxtPXAuY29udGV4dDttLnNjYWxlKDEvZiwxL2gpLG0udHJhbnNsYXRlKC1vLC1zKSxtLnRyYW5zZm9ybS5hcHBseShtLHIpLGUuc21hc2s/dGhpcy5zbWFza1N0YWNrLnB1c2goe2NhbnZhczpwLmNhbnZhcyxjb250ZXh0Om0sb2Zmc2V0WDpvLG9mZnNldFk6cyxzY2FsZVg6ZixzY2FsZVk6aCxzdWJ0eXBlOmUuc21hc2suc3VidHlwZSxiYWNrZHJvcDplLnNtYXNrLmJhY2tkcm9wLHRyYW5zZmVyTWFwOmUuc21hc2sudHJhbnNmZXJNYXB8fG51bGwsc3RhcnRUcmFuc2Zvcm1JbnZlcnNlOm51bGx9KToodC5zZXRUcmFuc2Zvcm0oMSwwLDAsMSwwLDApLHQudHJhbnNsYXRlKG8scyksdC5zY2FsZShmLGgpKSxjKHQsbSksdGhpcy5jdHg9bSx0aGlzLnNldEdTdGF0ZShbWyJCTSIsInNvdXJjZS1vdmVyIl0sWyJjYSIsMV0sWyJDQSIsMV1dKSx0aGlzLmdyb3VwU3RhY2sucHVzaCh0KSx0aGlzLmdyb3VwTGV2ZWwrKyx0aGlzLmN1cnJlbnQuYWN0aXZlU01hc2s9bnVsbH0sZW5kR3JvdXA6ZnVuY3Rpb24oZSl7dGhpcy5ncm91cExldmVsLS07dmFyIHQ9dGhpcy5jdHg7dGhpcy5jdHg9dGhpcy5ncm91cFN0YWNrLnBvcCgpLHZvaWQgMCE9PXRoaXMuY3R4LmltYWdlU21vb3RoaW5nRW5hYmxlZD90aGlzLmN0eC5pbWFnZVNtb290aGluZ0VuYWJsZWQ9ITE6dGhpcy5jdHgubW96SW1hZ2VTbW9vdGhpbmdFbmFibGVkPSExLGUuc21hc2s/dGhpcy50ZW1wU01hc2s9dGhpcy5zbWFza1N0YWNrLnBvcCgpOnRoaXMuY3R4LmRyYXdJbWFnZSh0LmNhbnZhcywwLDApLHRoaXMucmVzdG9yZSgpfSxiZWdpbkFubm90YXRpb25zOmZ1bmN0aW9uKCl7dGhpcy5zYXZlKCksdGhpcy5iYXNlVHJhbnNmb3JtJiZ0aGlzLmN0eC5zZXRUcmFuc2Zvcm0uYXBwbHkodGhpcy5jdHgsdGhpcy5iYXNlVHJhbnNmb3JtKX0sZW5kQW5ub3RhdGlvbnM6ZnVuY3Rpb24oKXt0aGlzLnJlc3RvcmUoKX0sYmVnaW5Bbm5vdGF0aW9uOmZ1bmN0aW9uKGUsdCxyKXtpZih0aGlzLnNhdmUoKSx1KHRoaXMuY3R4KSx0aGlzLmN1cnJlbnQ9bmV3IGwsQXJyYXkuaXNBcnJheShlKSYmND09PWUubGVuZ3RoKXt2YXIgbj1lWzJdLWVbMF0sYT1lWzNdLWVbMV07dGhpcy5jdHgucmVjdChlWzBdLGVbMV0sbixhKSx0aGlzLmNsaXAoKSx0aGlzLmVuZFBhdGgoKX10aGlzLnRyYW5zZm9ybS5hcHBseSh0aGlzLHQpLHRoaXMudHJhbnNmb3JtLmFwcGx5KHRoaXMscil9LGVuZEFubm90YXRpb246ZnVuY3Rpb24oKXt0aGlzLnJlc3RvcmUoKX0scGFpbnRKcGVnWE9iamVjdDpmdW5jdGlvbihlLHQscil7dmFyIGE9dGhpcy5vYmpzLmdldChlKTtpZihhKXt0aGlzLnNhdmUoKTt2YXIgaT10aGlzLmN0eDtpZihpLnNjYWxlKDEvdCwtMS9yKSxpLmRyYXdJbWFnZShhLDAsMCxhLndpZHRoLGEuaGVpZ2h0LDAsLXIsdCxyKSx0aGlzLmltYWdlTGF5ZXIpe3ZhciBvPWkubW96Q3VycmVudFRyYW5zZm9ybUludmVyc2Uscz10aGlzLmdldENhbnZhc1Bvc2l0aW9uKDAsMCk7dGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtvYmpJZDplLGxlZnQ6c1swXSx0b3A6c1sxXSx3aWR0aDp0L29bMF0saGVpZ2h0OnIvb1szXX0pfXRoaXMucmVzdG9yZSgpfWVsc2UoMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9LHBhaW50SW1hZ2VNYXNrWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN0eCxuPWUud2lkdGgsYT1lLmhlaWdodCxpPXRoaXMuY3VycmVudC5maWxsQ29sb3Isbz10aGlzLmN1cnJlbnQucGF0dGVybkZpbGwscz10aGlzLnByb2Nlc3NpbmdUeXBlMztpZihzJiZ2b2lkIDA9PT1zLmNvbXBpbGVkJiYocy5jb21waWxlZD1uPD0xZTMmJmE8PTFlMz9mdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpPWUud2lkdGgsbz1lLmhlaWdodCxzPWkrMSxsPW5ldyBVaW50OEFycmF5KHMqKG8rMSkpLGM9bmV3IFVpbnQ4QXJyYXkoWzAsMiw0LDAsMSwwLDUsNCw4LDEwLDAsOCwwLDIsMSwwXSksdT1pKzcmLTgsZj1lLmRhdGEsaD1uZXcgVWludDhBcnJheSh1Km8pLGQ9MDtmb3IodD0wLGE9Zi5sZW5ndGg7dDxhO3QrKylmb3IodmFyIHA9MTI4LG09Zlt0XTtwPjA7KWhbZCsrXT1tJnA/MDoyNTUscD4+PTE7dmFyIGc9MDtmb3IoMCE9PWhbZD0wXSYmKGxbMF09MSwrK2cpLHI9MTtyPGk7cisrKWhbZF0hPT1oW2QrMV0mJihsW3JdPWhbZF0/MjoxLCsrZyksZCsrO2ZvcigwIT09aFtkXSYmKGxbcl09MiwrK2cpLHQ9MTt0PG87dCsrKXtuPXQqcyxoWyhkPXQqdSktdV0hPT1oW2RdJiYobFtuXT1oW2RdPzE6OCwrK2cpO3ZhciB2PShoW2RdPzQ6MCkrKGhbZC11XT84OjApO2ZvcihyPTE7cjxpO3IrKyljW3Y9KHY+PjIpKyhoW2QrMV0/NDowKSsoaFtkLXUrMV0/ODowKV0mJihsW24rcl09Y1t2XSwrK2cpLGQrKztpZihoW2QtdV0hPT1oW2RdJiYobFtuK3JdPWhbZF0/Mjo0LCsrZyksZz4xZTMpcmV0dXJuIG51bGx9Zm9yKG49dCpzLDAhPT1oW2Q9dSooby0xKV0mJihsW25dPTgsKytnKSxyPTE7cjxpO3IrKyloW2RdIT09aFtkKzFdJiYobFtuK3JdPWhbZF0/NDo4LCsrZyksZCsrO2lmKDAhPT1oW2RdJiYobFtuK3JdPTQsKytnKSxnPjFlMylyZXR1cm4gbnVsbDt2YXIgeT1uZXcgSW50MzJBcnJheShbMCxzLC0xLDAsLXMsMCwwLDAsMV0pLGI9W107Zm9yKHQ9MDtnJiZ0PD1vO3QrKyl7Zm9yKHZhciB3PXQqcyxrPXcraTt3PGsmJiFsW3ddOyl3Kys7aWYodyE9PWspe3ZhciBTLF89W3clcyx0XSx4PWxbd10sQT13O2Rve3ZhciBDPXlbeF07ZG97dys9Q313aGlsZSghbFt3XSk7NSE9PShTPWxbd10pJiYxMCE9PVM/KHg9UyxsW3ddPTApOih4PVMmNTEqeD4+NCxsW3ddJj14Pj4yfHg8PDIpLF8ucHVzaCh3JXMpLF8ucHVzaCh3L3N8MCksLS1nfXdoaWxlKEEhPT13KTtiLnB1c2goXyksLS10fX1yZXR1cm4gZnVuY3Rpb24oZSl7ZS5zYXZlKCksZS5zY2FsZSgxL2ksLTEvbyksZS50cmFuc2xhdGUoMCwtbyksZS5iZWdpblBhdGgoKTtmb3IodmFyIHQ9MCxyPWIubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWJbdF07ZS5tb3ZlVG8oblswXSxuWzFdKTtmb3IodmFyIGE9MixzPW4ubGVuZ3RoO2E8czthKz0yKWUubGluZVRvKG5bYV0sblthKzFdKX1lLmZpbGwoKSxlLmJlZ2luUGF0aCgpLGUucmVzdG9yZSgpfX0oe2RhdGE6ZS5kYXRhLHdpZHRoOm4saGVpZ2h0OmF9KTpudWxsKSxzJiZzLmNvbXBpbGVkKXMuY29tcGlsZWQodCk7ZWxzZXt2YXIgbD10aGlzLmNhY2hlZENhbnZhc2VzLmdldENhbnZhcygibWFza0NhbnZhcyIsbixhKSxjPWwuY29udGV4dDtjLnNhdmUoKSxyKGMsZSksYy5nbG9iYWxDb21wb3NpdGVPcGVyYXRpb249InNvdXJjZS1pbiIsYy5maWxsU3R5bGU9bz9pLmdldFBhdHRlcm4oYyx0aGlzKTppLGMuZmlsbFJlY3QoMCwwLG4sYSksYy5yZXN0b3JlKCksdGhpcy5wYWludElubGluZUltYWdlWE9iamVjdChsLmNhbnZhcyl9fSxwYWludEltYWdlTWFza1hPYmplY3RSZXBlYXQ6ZnVuY3Rpb24oZSx0LG4sYSl7dmFyIGk9ZS53aWR0aCxvPWUuaGVpZ2h0LHM9dGhpcy5jdXJyZW50LmZpbGxDb2xvcixsPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxjPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJtYXNrQ2FudmFzIixpLG8pLHU9Yy5jb250ZXh0O3Uuc2F2ZSgpLHIodSxlKSx1Lmdsb2JhbENvbXBvc2l0ZU9wZXJhdGlvbj0ic291cmNlLWluIix1LmZpbGxTdHlsZT1sP3MuZ2V0UGF0dGVybih1LHRoaXMpOnMsdS5maWxsUmVjdCgwLDAsaSxvKSx1LnJlc3RvcmUoKTtmb3IodmFyIGY9dGhpcy5jdHgsaD0wLGQ9YS5sZW5ndGg7aDxkO2grPTIpZi5zYXZlKCksZi50cmFuc2Zvcm0odCwwLDAsbixhW2hdLGFbaCsxXSksZi5zY2FsZSgxLC0xKSxmLmRyYXdJbWFnZShjLmNhbnZhcywwLDAsaSxvLDAsLTEsMSwxKSxmLnJlc3RvcmUoKX0scGFpbnRJbWFnZU1hc2tYT2JqZWN0R3JvdXA6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMuY3R4LG49dGhpcy5jdXJyZW50LmZpbGxDb2xvcixhPXRoaXMuY3VycmVudC5wYXR0ZXJuRmlsbCxpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXt2YXIgcz1lW2ldLGw9cy53aWR0aCxjPXMuaGVpZ2h0LHU9dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoIm1hc2tDYW52YXMiLGwsYyksZj11LmNvbnRleHQ7Zi5zYXZlKCkscihmLHMpLGYuZ2xvYmFsQ29tcG9zaXRlT3BlcmF0aW9uPSJzb3VyY2UtaW4iLGYuZmlsbFN0eWxlPWE/bi5nZXRQYXR0ZXJuKGYsdGhpcyk6bixmLmZpbGxSZWN0KDAsMCxsLGMpLGYucmVzdG9yZSgpLHQuc2F2ZSgpLHQudHJhbnNmb3JtLmFwcGx5KHQscy50cmFuc2Zvcm0pLHQuc2NhbGUoMSwtMSksdC5kcmF3SW1hZ2UodS5jYW52YXMsMCwwLGwsYywwLC0xLDEsMSksdC5yZXN0b3JlKCl9fSxwYWludEltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9ianMuZ2V0KGUpO3Q/dGhpcy5wYWludElubGluZUltYWdlWE9iamVjdCh0KTooMCxuLndhcm4pKCJEZXBlbmRlbnQgaW1hZ2UgaXNuJ3QgcmVhZHkgeWV0Iil9LHBhaW50SW1hZ2VYT2JqZWN0UmVwZWF0OmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpPXRoaXMub2Jqcy5nZXQoZSk7aWYoaSl7Zm9yKHZhciBvPWkud2lkdGgscz1pLmhlaWdodCxsPVtdLGM9MCx1PWEubGVuZ3RoO2M8dTtjKz0yKWwucHVzaCh7dHJhbnNmb3JtOlt0LDAsMCxyLGFbY10sYVtjKzFdXSx4OjAseTowLHc6byxoOnN9KTt0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXAoaSxsKX1lbHNlKDAsbi53YXJuKSgiRGVwZW5kZW50IGltYWdlIGlzbid0IHJlYWR5IHlldCIpfSxwYWludElubGluZUltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgcj1lLndpZHRoLG49ZS5oZWlnaHQsYT10aGlzLmN0eDt0aGlzLnNhdmUoKSxhLnNjYWxlKDEvciwtMS9uKTt2YXIgaSxvLHM9YS5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZSxsPXNbMF0sYz1zWzFdLHU9TWF0aC5tYXgoTWF0aC5zcXJ0KGwqbCtjKmMpLDEpLGY9c1syXSxoPXNbM10sZD1NYXRoLm1heChNYXRoLnNxcnQoZipmK2gqaCksMSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIEhUTUxFbGVtZW50JiZlIGluc3RhbmNlb2YgSFRNTEVsZW1lbnR8fCFlLmRhdGEpaT1lO2Vsc2V7dmFyIHA9KG89dGhpcy5jYWNoZWRDYW52YXNlcy5nZXRDYW52YXMoImlubGluZUltYWdlIixyLG4pKS5jb250ZXh0O3QocCxlKSxpPW8uY2FudmFzfWZvcih2YXIgbT1yLGc9bix2PSJwcmVzY2FsZTEiO3U+MiYmbT4xfHxkPjImJmc+MTspe3ZhciB5PW0sYj1nO3U+MiYmbT4xJiYodS89bS8oeT1NYXRoLmNlaWwobS8yKSkpLGQ+MiYmZz4xJiYoZC89Zy8oYj1NYXRoLmNlaWwoZy8yKSkpLChwPShvPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKHYseSxiKSkuY29udGV4dCkuY2xlYXJSZWN0KDAsMCx5LGIpLHAuZHJhd0ltYWdlKGksMCwwLG0sZywwLDAseSxiKSxpPW8uY2FudmFzLG09eSxnPWIsdj0icHJlc2NhbGUxIj09PXY/InByZXNjYWxlMiI6InByZXNjYWxlMSJ9aWYoYS5kcmF3SW1hZ2UoaSwwLDAsbSxnLDAsLW4scixuKSx0aGlzLmltYWdlTGF5ZXIpe3ZhciB3PXRoaXMuZ2V0Q2FudmFzUG9zaXRpb24oMCwtbik7dGhpcy5pbWFnZUxheWVyLmFwcGVuZEltYWdlKHtpbWdEYXRhOmUsbGVmdDp3WzBdLHRvcDp3WzFdLHdpZHRoOnIvc1swXSxoZWlnaHQ6bi9zWzNdfSl9dGhpcy5yZXN0b3JlKCl9LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ZnVuY3Rpb24oZSxyKXt2YXIgbj10aGlzLmN0eCxhPWUud2lkdGgsaT1lLmhlaWdodCxvPXRoaXMuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJpbmxpbmVJbWFnZSIsYSxpKTt0KG8uY29udGV4dCxlKTtmb3IodmFyIHM9MCxsPXIubGVuZ3RoO3M8bDtzKyspe3ZhciBjPXJbc107aWYobi5zYXZlKCksbi50cmFuc2Zvcm0uYXBwbHkobixjLnRyYW5zZm9ybSksbi5zY2FsZSgxLC0xKSxuLmRyYXdJbWFnZShvLmNhbnZhcyxjLngsYy55LGMudyxjLmgsMCwtMSwxLDEpLHRoaXMuaW1hZ2VMYXllcil7dmFyIHU9dGhpcy5nZXRDYW52YXNQb3NpdGlvbihjLngsYy55KTt0aGlzLmltYWdlTGF5ZXIuYXBwZW5kSW1hZ2Uoe2ltZ0RhdGE6ZSxsZWZ0OnVbMF0sdG9wOnVbMV0sd2lkdGg6YSxoZWlnaHQ6aX0pfW4ucmVzdG9yZSgpfX0scGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOmZ1bmN0aW9uKCl7dGhpcy5jdHguZmlsbFJlY3QoMCwwLDEsMSl9LHBhaW50WE9iamVjdDpmdW5jdGlvbigpeygwLG4ud2FybikoIlVuc3VwcG9ydGVkICdwYWludFhPYmplY3QnIGNvbW1hbmQuIil9LG1hcmtQb2ludDpmdW5jdGlvbihlKXt9LG1hcmtQb2ludFByb3BzOmZ1bmN0aW9uKGUsdCl7fSxiZWdpbk1hcmtlZENvbnRlbnQ6ZnVuY3Rpb24oZSl7fSxiZWdpbk1hcmtlZENvbnRlbnRQcm9wczpmdW5jdGlvbihlLHQpe30sZW5kTWFya2VkQ29udGVudDpmdW5jdGlvbigpe30sYmVnaW5Db21wYXQ6ZnVuY3Rpb24oKXt9LGVuZENvbXBhdDpmdW5jdGlvbigpe30sY29uc3VtZVBhdGg6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmN0eDt0aGlzLnBlbmRpbmdDbGlwJiYodGhpcy5wZW5kaW5nQ2xpcD09PXk/ZS5jbGlwKCJldmVub2RkIik6ZS5jbGlwKCksdGhpcy5wZW5kaW5nQ2xpcD1udWxsKSxlLmJlZ2luUGF0aCgpfSxnZXRTaW5nbGVQaXhlbFdpZHRoOmZ1bmN0aW9uKGUpe2lmKG51bGw9PT10aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoKXt2YXIgdD10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtSW52ZXJzZTt0aGlzLl9jYWNoZWRHZXRTaW5nbGVQaXhlbFdpZHRoPU1hdGguc3FydChNYXRoLm1heCh0WzBdKnRbMF0rdFsxXSp0WzFdLHRbMl0qdFsyXSt0WzNdKnRbM10pKX1yZXR1cm4gdGhpcy5fY2FjaGVkR2V0U2luZ2xlUGl4ZWxXaWR0aH0sZ2V0Q2FudmFzUG9zaXRpb246ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmN0eC5tb3pDdXJyZW50VHJhbnNmb3JtO3JldHVybltyWzBdKmUrclsyXSp0K3JbNF0sclsxXSplK3JbM10qdCtyWzVdXX19LG4uT1BTKWUucHJvdG90eXBlW24uT1BTW2JdXT1lLnByb3RvdHlwZVtiXTtyZXR1cm4gZX0oKTt0LkNhbnZhc0dyYXBoaWNzPWN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0U2hhZGluZ1BhdHRlcm5Gcm9tSVI9ZnVuY3Rpb24oZSl7dmFyIHQ9YVtlWzBdXTtpZighdCl0aHJvdyBuZXcgRXJyb3IoIlVua25vd24gSVIgdHlwZTogIi5jb25jYXQoZVswXSkpO3JldHVybiB0LmZyb21JUihlKX0sdC5UaWxpbmdQYXR0ZXJuPXZvaWQgMDt2YXIgbj1yKDEpLGE9e1JhZGlhbEF4aWFsOntmcm9tSVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZVsxXSxyPWVbMl0sbj1lWzNdLGE9ZVs0XSxpPWVbNV0sbz1lWzZdO3JldHVybnt0eXBlOiJQYXR0ZXJuIixnZXRQYXR0ZXJuOmZ1bmN0aW9uKGUpe3ZhciBzOyJheGlhbCI9PT10P3M9ZS5jcmVhdGVMaW5lYXJHcmFkaWVudChuWzBdLG5bMV0sYVswXSxhWzFdKToicmFkaWFsIj09PXQmJihzPWUuY3JlYXRlUmFkaWFsR3JhZGllbnQoblswXSxuWzFdLGksYVswXSxhWzFdLG8pKTtmb3IodmFyIGw9MCxjPXIubGVuZ3RoO2w8YzsrK2wpe3ZhciB1PXJbbF07cy5hZGRDb2xvclN0b3AodVswXSx1WzFdKX1yZXR1cm4gc319fX19LGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpLG8scyl7dmFyIGwsYz10LmNvb3Jkcyx1PXQuY29sb3JzLGY9ZS5kYXRhLGg9NCplLndpZHRoO2NbcisxXT5jW24rMV0mJihsPXIscj1uLG49bCxsPWksaT1vLG89bCksY1tuKzFdPmNbYSsxXSYmKGw9bixuPWEsYT1sLGw9byxvPXMscz1sKSxjW3IrMV0+Y1tuKzFdJiYobD1yLHI9bixuPWwsbD1pLGk9byxvPWwpO3ZhciBkPShjW3JdK3Qub2Zmc2V0WCkqdC5zY2FsZVgscD0oY1tyKzFdK3Qub2Zmc2V0WSkqdC5zY2FsZVksbT0oY1tuXSt0Lm9mZnNldFgpKnQuc2NhbGVYLGc9KGNbbisxXSt0Lm9mZnNldFkpKnQuc2NhbGVZLHY9KGNbYV0rdC5vZmZzZXRYKSp0LnNjYWxlWCx5PShjW2ErMV0rdC5vZmZzZXRZKSp0LnNjYWxlWTtpZighKHA+PXkpKWZvcih2YXIgYix3LGssUyxfLHgsQSxDLFAsRT11W2ldLFQ9dVtpKzFdLFI9dVtpKzJdLE89dVtvXSxJPXVbbysxXSxGPXVbbysyXSxMPXVbc10sRD11W3MrMV0sTj11W3MrMl0sTT1NYXRoLnJvdW5kKHApLGo9TWF0aC5yb3VuZCh5KSxCPU07Qjw9ajtCKyspe0I8Zz8oYj1kLShkLW0pKihQPUI8cD8wOnA9PT1nPzE6KHAtQikvKHAtZykpLHc9RS0oRS1PKSpQLGs9VC0oVC1JKSpQLFM9Ui0oUi1GKSpQKTooYj1tLShtLXYpKihQPUI+eT8xOmc9PT15PzA6KGctQikvKGcteSkpLHc9Ty0oTy1MKSpQLGs9SS0oSS1EKSpQLFM9Ri0oRi1OKSpQKSxfPWQtKGQtdikqKFA9QjxwPzA6Qj55PzE6KHAtQikvKHAteSkpLHg9RS0oRS1MKSpQLEE9VC0oVC1EKSpQLEM9Ui0oUi1OKSpQO2Zvcih2YXIgVT1NYXRoLnJvdW5kKE1hdGgubWluKGIsXykpLHE9TWF0aC5yb3VuZChNYXRoLm1heChiLF8pKSx6PWgqQis0KlUsVz1VO1c8PXE7VysrKVA9KFA9KGItVykvKGItXykpPDA/MDpQPjE/MTpQLGZbeisrXT13LSh3LXgpKlB8MCxmW3orK109ay0oay1BKSpQfDAsZlt6KytdPVMtKFMtQykqUHwwLGZbeisrXT0yNTV9fWZ1bmN0aW9uIHQodCxyLG4pe3ZhciBhLGksbz1yLmNvb3JkcyxzPXIuY29sb3JzO3N3aXRjaChyLnR5cGUpe2Nhc2UibGF0dGljZSI6dmFyIGw9ci52ZXJ0aWNlc1BlclJvdyxjPU1hdGguZmxvb3Ioby5sZW5ndGgvbCktMSx1PWwtMTtmb3IoYT0wO2E8YzthKyspZm9yKHZhciBmPWEqbCxoPTA7aDx1O2grKyxmKyspZSh0LG4sb1tmXSxvW2YrMV0sb1tmK2xdLHNbZl0sc1tmKzFdLHNbZitsXSksZSh0LG4sb1tmK2wrMV0sb1tmKzFdLG9bZitsXSxzW2YrbCsxXSxzW2YrMV0sc1tmK2xdKTticmVhaztjYXNlInRyaWFuZ2xlcyI6Zm9yKGE9MCxpPW8ubGVuZ3RoO2E8aTthKz0zKWUodCxuLG9bYV0sb1thKzFdLG9bYSsyXSxzW2FdLHNbYSsxXSxzW2ErMl0pO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJpbGxlZ2FsIGZpZ3VyZSIpfX1yZXR1cm4gZnVuY3Rpb24oZSxyLG4sYSxpLG8scyxsKXt2YXIgYyx1LGYsaCxkPU1hdGguZmxvb3IoZVswXSkscD1NYXRoLmZsb29yKGVbMV0pLG09TWF0aC5jZWlsKGVbMl0pLWQsZz1NYXRoLmNlaWwoZVszXSktcCx2PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhtKnJbMF0qMS4xKSksM2UzKSx5PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyhnKnJbMV0qMS4xKSksM2UzKSxiPW0vdix3PWcveSxrPXtjb29yZHM6bixjb2xvcnM6YSxvZmZzZXRYOi1kLG9mZnNldFk6LXAsc2NhbGVYOjEvYixzY2FsZVk6MS93fSxTPXYrNCxfPXkrNDtpZihsLmlzRW5hYmxlZCljPWwuZHJhd0ZpZ3VyZXMoe3dpZHRoOnYsaGVpZ2h0OnksYmFja2dyb3VuZENvbG9yOm8sZmlndXJlczppLGNvbnRleHQ6a30pLCh1PXMuZ2V0Q2FudmFzKCJtZXNoIixTLF8sITEpKS5jb250ZXh0LmRyYXdJbWFnZShjLDIsMiksYz11LmNhbnZhcztlbHNle3ZhciB4PSh1PXMuZ2V0Q2FudmFzKCJtZXNoIixTLF8sITEpKS5jb250ZXh0LEE9eC5jcmVhdGVJbWFnZURhdGEodix5KTtpZihvKXt2YXIgQz1BLmRhdGE7Zm9yKGY9MCxoPUMubGVuZ3RoO2Y8aDtmKz00KUNbZl09b1swXSxDW2YrMV09b1sxXSxDW2YrMl09b1syXSxDW2YrM109MjU1fWZvcihmPTA7ZjxpLmxlbmd0aDtmKyspdChBLGlbZl0sayk7eC5wdXRJbWFnZURhdGEoQSwyLDIpLGM9dS5jYW52YXN9cmV0dXJue2NhbnZhczpjLG9mZnNldFg6ZC0yKmIsb2Zmc2V0WTpwLTIqdyxzY2FsZVg6YixzY2FsZVk6d319fSgpO2EuTWVzaD17ZnJvbUlSOmZ1bmN0aW9uKGUpe3ZhciB0PWVbMl0scj1lWzNdLGE9ZVs0XSxvPWVbNV0scz1lWzZdLGw9ZVs4XTtyZXR1cm57dHlwZToiUGF0dGVybiIsZ2V0UGF0dGVybjpmdW5jdGlvbihlLGMsdSl7dmFyIGY7aWYodSlmPW4uVXRpbC5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZShlLm1vekN1cnJlbnRUcmFuc2Zvcm0pO2Vsc2UgaWYoZj1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUoYy5iYXNlVHJhbnNmb3JtKSxzKXt2YXIgaD1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUocyk7Zj1bZlswXSpoWzBdLGZbMV0qaFsxXV19dmFyIGQ9aShvLGYsdCxyLGEsdT9udWxsOmwsYy5jYWNoZWRDYW52YXNlcyxjLndlYkdMQ29udGV4dCk7cmV0dXJuIHV8fChlLnNldFRyYW5zZm9ybS5hcHBseShlLGMuYmFzZVRyYW5zZm9ybSkscyYmZS50cmFuc2Zvcm0uYXBwbHkoZSxzKSksZS50cmFuc2xhdGUoZC5vZmZzZXRYLGQub2Zmc2V0WSksZS5zY2FsZShkLnNjYWxlWCxkLnNjYWxlWSksZS5jcmVhdGVQYXR0ZXJuKGQuY2FudmFzLCJuby1yZXBlYXQiKX19fX0sYS5EdW1teT17ZnJvbUlSOmZ1bmN0aW9uKCl7cmV0dXJue3R5cGU6IlBhdHRlcm4iLGdldFBhdHRlcm46ZnVuY3Rpb24oKXtyZXR1cm4iaG90cGluayJ9fX19O3ZhciBvPWZ1bmN0aW9uKCl7dmFyIGU9MSx0PTI7ZnVuY3Rpb24gcihlLHQscixuLGEpe3RoaXMub3BlcmF0b3JMaXN0PWVbMl0sdGhpcy5tYXRyaXg9ZVszXXx8WzEsMCwwLDEsMCwwXSx0aGlzLmJib3g9ZVs0XSx0aGlzLnhzdGVwPWVbNV0sdGhpcy55c3RlcD1lWzZdLHRoaXMucGFpbnRUeXBlPWVbN10sdGhpcy50aWxpbmdUeXBlPWVbOF0sdGhpcy5jb2xvcj10LHRoaXMuY2FudmFzR3JhcGhpY3NGYWN0b3J5PW4sdGhpcy5iYXNlVHJhbnNmb3JtPWEsdGhpcy50eXBlPSJQYXR0ZXJuIix0aGlzLmN0eD1yfXJldHVybiByLnByb3RvdHlwZT17Y3JlYXRlUGF0dGVybkNhbnZhczpmdW5jdGlvbihlKXt2YXIgdD10aGlzLm9wZXJhdG9yTGlzdCxyPXRoaXMuYmJveCxhPXRoaXMueHN0ZXAsaT10aGlzLnlzdGVwLG89dGhpcy5wYWludFR5cGUscz10aGlzLnRpbGluZ1R5cGUsbD10aGlzLmNvbG9yLGM9dGhpcy5jYW52YXNHcmFwaGljc0ZhY3Rvcnk7KDAsbi5pbmZvKSgiVGlsaW5nVHlwZTogIitzKTt2YXIgdT1yWzBdLGY9clsxXSxoPXJbMl0sZD1yWzNdLHA9W3UsZl0sbT1bdSthLGYraV0sZz1tWzBdLXBbMF0sdj1tWzFdLXBbMV0seT1uLlV0aWwuc2luZ3VsYXJWYWx1ZURlY29tcG9zZTJkU2NhbGUodGhpcy5tYXRyaXgpLGI9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHRoaXMuYmFzZVRyYW5zZm9ybSksdz1beVswXSpiWzBdLHlbMV0qYlsxXV07Zz1NYXRoLm1pbihNYXRoLmNlaWwoTWF0aC5hYnMoZyp3WzBdKSksM2UzKSx2PU1hdGgubWluKE1hdGguY2VpbChNYXRoLmFicyh2KndbMV0pKSwzZTMpO3ZhciBrPWUuY2FjaGVkQ2FudmFzZXMuZ2V0Q2FudmFzKCJwYXR0ZXJuIixnLHYsITApLFM9ay5jb250ZXh0LF89Yy5jcmVhdGVDYW52YXNHcmFwaGljcyhTKTtfLmdyb3VwTGV2ZWw9ZS5ncm91cExldmVsLHRoaXMuc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0KF8sbyxsKSx0aGlzLnNldFNjYWxlKGcsdixhLGkpLHRoaXMudHJhbnNmb3JtVG9TY2FsZShfKTt2YXIgeD1bMSwwLDAsMSwtcFswXSwtcFsxXV07cmV0dXJuIF8udHJhbnNmb3JtLmFwcGx5KF8seCksdGhpcy5jbGlwQmJveChfLHIsdSxmLGgsZCksXy5leGVjdXRlT3BlcmF0b3JMaXN0KHQpLGsuY2FudmFzfSxzZXRTY2FsZTpmdW5jdGlvbihlLHQscixuKXt0aGlzLnNjYWxlPVtlL3IsdC9uXX0sdHJhbnNmb3JtVG9TY2FsZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnNjYWxlLHI9W3RbMF0sMCwwLHRbMV0sMCwwXTtlLnRyYW5zZm9ybS5hcHBseShlLHIpfSxzY2FsZVRvQ29udGV4dDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc2NhbGU7dGhpcy5jdHguc2NhbGUoMS9lWzBdLDEvZVsxXSl9LGNsaXBCYm94OmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXtpZihBcnJheS5pc0FycmF5KHQpJiY0PT09dC5sZW5ndGgpe3ZhciBvPWEtcixzPWktbjtlLmN0eC5yZWN0KHIsbixvLHMpLGUuY2xpcCgpLGUuZW5kUGF0aCgpfX0sc2V0RmlsbEFuZFN0cm9rZVN0eWxlVG9Db250ZXh0OmZ1bmN0aW9uKHIsYSxpKXt2YXIgbz1yLmN0eCxzPXIuY3VycmVudDtzd2l0Y2goYSl7Y2FzZSBlOnZhciBsPXRoaXMuY3R4O28uZmlsbFN0eWxlPWwuZmlsbFN0eWxlLG8uc3Ryb2tlU3R5bGU9bC5zdHJva2VTdHlsZSxzLmZpbGxDb2xvcj1sLmZpbGxTdHlsZSxzLnN0cm9rZUNvbG9yPWwuc3Ryb2tlU3R5bGU7YnJlYWs7Y2FzZSB0OnZhciBjPW4uVXRpbC5tYWtlQ3NzUmdiKGlbMF0saVsxXSxpWzJdKTtvLmZpbGxTdHlsZT1jLG8uc3Ryb2tlU3R5bGU9YyxzLmZpbGxDb2xvcj1jLHMuc3Ryb2tlQ29sb3I9YzticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnN1cHBvcnRlZCBwYWludCB0eXBlOiAiLmNvbmNhdChhKSl9fSxnZXRQYXR0ZXJuOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jcmVhdGVQYXR0ZXJuQ2FudmFzKHQpO3JldHVybihlPXRoaXMuY3R4KS5zZXRUcmFuc2Zvcm0uYXBwbHkoZSx0aGlzLmJhc2VUcmFuc2Zvcm0pLGUudHJhbnNmb3JtLmFwcGx5KGUsdGhpcy5tYXRyaXgpLHRoaXMuc2NhbGVUb0NvbnRleHQoKSxlLmNyZWF0ZVBhdHRlcm4ociwicmVwZWF0Iil9fSxyfSgpO3QuVGlsaW5nUGF0dGVybj1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lkdsb2JhbFdvcmtlck9wdGlvbnM9dm9pZCAwO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7dC5HbG9iYWxXb3JrZXJPcHRpb25zPW4sbi53b3JrZXJQb3J0PXZvaWQgMD09PW4ud29ya2VyUG9ydD9udWxsOm4ud29ya2VyUG9ydCxuLndvcmtlclNyYz12b2lkIDA9PT1uLndvcmtlclNyYz8iIjpuLndvcmtlclNyY30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NZXNzYWdlSGFuZGxlcj1wO3ZhciBuLGE9KG49cigxNDcpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0saT1yKDEpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBzKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gbChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtzKGksbixhLG8sbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtzKGksbixhLG8sbCwidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gYyhlLHQpe3JldHVybiB1LmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiB1KCl7cmV0dXJuKHU9bChhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3ZhciBuLGk9YXJndW1lbnRzO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobj1pLmxlbmd0aD4yJiZ2b2lkIDAhPT1pWzJdP2lbMl06bnVsbCx0KXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdC5hcHBseShuLHIpKTtjYXNlIDQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIGYoZSl7aWYoIm9iamVjdCIhPT1vKGUpKXJldHVybiBlO3N3aXRjaChlLm5hbWUpe2Nhc2UiQWJvcnRFeGNlcHRpb24iOnJldHVybiBuZXcgaS5BYm9ydEV4Y2VwdGlvbihlLm1lc3NhZ2UpO2Nhc2UiTWlzc2luZ1BERkV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLk1pc3NpbmdQREZFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbiI6cmV0dXJuIG5ldyBpLlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5zdGF0dXMpO2RlZmF1bHQ6cmV0dXJuIG5ldyBpLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS5kZXRhaWxzKX19ZnVuY3Rpb24gaChlKXtyZXR1cm4hKGUgaW5zdGFuY2VvZiBFcnJvcil8fGUgaW5zdGFuY2VvZiBpLkFib3J0RXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5NaXNzaW5nUERGRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb258fGUgaW5zdGFuY2VvZiBpLlVua25vd25FcnJvckV4Y2VwdGlvbj9lOm5ldyBpLlVua25vd25FcnJvckV4Y2VwdGlvbihlLm1lc3NhZ2UsZS50b1N0cmluZygpKX1mdW5jdGlvbiBkKGUsdCxyKXt0P2UucmVzb2x2ZSgpOmUucmVqZWN0KHIpfWZ1bmN0aW9uIHAoZSx0LHIpe3ZhciBuPXRoaXM7dGhpcy5zb3VyY2VOYW1lPWUsdGhpcy50YXJnZXROYW1lPXQsdGhpcy5jb21PYmo9cix0aGlzLmNhbGxiYWNrSWQ9MSx0aGlzLnN0cmVhbUlkPTEsdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz0hMCx0aGlzLnN0cmVhbVNpbmtzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5zdHJlYW1Db250cm9sbGVycz1PYmplY3QuY3JlYXRlKG51bGwpO3ZhciBhPXRoaXMuY2FsbGJhY2tzQ2FwYWJpbGl0aWVzPU9iamVjdC5jcmVhdGUobnVsbCksaT10aGlzLmFjdGlvbkhhbmRsZXI9T2JqZWN0LmNyZWF0ZShudWxsKTt0aGlzLl9vbkNvbU9iak9uTWVzc2FnZT1mdW5jdGlvbihlKXt2YXIgdD1lLmRhdGE7aWYodC50YXJnZXROYW1lPT09bi5zb3VyY2VOYW1lKWlmKHQuc3RyZWFtKW4uX3Byb2Nlc3NTdHJlYW1NZXNzYWdlKHQpO2Vsc2UgaWYodC5pc1JlcGx5KXt2YXIgbz10LmNhbGxiYWNrSWQ7aWYoISh0LmNhbGxiYWNrSWQgaW4gYSkpdGhyb3cgbmV3IEVycm9yKCJDYW5ub3QgcmVzb2x2ZSBjYWxsYmFjayAiLmNvbmNhdChvKSk7dmFyIHM9YVtvXTtkZWxldGUgYVtvXSwiZXJyb3IiaW4gdD9zLnJlamVjdChmKHQuZXJyb3IpKTpzLnJlc29sdmUodC5kYXRhKX1lbHNle2lmKCEodC5hY3Rpb24gaW4gaSkpdGhyb3cgbmV3IEVycm9yKCJVbmtub3duIGFjdGlvbiBmcm9tIHdvcmtlcjogIi5jb25jYXQodC5hY3Rpb24pKTt2YXIgbD1pW3QuYWN0aW9uXTtpZih0LmNhbGxiYWNrSWQpe3ZhciBjPW4uc291cmNlTmFtZSx1PXQuc291cmNlTmFtZTtQcm9taXNlLnJlc29sdmUoKS50aGVuKChmdW5jdGlvbigpe3JldHVybiBsWzBdLmNhbGwobFsxXSx0LmRhdGEpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3IucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6Yyx0YXJnZXROYW1lOnUsaXNSZXBseTohMCxjYWxsYmFja0lkOnQuY2FsbGJhY2tJZCxkYXRhOmV9KX0pLChmdW5jdGlvbihlKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmMsdGFyZ2V0TmFtZTp1LGlzUmVwbHk6ITAsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZXJyb3I6aChlKX0pfSkpfWVsc2UgdC5zdHJlYW1JZD9uLl9jcmVhdGVTdHJlYW1TaW5rKHQpOmxbMF0uY2FsbChsWzFdLHQuZGF0YSl9fSxyLmFkZEV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX1wLnByb3RvdHlwZT17b246ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuYWN0aW9uSGFuZGxlcjtpZihuW2VdKXRocm93IG5ldyBFcnJvcignVGhlcmUgaXMgYWxyZWFkeSBhbiBhY3Rpb25OYW1lIGNhbGxlZCAiJy5jb25jYXQoZSwnIicpKTtuW2VdPVt0LHJdfSxzZW5kOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj17c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0fTt0aGlzLnBvc3RNZXNzYWdlKG4scil9LHNlbmRXaXRoUHJvbWlzZTpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcy5jYWxsYmFja0lkKyssYT17c291cmNlTmFtZTp0aGlzLnNvdXJjZU5hbWUsdGFyZ2V0TmFtZTp0aGlzLnRhcmdldE5hbWUsYWN0aW9uOmUsZGF0YTp0LGNhbGxiYWNrSWQ6bn0sbz0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3RoaXMuY2FsbGJhY2tzQ2FwYWJpbGl0aWVzW25dPW87dHJ5e3RoaXMucG9zdE1lc3NhZ2UoYSxyKX1jYXRjaChlKXtvLnJlamVjdChlKX1yZXR1cm4gby5wcm9taXNlfSxzZW5kV2l0aFN0cmVhbTpmdW5jdGlvbihlLHQscixuKXt2YXIgYT10aGlzLG89dGhpcy5zdHJlYW1JZCsrLHM9dGhpcy5zb3VyY2VOYW1lLGw9dGhpcy50YXJnZXROYW1lO3JldHVybiBuZXcgaS5SZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24ocil7dmFyIG49KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXT17Y29udHJvbGxlcjpyLHN0YXJ0Q2FsbDpuLGlzQ2xvc2VkOiExfSxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLGFjdGlvbjplLHN0cmVhbUlkOm8sZGF0YTp0LGRlc2lyZWRTaXplOnIuZGVzaXJlZFNpemV9KSxuLnByb21pc2V9LHB1bGw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5wdWxsQ2FsbD10LGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOmwsc3RyZWFtOiJwdWxsIixzdHJlYW1JZDpvLGRlc2lyZWRTaXplOmUuZGVzaXJlZFNpemV9KSx0LnByb21pc2V9LGNhbmNlbDpmdW5jdGlvbihlKXt2YXIgdD0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3JldHVybiBhLnN0cmVhbUNvbnRyb2xsZXJzW29dLmNhbmNlbENhbGw9dCxhLnN0cmVhbUNvbnRyb2xsZXJzW29dLmlzQ2xvc2VkPSEwLGEucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cyx0YXJnZXROYW1lOmwsc3RyZWFtOiJjYW5jZWwiLHJlYXNvbjplLHN0cmVhbUlkOm99KSx0LnByb21pc2V9fSxyKX0sX2NyZWF0ZVN0cmVhbVNpbms6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMsbj10aGlzLmFjdGlvbkhhbmRsZXJbZS5hY3Rpb25dLGE9ZS5zdHJlYW1JZCxvPWUuZGVzaXJlZFNpemUscz10aGlzLnNvdXJjZU5hbWUsbD1lLnNvdXJjZU5hbWUsdT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLGY9ZnVuY3Rpb24oZSl7dmFyIHI9ZS5zdHJlYW0sbj1lLmNodW5rLGk9ZS50cmFuc2ZlcnMsbz1lLnN1Y2Nlc3MsYz1lLnJlYXNvbjt0LnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbTpyLHN0cmVhbUlkOmEsY2h1bms6bixzdWNjZXNzOm8scmVhc29uOmN9LGkpfSxoPXtlbnF1ZXVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToxLHI9YXJndW1lbnRzLmxlbmd0aD4yP2FyZ3VtZW50c1syXTp2b2lkIDA7aWYoIXRoaXMuaXNDYW5jZWxsZWQpe3ZhciBuPXRoaXMuZGVzaXJlZFNpemU7dGhpcy5kZXNpcmVkU2l6ZS09dCxuPjAmJnRoaXMuZGVzaXJlZFNpemU8PTAmJih0aGlzLnNpbmtDYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5yZWFkeT10aGlzLnNpbmtDYXBhYmlsaXR5LnByb21pc2UpLGYoe3N0cmVhbToiZW5xdWV1ZSIsY2h1bms6ZSx0cmFuc2ZlcnM6cn0pfX0sY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLmlzQ2FuY2VsbGVkfHwodGhpcy5pc0NhbmNlbGxlZD0hMCxmKHtzdHJlYW06ImNsb3NlIn0pLGRlbGV0ZSByLnN0cmVhbVNpbmtzW2FdKX0sZXJyb3I6ZnVuY3Rpb24oZSl7dGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsZih7c3RyZWFtOiJlcnJvciIscmVhc29uOmV9KSl9LHNpbmtDYXBhYmlsaXR5OnUsb25QdWxsOm51bGwsb25DYW5jZWw6bnVsbCxpc0NhbmNlbGxlZDohMSxkZXNpcmVkU2l6ZTpvLHJlYWR5Om51bGx9O2guc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLGgucmVhZHk9aC5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlLHRoaXMuc3RyZWFtU2lua3NbYV09aCxjKG5bMF0sW2UuZGF0YSxoXSxuWzFdKS50aGVuKChmdW5jdGlvbigpe2Yoe3N0cmVhbToic3RhcnRfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtmKHtzdHJlYW06InN0YXJ0X2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSl9LF9wcm9jZXNzU3RyZWFtTWVzc2FnZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9dGhpcy5zb3VyY2VOYW1lLG49ZS5zb3VyY2VOYW1lLGE9ZS5zdHJlYW1JZCxvPWZ1bmN0aW9uKGUpe3ZhciBpPWUuc3RyZWFtLG89ZS5zdWNjZXNzLHM9ZS5yZWFzb247dC5jb21PYmoucG9zdE1lc3NhZ2Uoe3NvdXJjZU5hbWU6cix0YXJnZXROYW1lOm4sc3RyZWFtOmksc3VjY2VzczpvLHN0cmVhbUlkOmEscmVhc29uOnN9KX0scz1mdW5jdGlvbigpe1Byb21pc2UuYWxsKFt0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLnN0YXJ0Q2FsbCx0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLnB1bGxDYWxsLHQuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY2FuY2VsQ2FsbF0ubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gZSYmKHQ9ZS5wcm9taXNlLFByb21pc2UucmVzb2x2ZSh0KS5jYXRjaCgoZnVuY3Rpb24oKXt9KSkpO3ZhciB0fSkpKS50aGVuKChmdW5jdGlvbigpe2RlbGV0ZSB0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdfSkpfTtzd2l0Y2goZS5zdHJlYW0pe2Nhc2Uic3RhcnRfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5zdGFydENhbGwsZS5zdWNjZXNzLGYoZS5yZWFzb24pKTticmVhaztjYXNlInB1bGxfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5wdWxsQ2FsbCxlLnN1Y2Nlc3MsZihlLnJlYXNvbikpO2JyZWFrO2Nhc2UicHVsbCI6aWYoIXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0pe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pO2JyZWFrfXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uZGVzaXJlZFNpemU8PTAmJmUuZGVzaXJlZFNpemU+MCYmdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5zaW5rQ2FwYWJpbGl0eS5yZXNvbHZlKCksdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5kZXNpcmVkU2l6ZT1lLmRlc2lyZWRTaXplLGModGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5vblB1bGwpLnRoZW4oKGZ1bmN0aW9uKCl7byh7c3RyZWFtOiJwdWxsX2NvbXBsZXRlIixzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7byh7c3RyZWFtOiJwdWxsX2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSk7YnJlYWs7Y2FzZSJlbnF1ZXVlIjooMCxpLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXSwiZW5xdWV1ZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWR8fHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY29udHJvbGxlci5lbnF1ZXVlKGUuY2h1bmspO2JyZWFrO2Nhc2UiY2xvc2UiOmlmKCgwLGkuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLCJjbG9zZSBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWQpYnJlYWs7dGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5pc0Nsb3NlZD0hMCx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNvbnRyb2xsZXIuY2xvc2UoKSxzKCk7YnJlYWs7Y2FzZSJlcnJvciI6KDAsaS5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0sImVycm9yIHNob3VsZCBoYXZlIHN0cmVhbSBjb250cm9sbGVyIiksdGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jb250cm9sbGVyLmVycm9yKGYoZS5yZWFzb24pKSxzKCk7YnJlYWs7Y2FzZSJjYW5jZWxfY29tcGxldGUiOmQodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jYW5jZWxDYWxsLGUuc3VjY2VzcyxmKGUucmVhc29uKSkscygpO2JyZWFrO2Nhc2UiY2FuY2VsIjppZighdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXSlicmVhaztjKHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0ub25DYW5jZWwsW2YoZS5yZWFzb24pXSkudGhlbigoZnVuY3Rpb24oKXtvKHtzdHJlYW06ImNhbmNlbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe28oe3N0cmVhbToiY2FuY2VsX2NvbXBsZXRlIixzdWNjZXNzOiExLHJlYXNvbjplfSl9KSksdGhpcy5zdHJlYW1TaW5rc1tlLnN0cmVhbUlkXS5zaW5rQ2FwYWJpbGl0eS5yZWplY3QoZihlLnJlYXNvbikpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uaXNDYW5jZWxsZWQ9ITAsZGVsZXRlIHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoIlVuZXhwZWN0ZWQgc3RyZWFtIGNhc2UiKX19LHBvc3RNZXNzYWdlOmZ1bmN0aW9uKGUsdCl7dCYmdGhpcy5wb3N0TWVzc2FnZVRyYW5zZmVycz90aGlzLmNvbU9iai5wb3N0TWVzc2FnZShlLHQpOnRoaXMuY29tT2JqLnBvc3RNZXNzYWdlKGUpfSxkZXN0cm95OmZ1bmN0aW9uKCl7dGhpcy5jb21PYmoucmVtb3ZlRXZlbnRMaXN0ZW5lcigibWVzc2FnZSIsdGhpcy5fb25Db21PYmpPbk1lc3NhZ2UpfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTWV0YWRhdGE9dm9pZCAwO3ZhciBuPXIoMSksYT1yKDE1OSk7ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSwoMCxuLmFzc2VydCkoInN0cmluZyI9PXR5cGVvZiB0LCJNZXRhZGF0YTogaW5wdXQgaXMgbm90IGEgc3RyaW5nIiksdD10aGlzLl9yZXBhaXIodCk7dmFyIHI9KG5ldyBhLlNpbXBsZVhNTFBhcnNlcikucGFyc2VGcm9tU3RyaW5nKHQpO3RoaXMuX21ldGFkYXRhPU9iamVjdC5jcmVhdGUobnVsbCksciYmdGhpcy5fcGFyc2Uocil9dmFyIHQscixvO3JldHVybiB0PWUsKHI9W3trZXk6Il9yZXBhaXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBlLnJlcGxhY2UoL14oW148XSspLywiIikucmVwbGFjZSgvPlxcMzc2XFwzNzcoW148XSspL2csKGZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXQucmVwbGFjZSgvXFwoWzAtM10pKFswLTddKShbMC03XSkvZywoZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoNjQqdCs4KnIrMSpuKX0pKS5yZXBsYWNlKC8mKGFtcHxhcG9zfGd0fGx0fHF1b3QpOy9nLChmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UiYXBvcyI6cmV0dXJuIiciO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImx0IjpyZXR1cm4iPCI7Y2FzZSJxdW90IjpyZXR1cm4nIid9dGhyb3cgbmV3IEVycm9yKCJfcmVwYWlyOiAiLmNvbmNhdCh0LCIgaXNuJ3QgZGVmaW5lZC4iKSl9KSksbj0iIixhPTAsaT1yLmxlbmd0aDthPGk7YSs9Mil7dmFyIG89MjU2KnIuY2hhckNvZGVBdChhKStyLmNoYXJDb2RlQXQoYSsxKTtuKz1vPj0zMiYmbzwxMjcmJjYwIT09byYmNjIhPT1vJiYzOCE9PW8/U3RyaW5nLmZyb21DaGFyQ29kZShvKToiJiN4IisoNjU1MzYrbykudG9TdHJpbmcoMTYpLnN1YnN0cmluZygxKSsiOyJ9cmV0dXJuIj4iK259KSl9fSx7a2V5OiJfcGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuZG9jdW1lbnRFbGVtZW50O2lmKCJyZGY6cmRmIiE9PXQubm9kZU5hbWUudG9Mb3dlckNhc2UoKSlmb3IodD10LmZpcnN0Q2hpbGQ7dCYmInJkZjpyZGYiIT09dC5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpOyl0PXQubmV4dFNpYmxpbmc7dmFyIHI9dD90Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk6bnVsbDtpZih0JiYicmRmOnJkZiI9PT1yJiZ0Lmhhc0NoaWxkTm9kZXMoKSlmb3IodmFyIG49dC5jaGlsZE5vZGVzLGE9MCxpPW4ubGVuZ3RoO2E8aTthKyspe3ZhciBvPW5bYV07aWYoInJkZjpkZXNjcmlwdGlvbiI9PT1vLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCkpZm9yKHZhciBzPTAsbD1vLmNoaWxkTm9kZXMubGVuZ3RoO3M8bDtzKyspaWYoIiN0ZXh0IiE9PW8uY2hpbGROb2Rlc1tzXS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpKXt2YXIgYz1vLmNoaWxkTm9kZXNbc10sdT1jLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7dGhpcy5fbWV0YWRhdGFbdV09Yy50ZXh0Q29udGVudC50cmltKCl9fX19LHtrZXk6ImdldCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWV0YWRhdGFbZV07cmV0dXJuIHZvaWQgMCE9PXQ/dDpudWxsfX0se2tleToiZ2V0QWxsIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9tZXRhZGF0YX19LHtrZXk6ImhhcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PXRoaXMuX21ldGFkYXRhW2VdfX1dKSYmaSh0LnByb3RvdHlwZSxyKSxvJiZpKHQsbyksZX0oKTt0Lk1ldGFkYXRhPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGEoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfWZ1bmN0aW9uIGkoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1uKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gbyhlLHQscil7cmV0dXJuKG89InVuZGVmaW5lZCIhPXR5cGVvZiBSZWZsZWN0JiZSZWZsZWN0LmdldD9SZWZsZWN0LmdldDpmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSx0KXtmb3IoOyFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KSYmbnVsbCE9PShlPXMoZSkpOyk7cmV0dXJuIGV9KGUsdCk7aWYobil7dmFyIGE9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihuLHQpO3JldHVybiBhLmdldD9hLmdldC5jYWxsKHIpOmEudmFsdWV9fSkoZSx0LHJ8fGUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuKHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGwoZSx0KXtyZXR1cm4obD1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gYyhlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHUoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBmKGUsdCxyKXtyZXR1cm4gdCYmdShlLnByb3RvdHlwZSx0KSxyJiZ1KGUsciksZX1PYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5TaW1wbGVYTUxQYXJzZXI9dm9pZCAwO3ZhciBoPTAsZD0tMixwPS0zLG09LTQsZz0tNSx2PS02LHk9LTk7ZnVuY3Rpb24gYihlLHQpe3ZhciByPWVbdF07cmV0dXJuIiAiPT09cnx8IlxuIj09PXJ8fCJcciI9PT1yfHwiXHQiPT09cn12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXtjKHRoaXMsZSl9cmV0dXJuIGYoZSxbe2tleToiX3Jlc29sdmVFbnRpdGllcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcztyZXR1cm4gZS5yZXBsYWNlKC8mKFteO10rKTsvZywoZnVuY3Rpb24oZSxyKXtpZigiI3giPT09ci5zdWJzdHJpbmcoMCwyKSlyZXR1cm4gU3RyaW5nLmZyb21DaGFyQ29kZShwYXJzZUludChyLnN1YnN0cmluZygyKSwxNikpO2lmKCIjIj09PXIuc3Vic3RyaW5nKDAsMSkpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUocGFyc2VJbnQoci5zdWJzdHJpbmcoMSksMTApKTtzd2l0Y2gocil7Y2FzZSJsdCI6cmV0dXJuIjwiO2Nhc2UiZ3QiOnJldHVybiI+IjtjYXNlImFtcCI6cmV0dXJuIiYiO2Nhc2UicXVvdCI6cmV0dXJuJyInfXJldHVybiB0Lm9uUmVzb2x2ZUVudGl0eShyKX0pKX19LHtrZXk6Il9wYXJzZUNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10LGE9W107ZnVuY3Rpb24gaSgpe2Zvcig7bjxlLmxlbmd0aCYmYihlLG4pOykrK259Zm9yKDtuPGUubGVuZ3RoJiYhYihlLG4pJiYiPiIhPT1lW25dJiYiLyIhPT1lW25dOykrK247Zm9yKHI9ZS5zdWJzdHJpbmcodCxuKSxpKCk7bjxlLmxlbmd0aCYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXSYmIj8iIT09ZVtuXTspe2koKTtmb3IodmFyIG8scz0iIjtuPGUubGVuZ3RoJiYhYihlLG4pJiYiPSIhPT1lW25dOylzKz1lW25dLCsrbjtpZihpKCksIj0iIT09ZVtuXSlyZXR1cm4gbnVsbDsrK24saSgpO3ZhciBsPWVbbl07aWYoJyInIT09bCYmIiciIT09bClyZXR1cm4gbnVsbDt2YXIgYz1lLmluZGV4T2YobCwrK24pO2lmKGM8MClyZXR1cm4gbnVsbDtvPWUuc3Vic3RyaW5nKG4sYyksYS5wdXNoKHtuYW1lOnMsdmFsdWU6dGhpcy5fcmVzb2x2ZUVudGl0aWVzKG8pfSksbj1jKzEsaSgpfXJldHVybntuYW1lOnIsYXR0cmlidXRlczphLHBhcnNlZDpuLXR9fX0se2tleToiX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uIix2YWx1ZTpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcixuPXQ7bjxlLmxlbmd0aCYmIWIoZSxuKSYmIj4iIT09ZVtuXSYmIi8iIT09ZVtuXTspKytuO3I9ZS5zdWJzdHJpbmcodCxuKSxmdW5jdGlvbigpe2Zvcig7bjxlLmxlbmd0aCYmYihlLG4pOykrK259KCk7Zm9yKHZhciBhPW47bjxlLmxlbmd0aCYmKCI/IiE9PWVbbl18fCI+IiE9PWVbbisxXSk7KSsrbjtyZXR1cm57bmFtZTpyLHZhbHVlOmUuc3Vic3RyaW5nKGEsbikscGFyc2VkOm4tdH19fSx7a2V5OiJwYXJzZVhtbCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDxlLmxlbmd0aDspe3ZhciByPXQ7aWYoIjwiPT09ZVt0XSl7dmFyIG49dm9pZCAwO3N3aXRjaChlWysrcl0pe2Nhc2UiLyI6aWYoKytyLChuPWUuaW5kZXhPZigiPiIscikpPDApcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHkpO3RoaXMub25FbmRFbGVtZW50KGUuc3Vic3RyaW5nKHIsbikpLHI9bisxO2JyZWFrO2Nhc2UiPyI6KytyO3ZhciBhPXRoaXMuX3BhcnNlUHJvY2Vzc2luZ0luc3RydWN0aW9uKGUscik7aWYoIj8+IiE9PWUuc3Vic3RyaW5nKHIrYS5wYXJzZWQscithLnBhcnNlZCsyKSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IocCk7dGhpcy5vblBpKGEubmFtZSxhLnZhbHVlKSxyKz1hLnBhcnNlZCsyO2JyZWFrO2Nhc2UiISI6aWYoIi0tIj09PWUuc3Vic3RyaW5nKHIrMSxyKzMpKXtpZigobj1lLmluZGV4T2YoIi0tXHgzZSIsciszKSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoZyk7dGhpcy5vbkNvbW1lbnQoZS5zdWJzdHJpbmcociszLG4pKSxyPW4rM31lbHNlIGlmKCJbQ0RBVEFbIj09PWUuc3Vic3RyaW5nKHIrMSxyKzgpKXtpZigobj1lLmluZGV4T2YoIl1dPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IoZCk7dGhpcy5vbkNkYXRhKGUuc3Vic3RyaW5nKHIrOCxuKSkscj1uKzN9ZWxzZXtpZigiRE9DVFlQRSIhPT1lLnN1YnN0cmluZyhyKzEscis4KSlyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3Iodik7dmFyIGk9ZS5pbmRleE9mKCJbIixyKzgpLG89ITE7aWYoKG49ZS5pbmRleE9mKCI+IixyKzgpKTwwKXJldHVybiB2b2lkIHRoaXMub25FcnJvcihtKTtpZihpPjAmJm4+aSl7aWYoKG49ZS5pbmRleE9mKCJdPiIscis4KSk8MClyZXR1cm4gdm9pZCB0aGlzLm9uRXJyb3IobSk7bz0hMH12YXIgcz1lLnN1YnN0cmluZyhyKzgsbisobz8xOjApKTt0aGlzLm9uRG9jdHlwZShzKSxyPW4rKG8/MjoxKX1icmVhaztkZWZhdWx0OnZhciBsPXRoaXMuX3BhcnNlQ29udGVudChlLHIpO2lmKG51bGw9PT1sKXJldHVybiB2b2lkIHRoaXMub25FcnJvcih2KTt2YXIgYz0hMTtpZigiLz4iPT09ZS5zdWJzdHJpbmcocitsLnBhcnNlZCxyK2wucGFyc2VkKzIpKWM9ITA7ZWxzZSBpZigiPiIhPT1lLnN1YnN0cmluZyhyK2wucGFyc2VkLHIrbC5wYXJzZWQrMSkpcmV0dXJuIHZvaWQgdGhpcy5vbkVycm9yKHkpO3RoaXMub25CZWdpbkVsZW1lbnQobC5uYW1lLGwuYXR0cmlidXRlcyxjKSxyKz1sLnBhcnNlZCsoYz8yOjEpfX1lbHNle2Zvcig7cjxlLmxlbmd0aCYmIjwiIT09ZVtyXTspcisrO3ZhciB1PWUuc3Vic3RyaW5nKHQscik7dGhpcy5vblRleHQodGhpcy5fcmVzb2x2ZUVudGl0aWVzKHUpKX10PXJ9fX0se2tleToib25SZXNvbHZlRW50aXR5Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iJiIuY29uY2F0KGUsIjsiKX19LHtrZXk6Im9uUGkiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7fX0se2tleToib25Db21tZW50Iix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt9fSx7a2V5OiJvbkRvY3R5cGUiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt9fSx7a2V5OiJvbkVuZEVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe319XSksZX0oKSxrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2ModGhpcyxlKSx0aGlzLm5vZGVOYW1lPXQsdGhpcy5ub2RlVmFsdWU9cixPYmplY3QuZGVmaW5lUHJvcGVydHkodGhpcywicGFyZW50Tm9kZSIse3ZhbHVlOm51bGwsd3JpdGFibGU6ITB9KX1yZXR1cm4gZihlLFt7a2V5OiJoYXNDaGlsZE5vZGVzIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlcy5sZW5ndGg+MH19LHtrZXk6ImZpcnN0Q2hpbGQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXMmJnRoaXMuY2hpbGROb2Rlc1swXX19LHtrZXk6Im5leHRTaWJsaW5nIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhcmVudE5vZGUuY2hpbGROb2RlcztpZihlKXt2YXIgdD1lLmluZGV4T2YodGhpcyk7aWYoLTEhPT10KXJldHVybiBlW3QrMV19fX0se2tleToidGV4dENvbnRlbnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNoaWxkTm9kZXM/dGhpcy5jaGlsZE5vZGVzLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUudGV4dENvbnRlbnR9KSkuam9pbigiIik6dGhpcy5ub2RlVmFsdWV8fCIifX1dKSxlfSgpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlO3JldHVybiBjKHRoaXMsdCksKGU9aSh0aGlzLHModCkuY2FsbCh0aGlzKSkpLl9jdXJyZW50RnJhZ21lbnQ9bnVsbCxlLl9zdGFjaz1udWxsLGUuX2Vycm9yQ29kZT1oLGV9cmV0dXJuIGZ1bmN0aW9uKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmwoZSx0KX0odCxlKSxmKHQsW3trZXk6InBhcnNlRnJvbVN0cmluZyIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5fY3VycmVudEZyYWdtZW50PVtdLHRoaXMuX3N0YWNrPVtdLHRoaXMuX2Vycm9yQ29kZT1oLHRoaXMucGFyc2VYbWwoZSksdGhpcy5fZXJyb3JDb2RlPT09aCl7dmFyIHQ9YSh0aGlzLl9jdXJyZW50RnJhZ21lbnQsMSlbMF07aWYodClyZXR1cm57ZG9jdW1lbnRFbGVtZW50OnR9fX19LHtrZXk6Im9uUmVzb2x2ZUVudGl0eSIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiYXBvcyI6cmV0dXJuIicifXJldHVybiBvKHModC5wcm90b3R5cGUpLCJvblJlc29sdmVFbnRpdHkiLHRoaXMpLmNhbGwodGhpcyxlKX19LHtrZXk6Im9uVGV4dCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoIWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyO3QrKylpZighYihlLHQpKXJldHVybiExO3JldHVybiEwfShlKSl7dmFyIHQ9bmV3IGsoIiN0ZXh0IixlKTt0aGlzLl9jdXJyZW50RnJhZ21lbnQucHVzaCh0KX19fSx7a2V5OiJvbkNkYXRhIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1uZXcgaygiI3RleHQiLGUpO3RoaXMuX2N1cnJlbnRGcmFnbWVudC5wdXNoKHQpfX0se2tleToib25CZWdpbkVsZW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgayhlKTtuLmNoaWxkTm9kZXM9W10sdGhpcy5fY3VycmVudEZyYWdtZW50LnB1c2gobikscnx8KHRoaXMuX3N0YWNrLnB1c2godGhpcy5fY3VycmVudEZyYWdtZW50KSx0aGlzLl9jdXJyZW50RnJhZ21lbnQ9bi5jaGlsZE5vZGVzKX19LHtrZXk6Im9uRW5kRWxlbWVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fY3VycmVudEZyYWdtZW50PXRoaXMuX3N0YWNrLnBvcCgpfHxbXTt2YXIgdD10aGlzLl9jdXJyZW50RnJhZ21lbnRbdGhpcy5fY3VycmVudEZyYWdtZW50Lmxlbmd0aC0xXTtpZih0KWZvcih2YXIgcj0wLG49dC5jaGlsZE5vZGVzLmxlbmd0aDtyPG47cisrKXQuY2hpbGROb2Rlc1tyXS5wYXJlbnROb2RlPXR9fSx7a2V5OiJvbkVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9lcnJvckNvZGU9ZX19XSksdH0odyk7dC5TaW1wbGVYTUxQYXJzZXI9U30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZEYXRhVHJhbnNwb3J0U3RyZWFtPXZvaWQgMDt2YXIgbixhPShuPXIoMTQ3KSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cigxKTtmdW5jdGlvbiBvKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gcyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gcyhlKXtvKGksbixhLHMsbCwibmV4dCIsZSl9ZnVuY3Rpb24gbChlKXtvKGksbixhLHMsbCwidGhyb3ciLGUpfXModm9pZCAwKX0pKX19dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dmFyIHI9dGhpczsoMCxpLmFzc2VydCkodCksdGhpcy5fcXVldWVkQ2h1bmtzPVtdO3ZhciBuPWUuaW5pdGlhbERhdGE7aWYobiYmbi5sZW5ndGg+MCl7dmFyIGE9bmV3IFVpbnQ4QXJyYXkobikuYnVmZmVyO3RoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGEpfXRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydD10LHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFlLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hZS5kaXNhYmxlUmFuZ2UsdGhpcy5fY29udGVudExlbmd0aD1lLmxlbmd0aCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVhZGVycz1bXSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUmFuZ2VMaXN0ZW5lcigoZnVuY3Rpb24oZSx0KXtyLl9vblJlY2VpdmVEYXRhKHtiZWdpbjplLGNodW5rOnR9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NMaXN0ZW5lcigoZnVuY3Rpb24oZSl7ci5fb25Qcm9ncmVzcyh7bG9hZGVkOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQuYWRkUHJvZ3Jlc3NpdmVSZWFkTGlzdGVuZXIoKGZ1bmN0aW9uKGUpe3IuX29uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX0pKSx0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQudHJhbnNwb3J0UmVhZHkoKX1mdW5jdGlvbiB0KGUsdCl7dGhpcy5fc3RyZWFtPWUsdGhpcy5fZG9uZT0hMSx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMuX3F1ZXVlZENodW5rcz10fHxbXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9oZWFkZXJzUmVhZHk9UHJvbWlzZS5yZXNvbHZlKCksZS5fZnVsbFJlcXVlc3RSZWFkZXI9dGhpcyx0aGlzLm9uUHJvZ3Jlc3M9bnVsbH12YXIgcixuO2Z1bmN0aW9uIG8oZSx0LHIpe3RoaXMuX3N0cmVhbT1lLHRoaXMuX2JlZ2luPXQsdGhpcy5fZW5kPXIsdGhpcy5fcXVldWVkQ2h1bms9bnVsbCx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMub25Qcm9ncmVzcz1udWxsfXJldHVybiBlLnByb3RvdHlwZT17X29uUmVjZWl2ZURhdGE6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IFVpbnQ4QXJyYXkoZS5jaHVuaykuYnVmZmVyO2lmKHZvaWQgMD09PWUuYmVnaW4pdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI/dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIuX2VucXVldWUodCk6dGhpcy5fcXVldWVkQ2h1bmtzLnB1c2godCk7ZWxzZXt2YXIgcj10aGlzLl9yYW5nZVJlYWRlcnMuc29tZSgoZnVuY3Rpb24ocil7cmV0dXJuIHIuX2JlZ2luPT09ZS5iZWdpbiYmKHIuX2VucXVldWUodCksITApfSkpOygwLGkuYXNzZXJ0KShyKX19LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX3JhbmdlUmVhZGVycy5sZW5ndGg+MCl7dmFyIHQ9dGhpcy5fcmFuZ2VSZWFkZXJzWzBdO3Qub25Qcm9ncmVzcyYmdC5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWR9KX19LF9yZW1vdmVSYW5nZVJlYWRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yYW5nZVJlYWRlcnMuaW5kZXhPZihlKTt0Pj0wJiZ0aGlzLl9yYW5nZVJlYWRlcnMuc3BsaWNlKHQsMSl9LGdldEZ1bGxSZWFkZXI6ZnVuY3Rpb24oKXsoMCxpLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyKTt2YXIgZT10aGlzLl9xdWV1ZWRDaHVua3M7cmV0dXJuIHRoaXMuX3F1ZXVlZENodW5rcz1udWxsLG5ldyB0KHRoaXMsZSl9LGdldFJhbmdlUmVhZGVyOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IG8odGhpcyxlLHQpO3JldHVybiB0aGlzLl9wZGZEYXRhUmFuZ2VUcmFuc3BvcnQucmVxdWVzdERhdGFSYW5nZShlLHQpLHRoaXMuX3JhbmdlUmVhZGVycy5wdXNoKHIpLHJ9LGNhbmNlbEFsbFJlcXVlc3RzOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpLHRoaXMuX3BkZkRhdGFSYW5nZVRyYW5zcG9ydC5hYm9ydCgpfX0sdC5wcm90b3R5cGU9e19lbnF1ZXVlOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmV8fCh0aGlzLl9yZXF1ZXN0cy5sZW5ndGg+MD90aGlzLl9yZXF1ZXN0cy5zaGlmdCgpLnJlc29sdmUoe3ZhbHVlOmUsZG9uZTohMX0pOnRoaXMuX3F1ZXVlZENodW5rcy5wdXNoKGUpKX0sZ2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVhZHl9LGdldCBmaWxlbmFtZSgpe3JldHVybiB0aGlzLl9maWxlbmFtZX0sZ2V0IGlzUmFuZ2VTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1JhbmdlU3VwcG9ydGVkfSxnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fc3RyZWFtLl9jb250ZW50TGVuZ3RofSxyZWFkOihyPXMoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoISh0aGlzLl9xdWV1ZWRDaHVua3MubGVuZ3RoPjApKXtlLm5leHQ9MzticmVha31yZXR1cm4gdD10aGlzLl9xdWV1ZWRDaHVua3Muc2hpZnQoKSxlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dCxkb25lOiExfSk7Y2FzZSAzOmlmKCF0aGlzLl9kb25lKXtlLm5leHQ9NTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA1OnJldHVybiByPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSxlLmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgODpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdfX0sby5wcm90b3R5cGU9e19lbnF1ZXVlOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmV8fCgwPT09dGhpcy5fcmVxdWVzdHMubGVuZ3RoP3RoaXMuX3F1ZXVlZENodW5rPWU6KHRoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6ZSxkb25lOiExfSksdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdKSx0aGlzLl9kb25lPSEwLHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcykpfSxnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX0scmVhZDoobj1zKGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQscjtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCF0aGlzLl9xdWV1ZWRDaHVuayl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIHQ9dGhpcy5fcXVldWVkQ2h1bmssdGhpcy5fcXVldWVkQ2h1bms9bnVsbCxlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dCxkb25lOiExfSk7Y2FzZSA0OmlmKCF0aGlzLl9kb25lKXtlLm5leHQ9NjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnZvaWQgMCxkb25lOiEwfSk7Y2FzZSA2OnJldHVybiByPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVxdWVzdHMucHVzaChyKSxlLmFicnVwdCgicmV0dXJuIixyLnByb21pc2UpO2Nhc2UgOTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX3N0cmVhbS5fcmVtb3ZlUmFuZ2VSZWFkZXIodGhpcyl9fSxlfSgpO3QuUERGRGF0YVRyYW5zcG9ydFN0cmVhbT1sfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LldlYkdMQ29udGV4dD12b2lkIDA7dmFyIG49cigxKTtmdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19dmFyIGk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQuZW5hYmxlLG49dm9pZCAwIT09ciYmcjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLl9lbmFibGVkPSEwPT09bn12YXIgdCxyLGk7cmV0dXJuIHQ9ZSwocj1be2tleToiY29tcG9zZVNNYXNrIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmxheWVyLHI9ZS5tYXNrLG49ZS5wcm9wZXJ0aWVzO3JldHVybiBvLmNvbXBvc2VTTWFzayh0LHIsbil9fSx7a2V5OiJkcmF3RmlndXJlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS53aWR0aCxyPWUuaGVpZ2h0LG49ZS5iYWNrZ3JvdW5kQ29sb3IsYT1lLmZpZ3VyZXMsaT1lLmNvbnRleHQ7cmV0dXJuIG8uZHJhd0ZpZ3VyZXModCxyLG4sYSxpKX19LHtrZXk6ImNsZWFyIix2YWx1ZTpmdW5jdGlvbigpe28uY2xlYW51cCgpfX0se2tleToiaXNFbmFibGVkIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9lbmFibGVkO3JldHVybiBlJiYoZT1vLnRyeUluaXRHTCgpKSwoMCxuLnNoYWRvdykodGhpcywiaXNFbmFibGVkIixlKX19XSkmJmEodC5wcm90b3R5cGUsciksaSYmYSh0LGkpLGV9KCk7dC5XZWJHTENvbnRleHQ9aTt2YXIgbz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBuPWUuY3JlYXRlU2hhZGVyKHIpO2lmKGUuc2hhZGVyU291cmNlKG4sdCksZS5jb21waWxlU2hhZGVyKG4pLCFlLmdldFNoYWRlclBhcmFtZXRlcihuLGUuQ09NUElMRV9TVEFUVVMpKXt2YXIgYT1lLmdldFNoYWRlckluZm9Mb2cobik7dGhyb3cgbmV3IEVycm9yKCJFcnJvciBkdXJpbmcgc2hhZGVyIGNvbXBpbGF0aW9uOiAiK2EpfXJldHVybiBufWZ1bmN0aW9uIHQodCxyKXtyZXR1cm4gZSh0LHIsdC5WRVJURVhfU0hBREVSKX1mdW5jdGlvbiByKHQscil7cmV0dXJuIGUodCxyLHQuRlJBR01FTlRfU0hBREVSKX1mdW5jdGlvbiBuKGUsdCl7Zm9yKHZhciByPWUuY3JlYXRlUHJvZ3JhbSgpLG49MCxhPXQubGVuZ3RoO248YTsrK24pZS5hdHRhY2hTaGFkZXIocix0W25dKTtpZihlLmxpbmtQcm9ncmFtKHIpLCFlLmdldFByb2dyYW1QYXJhbWV0ZXIocixlLkxJTktfU1RBVFVTKSl7dmFyIGk9ZS5nZXRQcm9ncmFtSW5mb0xvZyhyKTt0aHJvdyBuZXcgRXJyb3IoIkVycm9yIGR1cmluZyBwcm9ncmFtIGxpbmtpbmc6ICIraSl9cmV0dXJuIHJ9ZnVuY3Rpb24gYShlLHQscil7ZS5hY3RpdmVUZXh0dXJlKHIpO3ZhciBuPWUuY3JlYXRlVGV4dHVyZSgpO3JldHVybiBlLmJpbmRUZXh0dXJlKGUuVEVYVFVSRV8yRCxuKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1MsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9XUkFQX1QsZS5DTEFNUF9UT19FREdFKSxlLnRleFBhcmFtZXRlcmkoZS5URVhUVVJFXzJELGUuVEVYVFVSRV9NSU5fRklMVEVSLGUuTkVBUkVTVCksZS50ZXhQYXJhbWV0ZXJpKGUuVEVYVFVSRV8yRCxlLlRFWFRVUkVfTUFHX0ZJTFRFUixlLk5FQVJFU1QpLGUudGV4SW1hZ2UyRChlLlRFWFRVUkVfMkQsMCxlLlJHQkEsZS5SR0JBLGUuVU5TSUdORURfQllURSx0KSxufXZhciBpLG87ZnVuY3Rpb24gcygpe2l8fChvPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImNhbnZhcyIpLGk9by5nZXRDb250ZXh0KCJ3ZWJnbCIse3ByZW11bHRpcGxpZWRhbHBoYTohMX0pKX12YXIgbD1udWxsLGM9bnVsbDtyZXR1cm57dHJ5SW5pdEdMOmZ1bmN0aW9uKCl7dHJ5e3JldHVybiBzKCksISFpfWNhdGNoKGUpe31yZXR1cm4hMX0sY29tcG9zZVNNYXNrOmZ1bmN0aW9uKGUsYyx1KXt2YXIgZj1lLndpZHRoLGg9ZS5oZWlnaHQ7bHx8ZnVuY3Rpb24oKXt2YXIgZSxhO3MoKSxlPW8sbz1udWxsLGE9aSxpPW51bGw7dmFyIGM9bihhLFt0KGEsIiAgYXR0cmlidXRlIHZlYzIgYV9wb3NpdGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGF0dHJpYnV0ZSB2ZWMyIGFfdGV4Q29vcmQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfcmVzb2x1dGlvbjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzIgdl90ZXhDb29yZDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIgY2xpcFNwYWNlID0gKGFfcG9zaXRpb24gLyB1X3Jlc29sdXRpb24pICogMi4wIC0gMS4wOyAgICAgICBnbF9Qb3NpdGlvbiA9IHZlYzQoY2xpcFNwYWNlICogdmVjMigxLCAtMSksIDAsIDEpOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZfdGV4Q29vcmQgPSBhX3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAiKSxyKGEsIiAgcHJlY2lzaW9uIG1lZGl1bXAgZmxvYXQ7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHZlYzQgdV9iYWNrZHJvcDsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSBpbnQgdV9zdWJ0eXBlOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gc2FtcGxlcjJEIHVfaW1hZ2U7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHNhbXBsZXIyRCB1X21hc2s7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZhcnlpbmcgdmVjMiB2X3RleENvb3JkOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdm9pZCBtYWluKCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmVjNCBpbWFnZUNvbG9yID0gdGV4dHVyZTJEKHVfaW1hZ2UsIHZfdGV4Q29vcmQpOyAgICAgICAgICAgICAgIHZlYzQgbWFza0NvbG9yID0gdGV4dHVyZTJEKHVfbWFzaywgdl90ZXhDb29yZCk7ICAgICAgICAgICAgICAgICBpZiAodV9iYWNrZHJvcC5hID4gMC4wKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBtYXNrQ29sb3IucmdiID0gbWFza0NvbG9yLnJnYiAqIG1hc2tDb2xvci5hICsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVfYmFja2Ryb3AucmdiICogKDEuMCAtIG1hc2tDb2xvci5hKTsgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZmxvYXQgbHVtOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGlmICh1X3N1YnR5cGUgPT0gMCkgeyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGx1bSA9IG1hc2tDb2xvci5hOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSBlbHNlIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgbHVtID0gbWFza0NvbG9yLnIgKiAwLjMgKyBtYXNrQ29sb3IuZyAqIDAuNTkgKyAgICAgICAgICAgICAgICAgICAgICAgIG1hc2tDb2xvci5iICogMC4xMTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgfSAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIGltYWdlQ29sb3IuYSAqPSBsdW07ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBpbWFnZUNvbG9yLnJnYiAqPSBpbWFnZUNvbG9yLmE7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgZ2xfRnJhZ0NvbG9yID0gaW1hZ2VDb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB9ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICIpXSk7YS51c2VQcm9ncmFtKGMpO3ZhciB1PXt9O3UuZ2w9YSx1LmNhbnZhcz1lLHUucmVzb2x1dGlvbkxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGMsInVfcmVzb2x1dGlvbiIpLHUucG9zaXRpb25Mb2NhdGlvbj1hLmdldEF0dHJpYkxvY2F0aW9uKGMsImFfcG9zaXRpb24iKSx1LmJhY2tkcm9wTG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9iYWNrZHJvcCIpLHUuc3VidHlwZUxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGMsInVfc3VidHlwZSIpO3ZhciBmPWEuZ2V0QXR0cmliTG9jYXRpb24oYywiYV90ZXhDb29yZCIpLGg9YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9pbWFnZSIpLGQ9YS5nZXRVbmlmb3JtTG9jYXRpb24oYywidV9tYXNrIikscD1hLmNyZWF0ZUJ1ZmZlcigpO2EuYmluZEJ1ZmZlcihhLkFSUkFZX0JVRkZFUixwKSxhLmJ1ZmZlckRhdGEoYS5BUlJBWV9CVUZGRVIsbmV3IEZsb2F0MzJBcnJheShbMCwwLDEsMCwwLDEsMCwxLDEsMCwxLDFdKSxhLlNUQVRJQ19EUkFXKSxhLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGYpLGEudmVydGV4QXR0cmliUG9pbnRlcihmLDIsYS5GTE9BVCwhMSwwLDApLGEudW5pZm9ybTFpKGgsMCksYS51bmlmb3JtMWkoZCwxKSxsPXV9KCk7dmFyIGQ9bCxwPWQuY2FudmFzLG09ZC5nbDtwLndpZHRoPWYscC5oZWlnaHQ9aCxtLnZpZXdwb3J0KDAsMCxtLmRyYXdpbmdCdWZmZXJXaWR0aCxtLmRyYXdpbmdCdWZmZXJIZWlnaHQpLG0udW5pZm9ybTJmKGQucmVzb2x1dGlvbkxvY2F0aW9uLGYsaCksdS5iYWNrZHJvcD9tLnVuaWZvcm00ZihkLnJlc29sdXRpb25Mb2NhdGlvbix1LmJhY2tkcm9wWzBdLHUuYmFja2Ryb3BbMV0sdS5iYWNrZHJvcFsyXSwxKTptLnVuaWZvcm00ZihkLnJlc29sdXRpb25Mb2NhdGlvbiwwLDAsMCwwKSxtLnVuaWZvcm0xaShkLnN1YnR5cGVMb2NhdGlvbiwiTHVtaW5vc2l0eSI9PT11LnN1YnR5cGU/MTowKTt2YXIgZz1hKG0sZSxtLlRFWFRVUkUwKSx2PWEobSxjLG0uVEVYVFVSRTEpLHk9bS5jcmVhdGVCdWZmZXIoKTtyZXR1cm4gbS5iaW5kQnVmZmVyKG0uQVJSQVlfQlVGRkVSLHkpLG0uYnVmZmVyRGF0YShtLkFSUkFZX0JVRkZFUixuZXcgRmxvYXQzMkFycmF5KFswLDAsZiwwLDAsaCwwLGgsZiwwLGYsaF0pLG0uU1RBVElDX0RSQVcpLG0uZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoZC5wb3NpdGlvbkxvY2F0aW9uKSxtLnZlcnRleEF0dHJpYlBvaW50ZXIoZC5wb3NpdGlvbkxvY2F0aW9uLDIsbS5GTE9BVCwhMSwwLDApLG0uY2xlYXJDb2xvcigwLDAsMCwwKSxtLmVuYWJsZShtLkJMRU5EKSxtLmJsZW5kRnVuYyhtLk9ORSxtLk9ORV9NSU5VU19TUkNfQUxQSEEpLG0uY2xlYXIobS5DT0xPUl9CVUZGRVJfQklUKSxtLmRyYXdBcnJheXMobS5UUklBTkdMRVMsMCw2KSxtLmZsdXNoKCksbS5kZWxldGVUZXh0dXJlKGcpLG0uZGVsZXRlVGV4dHVyZSh2KSxtLmRlbGV0ZUJ1ZmZlcih5KSxwfSxkcmF3RmlndXJlczpmdW5jdGlvbihlLGEsbCx1LGYpe2N8fGZ1bmN0aW9uKCl7dmFyIGUsYTtzKCksZT1vLG89bnVsbCxhPWksaT1udWxsO3ZhciBsPW4oYSxbdChhLCIgIGF0dHJpYnV0ZSB2ZWMyIGFfcG9zaXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBhdHRyaWJ1dGUgdmVjMyBhX2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHVuaWZvcm0gdmVjMiB1X3Jlc29sdXRpb247ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB1bmlmb3JtIHZlYzIgdV9zY2FsZTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdW5pZm9ybSB2ZWMyIHVfb2Zmc2V0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2YXJ5aW5nIHZlYzQgdl9jb2xvcjsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZvaWQgbWFpbigpIHsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIHZlYzIgcG9zaXRpb24gPSAoYV9wb3NpdGlvbiArIHVfb2Zmc2V0KSAqIHVfc2NhbGU7ICAgICAgICAgICAgICB2ZWMyIGNsaXBTcGFjZSA9IChwb3NpdGlvbiAvIHVfcmVzb2x1dGlvbikgKiAyLjAgLSAxLjA7ICAgICAgICAgZ2xfUG9zaXRpb24gPSB2ZWM0KGNsaXBTcGFjZSAqIHZlYzIoMSwgLTEpLCAwLCAxKTsgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2X2NvbG9yID0gdmVjNChhX2NvbG9yIC8gMjU1LjAsIDEuMCk7ICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIikscihhLCIgIHByZWNpc2lvbiBtZWRpdW1wIGZsb2F0OyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgdmFyeWluZyB2ZWM0IHZfY29sb3I7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICB2b2lkIG1haW4oKSB7ICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICBnbF9GcmFnQ29sb3IgPSB2X2NvbG9yOyAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIH0gICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgICAgIildKTthLnVzZVByb2dyYW0obCk7dmFyIHU9e307dS5nbD1hLHUuY2FudmFzPWUsdS5yZXNvbHV0aW9uTG9jYXRpb249YS5nZXRVbmlmb3JtTG9jYXRpb24obCwidV9yZXNvbHV0aW9uIiksdS5zY2FsZUxvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVfc2NhbGUiKSx1Lm9mZnNldExvY2F0aW9uPWEuZ2V0VW5pZm9ybUxvY2F0aW9uKGwsInVfb2Zmc2V0IiksdS5wb3NpdGlvbkxvY2F0aW9uPWEuZ2V0QXR0cmliTG9jYXRpb24obCwiYV9wb3NpdGlvbiIpLHUuY29sb3JMb2NhdGlvbj1hLmdldEF0dHJpYkxvY2F0aW9uKGwsImFfY29sb3IiKSxjPXV9KCk7dmFyIGg9YyxkPWguY2FudmFzLHA9aC5nbDtkLndpZHRoPWUsZC5oZWlnaHQ9YSxwLnZpZXdwb3J0KDAsMCxwLmRyYXdpbmdCdWZmZXJXaWR0aCxwLmRyYXdpbmdCdWZmZXJIZWlnaHQpLHAudW5pZm9ybTJmKGgucmVzb2x1dGlvbkxvY2F0aW9uLGUsYSk7dmFyIG0sZyx2LHk9MDtmb3IobT0wLGc9dS5sZW5ndGg7bTxnO20rKylzd2l0Y2godVttXS50eXBlKXtjYXNlImxhdHRpY2UiOnkrPSgodj11W21dLmNvb3Jkcy5sZW5ndGgvdVttXS52ZXJ0aWNlc1BlclJvd3wwKS0xKSoodVttXS52ZXJ0aWNlc1BlclJvdy0xKSo2O2JyZWFrO2Nhc2UidHJpYW5nbGVzIjp5Kz11W21dLmNvb3Jkcy5sZW5ndGh9dmFyIGI9bmV3IEZsb2F0MzJBcnJheSgyKnkpLHc9bmV3IFVpbnQ4QXJyYXkoMyp5KSxrPWYuY29vcmRzLFM9Zi5jb2xvcnMsXz0wLHg9MDtmb3IobT0wLGc9dS5sZW5ndGg7bTxnO20rKyl7dmFyIEE9dVttXSxDPUEuY29vcmRzLFA9QS5jb2xvcnM7c3dpdGNoKEEudHlwZSl7Y2FzZSJsYXR0aWNlIjp2YXIgRT1BLnZlcnRpY2VzUGVyUm93O3Y9Qy5sZW5ndGgvRXwwO2Zvcih2YXIgVD0xO1Q8djtUKyspZm9yKHZhciBSPVQqRSsxLE89MTtPPEU7TysrLFIrKyliW19dPWtbQ1tSLUUtMV1dLGJbXysxXT1rW0NbUi1FLTFdKzFdLGJbXysyXT1rW0NbUi1FXV0sYltfKzNdPWtbQ1tSLUVdKzFdLGJbXys0XT1rW0NbUi0xXV0sYltfKzVdPWtbQ1tSLTFdKzFdLHdbeF09U1tQW1ItRS0xXV0sd1t4KzFdPVNbUFtSLUUtMV0rMV0sd1t4KzJdPVNbUFtSLUUtMV0rMl0sd1t4KzNdPVNbUFtSLUVdXSx3W3grNF09U1tQW1ItRV0rMV0sd1t4KzVdPVNbUFtSLUVdKzJdLHdbeCs2XT1TW1BbUi0xXV0sd1t4KzddPVNbUFtSLTFdKzFdLHdbeCs4XT1TW1BbUi0xXSsyXSxiW18rNl09YltfKzJdLGJbXys3XT1iW18rM10sYltfKzhdPWJbXys0XSxiW18rOV09YltfKzVdLGJbXysxMF09a1tDW1JdXSxiW18rMTFdPWtbQ1tSXSsxXSx3W3grOV09d1t4KzNdLHdbeCsxMF09d1t4KzRdLHdbeCsxMV09d1t4KzVdLHdbeCsxMl09d1t4KzZdLHdbeCsxM109d1t4KzddLHdbeCsxNF09d1t4KzhdLHdbeCsxNV09U1tQW1JdXSx3W3grMTZdPVNbUFtSXSsxXSx3W3grMTddPVNbUFtSXSsyXSxfKz0xMix4Kz0xODticmVhaztjYXNlInRyaWFuZ2xlcyI6Zm9yKHZhciBJPTAsRj1DLmxlbmd0aDtJPEY7SSsrKWJbX109a1tDW0ldXSxiW18rMV09a1tDW0ldKzFdLHdbeF09U1tQW0ldXSx3W3grMV09U1tQW0ldKzFdLHdbeCsyXT1TW1BbSV0rMl0sXys9Mix4Kz0zfX1sP3AuY2xlYXJDb2xvcihsWzBdLzI1NSxsWzFdLzI1NSxsWzJdLzI1NSwxKTpwLmNsZWFyQ29sb3IoMCwwLDAsMCkscC5jbGVhcihwLkNPTE9SX0JVRkZFUl9CSVQpO3ZhciBMPXAuY3JlYXRlQnVmZmVyKCk7cC5iaW5kQnVmZmVyKHAuQVJSQVlfQlVGRkVSLEwpLHAuYnVmZmVyRGF0YShwLkFSUkFZX0JVRkZFUixiLHAuU1RBVElDX0RSQVcpLHAuZW5hYmxlVmVydGV4QXR0cmliQXJyYXkoaC5wb3NpdGlvbkxvY2F0aW9uKSxwLnZlcnRleEF0dHJpYlBvaW50ZXIoaC5wb3NpdGlvbkxvY2F0aW9uLDIscC5GTE9BVCwhMSwwLDApO3ZhciBEPXAuY3JlYXRlQnVmZmVyKCk7cmV0dXJuIHAuYmluZEJ1ZmZlcihwLkFSUkFZX0JVRkZFUixEKSxwLmJ1ZmZlckRhdGEocC5BUlJBWV9CVUZGRVIsdyxwLlNUQVRJQ19EUkFXKSxwLmVuYWJsZVZlcnRleEF0dHJpYkFycmF5KGguY29sb3JMb2NhdGlvbikscC52ZXJ0ZXhBdHRyaWJQb2ludGVyKGguY29sb3JMb2NhdGlvbiwzLHAuVU5TSUdORURfQllURSwhMSwwLDApLHAudW5pZm9ybTJmKGguc2NhbGVMb2NhdGlvbixmLnNjYWxlWCxmLnNjYWxlWSkscC51bmlmb3JtMmYoaC5vZmZzZXRMb2NhdGlvbixmLm9mZnNldFgsZi5vZmZzZXRZKSxwLmRyYXdBcnJheXMocC5UUklBTkdMRVMsMCx5KSxwLmZsdXNoKCkscC5kZWxldGVCdWZmZXIoTCkscC5kZWxldGVCdWZmZXIoRCksZH0sY2xlYW51cDpmdW5jdGlvbigpe2wmJmwuY2FudmFzJiYobC5jYW52YXMud2lkdGg9MCxsLmNhbnZhcy5oZWlnaHQ9MCksYyYmYy5jYW52YXMmJihjLmNhbnZhcy53aWR0aD0wLGMuY2FudmFzLmhlaWdodD0wKSxsPW51bGwsYz1udWxsfX19KCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQucmVuZGVyVGV4dExheWVyPXZvaWQgMDt2YXIgbixhPXIoMSksaT0obj1yKDMpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0sbz1mdW5jdGlvbigpe3ZhciBlPS9cUy8sdD1bImxlZnQ6ICIsMCwicHg7IHRvcDogIiwwLCJweDsgZm9udC1zaXplOiAiLDAsInB4OyBmb250LWZhbWlseTogIiwiIiwiOyJdO2Z1bmN0aW9uIHIocixuLGkpe3ZhciBvLHM9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic3BhbiIpLGw9e3N0eWxlOm51bGwsYW5nbGU6MCxjYW52YXNXaWR0aDowLGlzV2hpdGVzcGFjZTohMSxvcmlnaW5hbFRyYW5zZm9ybTpudWxsLHBhZGRpbmdCb3R0b206MCxwYWRkaW5nTGVmdDowLHBhZGRpbmdSaWdodDowLHBhZGRpbmdUb3A6MCxzY2FsZToxfTtpZihyLl90ZXh0RGl2cy5wdXNoKHMpLG89bi5zdHIsIWUudGVzdChvKSlyZXR1cm4gbC5pc1doaXRlc3BhY2U9ITAsdm9pZCByLl90ZXh0RGl2UHJvcGVydGllcy5zZXQocyxsKTt2YXIgYz1hLlV0aWwudHJhbnNmb3JtKHIuX3ZpZXdwb3J0LnRyYW5zZm9ybSxuLnRyYW5zZm9ybSksdT1NYXRoLmF0YW4yKGNbMV0sY1swXSksZj1pW24uZm9udE5hbWVdO2YudmVydGljYWwmJih1Kz1NYXRoLlBJLzIpO3ZhciBoLGQscD1NYXRoLnNxcnQoY1syXSpjWzJdK2NbM10qY1szXSksbT1wO2lmKGYuYXNjZW50P209Zi5hc2NlbnQqbTpmLmRlc2NlbnQmJihtPSgxK2YuZGVzY2VudCkqbSksMD09PXU/KGg9Y1s0XSxkPWNbNV0tbSk6KGg9Y1s0XSttKk1hdGguc2luKHUpLGQ9Y1s1XS1tKk1hdGguY29zKHUpKSx0WzFdPWgsdFszXT1kLHRbNV09cCx0WzddPWYuZm9udEZhbWlseSxsLnN0eWxlPXQuam9pbigiIikscy5zZXRBdHRyaWJ1dGUoInN0eWxlIixsLnN0eWxlKSxzLnRleHRDb250ZW50PW4uc3RyLHIuX2ZvbnRJbnNwZWN0b3JFbmFibGVkJiYocy5kYXRhc2V0LmZvbnROYW1lPW4uZm9udE5hbWUpLDAhPT11JiYobC5hbmdsZT11KigxODAvTWF0aC5QSSkpLG4uc3RyLmxlbmd0aD4xJiYoZi52ZXJ0aWNhbD9sLmNhbnZhc1dpZHRoPW4uaGVpZ2h0KnIuX3ZpZXdwb3J0LnNjYWxlOmwuY2FudmFzV2lkdGg9bi53aWR0aCpyLl92aWV3cG9ydC5zY2FsZSksci5fdGV4dERpdlByb3BlcnRpZXMuc2V0KHMsbCksci5fdGV4dENvbnRlbnRTdHJlYW0mJnIuX2xheW91dFRleHQocyksci5fZW5oYW5jZVRleHRTZWxlY3Rpb24pe3ZhciBnPTEsdj0wOzAhPT11JiYoZz1NYXRoLmNvcyh1KSx2PU1hdGguc2luKHUpKTt2YXIgeSxiLHc9KGYudmVydGljYWw/bi5oZWlnaHQ6bi53aWR0aCkqci5fdmlld3BvcnQuc2NhbGUsaz1wOzAhPT11Pyh5PVtnLHYsLXYsZyxoLGRdLGI9YS5VdGlsLmdldEF4aWFsQWxpZ25lZEJvdW5kaW5nQm94KFswLDAsdyxrXSx5KSk6Yj1baCxkLGgrdyxkK2tdLHIuX2JvdW5kcy5wdXNoKHtsZWZ0OmJbMF0sdG9wOmJbMV0scmlnaHQ6YlsyXSxib3R0b206YlszXSxkaXY6cyxzaXplOlt3LGtdLG06eX0pfX1mdW5jdGlvbiBuKGUpe2lmKCFlLl9jYW5jZWxlZCl7dmFyIHQ9ZS5fdGV4dERpdnMscj1lLl9jYXBhYmlsaXR5LG49dC5sZW5ndGg7aWYobj4xZTUpcmV0dXJuIGUuX3JlbmRlcmluZ0RvbmU9ITAsdm9pZCByLnJlc29sdmUoKTtpZighZS5fdGV4dENvbnRlbnRTdHJlYW0pZm9yKHZhciBhPTA7YTxuO2ErKyllLl9sYXlvdXRUZXh0KHRbYV0pO2UuX3JlbmRlcmluZ0RvbmU9ITAsci5yZXNvbHZlKCl9fWZ1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PWUuX2JvdW5kcyxyPWUuX3ZpZXdwb3J0LG49ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIubWFwKChmdW5jdGlvbihlLHQpe3JldHVybnt4MTplLmxlZnQseTE6ZS50b3AseDI6ZS5yaWdodCx5MjplLmJvdHRvbSxpbmRleDp0LHgxTmV3OnZvaWQgMCx4Mk5ldzp2b2lkIDB9fSkpO3MoZSxuKTt2YXIgYT1uZXcgQXJyYXkoci5sZW5ndGgpO3JldHVybiBuLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUuaW5kZXg7YVt0XT17bGVmdDplLngxTmV3LHRvcDowLHJpZ2h0OmUueDJOZXcsYm90dG9tOjB9fSkpLHIubWFwKChmdW5jdGlvbih0LHIpe3ZhciBpPWFbcl0sbz1uW3JdO28ueDE9dC50b3Asby55MT1lLWkucmlnaHQsby54Mj10LmJvdHRvbSxvLnkyPWUtaS5sZWZ0LG8uaW5kZXg9cixvLngxTmV3PXZvaWQgMCxvLngyTmV3PXZvaWQgMH0pKSxzKHQsbiksbi5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLmluZGV4O2FbdF0udG9wPWUueDFOZXcsYVt0XS5ib3R0b209ZS54Mk5ld30pKSxhfShyLndpZHRoLHIuaGVpZ2h0LHQpLGk9MDtpPG4ubGVuZ3RoO2krKyl7dmFyIG89dFtpXS5kaXYsbD1lLl90ZXh0RGl2UHJvcGVydGllcy5nZXQobyk7aWYoMCE9PWwuYW5nbGUpe3ZhciBjPW5baV0sdT10W2ldLGY9dS5tLGg9ZlswXSxkPWZbMV0scD1bWzAsMF0sWzAsdS5zaXplWzFdXSxbdS5zaXplWzBdLDBdLHUuc2l6ZV0sbT1uZXcgRmxvYXQ2NEFycmF5KDY0KTtwLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7dmFyIHI9YS5VdGlsLmFwcGx5VHJhbnNmb3JtKGUsZik7bVt0KzBdPWgmJihjLmxlZnQtclswXSkvaCxtW3QrNF09ZCYmKGMudG9wLXJbMV0pL2QsbVt0KzhdPWgmJihjLnJpZ2h0LXJbMF0pL2gsbVt0KzEyXT1kJiYoYy5ib3R0b20tclsxXSkvZCxtW3QrMTZdPWQmJihjLmxlZnQtclswXSkvLWQsbVt0KzIwXT1oJiYoYy50b3AtclsxXSkvaCxtW3QrMjRdPWQmJihjLnJpZ2h0LXJbMF0pLy1kLG1bdCsyOF09aCYmKGMuYm90dG9tLXJbMV0pL2gsbVt0KzMyXT1oJiYoYy5sZWZ0LXJbMF0pLy1oLG1bdCszNl09ZCYmKGMudG9wLXJbMV0pLy1kLG1bdCs0MF09aCYmKGMucmlnaHQtclswXSkvLWgsbVt0KzQ0XT1kJiYoYy5ib3R0b20tclsxXSkvLWQsbVt0KzQ4XT1kJiYoYy5sZWZ0LXJbMF0pL2QsbVt0KzUyXT1oJiYoYy50b3AtclsxXSkvLWgsbVt0KzU2XT1kJiYoYy5yaWdodC1yWzBdKS9kLG1bdCs2MF09aCYmKGMuYm90dG9tLXJbMV0pLy1ofSkpO3ZhciBnPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49MCxhPTA7YTxyO2ErKyl7dmFyIGk9ZVt0KytdO2k+MCYmKG49bj9NYXRoLm1pbihpLG4pOmkpfXJldHVybiBufSx2PTErTWF0aC5taW4oTWF0aC5hYnMoaCksTWF0aC5hYnMoZCkpO2wucGFkZGluZ0xlZnQ9ZyhtLDMyLDE2KS92LGwucGFkZGluZ1RvcD1nKG0sNDgsMTYpL3YsbC5wYWRkaW5nUmlnaHQ9ZyhtLDAsMTYpL3YsbC5wYWRkaW5nQm90dG9tPWcobSwxNiwxNikvdixlLl90ZXh0RGl2UHJvcGVydGllcy5zZXQobyxsKX1lbHNlIGwucGFkZGluZ0xlZnQ9dFtpXS5sZWZ0LW5baV0ubGVmdCxsLnBhZGRpbmdUb3A9dFtpXS50b3AtbltpXS50b3AsbC5wYWRkaW5nUmlnaHQ9bltpXS5yaWdodC10W2ldLnJpZ2h0LGwucGFkZGluZ0JvdHRvbT1uW2ldLmJvdHRvbS10W2ldLmJvdHRvbSxlLl90ZXh0RGl2UHJvcGVydGllcy5zZXQobyxsKX19ZnVuY3Rpb24gcyhlLHQpe3Quc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS54MS10LngxfHxlLmluZGV4LXQuaW5kZXh9KSk7dmFyIHI9W3tzdGFydDotMS8wLGVuZDoxLzAsYm91bmRhcnk6e3gxOi0xLzAseTE6LTEvMCx4MjowLHkyOjEvMCxpbmRleDotMSx4MU5ldzowLHgyTmV3OjB9fV07dC5mb3JFYWNoKChmdW5jdGlvbihlKXtmb3IodmFyIHQ9MDt0PHIubGVuZ3RoJiZyW3RdLmVuZDw9ZS55MTspdCsrO2Zvcih2YXIgbixhLGk9ci5sZW5ndGgtMTtpPj0wJiZyW2ldLnN0YXJ0Pj1lLnkyOylpLS07dmFyIG8scyxsPS0xLzA7Zm9yKG89dDtvPD1pO28rKyl7dmFyIGM7KGM9KGE9KG49cltvXSkuYm91bmRhcnkpLngyPmUueDE/YS5pbmRleD5lLmluZGV4P2EueDFOZXc6ZS54MTp2b2lkIDA9PT1hLngyTmV3PyhhLngyK2UueDEpLzI6YS54Mk5ldyk+bCYmKGw9Yyl9Zm9yKGUueDFOZXc9bCxvPXQ7bzw9aTtvKyspdm9pZCAwPT09KGE9KG49cltvXSkuYm91bmRhcnkpLngyTmV3P2EueDI+ZS54MT9hLmluZGV4PmUuaW5kZXgmJihhLngyTmV3PWEueDIpOmEueDJOZXc9bDphLngyTmV3PmwmJihhLngyTmV3PU1hdGgubWF4KGwsYS54MikpO3ZhciB1PVtdLGY9bnVsbDtmb3Iobz10O288PWk7bysrKXt2YXIgaD0oYT0obj1yW29dKS5ib3VuZGFyeSkueDI+ZS54Mj9hOmU7Zj09PWg/dVt1Lmxlbmd0aC0xXS5lbmQ9bi5lbmQ6KHUucHVzaCh7c3RhcnQ6bi5zdGFydCxlbmQ6bi5lbmQsYm91bmRhcnk6aH0pLGY9aCl9Zm9yKHJbdF0uc3RhcnQ8ZS55MSYmKHVbMF0uc3RhcnQ9ZS55MSx1LnVuc2hpZnQoe3N0YXJ0OnJbdF0uc3RhcnQsZW5kOmUueTEsYm91bmRhcnk6clt0XS5ib3VuZGFyeX0pKSxlLnkyPHJbaV0uZW5kJiYodVt1Lmxlbmd0aC0xXS5lbmQ9ZS55Mix1LnB1c2goe3N0YXJ0OmUueTIsZW5kOnJbaV0uZW5kLGJvdW5kYXJ5OnJbaV0uYm91bmRhcnl9KSksbz10O288PWk7bysrKWlmKHZvaWQgMD09PShhPShuPXJbb10pLmJvdW5kYXJ5KS54Mk5ldyl7dmFyIGQ9ITE7Zm9yKHM9dC0xOyFkJiZzPj0wJiZyW3NdLnN0YXJ0Pj1hLnkxO3MtLSlkPXJbc10uYm91bmRhcnk9PT1hO2ZvcihzPWkrMTshZCYmczxyLmxlbmd0aCYmcltzXS5lbmQ8PWEueTI7cysrKWQ9cltzXS5ib3VuZGFyeT09PWE7Zm9yKHM9MDshZCYmczx1Lmxlbmd0aDtzKyspZD11W3NdLmJvdW5kYXJ5PT09YTtkfHwoYS54Mk5ldz1sKX1BcnJheS5wcm90b3R5cGUuc3BsaWNlLmFwcGx5KHIsW3QsaS10KzFdLmNvbmNhdCh1KSl9KSksci5mb3JFYWNoKChmdW5jdGlvbih0KXt2YXIgcj10LmJvdW5kYXJ5O3ZvaWQgMD09PXIueDJOZXcmJihyLngyTmV3PU1hdGgubWF4KGUsci54MikpfSkpfWZ1bmN0aW9uIGwoZSl7dmFyIHQ9ZS50ZXh0Q29udGVudCxyPWUudGV4dENvbnRlbnRTdHJlYW0sbj1lLmNvbnRhaW5lcixvPWUudmlld3BvcnQscz1lLnRleHREaXZzLGw9ZS50ZXh0Q29udGVudEl0ZW1zU3RyLGM9ZS5lbmhhbmNlVGV4dFNlbGVjdGlvbjt0aGlzLl90ZXh0Q29udGVudD10LHRoaXMuX3RleHRDb250ZW50U3RyZWFtPXIsdGhpcy5fY29udGFpbmVyPW4sdGhpcy5fdmlld3BvcnQ9byx0aGlzLl90ZXh0RGl2cz1zfHxbXSx0aGlzLl90ZXh0Q29udGVudEl0ZW1zU3RyPWx8fFtdLHRoaXMuX2VuaGFuY2VUZXh0U2VsZWN0aW9uPSEhYyx0aGlzLl9mb250SW5zcGVjdG9yRW5hYmxlZD0hKCFpLmRlZmF1bHQuRm9udEluc3BlY3Rvcnx8IWkuZGVmYXVsdC5Gb250SW5zcGVjdG9yLmVuYWJsZWQpLHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemU9bnVsbCx0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHk9bnVsbCx0aGlzLl9sYXlvdXRUZXh0Q3R4PW51bGwsdGhpcy5fdGV4dERpdlByb3BlcnRpZXM9bmV3IFdlYWtNYXAsdGhpcy5fcmVuZGVyaW5nRG9uZT0hMSx0aGlzLl9jYW5jZWxlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fcmVuZGVyVGltZXI9bnVsbCx0aGlzLl9ib3VuZHM9W119cmV0dXJuIGwucHJvdG90eXBlPXtnZXQgcHJvbWlzZSgpe3JldHVybiB0aGlzLl9jYXBhYmlsaXR5LnByb21pc2V9LGNhbmNlbDpmdW5jdGlvbigpe3RoaXMuX3JlYWRlciYmKHRoaXMuX3JlYWRlci5jYW5jZWwobmV3IGEuQWJvcnRFeGNlcHRpb24oInRleHQgbGF5ZXIgdGFzayBjYW5jZWxsZWQiKSksdGhpcy5fcmVhZGVyPW51bGwpLHRoaXMuX2NhbmNlbGVkPSEwLG51bGwhPT10aGlzLl9yZW5kZXJUaW1lciYmKGNsZWFyVGltZW91dCh0aGlzLl9yZW5kZXJUaW1lciksdGhpcy5fcmVuZGVyVGltZXI9bnVsbCksdGhpcy5fY2FwYWJpbGl0eS5yZWplY3QoImNhbmNlbGVkIil9LF9wcm9jZXNzSXRlbXM6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTtuKyspdGhpcy5fdGV4dENvbnRlbnRJdGVtc1N0ci5wdXNoKGVbbl0uc3RyKSxyKHRoaXMsZVtuXSx0KX0sX2xheW91dFRleHQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fY29udGFpbmVyLHI9dGhpcy5fdGV4dERpdlByb3BlcnRpZXMuZ2V0KGUpO2lmKCFyLmlzV2hpdGVzcGFjZSl7dmFyIG49ZS5zdHlsZS5mb250U2l6ZSxhPWUuc3R5bGUuZm9udEZhbWlseTtuPT09dGhpcy5fbGF5b3V0VGV4dExhc3RGb250U2l6ZSYmYT09PXRoaXMuX2xheW91dFRleHRMYXN0Rm9udEZhbWlseXx8KHRoaXMuX2xheW91dFRleHRDdHguZm9udD1uKyIgIithLHRoaXMuX2xheW91dFRleHRMYXN0Rm9udFNpemU9bix0aGlzLl9sYXlvdXRUZXh0TGFzdEZvbnRGYW1pbHk9YSk7dmFyIGk9dGhpcy5fbGF5b3V0VGV4dEN0eC5tZWFzdXJlVGV4dChlLnRleHRDb250ZW50KS53aWR0aCxvPSIiOzAhPT1yLmNhbnZhc1dpZHRoJiZpPjAmJihyLnNjYWxlPXIuY2FudmFzV2lkdGgvaSxvPSJzY2FsZVgoIi5jb25jYXQoci5zY2FsZSwiKSIpKSwwIT09ci5hbmdsZSYmKG89InJvdGF0ZSgiLmNvbmNhdChyLmFuZ2xlLCJkZWcpICIpLmNvbmNhdChvKSksby5sZW5ndGg+MCYmKHIub3JpZ2luYWxUcmFuc2Zvcm09byxlLnN0eWxlLnRyYW5zZm9ybT1vKSx0aGlzLl90ZXh0RGl2UHJvcGVydGllcy5zZXQoZSxyKSx0LmFwcGVuZENoaWxkKGUpfX0sX3JlbmRlcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxpPU9iamVjdC5jcmVhdGUobnVsbCksbz1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJjYW52YXMiKTtpZihvLm1vek9wYXF1ZT0hMCx0aGlzLl9sYXlvdXRUZXh0Q3R4PW8uZ2V0Q29udGV4dCgiMmQiLHthbHBoYTohMX0pLHRoaXMuX3RleHRDb250ZW50KXt2YXIgcz10aGlzLl90ZXh0Q29udGVudC5pdGVtcyxsPXRoaXMuX3RleHRDb250ZW50LnN0eWxlczt0aGlzLl9wcm9jZXNzSXRlbXMocyxsKSxyLnJlc29sdmUoKX1lbHNle2lmKCF0aGlzLl90ZXh0Q29udGVudFN0cmVhbSl0aHJvdyBuZXcgRXJyb3IoJ05laXRoZXIgInRleHRDb250ZW50IiBub3IgInRleHRDb250ZW50U3RyZWFtIiBwYXJhbWV0ZXJzIHNwZWNpZmllZC4nKTt0aGlzLl9yZWFkZXI9dGhpcy5fdGV4dENvbnRlbnRTdHJlYW0uZ2V0UmVhZGVyKCksZnVuY3Rpb24gZSgpe3QuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24obil7dmFyIGE9bi52YWx1ZTtuLmRvbmU/ci5yZXNvbHZlKCk6KE9iamVjdC5hc3NpZ24oaSxhLnN0eWxlcyksdC5fcHJvY2Vzc0l0ZW1zKGEuaXRlbXMsaSksZSgpKX0pLHIucmVqZWN0KX0oKX1yLnByb21pc2UudGhlbigoZnVuY3Rpb24oKXtpPW51bGwsZT90Ll9yZW5kZXJUaW1lcj1zZXRUaW1lb3V0KChmdW5jdGlvbigpe24odCksdC5fcmVuZGVyVGltZXI9bnVsbH0pLGUpOm4odCl9KSx0aGlzLl9jYXBhYmlsaXR5LnJlamVjdCl9LGV4cGFuZFRleHREaXZzOmZ1bmN0aW9uKGUpe2lmKHRoaXMuX2VuaGFuY2VUZXh0U2VsZWN0aW9uJiZ0aGlzLl9yZW5kZXJpbmdEb25lKXtudWxsIT09dGhpcy5fYm91bmRzJiYobyh0aGlzKSx0aGlzLl9ib3VuZHM9bnVsbCk7Zm9yKHZhciB0PTAscj10aGlzLl90ZXh0RGl2cy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49dGhpcy5fdGV4dERpdnNbdF0sYT10aGlzLl90ZXh0RGl2UHJvcGVydGllcy5nZXQobik7aWYoIWEuaXNXaGl0ZXNwYWNlKWlmKGUpe3ZhciBpPSIiLHM9IiI7MSE9PWEuc2NhbGUmJihpPSJzY2FsZVgoIithLnNjYWxlKyIpIiksMCE9PWEuYW5nbGUmJihpPSJyb3RhdGUoIithLmFuZ2xlKyJkZWcpICIraSksMCE9PWEucGFkZGluZ0xlZnQmJihzKz0iIHBhZGRpbmctbGVmdDogIithLnBhZGRpbmdMZWZ0L2Euc2NhbGUrInB4OyIsaSs9IiB0cmFuc2xhdGVYKCIrLWEucGFkZGluZ0xlZnQvYS5zY2FsZSsicHgpIiksMCE9PWEucGFkZGluZ1RvcCYmKHMrPSIgcGFkZGluZy10b3A6ICIrYS5wYWRkaW5nVG9wKyJweDsiLGkrPSIgdHJhbnNsYXRlWSgiKy1hLnBhZGRpbmdUb3ArInB4KSIpLDAhPT1hLnBhZGRpbmdSaWdodCYmKHMrPSIgcGFkZGluZy1yaWdodDogIithLnBhZGRpbmdSaWdodC9hLnNjYWxlKyJweDsiKSwwIT09YS5wYWRkaW5nQm90dG9tJiYocys9IiBwYWRkaW5nLWJvdHRvbTogIithLnBhZGRpbmdCb3R0b20rInB4OyIpLCIiIT09cyYmbi5zZXRBdHRyaWJ1dGUoInN0eWxlIixhLnN0eWxlK3MpLCIiIT09aSYmKG4uc3R5bGUudHJhbnNmb3JtPWkpfWVsc2Ugbi5zdHlsZS5wYWRkaW5nPTAsbi5zdHlsZS50cmFuc2Zvcm09YS5vcmlnaW5hbFRyYW5zZm9ybXx8IiJ9fX19LGZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBsKHt0ZXh0Q29udGVudDplLnRleHRDb250ZW50LHRleHRDb250ZW50U3RyZWFtOmUudGV4dENvbnRlbnRTdHJlYW0sY29udGFpbmVyOmUuY29udGFpbmVyLHZpZXdwb3J0OmUudmlld3BvcnQsdGV4dERpdnM6ZS50ZXh0RGl2cyx0ZXh0Q29udGVudEl0ZW1zU3RyOmUudGV4dENvbnRlbnRJdGVtc1N0cixlbmhhbmNlVGV4dFNlbGVjdGlvbjplLmVuaGFuY2VUZXh0U2VsZWN0aW9ufSk7cmV0dXJuIHQuX3JlbmRlcihlLnRpbWVvdXQpLHR9fSgpO3QucmVuZGVyVGV4dExheWVyPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQW5ub3RhdGlvbkxheWVyPXZvaWQgMDt2YXIgbj1yKDE1MSksYT1yKDEpO2Z1bmN0aW9uIGkoZSx0LHIpe3JldHVybihpPSJ1bmRlZmluZWQiIT10eXBlb2YgUmVmbGVjdCYmUmVmbGVjdC5nZXQ/UmVmbGVjdC5nZXQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKGUsdCl7Zm9yKDshT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsdCkmJm51bGwhPT0oZT1jKGUpKTspO3JldHVybiBlfShlLHQpO2lmKG4pe3ZhciBhPU9iamVjdC5nZXRPd25Qcm9wZXJ0eURlc2NyaXB0b3Iobix0KTtyZXR1cm4gYS5nZXQ/YS5nZXQuY2FsbChyKTphLnZhbHVlfX0pKGUsdCxyfHxlKX1mdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PW8odCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2woZSk6dH1mdW5jdGlvbiBsKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBjKGUpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmYoZSx0KX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuKGY9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGgoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBkKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcChlLHQscil7cmV0dXJuIHQmJmQoZS5wcm90b3R5cGUsdCksciYmZChlLHIpLGV9dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aCh0aGlzLGUpfXJldHVybiBwKGUsbnVsbCxbe2tleToiY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtzd2l0Y2goZS5kYXRhLmFubm90YXRpb25UeXBlKXtjYXNlIGEuQW5ub3RhdGlvblR5cGUuTElOSzpyZXR1cm4gbmV3IHYoZSk7Y2FzZSBhLkFubm90YXRpb25UeXBlLlRFWFQ6cmV0dXJuIG5ldyB5KGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5XSURHRVQ6c3dpdGNoKGUuZGF0YS5maWVsZFR5cGUpe2Nhc2UiVHgiOnJldHVybiBuZXcgdyhlKTtjYXNlIkJ0biI6cmV0dXJuIGUuZGF0YS5yYWRpb0J1dHRvbj9uZXcgUyhlKTplLmRhdGEuY2hlY2tCb3g/bmV3IGsoZSk6bmV3IF8oZSk7Y2FzZSJDaCI6cmV0dXJuIG5ldyB4KGUpfXJldHVybiBuZXcgYihlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuUE9QVVA6cmV0dXJuIG5ldyBBKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5MSU5FOnJldHVybiBuZXcgUChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuU1FVQVJFOnJldHVybiBuZXcgRShlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuQ0lSQ0xFOnJldHVybiBuZXcgVChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuUE9MWUxJTkU6cmV0dXJuIG5ldyBSKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5JTks6cmV0dXJuIG5ldyBJKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5QT0xZR09OOnJldHVybiBuZXcgTyhlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuSElHSExJR0hUOnJldHVybiBuZXcgRihlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuVU5ERVJMSU5FOnJldHVybiBuZXcgTChlKTtjYXNlIGEuQW5ub3RhdGlvblR5cGUuU1FVSUdHTFk6cmV0dXJuIG5ldyBEKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5TVFJJS0VPVVQ6cmV0dXJuIG5ldyBOKGUpO2Nhc2UgYS5Bbm5vdGF0aW9uVHlwZS5TVEFNUDpyZXR1cm4gbmV3IE0oZSk7Y2FzZSBhLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5UOnJldHVybiBuZXcgaihlKTtkZWZhdWx0OnJldHVybiBuZXcgZyhlKX19fV0pLGV9KCksZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxuPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl07aCh0aGlzLGUpLHRoaXMuaXNSZW5kZXJhYmxlPXIsdGhpcy5kYXRhPXQuZGF0YSx0aGlzLmxheWVyPXQubGF5ZXIsdGhpcy5wYWdlPXQucGFnZSx0aGlzLnZpZXdwb3J0PXQudmlld3BvcnQsdGhpcy5saW5rU2VydmljZT10LmxpbmtTZXJ2aWNlLHRoaXMuZG93bmxvYWRNYW5hZ2VyPXQuZG93bmxvYWRNYW5hZ2VyLHRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoPXQuaW1hZ2VSZXNvdXJjZXNQYXRoLHRoaXMucmVuZGVySW50ZXJhY3RpdmVGb3Jtcz10LnJlbmRlckludGVyYWN0aXZlRm9ybXMsdGhpcy5zdmdGYWN0b3J5PXQuc3ZnRmFjdG9yeSxyJiYodGhpcy5jb250YWluZXI9dGhpcy5fY3JlYXRlQ29udGFpbmVyKG4pKX1yZXR1cm4gcChlLFt7a2V5OiJfY3JlYXRlQ29udGFpbmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0sdD10aGlzLmRhdGEscj10aGlzLnBhZ2Usbj10aGlzLnZpZXdwb3J0LGk9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgic2VjdGlvbiIpLG89dC5yZWN0WzJdLXQucmVjdFswXSxzPXQucmVjdFszXS10LnJlY3RbMV07aS5zZXRBdHRyaWJ1dGUoImRhdGEtYW5ub3RhdGlvbi1pZCIsdC5pZCk7dmFyIGw9YS5VdGlsLm5vcm1hbGl6ZVJlY3QoW3QucmVjdFswXSxyLnZpZXdbM10tdC5yZWN0WzFdK3Iudmlld1sxXSx0LnJlY3RbMl0sci52aWV3WzNdLXQucmVjdFszXStyLnZpZXdbMV1dKTtpZihpLnN0eWxlLnRyYW5zZm9ybT0ibWF0cml4KCIrbi50cmFuc2Zvcm0uam9pbigiLCIpKyIpIixpLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0tbFswXSsicHggIistbFsxXSsicHgiLCFlJiZ0LmJvcmRlclN0eWxlLndpZHRoPjApe2kuc3R5bGUuYm9yZGVyV2lkdGg9dC5ib3JkZXJTdHlsZS53aWR0aCsicHgiLHQuYm9yZGVyU3R5bGUuc3R5bGUhPT1hLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FJiYoby09Mip0LmJvcmRlclN0eWxlLndpZHRoLHMtPTIqdC5ib3JkZXJTdHlsZS53aWR0aCk7dmFyIGM9dC5ib3JkZXJTdHlsZS5ob3Jpem9udGFsQ29ybmVyUmFkaXVzLHU9dC5ib3JkZXJTdHlsZS52ZXJ0aWNhbENvcm5lclJhZGl1cztpZihjPjB8fHU+MCl7dmFyIGY9YysicHggLyAiK3UrInB4IjtpLnN0eWxlLmJvcmRlclJhZGl1cz1mfXN3aXRjaCh0LmJvcmRlclN0eWxlLnN0eWxlKXtjYXNlIGEuQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRDppLnN0eWxlLmJvcmRlclN0eWxlPSJzb2xpZCI7YnJlYWs7Y2FzZSBhLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEOmkuc3R5bGUuYm9yZGVyU3R5bGU9ImRhc2hlZCI7YnJlYWs7Y2FzZSBhLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDooMCxhLndhcm4pKCJVbmltcGxlbWVudGVkIGJvcmRlciBzdHlsZTogYmV2ZWxlZCIpO2JyZWFrO2Nhc2UgYS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUOigwLGEud2FybikoIlVuaW1wbGVtZW50ZWQgYm9yZGVyIHN0eWxlOiBpbnNldCIpO2JyZWFrO2Nhc2UgYS5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlVOREVSTElORTppLnN0eWxlLmJvcmRlckJvdHRvbVN0eWxlPSJzb2xpZCJ9dC5jb2xvcj9pLnN0eWxlLmJvcmRlckNvbG9yPWEuVXRpbC5tYWtlQ3NzUmdiKDB8dC5jb2xvclswXSwwfHQuY29sb3JbMV0sMHx0LmNvbG9yWzJdKTppLnN0eWxlLmJvcmRlcldpZHRoPTB9cmV0dXJuIGkuc3R5bGUubGVmdD1sWzBdKyJweCIsaS5zdHlsZS50b3A9bFsxXSsicHgiLGkuc3R5bGUud2lkdGg9bysicHgiLGkuc3R5bGUuaGVpZ2h0PXMrInB4IixpfX0se2tleToiX2NyZWF0ZVBvcHVwIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dHx8KCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zdHlsZS5oZWlnaHQ9ZS5zdHlsZS5oZWlnaHQsdC5zdHlsZS53aWR0aD1lLnN0eWxlLndpZHRoLGUuYXBwZW5kQ2hpbGQodCkpO3ZhciBuPW5ldyBDKHtjb250YWluZXI6ZSx0cmlnZ2VyOnQsY29sb3I6ci5jb2xvcix0aXRsZTpyLnRpdGxlLGNvbnRlbnRzOnIuY29udGVudHMsaGlkZVdyYXBwZXI6ITB9KS5yZW5kZXIoKTtuLnN0eWxlLmxlZnQ9ZS5zdHlsZS53aWR0aCxlLmFwcGVuZENoaWxkKG4pfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpeygwLGEudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYEFubm90YXRpb25FbGVtZW50LnJlbmRlcmAgY2FsbGVkIil9fV0pLGV9KCksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEudXJsfHxlLmRhdGEuZGVzdHx8ZS5kYXRhLmFjdGlvbik7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ibGlua0Fubm90YXRpb24iO3ZhciBlPXRoaXMuZGF0YSx0PXRoaXMubGlua1NlcnZpY2Uscj1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJhIik7cmV0dXJuKDAsbi5hZGRMaW5rQXR0cmlidXRlcykocix7dXJsOmUudXJsLHRhcmdldDplLm5ld1dpbmRvdz9uLkxpbmtUYXJnZXQuQkxBTks6dC5leHRlcm5hbExpbmtUYXJnZXQscmVsOnQuZXh0ZXJuYWxMaW5rUmVsfSksZS51cmx8fChlLmFjdGlvbj90aGlzLl9iaW5kTmFtZWRBY3Rpb24ocixlLmFjdGlvbik6dGhpcy5fYmluZExpbmsocixlLmRlc3QpKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChyKSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9iaW5kTGluayIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2UuaHJlZj10aGlzLmxpbmtTZXJ2aWNlLmdldERlc3RpbmF0aW9uSGFzaCh0KSxlLm9uY2xpY2s9ZnVuY3Rpb24oKXtyZXR1cm4gdCYmci5saW5rU2VydmljZS5uYXZpZ2F0ZVRvKHQpLCExfSx0JiYoZS5jbGFzc05hbWU9ImludGVybmFsTGluayIpfX0se2tleToiX2JpbmROYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzO2UuaHJlZj10aGlzLmxpbmtTZXJ2aWNlLmdldEFuY2hvclVybCgiIiksZS5vbmNsaWNrPWZ1bmN0aW9uKCl7cmV0dXJuIHIubGlua1NlcnZpY2UuZXhlY3V0ZU5hbWVkQWN0aW9uKHQpLCExfSxlLmNsYXNzTmFtZT0iaW50ZXJuYWxMaW5rIn19XSksdH0oZykseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUscikpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ0ZXh0QW5ub3RhdGlvbiI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW1nIik7cmV0dXJuIGUuc3R5bGUuaGVpZ2h0PXRoaXMuY29udGFpbmVyLnN0eWxlLmhlaWdodCxlLnN0eWxlLndpZHRoPXRoaXMuY29udGFpbmVyLnN0eWxlLndpZHRoLGUuc3JjPXRoaXMuaW1hZ2VSZXNvdXJjZXNQYXRoKyJhbm5vdGF0aW9uLSIrdGhpcy5kYXRhLm5hbWUudG9Mb3dlckNhc2UoKSsiLnN2ZyIsZS5hbHQ9Ilt7e3R5cGV9fSBBbm5vdGF0aW9uXSIsZS5kYXRhc2V0LmwxMG5JZD0idGV4dF9hbm5vdGF0aW9uX3R5cGUiLGUuZGF0YXNldC5sMTBuQXJncz1KU09OLnN0cmluZ2lmeSh7dHlwZTp0aGlzLmRhdGEubmFtZX0pLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsZSx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuY29udGFpbmVyfX1dKSx0fShnKSxiPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXtyZXR1cm4gaCh0aGlzLHQpLHModGhpcyxjKHQpLmFwcGx5KHRoaXMsYXJndW1lbnRzKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLHc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zfHwhZS5kYXRhLmhhc0FwcGVhcmFuY2UmJiEhZS5kYXRhLmZpZWxkVmFsdWU7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0idGV4dFdpZGdldEFubm90YXRpb24iO3ZhciBlPW51bGw7aWYodGhpcy5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKXtpZih0aGlzLmRhdGEubXVsdGlMaW5lPyhlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInRleHRhcmVhIikpLnRleHRDb250ZW50PXRoaXMuZGF0YS5maWVsZFZhbHVlOigoZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJpbnB1dCIpKS50eXBlPSJ0ZXh0IixlLnNldEF0dHJpYnV0ZSgidmFsdWUiLHRoaXMuZGF0YS5maWVsZFZhbHVlKSksZS5kaXNhYmxlZD10aGlzLmRhdGEucmVhZE9ubHksbnVsbCE9PXRoaXMuZGF0YS5tYXhMZW4mJihlLm1heExlbmd0aD10aGlzLmRhdGEubWF4TGVuKSx0aGlzLmRhdGEuY29tYil7dmFyIHQ9KHRoaXMuZGF0YS5yZWN0WzJdLXRoaXMuZGF0YS5yZWN0WzBdKS90aGlzLmRhdGEubWF4TGVuO2UuY2xhc3NMaXN0LmFkZCgiY29tYiIpLGUuc3R5bGUubGV0dGVyU3BhY2luZz0iY2FsYygiK3QrInB4IC0gMWNoKSJ9fWVsc2V7KGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiZGl2IikpLnRleHRDb250ZW50PXRoaXMuZGF0YS5maWVsZFZhbHVlLGUuc3R5bGUudmVydGljYWxBbGlnbj0ibWlkZGxlIixlLnN0eWxlLmRpc3BsYXk9InRhYmxlLWNlbGwiO3ZhciByPW51bGw7dGhpcy5kYXRhLmZvbnRSZWZOYW1lJiZ0aGlzLnBhZ2UuY29tbW9uT2Jqcy5oYXModGhpcy5kYXRhLmZvbnRSZWZOYW1lKSYmKHI9dGhpcy5wYWdlLmNvbW1vbk9ianMuZ2V0KHRoaXMuZGF0YS5mb250UmVmTmFtZSkpLHRoaXMuX3NldFRleHRTdHlsZShlLHIpfXJldHVybiBudWxsIT09dGhpcy5kYXRhLnRleHRBbGlnbm1lbnQmJihlLnN0eWxlLnRleHRBbGlnbj1bImxlZnQiLCJjZW50ZXIiLCJyaWdodCJdW3RoaXMuZGF0YS50ZXh0QWxpZ25tZW50XSksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5jb250YWluZXJ9fSx7a2V5OiJfc2V0VGV4dFN0eWxlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUuc3R5bGU7aWYoci5mb250U2l6ZT10aGlzLmRhdGEuZm9udFNpemUrInB4IixyLmRpcmVjdGlvbj10aGlzLmRhdGEuZm9udERpcmVjdGlvbjwwPyJydGwiOiJsdHIiLHQpe3IuZm9udFdlaWdodD10LmJsYWNrP3QuYm9sZD8iOTAwIjoiYm9sZCI6dC5ib2xkPyJib2xkIjoibm9ybWFsIixyLmZvbnRTdHlsZT10Lml0YWxpYz8iaXRhbGljIjoibm9ybWFsIjt2YXIgbj10LmxvYWRlZE5hbWU/JyInK3QubG9hZGVkTmFtZSsnIiwgJzoiIixhPXQuZmFsbGJhY2tOYW1lfHwiSGVsdmV0aWNhLCBzYW5zLXNlcmlmIjtyLmZvbnRGYW1pbHk9bithfX19XSksdH0oYiksaz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuY2FsbCh0aGlzLGUsZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gY2hlY2tCb3giO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImlucHV0Iik7cmV0dXJuIGUuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LGUudHlwZT0iY2hlY2tib3giLHRoaXMuZGF0YS5maWVsZFZhbHVlJiYiT2ZmIiE9PXRoaXMuZGF0YS5maWVsZFZhbHVlJiZlLnNldEF0dHJpYnV0ZSgiY2hlY2tlZCIsITApLHRoaXMuY29udGFpbmVyLmFwcGVuZENoaWxkKGUpLHRoaXMuY29udGFpbmVyfX1dKSx0fShiKSxTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7cmV0dXJuIGgodGhpcyx0KSxzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxlLnJlbmRlckludGVyYWN0aXZlRm9ybXMpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iYnV0dG9uV2lkZ2V0QW5ub3RhdGlvbiByYWRpb0J1dHRvbiI7dmFyIGU9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgiaW5wdXQiKTtyZXR1cm4gZS5kaXNhYmxlZD10aGlzLmRhdGEucmVhZE9ubHksZS50eXBlPSJyYWRpbyIsZS5uYW1lPXRoaXMuZGF0YS5maWVsZE5hbWUsdGhpcy5kYXRhLmZpZWxkVmFsdWU9PT10aGlzLmRhdGEuYnV0dG9uVmFsdWUmJmUuc2V0QXR0cmlidXRlKCJjaGVja2VkIiwhMCksdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGIpLF89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuYXBwbHkodGhpcyxhcmd1bWVudHMpKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWkoYyh0LnByb3RvdHlwZSksInJlbmRlciIsdGhpcykuY2FsbCh0aGlzKTtyZXR1cm4gZS5jbGFzc05hbWU9ImJ1dHRvbldpZGdldEFubm90YXRpb24gcHVzaEJ1dHRvbiIsZX19XSksdH0odikseD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3JldHVybiBoKHRoaXMsdCkscyh0aGlzLGModCkuY2FsbCh0aGlzLGUsZS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImNob2ljZVdpZGdldEFubm90YXRpb24iO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoInNlbGVjdCIpO2UuZGlzYWJsZWQ9dGhpcy5kYXRhLnJlYWRPbmx5LHRoaXMuZGF0YS5jb21ib3x8KGUuc2l6ZT10aGlzLmRhdGEub3B0aW9ucy5sZW5ndGgsdGhpcy5kYXRhLm11bHRpU2VsZWN0JiYoZS5tdWx0aXBsZT0hMCkpO2Zvcih2YXIgdD0wLHI9dGhpcy5kYXRhLm9wdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPXRoaXMuZGF0YS5vcHRpb25zW3RdLGE9ZG9jdW1lbnQuY3JlYXRlRWxlbWVudCgib3B0aW9uIik7YS50ZXh0Q29udGVudD1uLmRpc3BsYXlWYWx1ZSxhLnZhbHVlPW4uZXhwb3J0VmFsdWUsdGhpcy5kYXRhLmZpZWxkVmFsdWUuaW5jbHVkZXMobi5kaXNwbGF5VmFsdWUpJiZhLnNldEF0dHJpYnV0ZSgic2VsZWN0ZWQiLCEwKSxlLmFwcGVuZENoaWxkKGEpfXJldHVybiB0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oYiksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hKCFlLmRhdGEudGl0bGUmJiFlLmRhdGEuY29udGVudHMpO3JldHVybiBzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxyKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZih0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InBvcHVwQW5ub3RhdGlvbiIsWyJMaW5lIiwiU3F1YXJlIiwiQ2lyY2xlIiwiUG9seUxpbmUiLCJQb2x5Z29uIiwiSW5rIl0uaW5jbHVkZXModGhpcy5kYXRhLnBhcmVudFR5cGUpKXJldHVybiB0aGlzLmNvbnRhaW5lcjt2YXIgZT0nW2RhdGEtYW5ub3RhdGlvbi1pZD0iJyt0aGlzLmRhdGEucGFyZW50SWQrJyJdJyx0PXRoaXMubGF5ZXIucXVlcnlTZWxlY3RvcihlKTtpZighdClyZXR1cm4gdGhpcy5jb250YWluZXI7dmFyIHI9bmV3IEMoe2NvbnRhaW5lcjp0aGlzLmNvbnRhaW5lcix0cmlnZ2VyOnQsY29sb3I6dGhpcy5kYXRhLmNvbG9yLHRpdGxlOnRoaXMuZGF0YS50aXRsZSxjb250ZW50czp0aGlzLmRhdGEuY29udGVudHN9KSxuPXBhcnNlRmxvYXQodC5zdHlsZS5sZWZ0KSxhPXBhcnNlRmxvYXQodC5zdHlsZS53aWR0aCk7cmV0dXJuIHRoaXMuY29udGFpbmVyLnN0eWxlLnRyYW5zZm9ybU9yaWdpbj0tKG4rYSkrInB4IC0iK3Quc3R5bGUudG9wLHRoaXMuY29udGFpbmVyLnN0eWxlLmxlZnQ9bithKyJweCIsdGhpcy5jb250YWluZXIuYXBwZW5kQ2hpbGQoci5yZW5kZXIoKSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2godGhpcyxlKSx0aGlzLmNvbnRhaW5lcj10LmNvbnRhaW5lcix0aGlzLnRyaWdnZXI9dC50cmlnZ2VyLHRoaXMuY29sb3I9dC5jb2xvcix0aGlzLnRpdGxlPXQudGl0bGUsdGhpcy5jb250ZW50cz10LmNvbnRlbnRzLHRoaXMuaGlkZVdyYXBwZXI9dC5oaWRlV3JhcHBlcnx8ITEsdGhpcy5waW5uZWQ9ITF9cmV0dXJuIHAoZSxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2UuY2xhc3NOYW1lPSJwb3B1cFdyYXBwZXIiLHRoaXMuaGlkZUVsZW1lbnQ9dGhpcy5oaWRlV3JhcHBlcj9lOnRoaXMuY29udGFpbmVyLHRoaXMuaGlkZUVsZW1lbnQuc2V0QXR0cmlidXRlKCJoaWRkZW4iLCEwKTt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKTt0LmNsYXNzTmFtZT0icG9wdXAiO3ZhciByPXRoaXMuY29sb3I7aWYocil7dmFyIG49LjcqKDI1NS1yWzBdKStyWzBdLGk9LjcqKDI1NS1yWzFdKStyWzFdLG89LjcqKDI1NS1yWzJdKStyWzJdO3Quc3R5bGUuYmFja2dyb3VuZENvbG9yPWEuVXRpbC5tYWtlQ3NzUmdiKDB8biwwfGksMHxvKX12YXIgcz10aGlzLl9mb3JtYXRDb250ZW50cyh0aGlzLmNvbnRlbnRzKSxsPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImgxIik7cmV0dXJuIGwudGV4dENvbnRlbnQ9dGhpcy50aXRsZSx0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigiY2xpY2siLHRoaXMuX3RvZ2dsZS5iaW5kKHRoaXMpKSx0aGlzLnRyaWdnZXIuYWRkRXZlbnRMaXN0ZW5lcigibW91c2VvdmVyIix0aGlzLl9zaG93LmJpbmQodGhpcywhMSkpLHRoaXMudHJpZ2dlci5hZGRFdmVudExpc3RlbmVyKCJtb3VzZW91dCIsdGhpcy5faGlkZS5iaW5kKHRoaXMsITEpKSx0LmFkZEV2ZW50TGlzdGVuZXIoImNsaWNrIix0aGlzLl9oaWRlLmJpbmQodGhpcywhMCkpLHQuYXBwZW5kQ2hpbGQobCksdC5hcHBlbmRDaGlsZChzKSxlLmFwcGVuZENoaWxkKHQpLGV9fSx7a2V5OiJfZm9ybWF0Q29udGVudHMiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJwIikscj1lLnNwbGl0KC8oPzpcclxuP3xcbikvKSxuPTAsYT1yLmxlbmd0aDtuPGE7KytuKXt2YXIgaT1yW25dO3QuYXBwZW5kQ2hpbGQoZG9jdW1lbnQuY3JlYXRlVGV4dE5vZGUoaSkpLG48YS0xJiZ0LmFwcGVuZENoaWxkKGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImJyIikpfXJldHVybiB0fX0se2tleToiX3RvZ2dsZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBpbm5lZD90aGlzLl9oaWRlKCEwKTp0aGlzLl9zaG93KCEwKX19LHtrZXk6Il9zaG93Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07ZSYmKHRoaXMucGlubmVkPSEwKSx0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIikmJih0aGlzLmhpZGVFbGVtZW50LnJlbW92ZUF0dHJpYnV0ZSgiaGlkZGVuIiksdGhpcy5jb250YWluZXIuc3R5bGUuekluZGV4Kz0xKX19LHtrZXk6Il9oaWRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPSEoYXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0pfHxhcmd1bWVudHNbMF07ZSYmKHRoaXMucGlubmVkPSExKSx0aGlzLmhpZGVFbGVtZW50Lmhhc0F0dHJpYnV0ZSgiaGlkZGVuIil8fHRoaXMucGlubmVkfHwodGhpcy5oaWRlRWxlbWVudC5zZXRBdHRyaWJ1dGUoImhpZGRlbiIsITApLHRoaXMuY29udGFpbmVyLnN0eWxlLnpJbmRleC09MSl9fV0pLGV9KCksUD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJsaW5lQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmxpbmUiKTtyZXR1cm4gYS5zZXRBdHRyaWJ1dGUoIngxIixlLnJlY3RbMl0tZS5saW5lQ29vcmRpbmF0ZXNbMF0pLGEuc2V0QXR0cmlidXRlKCJ5MSIsZS5yZWN0WzNdLWUubGluZUNvb3JkaW5hdGVzWzFdKSxhLnNldEF0dHJpYnV0ZSgieDIiLGUucmVjdFsyXS1lLmxpbmVDb29yZGluYXRlc1syXSksYS5zZXRBdHRyaWJ1dGUoInkyIixlLnJlY3RbM10tZS5saW5lQ29vcmRpbmF0ZXNbM10pLGEuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGUuYm9yZGVyU3R5bGUud2lkdGgpLGEuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLG4uYXBwZW5kQ2hpbGQoYSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGEsZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1YXJlQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT1lLmJvcmRlclN0eWxlLndpZHRoLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJ4IixhLzIpLGkuc2V0QXR0cmlidXRlKCJ5IixhLzIpLGkuc2V0QXR0cmlidXRlKCJ3aWR0aCIsdC1hKSxpLnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixyLWEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGkuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGksZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0iY2lyY2xlQW5ub3RhdGlvbiI7dmFyIGU9dGhpcy5kYXRhLHQ9ZS5yZWN0WzJdLWUucmVjdFswXSxyPWUucmVjdFszXS1lLnJlY3RbMV0sbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlKHQsciksYT1lLmJvcmRlclN0eWxlLndpZHRoLGk9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzplbGxpcHNlIik7cmV0dXJuIGkuc2V0QXR0cmlidXRlKCJjeCIsdC8yKSxpLnNldEF0dHJpYnV0ZSgiY3kiLHIvMiksaS5zZXRBdHRyaWJ1dGUoInJ4Iix0LzItYS8yKSxpLnNldEF0dHJpYnV0ZSgicnkiLHIvMi1hLzIpLGkuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLGEpLGkuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGkuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoaSksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGksZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLFI9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtoKHRoaXMsdCk7dmFyIG49ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuKHI9cyh0aGlzLGModCkuY2FsbCh0aGlzLGUsbiwhMCkpKS5jb250YWluZXJDbGFzc05hbWU9InBvbHlsaW5lQW5ub3RhdGlvbiIsci5zdmdFbGVtZW50TmFtZT0ic3ZnOnBvbHlsaW5lIixyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO2Zvcih2YXIgZT10aGlzLmRhdGEsdD1lLnJlY3RbMl0tZS5yZWN0WzBdLHI9ZS5yZWN0WzNdLWUucmVjdFsxXSxuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodCxyKSxhPWUudmVydGljZXMsaT1bXSxvPTAscz1hLmxlbmd0aDtvPHM7bysrKXt2YXIgbD1hW29dLngtZS5yZWN0WzBdLGM9ZS5yZWN0WzNdLWFbb10ueTtpLnB1c2gobCsiLCIrYyl9aT1pLmpvaW4oIiAiKTt2YXIgdT1lLmJvcmRlclN0eWxlLndpZHRoLGY9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cmV0dXJuIGYuc2V0QXR0cmlidXRlKCJwb2ludHMiLGkpLGYuc2V0QXR0cmlidXRlKCJzdHJva2Utd2lkdGgiLHUpLGYuc2V0QXR0cmlidXRlKCJzdHJva2UiLCJ0cmFuc3BhcmVudCIpLGYuc2V0QXR0cmlidXRlKCJmaWxsIiwibm9uZSIpLG4uYXBwZW5kQ2hpbGQoZiksdGhpcy5jb250YWluZXIuYXBwZW5kKG4pLHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGYsZSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLE89ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gaCh0aGlzLHQpLChyPXModGhpcyxjKHQpLmNhbGwodGhpcyxlKSkpLmNvbnRhaW5lckNsYXNzTmFtZT0icG9seWdvbkFubm90YXRpb24iLHIuc3ZnRWxlbWVudE5hbWU9InN2Zzpwb2x5Z29uIixyfXJldHVybiB1KHQsZSksdH0oUiksST1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO2godGhpcyx0KTt2YXIgbj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4ocj1zKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxuLCEwKSkpLmNvbnRhaW5lckNsYXNzTmFtZT0iaW5rQW5ub3RhdGlvbiIsci5zdmdFbGVtZW50TmFtZT0ic3ZnOnBvbHlsaW5lIixyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPXRoaXMuY29udGFpbmVyQ2xhc3NOYW1lO2Zvcih2YXIgZT10aGlzLmRhdGEsdD1lLnJlY3RbMl0tZS5yZWN0WzBdLHI9ZS5yZWN0WzNdLWUucmVjdFsxXSxuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUodCxyKSxhPWUuaW5rTGlzdHMsaT0wLG89YS5sZW5ndGg7aTxvO2krKyl7Zm9yKHZhciBzPWFbaV0sbD1bXSxjPTAsdT1zLmxlbmd0aDtjPHU7YysrKXt2YXIgZj1zW2NdLngtZS5yZWN0WzBdLGg9ZS5yZWN0WzNdLXNbY10ueTtsLnB1c2goZisiLCIraCl9bD1sLmpvaW4oIiAiKTt2YXIgZD1lLmJvcmRlclN0eWxlLndpZHRoLHA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQodGhpcy5zdmdFbGVtZW50TmFtZSk7cC5zZXRBdHRyaWJ1dGUoInBvaW50cyIsbCkscC5zZXRBdHRyaWJ1dGUoInN0cm9rZS13aWR0aCIsZCkscC5zZXRBdHRyaWJ1dGUoInN0cm9rZSIsInRyYW5zcGFyZW50IikscC5zZXRBdHRyaWJ1dGUoImZpbGwiLCJub25lIiksdGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIscCxlKSxuLmFwcGVuZENoaWxkKHApfXJldHVybiB0aGlzLmNvbnRhaW5lci5hcHBlbmQobiksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLEY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9ImhpZ2hsaWdodEFubm90YXRpb24iLHRoaXMuZGF0YS5oYXNQb3B1cHx8dGhpcy5fY3JlYXRlUG9wdXAodGhpcy5jb250YWluZXIsbnVsbCx0aGlzLmRhdGEpLHRoaXMuY29udGFpbmVyfX1dKSx0fShnKSxMPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aCh0aGlzLHQpO3ZhciByPSEhKGUuZGF0YS5oYXNQb3B1cHx8ZS5kYXRhLnRpdGxlfHxlLmRhdGEuY29udGVudHMpO3JldHVybiBzKHRoaXMsYyh0KS5jYWxsKHRoaXMsZSxyLCEwKSl9cmV0dXJuIHUodCxlKSxwKHQsW3trZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJ1bmRlcmxpbmVBbm5vdGF0aW9uIix0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLG51bGwsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oZyksRD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3F1aWdnbHlBbm5vdGF0aW9uIix0aGlzLmRhdGEuaGFzUG9wdXB8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLG51bGwsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lcn19XSksdH0oZyksTj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe2godGhpcyx0KTt2YXIgcj0hIShlLmRhdGEuaGFzUG9wdXB8fGUuZGF0YS50aXRsZXx8ZS5kYXRhLmNvbnRlbnRzKTtyZXR1cm4gcyh0aGlzLGModCkuY2FsbCh0aGlzLGUsciwhMCkpfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuY29udGFpbmVyLmNsYXNzTmFtZT0ic3RyaWtlb3V0QW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lcixudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLE09ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtoKHRoaXMsdCk7dmFyIHI9ISEoZS5kYXRhLmhhc1BvcHVwfHxlLmRhdGEudGl0bGV8fGUuZGF0YS5jb250ZW50cyk7cmV0dXJuIHModGhpcyxjKHQpLmNhbGwodGhpcyxlLHIsITApKX1yZXR1cm4gdSh0LGUpLHAodCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNvbnRhaW5lci5jbGFzc05hbWU9InN0YW1wQW5ub3RhdGlvbiIsdGhpcy5kYXRhLmhhc1BvcHVwfHx0aGlzLl9jcmVhdGVQb3B1cCh0aGlzLmNvbnRhaW5lcixudWxsLHRoaXMuZGF0YSksdGhpcy5jb250YWluZXJ9fV0pLHR9KGcpLGo9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtoKHRoaXMsdCk7dmFyIGk9KHI9cyh0aGlzLGModCkuY2FsbCh0aGlzLGUsITApKSkuZGF0YS5maWxlLG89aS5maWxlbmFtZSx1PWkuY29udGVudDtyZXR1cm4gci5maWxlbmFtZT0oMCxuLmdldEZpbGVuYW1lRnJvbVVybCkobyksci5jb250ZW50PXUsci5saW5rU2VydmljZS5ldmVudEJ1cyYmci5saW5rU2VydmljZS5ldmVudEJ1cy5kaXNwYXRjaCgiZmlsZWF0dGFjaG1lbnRhbm5vdGF0aW9uIix7c291cmNlOmwobChyKSksaWQ6KDAsYS5zdHJpbmdUb1BERlN0cmluZykobyksZmlsZW5hbWU6byxjb250ZW50OnV9KSxyfXJldHVybiB1KHQsZSkscCh0LFt7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5jb250YWluZXIuY2xhc3NOYW1lPSJmaWxlQXR0YWNobWVudEFubm90YXRpb24iO3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO3JldHVybiBlLnN0eWxlLmhlaWdodD10aGlzLmNvbnRhaW5lci5zdHlsZS5oZWlnaHQsZS5zdHlsZS53aWR0aD10aGlzLmNvbnRhaW5lci5zdHlsZS53aWR0aCxlLmFkZEV2ZW50TGlzdGVuZXIoImRibGNsaWNrIix0aGlzLl9kb3dubG9hZC5iaW5kKHRoaXMpKSx0aGlzLmRhdGEuaGFzUG9wdXB8fCF0aGlzLmRhdGEudGl0bGUmJiF0aGlzLmRhdGEuY29udGVudHN8fHRoaXMuX2NyZWF0ZVBvcHVwKHRoaXMuY29udGFpbmVyLGUsdGhpcy5kYXRhKSx0aGlzLmNvbnRhaW5lci5hcHBlbmRDaGlsZChlKSx0aGlzLmNvbnRhaW5lcn19LHtrZXk6Il9kb3dubG9hZCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRvd25sb2FkTWFuYWdlcj90aGlzLmRvd25sb2FkTWFuYWdlci5kb3dubG9hZERhdGEodGhpcy5jb250ZW50LHRoaXMuZmlsZW5hbWUsIiIpOigwLGEud2FybikoIkRvd25sb2FkIGNhbm5vdCBiZSBzdGFydGVkIGR1ZSB0byB1bmF2YWlsYWJsZSBkb3dubG9hZCBtYW5hZ2VyIil9fV0pLHR9KGcpLEI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7aCh0aGlzLGUpfXJldHVybiBwKGUsbnVsbCxbe2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUuYW5ub3RhdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBhPWUuYW5ub3RhdGlvbnNbdF07aWYoYSl7dmFyIGk9bS5jcmVhdGUoe2RhdGE6YSxsYXllcjplLmRpdixwYWdlOmUucGFnZSx2aWV3cG9ydDplLnZpZXdwb3J0LGxpbmtTZXJ2aWNlOmUubGlua1NlcnZpY2UsZG93bmxvYWRNYW5hZ2VyOmUuZG93bmxvYWRNYW5hZ2VyLGltYWdlUmVzb3VyY2VzUGF0aDplLmltYWdlUmVzb3VyY2VzUGF0aHx8IiIscmVuZGVySW50ZXJhY3RpdmVGb3JtczplLnJlbmRlckludGVyYWN0aXZlRm9ybXN8fCExLHN2Z0ZhY3Rvcnk6bmV3IG4uRE9NU1ZHRmFjdG9yeX0pO2kuaXNSZW5kZXJhYmxlJiZlLmRpdi5hcHBlbmRDaGlsZChpLnJlbmRlcigpKX19fX0se2tleToidXBkYXRlIix2YWx1ZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9MCxyPWUuYW5ub3RhdGlvbnMubGVuZ3RoO3Q8cjt0Kyspe3ZhciBuPWUuYW5ub3RhdGlvbnNbdF0sYT1lLmRpdi5xdWVyeVNlbGVjdG9yKCdbZGF0YS1hbm5vdGF0aW9uLWlkPSInK24uaWQrJyJdJyk7YSYmKGEuc3R5bGUudHJhbnNmb3JtPSJtYXRyaXgoIitlLnZpZXdwb3J0LnRyYW5zZm9ybS5qb2luKCIsIikrIikiKX1lLmRpdi5yZW1vdmVBdHRyaWJ1dGUoImhpZGRlbiIpfX1dKSxlfSgpO3QuQW5ub3RhdGlvbkxheWVyPUJ9LGZ1bmN0aW9uKGUsbixpKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KG4sIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLG4uU1ZHR3JhcGhpY3M9dm9pZCAwO3ZhciBvLHM9aSgxKSxsPWkoMTUxKSxjPShvPWkoNCkpJiZvLl9fZXNNb2R1bGU/bzp7ZGVmYXVsdDpvfSx1PWZ1bmN0aW9uKCl7dGhyb3cgbmV3IEVycm9yKCJOb3QgaW1wbGVtZW50ZWQ6IFNWR0dyYXBoaWNzIil9O24uU1ZHR3JhcGhpY3M9dTt2YXIgZj17Zm9udFN0eWxlOiJub3JtYWwiLGZvbnRXZWlnaHQ6Im5vcm1hbCIsZmlsbENvbG9yOiIjMDAwMDAwIn0saD1mdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgVWludDhBcnJheShbMTM3LDgwLDc4LDcxLDEzLDEwLDI2LDEwXSksbj1uZXcgSW50MzJBcnJheSgyNTYpLGk9MDtpPDI1NjtpKyspe2Zvcih2YXIgbz1pLGw9MDtsPDg7bCsrKW89MSZvPzM5ODgyOTIzODRebz4+MSYyMTQ3NDgzNjQ3Om8+PjEmMjE0NzQ4MzY0NztuW2ldPW99ZnVuY3Rpb24gdShlLHQscixhKXt2YXIgaT1hLG89dC5sZW5ndGg7cltpXT1vPj4yNCYyNTUscltpKzFdPW8+PjE2JjI1NSxyW2krMl09bz4+OCYyNTUscltpKzNdPTI1NSZvLHJbaSs9NF09MjU1JmUuY2hhckNvZGVBdCgwKSxyW2krMV09MjU1JmUuY2hhckNvZGVBdCgxKSxyW2krMl09MjU1JmUuY2hhckNvZGVBdCgyKSxyW2krM109MjU1JmUuY2hhckNvZGVBdCgzKSxpKz00LHIuc2V0KHQsaSk7dmFyIHM9ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgYT0tMSxpPXQ7aTxyO2krKyl7dmFyIG89MjU1JihhXmVbaV0pO2E9YT4+PjhebltvXX1yZXR1cm4tMV5hfShyLGErNCxpKz10Lmxlbmd0aCk7cltpXT1zPj4yNCYyNTUscltpKzFdPXM+PjE2JjI1NSxyW2krMl09cz4+OCYyNTUscltpKzNdPTI1NSZzfWZ1bmN0aW9uIGYoZSl7dmFyIHQ9ZS5sZW5ndGgscj1NYXRoLmNlaWwodC82NTUzNSksbj1uZXcgVWludDhBcnJheSgyK3QrNSpyKzQpLGE9MDtuW2ErK109MTIwLG5bYSsrXT0xNTY7Zm9yKHZhciBpPTA7dD42NTUzNTspblthKytdPTAsblthKytdPTI1NSxuW2ErK109MjU1LG5bYSsrXT0wLG5bYSsrXT0wLG4uc2V0KGUuc3ViYXJyYXkoaSxpKzY1NTM1KSxhKSxhKz02NTUzNSxpKz02NTUzNSx0LT02NTUzNTtuW2ErK109MSxuW2ErK109MjU1JnQsblthKytdPXQ+PjgmMjU1LG5bYSsrXT0yNTUmfnQsblthKytdPSg2NTUzNSZ+dCk+PjgmMjU1LG4uc2V0KGUuc3ViYXJyYXkoaSksYSksYSs9ZS5sZW5ndGgtaTt2YXIgbz1mdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTEsYT0wLGk9dDtpPHI7KytpKWE9KGErKG49KG4rKDI1NSZlW2ldKSklNjU1MjEpKSU2NTUyMTtyZXR1cm4gYTw8MTZ8bn0oZSwwLGUubGVuZ3RoKTtyZXR1cm4gblthKytdPW8+PjI0JjI1NSxuW2ErK109bz4+MTYmMjU1LG5bYSsrXT1vPj44JjI1NSxuW2ErK109MjU1Jm8sbn1mdW5jdGlvbiBoKG4saSxvLGwpe3ZhciBoLGQscCxtPW4ud2lkdGgsZz1uLmhlaWdodCx2PW4uZGF0YTtzd2l0Y2goaSl7Y2FzZSBzLkltYWdlS2luZC5HUkFZU0NBTEVfMUJQUDpkPTAsaD0xLHA9bSs3Pj4zO2JyZWFrO2Nhc2Ugcy5JbWFnZUtpbmQuUkdCXzI0QlBQOmQ9MixoPTgscD0zKm07YnJlYWs7Y2FzZSBzLkltYWdlS2luZC5SR0JBXzMyQlBQOmQ9NixoPTgscD00Km07YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgRXJyb3IoImludmFsaWQgZm9ybWF0Iil9dmFyIHksYix3PW5ldyBVaW50OEFycmF5KCgxK3ApKmcpLGs9MCxTPTA7Zm9yKHk9MDt5PGc7Kyt5KXdbaysrXT0wLHcuc2V0KHYuc3ViYXJyYXkoUyxTK3ApLGspLFMrPXAsays9cDtpZihpPT09cy5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAmJmwpZm9yKGs9MCx5PTA7eTxnO3krKylmb3IoaysrLGI9MDtiPHA7YisrKXdbaysrXV49MjU1O3ZhciBfPW5ldyBVaW50OEFycmF5KFttPj4yNCYyNTUsbT4+MTYmMjU1LG0+PjgmMjU1LDI1NSZtLGc+PjI0JjI1NSxnPj4xNiYyNTUsZz4+OCYyNTUsMjU1JmcsaCxkLDAsMCwwXSkseD1mdW5jdGlvbihlKXtpZighKDAsYy5kZWZhdWx0KSgpKXJldHVybiBmKGUpO3RyeXt2YXIgbjtuPXBhcnNlSW50KGEudmVyc2lvbnMubm9kZSk+PTg/ZTpuZXcgdChlKTt2YXIgaT1yKDQ0KS5kZWZsYXRlU3luYyhuLHtsZXZlbDo5fSk7cmV0dXJuIGkgaW5zdGFuY2VvZiBVaW50OEFycmF5P2k6bmV3IFVpbnQ4QXJyYXkoaSl9Y2F0Y2goZSl7KDAscy53YXJuKSgiTm90IGNvbXByZXNzaW5nIFBORyBiZWNhdXNlIHpsaWIuZGVmbGF0ZVN5bmMgaXMgdW5hdmFpbGFibGU6ICIrZSl9cmV0dXJuIGYoZSl9KHcpLEE9ZS5sZW5ndGgrMzYrXy5sZW5ndGgreC5sZW5ndGgsQz1uZXcgVWludDhBcnJheShBKSxQPTA7cmV0dXJuIEMuc2V0KGUsUCksdSgiSUhEUiIsXyxDLFArPWUubGVuZ3RoKSx1KCJJREFUQSIseCxDLFArPTEyK18ubGVuZ3RoKSxQKz0xMit4Lmxlbmd0aCx1KCJJRU5EIixuZXcgVWludDhBcnJheSgwKSxDLFApLCgwLHMuY3JlYXRlT2JqZWN0VVJMKShDLCJpbWFnZS9wbmciLG8pfXJldHVybiBmdW5jdGlvbihlLHQscil7cmV0dXJuIGgoZSx2b2lkIDA9PT1lLmtpbmQ/cy5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6ZS5raW5kLHQscil9fSgpLGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5mb250U2l6ZVNjYWxlPTEsdGhpcy5mb250V2VpZ2h0PWYuZm9udFdlaWdodCx0aGlzLmZvbnRTaXplPTAsdGhpcy50ZXh0TWF0cml4PXMuSURFTlRJVFlfTUFUUklYLHRoaXMuZm9udE1hdHJpeD1zLkZPTlRfSURFTlRJVFlfTUFUUklYLHRoaXMubGVhZGluZz0wLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMueD0wLHRoaXMueT0wLHRoaXMubGluZVg9MCx0aGlzLmxpbmVZPTAsdGhpcy5jaGFyU3BhY2luZz0wLHRoaXMud29yZFNwYWNpbmc9MCx0aGlzLnRleHRIU2NhbGU9MSx0aGlzLnRleHRSaXNlPTAsdGhpcy5maWxsQ29sb3I9Zi5maWxsQ29sb3IsdGhpcy5zdHJva2VDb2xvcj0iIzAwMDAwMCIsdGhpcy5maWxsQWxwaGE9MSx0aGlzLnN0cm9rZUFscGhhPTEsdGhpcy5saW5lV2lkdGg9MSx0aGlzLmxpbmVKb2luPSIiLHRoaXMubGluZUNhcD0iIix0aGlzLm1pdGVyTGltaXQ9MCx0aGlzLmRhc2hBcnJheT1bXSx0aGlzLmRhc2hQaGFzZT0wLHRoaXMuZGVwZW5kZW5jaWVzPVtdLHRoaXMuYWN0aXZlQ2xpcFVybD1udWxsLHRoaXMuY2xpcEdyb3VwPW51bGwsdGhpcy5tYXNrSWQ9IiJ9cmV0dXJuIGUucHJvdG90eXBlPXtjbG9uZTpmdW5jdGlvbigpe3JldHVybiBPYmplY3QuY3JlYXRlKHRoaXMpfSxzZXRDdXJyZW50UG9pbnQ6ZnVuY3Rpb24oZSx0KXt0aGlzLng9ZSx0aGlzLnk9dH19LGV9KCk7bi5TVkdHcmFwaGljcz11PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXtpZihOdW1iZXIuaXNJbnRlZ2VyKGUpKXJldHVybiBlLnRvU3RyaW5nKCk7dmFyIHQ9ZS50b0ZpeGVkKDEwKSxyPXQubGVuZ3RoLTE7aWYoIjAiIT09dFtyXSlyZXR1cm4gdDtkb3tyLS19d2hpbGUoIjAiPT09dFtyXSk7cmV0dXJuIHQuc3Vic3RyaW5nKDAsIi4iPT09dFtyXT9yOnIrMSl9ZnVuY3Rpb24gdCh0KXtpZigwPT09dFs0XSYmMD09PXRbNV0pe2lmKDA9PT10WzFdJiYwPT09dFsyXSlyZXR1cm4gMT09PXRbMF0mJjE9PT10WzNdPyIiOiJzY2FsZSgiK2UodFswXSkrIiAiK2UodFszXSkrIikiO2lmKHRbMF09PT10WzNdJiZ0WzFdPT09LXRbMl0pcmV0dXJuInJvdGF0ZSgiK2UoMTgwKk1hdGguYWNvcyh0WzBdKS9NYXRoLlBJKSsiKSJ9ZWxzZSBpZigxPT09dFswXSYmMD09PXRbMV0mJjA9PT10WzJdJiYxPT09dFszXSlyZXR1cm4idHJhbnNsYXRlKCIrZSh0WzRdKSsiICIrZSh0WzVdKSsiKSI7cmV0dXJuIm1hdHJpeCgiK2UodFswXSkrIiAiK2UodFsxXSkrIiAiK2UodFsyXSkrIiAiK2UodFszXSkrIiAiK2UodFs0XSkrIiAiK2UodFs1XSkrIikifWZ1bmN0aW9uIHIoZSx0LHIpe3RoaXMuc3ZnRmFjdG9yeT1uZXcgbC5ET01TVkdGYWN0b3J5LHRoaXMuY3VycmVudD1uZXcgZCx0aGlzLnRyYW5zZm9ybU1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLnRyYW5zZm9ybVN0YWNrPVtdLHRoaXMuZXh0cmFTdGFjaz1bXSx0aGlzLmNvbW1vbk9ianM9ZSx0aGlzLm9ianM9dCx0aGlzLnBlbmRpbmdDbGlwPW51bGwsdGhpcy5wZW5kaW5nRU9GaWxsPSExLHRoaXMuZW1iZWRGb250cz0hMSx0aGlzLmVtYmVkZGVkRm9udHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNzc1N0eWxlPW51bGwsdGhpcy5mb3JjZURhdGFTY2hlbWE9ISFyfXZhciBuPSJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hsaW5rIixhPVsiYnV0dCIsInJvdW5kIiwic3F1YXJlIl0saT1bIm1pdGVyIiwicm91bmQiLCJiZXZlbCJdLG89MCxjPTA7cmV0dXJuIHIucHJvdG90eXBlPXtzYXZlOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2Zvcm1TdGFjay5wdXNoKHRoaXMudHJhbnNmb3JtTWF0cml4KTt2YXIgZT10aGlzLmN1cnJlbnQ7dGhpcy5leHRyYVN0YWNrLnB1c2goZSksdGhpcy5jdXJyZW50PWUuY2xvbmUoKX0scmVzdG9yZTpmdW5jdGlvbigpe3RoaXMudHJhbnNmb3JtTWF0cml4PXRoaXMudHJhbnNmb3JtU3RhY2sucG9wKCksdGhpcy5jdXJyZW50PXRoaXMuZXh0cmFTdGFjay5wb3AoKSx0aGlzLnBlbmRpbmdDbGlwPW51bGwsdGhpcy50Z3JwPW51bGx9LGdyb3VwOmZ1bmN0aW9uKGUpe3RoaXMuc2F2ZSgpLHRoaXMuZXhlY3V0ZU9wVHJlZShlKSx0aGlzLnJlc3RvcmUoKX0sbG9hZERlcGVuZGVuY2llczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcyxyPWUuZm5BcnJheSxuPXIubGVuZ3RoLGE9ZS5hcmdzQXJyYXksaT0wO2k8bjtpKyspaWYocy5PUFMuZGVwZW5kZW5jeT09PXJbaV0pZm9yKHZhciBvPWFbaV0sbD0wLGM9by5sZW5ndGg7bDxjO2wrKyl7dmFyIHUsZj1vW2xdLGg9ImdfIj09PWYuc3Vic3RyaW5nKDAsMik7dT1uZXcgUHJvbWlzZShoP2Z1bmN0aW9uKGUpe3QuY29tbW9uT2Jqcy5nZXQoZixlKX06ZnVuY3Rpb24oZSl7dC5vYmpzLmdldChmLGUpfSksdGhpcy5jdXJyZW50LmRlcGVuZGVuY2llcy5wdXNoKHUpfXJldHVybiBQcm9taXNlLmFsbCh0aGlzLmN1cnJlbnQuZGVwZW5kZW5jaWVzKX0sdHJhbnNmb3JtOmZ1bmN0aW9uKGUsdCxyLG4sYSxpKXt2YXIgbz1bZSx0LHIsbixhLGldO3RoaXMudHJhbnNmb3JtTWF0cml4PXMuVXRpbC50cmFuc2Zvcm0odGhpcy50cmFuc2Zvcm1NYXRyaXgsbyksdGhpcy50Z3JwPW51bGx9LGdldFNWRzpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXM7dGhpcy52aWV3cG9ydD10O3ZhciBuPXRoaXMuX2luaXRpYWxpemUodCk7cmV0dXJuIHRoaXMubG9hZERlcGVuZGVuY2llcyhlKS50aGVuKChmdW5jdGlvbigpe3IudHJhbnNmb3JtTWF0cml4PXMuSURFTlRJVFlfTUFUUklYO3ZhciB0PXIuY29udmVydE9wTGlzdChlKTtyZXR1cm4gci5leGVjdXRlT3BUcmVlKHQpLG59KSl9LGNvbnZlcnRPcExpc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5hcmdzQXJyYXkscj1lLmZuQXJyYXksbj1yLmxlbmd0aCxhPVtdLGk9W107Zm9yKHZhciBvIGluIHMuT1BTKWFbcy5PUFNbb11dPW87Zm9yKHZhciBsPTA7bDxuO2wrKyl7dmFyIGM9cltsXTtpLnB1c2goe2ZuSWQ6YyxmbjphW2NdLGFyZ3M6dFtsXX0pfXJldHVybiBmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj1bXSxuPWUubGVuZ3RoLGE9MDthPG47YSsrKSJzYXZlIiE9PWVbYV0uZm4/InJlc3RvcmUiPT09ZVthXS5mbj90PXIucG9wKCk6dC5wdXNoKGVbYV0pOih0LnB1c2goe2ZuSWQ6OTIsZm46Imdyb3VwIixpdGVtczpbXX0pLHIucHVzaCh0KSx0PXRbdC5sZW5ndGgtMV0uaXRlbXMpO3JldHVybiB0fShpKX0sZXhlY3V0ZU9wVHJlZTpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj0wO3I8dDtyKyspe3ZhciBuPWVbcl0uZm4sYT1lW3JdLmZuSWQsaT1lW3JdLmFyZ3M7c3dpdGNoKDB8YSl7Y2FzZSBzLk9QUy5iZWdpblRleHQ6dGhpcy5iZWdpblRleHQoKTticmVhaztjYXNlIHMuT1BTLmRlcGVuZGVuY3k6YnJlYWs7Y2FzZSBzLk9QUy5zZXRMZWFkaW5nOnRoaXMuc2V0TGVhZGluZyhpKTticmVhaztjYXNlIHMuT1BTLnNldExlYWRpbmdNb3ZlVGV4dDp0aGlzLnNldExlYWRpbmdNb3ZlVGV4dChpWzBdLGlbMV0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0Rm9udDp0aGlzLnNldEZvbnQoaSk7YnJlYWs7Y2FzZSBzLk9QUy5zaG93VGV4dDpjYXNlIHMuT1BTLnNob3dTcGFjZWRUZXh0OnRoaXMuc2hvd1RleHQoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5lbmRUZXh0OnRoaXMuZW5kVGV4dCgpO2JyZWFrO2Nhc2Ugcy5PUFMubW92ZVRleHQ6dGhpcy5tb3ZlVGV4dChpWzBdLGlbMV0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0Q2hhclNwYWNpbmc6dGhpcy5zZXRDaGFyU3BhY2luZyhpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldFdvcmRTcGFjaW5nOnRoaXMuc2V0V29yZFNwYWNpbmcoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRIU2NhbGU6dGhpcy5zZXRIU2NhbGUoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRUZXh0TWF0cml4OnRoaXMuc2V0VGV4dE1hdHJpeChpWzBdLGlbMV0saVsyXSxpWzNdLGlbNF0saVs1XSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRUZXh0UmlzZTp0aGlzLnNldFRleHRSaXNlKGlbMF0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6dGhpcy5zZXRUZXh0UmVuZGVyaW5nTW9kZShpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldExpbmVXaWR0aDp0aGlzLnNldExpbmVXaWR0aChpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldExpbmVKb2luOnRoaXMuc2V0TGluZUpvaW4oaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5zZXRMaW5lQ2FwOnRoaXMuc2V0TGluZUNhcChpWzBdKTticmVhaztjYXNlIHMuT1BTLnNldE1pdGVyTGltaXQ6dGhpcy5zZXRNaXRlckxpbWl0KGlbMF0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0RmlsbFJHQkNvbG9yOnRoaXMuc2V0RmlsbFJHQkNvbG9yKGlbMF0saVsxXSxpWzJdKTticmVhaztjYXNlIHMuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnRoaXMuc2V0U3Ryb2tlUkdCQ29sb3IoaVswXSxpWzFdLGlbMl0pO2JyZWFrO2Nhc2Ugcy5PUFMuc2V0RGFzaDp0aGlzLnNldERhc2goaVswXSxpWzFdKTticmVhaztjYXNlIHMuT1BTLnNldEdTdGF0ZTp0aGlzLnNldEdTdGF0ZShpWzBdKTticmVhaztjYXNlIHMuT1BTLmZpbGw6dGhpcy5maWxsKCk7YnJlYWs7Y2FzZSBzLk9QUy5lb0ZpbGw6dGhpcy5lb0ZpbGwoKTticmVhaztjYXNlIHMuT1BTLnN0cm9rZTp0aGlzLnN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuZmlsbFN0cm9rZTp0aGlzLmZpbGxTdHJva2UoKTticmVhaztjYXNlIHMuT1BTLmVvRmlsbFN0cm9rZTp0aGlzLmVvRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuY2xpcDp0aGlzLmNsaXAoIm5vbnplcm8iKTticmVhaztjYXNlIHMuT1BTLmVvQ2xpcDp0aGlzLmNsaXAoImV2ZW5vZGQiKTticmVhaztjYXNlIHMuT1BTLnBhaW50U29saWRDb2xvckltYWdlTWFzazp0aGlzLnBhaW50U29saWRDb2xvckltYWdlTWFzaygpO2JyZWFrO2Nhc2Ugcy5PUFMucGFpbnRKcGVnWE9iamVjdDp0aGlzLnBhaW50SnBlZ1hPYmplY3QoaVswXSxpWzFdLGlbMl0pO2JyZWFrO2Nhc2Ugcy5PUFMucGFpbnRJbWFnZVhPYmplY3Q6dGhpcy5wYWludEltYWdlWE9iamVjdChpWzBdKTticmVhaztjYXNlIHMuT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OnRoaXMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3QoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5wYWludEltYWdlTWFza1hPYmplY3Q6dGhpcy5wYWludEltYWdlTWFza1hPYmplY3QoaVswXSk7YnJlYWs7Y2FzZSBzLk9QUy5wYWludEZvcm1YT2JqZWN0QmVnaW46dGhpcy5wYWludEZvcm1YT2JqZWN0QmVnaW4oaVswXSxpWzFdKTticmVhaztjYXNlIHMuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQ6dGhpcy5wYWludEZvcm1YT2JqZWN0RW5kKCk7YnJlYWs7Y2FzZSBzLk9QUy5jbG9zZVBhdGg6dGhpcy5jbG9zZVBhdGgoKTticmVhaztjYXNlIHMuT1BTLmNsb3NlU3Ryb2tlOnRoaXMuY2xvc2VTdHJva2UoKTticmVhaztjYXNlIHMuT1BTLmNsb3NlRmlsbFN0cm9rZTp0aGlzLmNsb3NlRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMuY2xvc2VFT0ZpbGxTdHJva2U6dGhpcy5jbG9zZUVPRmlsbFN0cm9rZSgpO2JyZWFrO2Nhc2Ugcy5PUFMubmV4dExpbmU6dGhpcy5uZXh0TGluZSgpO2JyZWFrO2Nhc2Ugcy5PUFMudHJhbnNmb3JtOnRoaXMudHJhbnNmb3JtKGlbMF0saVsxXSxpWzJdLGlbM10saVs0XSxpWzVdKTticmVhaztjYXNlIHMuT1BTLmNvbnN0cnVjdFBhdGg6dGhpcy5jb25zdHJ1Y3RQYXRoKGlbMF0saVsxXSk7YnJlYWs7Y2FzZSBzLk9QUy5lbmRQYXRoOnRoaXMuZW5kUGF0aCgpO2JyZWFrO2Nhc2UgOTI6dGhpcy5ncm91cChlW3JdLml0ZW1zKTticmVhaztkZWZhdWx0OigwLHMud2FybikoIlVuaW1wbGVtZW50ZWQgb3BlcmF0b3IgIituKX19fSxzZXRXb3JkU3BhY2luZzpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQud29yZFNwYWNpbmc9ZX0sc2V0Q2hhclNwYWNpbmc6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmNoYXJTcGFjaW5nPWV9LG5leHRMaW5lOmZ1bmN0aW9uKCl7dGhpcy5tb3ZlVGV4dCgwLHRoaXMuY3VycmVudC5sZWFkaW5nKX0sc2V0VGV4dE1hdHJpeDpmdW5jdGlvbih0LHIsbixhLGksbyl7dmFyIHM9dGhpcy5jdXJyZW50O3RoaXMuY3VycmVudC50ZXh0TWF0cml4PXRoaXMuY3VycmVudC5saW5lTWF0cml4PVt0LHIsbixhLGksb10sdGhpcy5jdXJyZW50Lng9dGhpcy5jdXJyZW50LmxpbmVYPTAsdGhpcy5jdXJyZW50Lnk9dGhpcy5jdXJyZW50LmxpbmVZPTAscy54Y29vcmRzPVtdLHMudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHMudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLHMuZm9udEZhbWlseSkscy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLGUocy5mb250U2l6ZSkrInB4Iikscy50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1zLnkpKSxzLnR4dEVsZW1lbnQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0ZXh0Iikscy50eHRFbGVtZW50LmFwcGVuZENoaWxkKHMudHNwYW4pfSxiZWdpblRleHQ6ZnVuY3Rpb24oKXt0aGlzLmN1cnJlbnQueD10aGlzLmN1cnJlbnQubGluZVg9MCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVk9MCx0aGlzLmN1cnJlbnQudGV4dE1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLmN1cnJlbnQubGluZU1hdHJpeD1zLklERU5USVRZX01BVFJJWCx0aGlzLmN1cnJlbnQudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHRoaXMuY3VycmVudC50eHRFbGVtZW50PXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6dGV4dCIpLHRoaXMuY3VycmVudC50eHRncnA9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpnIiksdGhpcy5jdXJyZW50Lnhjb29yZHM9W119LG1vdmVUZXh0OmZ1bmN0aW9uKHQscil7dmFyIG49dGhpcy5jdXJyZW50O3RoaXMuY3VycmVudC54PXRoaXMuY3VycmVudC5saW5lWCs9dCx0aGlzLmN1cnJlbnQueT10aGlzLmN1cnJlbnQubGluZVkrPXIsbi54Y29vcmRzPVtdLG4udHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLG4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1mYW1pbHkiLG4uZm9udEZhbWlseSksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXNpemUiLGUobi5mb250U2l6ZSkrInB4Iiksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1uLnkpKX0sc2hvd1RleHQ6ZnVuY3Rpb24ocil7dmFyIG49dGhpcy5jdXJyZW50LGE9bi5mb250LGk9bi5mb250U2l6ZTtpZigwIT09aSl7dmFyIG8sbD1uLmNoYXJTcGFjaW5nLGM9bi53b3JkU3BhY2luZyx1PW4uZm9udERpcmVjdGlvbixoPW4udGV4dEhTY2FsZSp1LGQ9ci5sZW5ndGgscD1hLnZlcnRpY2FsLG09aSpuLmZvbnRNYXRyaXhbMF0sZz0wO2ZvcihvPTA7bzxkOysrbyl7dmFyIHY9cltvXTtpZihudWxsIT09dilpZigoMCxzLmlzTnVtKSh2KSlnKz0tdippKi4wMDE7ZWxzZXt2YXIgeT12LndpZHRoLGI9di5mb250Q2hhcix3PXkqbSsoKHYuaXNTcGFjZT9jOjApK2wpKnU7di5pc0luRm9udHx8YS5taXNzaW5nRmlsZT8obi54Y29vcmRzLnB1c2gobi54K2cqaCksbi50c3Bhbi50ZXh0Q29udGVudCs9YixnKz13KTpnKz13fWVsc2UgZys9dSpjfXA/bi55LT1nKmg6bi54Kz1nKmgsbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IixuLnhjb29yZHMubWFwKGUpLmpvaW4oIiAiKSksbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1uLnkpKSxuLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZvbnQtZmFtaWx5IixuLmZvbnRGYW1pbHkpLG4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zaXplIixlKG4uZm9udFNpemUpKyJweCIpLG4uZm9udFN0eWxlIT09Zi5mb250U3R5bGUmJm4udHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwiZm9udC1zdHlsZSIsbi5mb250U3R5bGUpLG4uZm9udFdlaWdodCE9PWYuZm9udFdlaWdodCYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmb250LXdlaWdodCIsbi5mb250V2VpZ2h0KTt2YXIgaz1uLnRleHRSZW5kZXJpbmdNb2RlJnMuVGV4dFJlbmRlcmluZ01vZGUuRklMTF9TVFJPS0VfTUFTSztrPT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMfHxrPT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRT8obi5maWxsQ29sb3IhPT1mLmZpbGxDb2xvciYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixuLmZpbGxDb2xvciksbi5maWxsQWxwaGE8MSYmbi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLW9wYWNpdHkiLG4uZmlsbEFscGhhKSk6bi50ZXh0UmVuZGVyaW5nTW9kZT09PXMuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEg/bi50c3Bhbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwidHJhbnNwYXJlbnQiKTpuLnRzcGFuLnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLCJub25lIiksayE9PXMuVGV4dFJlbmRlcmluZ01vZGUuU1RST0tFJiZrIT09cy5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMX1NUUk9LRXx8dGhpcy5fc2V0U3Ryb2tlQXR0cmlidXRlcyhuLnRzcGFuKTt2YXIgUz1uLnRleHRNYXRyaXg7MCE9PW4udGV4dFJpc2UmJigoUz1TLnNsaWNlKCkpWzVdKz1uLnRleHRSaXNlKSxuLnR4dEVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwidHJhbnNmb3JtIix0KFMpKyIgc2NhbGUoMSwgLTEpIiksbi50eHRFbGVtZW50LnNldEF0dHJpYnV0ZU5TKCJodHRwOi8vd3d3LnczLm9yZy9YTUwvMTk5OC9uYW1lc3BhY2UiLCJ4bWw6c3BhY2UiLCJwcmVzZXJ2ZSIpLG4udHh0RWxlbWVudC5hcHBlbmRDaGlsZChuLnRzcGFuKSxuLnR4dGdycC5hcHBlbmRDaGlsZChuLnR4dEVsZW1lbnQpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobi50eHRFbGVtZW50KX19LHNldExlYWRpbmdNb3ZlVGV4dDpmdW5jdGlvbihlLHQpe3RoaXMuc2V0TGVhZGluZygtdCksdGhpcy5tb3ZlVGV4dChlLHQpfSxhZGRGb250U3R5bGU6ZnVuY3Rpb24oZSl7dGhpcy5jc3NTdHlsZXx8KHRoaXMuY3NzU3R5bGU9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpzdHlsZSIpLHRoaXMuY3NzU3R5bGUuc2V0QXR0cmlidXRlTlMobnVsbCwidHlwZSIsInRleHQvY3NzIiksdGhpcy5kZWZzLmFwcGVuZENoaWxkKHRoaXMuY3NzU3R5bGUpKTt2YXIgdD0oMCxzLmNyZWF0ZU9iamVjdFVSTCkoZS5kYXRhLGUubWltZXR5cGUsdGhpcy5mb3JjZURhdGFTY2hlbWEpO3RoaXMuY3NzU3R5bGUudGV4dENvbnRlbnQrPSdAZm9udC1mYWNlIHsgZm9udC1mYW1pbHk6ICInK2UubG9hZGVkTmFtZSsnIjsgc3JjOiB1cmwoJyt0KyIpOyB9XG4ifSxzZXRGb250OmZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY3VycmVudCxuPXRoaXMuY29tbW9uT2Jqcy5nZXQodFswXSksYT10WzFdO3RoaXMuY3VycmVudC5mb250PW4sdGhpcy5lbWJlZEZvbnRzJiZuLmRhdGEmJiF0aGlzLmVtYmVkZGVkRm9udHNbbi5sb2FkZWROYW1lXSYmKHRoaXMuYWRkRm9udFN0eWxlKG4pLHRoaXMuZW1iZWRkZWRGb250c1tuLmxvYWRlZE5hbWVdPW4pLHIuZm9udE1hdHJpeD1uLmZvbnRNYXRyaXg/bi5mb250TWF0cml4OnMuRk9OVF9JREVOVElUWV9NQVRSSVg7dmFyIGk9bi5ibGFjaz9uLmJvbGQ/ImJvbGRlciI6ImJvbGQiOm4uYm9sZD8iYm9sZCI6Im5vcm1hbCIsbz1uLml0YWxpYz8iaXRhbGljIjoibm9ybWFsIjthPDA/KGE9LWEsci5mb250RGlyZWN0aW9uPS0xKTpyLmZvbnREaXJlY3Rpb249MSxyLmZvbnRTaXplPWEsci5mb250RmFtaWx5PW4ubG9hZGVkTmFtZSxyLmZvbnRXZWlnaHQ9aSxyLmZvbnRTdHlsZT1vLHIudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHIudHNwYW4uc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZSgtci55KSksci54Y29vcmRzPVtdfSxlbmRUZXh0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UudGV4dFJlbmRlcmluZ01vZGUmcy5UZXh0UmVuZGVyaW5nTW9kZS5BRERfVE9fUEFUSF9GTEFHJiZlLnR4dEVsZW1lbnQmJmUudHh0RWxlbWVudC5oYXNDaGlsZE5vZGVzKCkmJihlLmVsZW1lbnQ9ZS50eHRFbGVtZW50LHRoaXMuY2xpcCgibm9uemVybyIpLHRoaXMuZW5kUGF0aCgpKX0sc2V0TGluZVdpZHRoOmZ1bmN0aW9uKGUpe2U+MCYmKHRoaXMuY3VycmVudC5saW5lV2lkdGg9ZSl9LHNldExpbmVDYXA6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxpbmVDYXA9YVtlXX0sc2V0TGluZUpvaW46ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxpbmVKb2luPWlbZV19LHNldE1pdGVyTGltaXQ6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50Lm1pdGVyTGltaXQ9ZX0sc2V0U3Ryb2tlQWxwaGE6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LnN0cm9rZUFscGhhPWV9LHNldFN0cm9rZVJHQkNvbG9yOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1zLlV0aWwubWFrZUNzc1JnYihlLHQscik7dGhpcy5jdXJyZW50LnN0cm9rZUNvbG9yPW59LHNldEZpbGxBbHBoYTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQuZmlsbEFscGhhPWV9LHNldEZpbGxSR0JDb2xvcjpmdW5jdGlvbihlLHQscil7dmFyIG49cy5VdGlsLm1ha2VDc3NSZ2IoZSx0LHIpO3RoaXMuY3VycmVudC5maWxsQ29sb3I9bix0aGlzLmN1cnJlbnQudHNwYW49dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2Zzp0c3BhbiIpLHRoaXMuY3VycmVudC54Y29vcmRzPVtdfSxzZXREYXNoOmZ1bmN0aW9uKGUsdCl7dGhpcy5jdXJyZW50LmRhc2hBcnJheT1lLHRoaXMuY3VycmVudC5kYXNoUGhhc2U9dH0sY29uc3RydWN0UGF0aDpmdW5jdGlvbih0LHIpe3ZhciBuPXRoaXMuY3VycmVudCxhPW4ueCxpPW4ueTtuLnBhdGg9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpwYXRoIik7Zm9yKHZhciBvPVtdLGw9dC5sZW5ndGgsYz0wLHU9MDtjPGw7YysrKXN3aXRjaCgwfHRbY10pe2Nhc2Ugcy5PUFMucmVjdGFuZ2xlOmE9clt1KytdLGk9clt1KytdO3ZhciBmPWErclt1KytdLGg9aStyW3UrK107by5wdXNoKCJNIixlKGEpLGUoaSksIkwiLGUoZiksZShpKSwiTCIsZShmKSxlKGgpLCJMIixlKGEpLGUoaCksIloiKTticmVhaztjYXNlIHMuT1BTLm1vdmVUbzphPXJbdSsrXSxpPXJbdSsrXSxvLnB1c2goIk0iLGUoYSksZShpKSk7YnJlYWs7Y2FzZSBzLk9QUy5saW5lVG86YT1yW3UrK10saT1yW3UrK10sby5wdXNoKCJMIixlKGEpLGUoaSkpO2JyZWFrO2Nhc2Ugcy5PUFMuY3VydmVUbzphPXJbdSs0XSxpPXJbdSs1XSxvLnB1c2goIkMiLGUoclt1XSksZShyW3UrMV0pLGUoclt1KzJdKSxlKHJbdSszXSksZShhKSxlKGkpKSx1Kz02O2JyZWFrO2Nhc2Ugcy5PUFMuY3VydmVUbzI6YT1yW3UrMl0saT1yW3UrM10sby5wdXNoKCJDIixlKGEpLGUoaSksZShyW3VdKSxlKHJbdSsxXSksZShyW3UrMl0pLGUoclt1KzNdKSksdSs9NDticmVhaztjYXNlIHMuT1BTLmN1cnZlVG8zOmE9clt1KzJdLGk9clt1KzNdLG8ucHVzaCgiQyIsZShyW3VdKSxlKHJbdSsxXSksZShhKSxlKGkpLGUoYSksZShpKSksdSs9NDticmVhaztjYXNlIHMuT1BTLmNsb3NlUGF0aDpvLnB1c2goIloiKX1uLnBhdGguc2V0QXR0cmlidXRlTlMobnVsbCwiZCIsby5qb2luKCIgIikpLG4ucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIiwibm9uZSIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobi5wYXRoKSxuLmVsZW1lbnQ9bi5wYXRoLG4uc2V0Q3VycmVudFBvaW50KGEsaSl9LGVuZFBhdGg6ZnVuY3Rpb24oKXtpZih0aGlzLnBlbmRpbmdDbGlwKXt2YXIgZT10aGlzLmN1cnJlbnQscj0iY2xpcHBhdGgiK287bysrO3ZhciBuPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6Y2xpcFBhdGgiKTtuLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyKSxuLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsdCh0aGlzLnRyYW5zZm9ybU1hdHJpeCkpO3ZhciBhPWUuZWxlbWVudC5jbG9uZU5vZGUoITApOyJldmVub2RkIj09PXRoaXMucGVuZGluZ0NsaXA/YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJldmVub2RkIik6YS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXJ1bGUiLCJub256ZXJvIiksdGhpcy5wZW5kaW5nQ2xpcD1udWxsLG4uYXBwZW5kQ2hpbGQoYSksdGhpcy5kZWZzLmFwcGVuZENoaWxkKG4pLGUuYWN0aXZlQ2xpcFVybCYmKGUuY2xpcEdyb3VwPW51bGwsdGhpcy5leHRyYVN0YWNrLmZvckVhY2goKGZ1bmN0aW9uKGUpe2UuY2xpcEdyb3VwPW51bGx9KSksbi5zZXRBdHRyaWJ1dGVOUyhudWxsLCJjbGlwLXBhdGgiLGUuYWN0aXZlQ2xpcFVybCkpLGUuYWN0aXZlQ2xpcFVybD0idXJsKCMiK3IrIikiLHRoaXMudGdycD1udWxsfX0sY2xpcDpmdW5jdGlvbihlKXt0aGlzLnBlbmRpbmdDbGlwPWV9LGNsb3NlUGF0aDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudDtpZihlLnBhdGgpe3ZhciB0PWUucGF0aC5nZXRBdHRyaWJ1dGVOUyhudWxsLCJkIik7dCs9IloiLGUucGF0aC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJkIix0KX19LHNldExlYWRpbmc6ZnVuY3Rpb24oZSl7dGhpcy5jdXJyZW50LmxlYWRpbmc9LWV9LHNldFRleHRSaXNlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0UmlzZT1lfSxzZXRUZXh0UmVuZGVyaW5nTW9kZTpmdW5jdGlvbihlKXt0aGlzLmN1cnJlbnQudGV4dFJlbmRlcmluZ01vZGU9ZX0sc2V0SFNjYWxlOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudC50ZXh0SFNjYWxlPWUvMTAwfSxzZXRHU3RhdGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1lLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj1lW3RdLGE9blswXSxpPW5bMV07c3dpdGNoKGEpe2Nhc2UiTFciOnRoaXMuc2V0TGluZVdpZHRoKGkpO2JyZWFrO2Nhc2UiTEMiOnRoaXMuc2V0TGluZUNhcChpKTticmVhaztjYXNlIkxKIjp0aGlzLnNldExpbmVKb2luKGkpO2JyZWFrO2Nhc2UiTUwiOnRoaXMuc2V0TWl0ZXJMaW1pdChpKTticmVhaztjYXNlIkQiOnRoaXMuc2V0RGFzaChpWzBdLGlbMV0pO2JyZWFrO2Nhc2UiRm9udCI6dGhpcy5zZXRGb250KGkpO2JyZWFrO2Nhc2UiQ0EiOnRoaXMuc2V0U3Ryb2tlQWxwaGEoaSk7YnJlYWs7Y2FzZSJjYSI6dGhpcy5zZXRGaWxsQWxwaGEoaSk7YnJlYWs7ZGVmYXVsdDooMCxzLndhcm4pKCJVbmltcGxlbWVudGVkIGdyYXBoaWMgc3RhdGUgIithKX19fSxmaWxsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UuZWxlbWVudCYmKGUuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixlLmZpbGxDb2xvciksZS5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtb3BhY2l0eSIsZS5maWxsQWxwaGEpLHRoaXMuZW5kUGF0aCgpKX0sc3Ryb2tlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50O2UuZWxlbWVudCYmKHRoaXMuX3NldFN0cm9rZUF0dHJpYnV0ZXMoZS5lbGVtZW50KSxlLmVsZW1lbnQuc2V0QXR0cmlidXRlTlMobnVsbCwiZmlsbCIsIm5vbmUiKSx0aGlzLmVuZFBhdGgoKSl9LF9zZXRTdHJva2VBdHRyaWJ1dGVzOmZ1bmN0aW9uKHQpe3ZhciByPXRoaXMuY3VycmVudDt0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZSIsci5zdHJva2VDb2xvciksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2Utb3BhY2l0eSIsci5zdHJva2VBbHBoYSksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtbWl0ZXJsaW1pdCIsZShyLm1pdGVyTGltaXQpKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1saW5lY2FwIixyLmxpbmVDYXApLHQuc2V0QXR0cmlidXRlTlMobnVsbCwic3Ryb2tlLWxpbmVqb2luIixyLmxpbmVKb2luKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS13aWR0aCIsZShyLmxpbmVXaWR0aCkrInB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJzdHJva2UtZGFzaGFycmF5IixyLmRhc2hBcnJheS5tYXAoZSkuam9pbigiICIpKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsInN0cm9rZS1kYXNob2Zmc2V0IixlKHIuZGFzaFBoYXNlKSsicHgiKX0sZW9GaWxsOmZ1bmN0aW9uKCl7dGhpcy5jdXJyZW50LmVsZW1lbnQmJnRoaXMuY3VycmVudC5lbGVtZW50LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwtcnVsZSIsImV2ZW5vZGQiKSx0aGlzLmZpbGwoKX0sZmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuc3Ryb2tlKCksdGhpcy5maWxsKCl9LGVvRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY3VycmVudC5lbGVtZW50JiZ0aGlzLmN1cnJlbnQuZWxlbWVudC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsLXJ1bGUiLCJldmVub2RkIiksdGhpcy5maWxsU3Ryb2tlKCl9LGNsb3NlU3Ryb2tlOmZ1bmN0aW9uKCl7dGhpcy5jbG9zZVBhdGgoKSx0aGlzLnN0cm9rZSgpfSxjbG9zZUZpbGxTdHJva2U6ZnVuY3Rpb24oKXt0aGlzLmNsb3NlUGF0aCgpLHRoaXMuZmlsbFN0cm9rZSgpfSxjbG9zZUVPRmlsbFN0cm9rZTpmdW5jdGlvbigpe3RoaXMuY2xvc2VQYXRoKCksdGhpcy5lb0ZpbGxTdHJva2UoKX0scGFpbnRTb2xpZENvbG9ySW1hZ2VNYXNrOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50LHQ9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7dC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLHQuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIiwiMXB4IiksdC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLCIxcHgiKSx0LnNldEF0dHJpYnV0ZU5TKG51bGwsImZpbGwiLGUuZmlsbENvbG9yKSx0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKHQpfSxwYWludEpwZWdYT2JqZWN0OmZ1bmN0aW9uKHQscixhKXt2YXIgaT10aGlzLm9ianMuZ2V0KHQpLG89dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzppbWFnZSIpO28uc2V0QXR0cmlidXRlTlMobiwieGxpbms6aHJlZiIsaS5zcmMpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGUocikpLG8uc2V0QXR0cmlidXRlTlMobnVsbCwiaGVpZ2h0IixlKGEpKSxvLnNldEF0dHJpYnV0ZU5TKG51bGwsIngiLCIwIiksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixlKC1hKSksby5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK2UoMS9yKSsiICIrZSgtMS9hKSsiKSIpLHRoaXMuX2Vuc3VyZVRyYW5zZm9ybUdyb3VwKCkuYXBwZW5kQ2hpbGQobyl9LHBhaW50SW1hZ2VYT2JqZWN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMub2Jqcy5nZXQoZSk7dD90aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQpOigwLHMud2FybikoIkRlcGVuZGVudCBpbWFnZSBpc24ndCByZWFkeSB5ZXQiKX0scGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q6ZnVuY3Rpb24odCxyKXt2YXIgYT10LndpZHRoLGk9dC5oZWlnaHQsbz1oKHQsdGhpcy5mb3JjZURhdGFTY2hlbWEsISFyKSxzPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO3Muc2V0QXR0cmlidXRlTlMobnVsbCwieCIsIjAiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsInkiLCIwIikscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ3aWR0aCIsZShhKSkscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGUoaSkpLHRoaXMuY3VycmVudC5lbGVtZW50PXMsdGhpcy5jbGlwKCJub256ZXJvIik7dmFyIGw9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzppbWFnZSIpO2wuc2V0QXR0cmlidXRlTlMobiwieGxpbms6aHJlZiIsbyksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsZSgtaSkpLGwuc2V0QXR0cmlidXRlTlMobnVsbCwid2lkdGgiLGUoYSkrInB4IiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJoZWlnaHQiLGUoaSkrInB4IiksbC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLCJzY2FsZSgiK2UoMS9hKSsiICIrZSgtMS9pKSsiKSIpLHI/ci5hcHBlbmRDaGlsZChsKTp0aGlzLl9lbnN1cmVUcmFuc2Zvcm1Hcm91cCgpLmFwcGVuZENoaWxkKGwpfSxwYWludEltYWdlTWFza1hPYmplY3Q6ZnVuY3Rpb24odCl7dmFyIHI9dGhpcy5jdXJyZW50LG49dC53aWR0aCxhPXQuaGVpZ2h0LGk9ci5maWxsQ29sb3I7ci5tYXNrSWQ9Im1hc2siK2MrKzt2YXIgbz10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOm1hc2siKTtvLnNldEF0dHJpYnV0ZU5TKG51bGwsImlkIixyLm1hc2tJZCk7dmFyIHM9dGhpcy5zdmdGYWN0b3J5LmNyZWF0ZUVsZW1lbnQoInN2ZzpyZWN0Iik7cy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ4IiwiMCIpLHMuc2V0QXR0cmlidXRlTlMobnVsbCwieSIsIjAiKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixlKG4pKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsZShhKSkscy5zZXRBdHRyaWJ1dGVOUyhudWxsLCJmaWxsIixpKSxzLnNldEF0dHJpYnV0ZU5TKG51bGwsIm1hc2siLCJ1cmwoIyIrci5tYXNrSWQrIikiKSx0aGlzLmRlZnMuYXBwZW5kQ2hpbGQobyksdGhpcy5fZW5zdXJlVHJhbnNmb3JtR3JvdXAoKS5hcHBlbmRDaGlsZChzKSx0aGlzLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0KHQsbyl9LHBhaW50Rm9ybVhPYmplY3RCZWdpbjpmdW5jdGlvbih0LHIpe2lmKEFycmF5LmlzQXJyYXkodCkmJjY9PT10Lmxlbmd0aCYmdGhpcy50cmFuc2Zvcm0odFswXSx0WzFdLHRbMl0sdFszXSx0WzRdLHRbNV0pLHIpe3ZhciBuPXJbMl0tclswXSxhPXJbM10tclsxXSxpPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6cmVjdCIpO2kuc2V0QXR0cmlidXRlTlMobnVsbCwieCIsclswXSksaS5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ5IixyWzFdKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsIndpZHRoIixlKG4pKSxpLnNldEF0dHJpYnV0ZU5TKG51bGwsImhlaWdodCIsZShhKSksdGhpcy5jdXJyZW50LmVsZW1lbnQ9aSx0aGlzLmNsaXAoIm5vbnplcm8iKSx0aGlzLmVuZFBhdGgoKX19LHBhaW50Rm9ybVhPYmplY3RFbmQ6ZnVuY3Rpb24oKXt9LF9pbml0aWFsaXplOmZ1bmN0aW9uKGUpe3ZhciByPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGUoZS53aWR0aCxlLmhlaWdodCksbj10aGlzLnN2Z0ZhY3RvcnkuY3JlYXRlRWxlbWVudCgic3ZnOmRlZnMiKTtyLmFwcGVuZENoaWxkKG4pLHRoaXMuZGVmcz1uO3ZhciBhPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO3JldHVybiBhLnNldEF0dHJpYnV0ZU5TKG51bGwsInRyYW5zZm9ybSIsdChlLnRyYW5zZm9ybSkpLHIuYXBwZW5kQ2hpbGQoYSksdGhpcy5zdmc9YSxyfSxfZW5zdXJlQ2xpcEdyb3VwOmZ1bmN0aW9uKCl7aWYoIXRoaXMuY3VycmVudC5jbGlwR3JvdXApe3ZhciBlPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpO2Uuc2V0QXR0cmlidXRlTlMobnVsbCwiY2xpcC1wYXRoIix0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybCksdGhpcy5zdmcuYXBwZW5kQ2hpbGQoZSksdGhpcy5jdXJyZW50LmNsaXBHcm91cD1lfXJldHVybiB0aGlzLmN1cnJlbnQuY2xpcEdyb3VwfSxfZW5zdXJlVHJhbnNmb3JtR3JvdXA6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy50Z3JwfHwodGhpcy50Z3JwPXRoaXMuc3ZnRmFjdG9yeS5jcmVhdGVFbGVtZW50KCJzdmc6ZyIpLHRoaXMudGdycC5zZXRBdHRyaWJ1dGVOUyhudWxsLCJ0cmFuc2Zvcm0iLHQodGhpcy50cmFuc2Zvcm1NYXRyaXgpKSx0aGlzLmN1cnJlbnQuYWN0aXZlQ2xpcFVybD90aGlzLl9lbnN1cmVDbGlwR3JvdXAoKS5hcHBlbmRDaGlsZCh0aGlzLnRncnApOnRoaXMuc3ZnLmFwcGVuZENoaWxkKHRoaXMudGdycCkpLHRoaXMudGdycH19LHJ9KCl9LGZ1bmN0aW9uKGUsdCxuKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGTm9kZVN0cmVhbT12b2lkIDA7dmFyIGEsaT0oYT1uKDE0NykpJiZhLl9fZXNNb2R1bGU/YTp7ZGVmYXVsdDphfSxvPW4oMSkscz1uKDE2Nik7ZnVuY3Rpb24gbChlKXtyZXR1cm4obD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1sKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9mdW5jdGlvbihlKXtpZih2b2lkIDA9PT1lKXRocm93IG5ldyBSZWZlcmVuY2VFcnJvcigidGhpcyBoYXNuJ3QgYmVlbiBpbml0aWFsaXNlZCAtIHN1cGVyKCkgaGFzbid0IGJlZW4gY2FsbGVkIik7cmV0dXJuIGV9KGUpOnR9ZnVuY3Rpb24gdShlKXtyZXR1cm4odT1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gZihlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZoKGUsdCl9ZnVuY3Rpb24gaChlLHQpe3JldHVybihoPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBkKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gcChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtkKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtkKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gbShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiB2KGUsdCxyKXtyZXR1cm4gdCYmZyhlLnByb3RvdHlwZSx0KSxyJiZnKGUsciksZX12YXIgeT1yKDQ1KSxiPXIoNDYpLHc9cig0Nyksaz1yKDQ4KSxTPS9eZmlsZTpcL1wvXC9bYS16QS1aXTpcLy8sXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHIsbjttKHRoaXMsZSksdGhpcy5zb3VyY2U9dCx0aGlzLnVybD0ocj10LnVybCwiZmlsZToiPT09KG49ay5wYXJzZShyKSkucHJvdG9jb2x8fG4uaG9zdD9uOi9eW2Etel06Wy9cXF0vaS50ZXN0KHIpP2sucGFyc2UoImZpbGU6Ly8vIi5jb25jYXQocikpOihuLmhvc3R8fChuLnByb3RvY29sPSJmaWxlOiIpLG4pKSx0aGlzLmlzSHR0cD0iaHR0cDoiPT09dGhpcy51cmwucHJvdG9jb2x8fCJodHRwczoiPT09dGhpcy51cmwucHJvdG9jb2wsdGhpcy5pc0ZzVXJsPSJmaWxlOiI9PT10aGlzLnVybC5wcm90b2NvbCx0aGlzLmh0dHBIZWFkZXJzPXRoaXMuaXNIdHRwJiZ0Lmh0dHBIZWFkZXJzfHx7fSx0aGlzLl9mdWxsUmVxdWVzdD1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119cmV0dXJuIHYoZSxbe2tleToiZ2V0RnVsbFJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLmFzc2VydCkoIXRoaXMuX2Z1bGxSZXF1ZXN0KSx0aGlzLl9mdWxsUmVxdWVzdD10aGlzLmlzRnNVcmw/bmV3IFQodGhpcyk6bmV3IFAodGhpcyksdGhpcy5fZnVsbFJlcXVlc3R9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmlzRnNVcmw/bmV3IFIodGhpcyxlLHQpOm5ldyBFKHRoaXMsZSx0KTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKHIpLHJ9fSx7a2V5OiJjYW5jZWxBbGxSZXF1ZXN0cyIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3QmJnRoaXMuX2Z1bGxSZXF1ZXN0LmNhbmNlbChlKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpfX1dKSxlfSgpO3QuUERGTm9kZVN0cmVhbT1fO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXttKHRoaXMsZSksdGhpcy5fdXJsPXQudXJsLHRoaXMuX2RvbmU9ITEsdGhpcy5fc3RvcmVkRXJyb3I9bnVsbCx0aGlzLm9uUHJvZ3Jlc3M9bnVsbDt2YXIgcj10LnNvdXJjZTt0aGlzLl9jb250ZW50TGVuZ3RoPXIubGVuZ3RoLHRoaXMuX2xvYWRlZD0wLHRoaXMuX2ZpbGVuYW1lPW51bGwsdGhpcy5fZGlzYWJsZVJhbmdlPXIuZGlzYWJsZVJhbmdlfHwhMSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1yLnJhbmdlQ2h1bmtTaXplLHRoaXMuX3JhbmdlQ2h1bmtTaXplfHx0aGlzLl9kaXNhYmxlUmFuZ2V8fCh0aGlzLl9kaXNhYmxlUmFuZ2U9ITApLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFyLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hci5kaXNhYmxlUmFuZ2UsdGhpcy5fcmVhZGFibGVTdHJlYW09bnVsbCx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxvLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5PSgwLG8uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9dmFyIHQ7cmV0dXJuIHYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9cChpLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIGkuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDQ6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXtlLm5leHQ9NjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDY6aWYobnVsbCE9PSh0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKSkpe2UubmV4dD0xMDticmVha31yZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsby5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxlLmFicnVwdCgicmV0dXJuIix0aGlzLnJlYWQoKSk7Y2FzZSAxMDpyZXR1cm4gdGhpcy5fbG9hZGVkKz10Lmxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSkscj1uZXcgVWludDhBcnJheSh0KS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIsZG9uZTohMX0pO2Nhc2UgMTQ6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRhYmxlU3RyZWFtP3RoaXMuX3JlYWRhYmxlU3RyZWFtLmRlc3Ryb3koZSk6dGhpcy5fZXJyb3IoZSl9fSx7a2V5OiJfZXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3N0b3JlZEVycm9yPWUsdGhpcy5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfX0se2tleToiX3NldFJlYWRhYmxlU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzO3RoaXMuX3JlYWRhYmxlU3RyZWFtPWUsZS5vbigicmVhZGFibGUiLChmdW5jdGlvbigpe3QuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxlLm9uKCJlbmQiLChmdW5jdGlvbigpe2UuZGVzdHJveSgpLHQuX2RvbmU9ITAsdC5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpfSkpLGUub24oImVycm9yIiwoZnVuY3Rpb24oZSl7dC5fZXJyb3IoZSl9KSksIXRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZ0aGlzLl9lcnJvcihuZXcgby5BYm9ydEV4Y2VwdGlvbigic3RyZWFtaW5nIGlzIGRpc2FibGVkIikpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19LHtrZXk6ImhlYWRlcnNSZWFkeSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5LnByb21pc2V9fSx7a2V5OiJmaWxlbmFtZSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2ZpbGVuYW1lfX0se2tleToiY29udGVudExlbmd0aCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2NvbnRlbnRMZW5ndGh9fSx7a2V5OiJpc1JhbmdlU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNSYW5nZVN1cHBvcnRlZH19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fV0pLGV9KCksQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bSh0aGlzLGUpLHRoaXMuX3VybD10LnVybCx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPW51bGwsdGhpcy5vblByb2dyZXNzPW51bGwsdGhpcy5fbG9hZGVkPTAsdGhpcy5fcmVhZGFibGVTdHJlYW09bnVsbCx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxvLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpO3ZhciByPXQuc291cmNlO3RoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFyLmRpc2FibGVTdHJlYW19dmFyIHQ7cmV0dXJuIHYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9cChpLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIGkuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsdGhpcy5fcmVhZENhcGFiaWxpdHkucHJvbWlzZTtjYXNlIDI6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDQ6aWYoIXRoaXMuX3N0b3JlZEVycm9yKXtlLm5leHQ9NjticmVha310aHJvdyB0aGlzLl9zdG9yZWRFcnJvcjtjYXNlIDY6aWYobnVsbCE9PSh0PXRoaXMuX3JlYWRhYmxlU3RyZWFtLnJlYWQoKSkpe2UubmV4dD0xMDticmVha31yZXR1cm4gdGhpcy5fcmVhZENhcGFiaWxpdHk9KDAsby5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxlLmFicnVwdCgicmV0dXJuIix0aGlzLnJlYWQoKSk7Y2FzZSAxMDpyZXR1cm4gdGhpcy5fbG9hZGVkKz10Lmxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZH0pLHI9bmV3IFVpbnQ4QXJyYXkodCkuYnVmZmVyLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTpyLGRvbmU6ITF9KTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToiY2FuY2VsIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9yZWFkYWJsZVN0cmVhbT90aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KGUpOnRoaXMuX2Vycm9yKGUpfX0se2tleToiX2Vycm9yIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLl9zdG9yZWRFcnJvcj1lLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX19LHtrZXk6Il9zZXRSZWFkYWJsZVN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0aGlzLl9yZWFkYWJsZVN0cmVhbT1lLGUub24oInJlYWRhYmxlIiwoZnVuY3Rpb24oKXt0Ll9yZWFkQ2FwYWJpbGl0eS5yZXNvbHZlKCl9KSksZS5vbigiZW5kIiwoZnVuY3Rpb24oKXtlLmRlc3Ryb3koKSx0Ll9kb25lPSEwLHQuX3JlYWRDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxlLm9uKCJlcnJvciIsKGZ1bmN0aW9uKGUpe3QuX2Vycm9yKGUpfSkpLHRoaXMuX3N0b3JlZEVycm9yJiZ0aGlzLl9yZWFkYWJsZVN0cmVhbS5kZXN0cm95KHRoaXMuX3N0b3JlZEVycm9yKX19LHtrZXk6ImlzU3RyZWFtaW5nU3VwcG9ydGVkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faXNTdHJlYW1pbmdTdXBwb3J0ZWR9fV0pLGV9KCk7ZnVuY3Rpb24gQyhlLHQpe3JldHVybntwcm90b2NvbDplLnByb3RvY29sLGF1dGg6ZS5hdXRoLGhvc3Q6ZS5ob3N0bmFtZSxwb3J0OmUucG9ydCxwYXRoOmUucGF0aCxtZXRob2Q6IkdFVCIsaGVhZGVyczp0fX12YXIgUD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KTt2YXIgbj1mdW5jdGlvbih0KXtpZig0MDQ9PT10LnN0YXR1c0NvZGUpe3ZhciBuPW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChyLl91cmwsJyIuJykpO3JldHVybiByLl9zdG9yZWRFcnJvcj1uLHZvaWQgci5faGVhZGVyc0NhcGFiaWxpdHkucmVqZWN0KG4pfXIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKSxyLl9zZXRSZWFkYWJsZVN0cmVhbSh0KTt2YXIgYT1mdW5jdGlvbihlKXtyZXR1cm4gci5fcmVhZGFibGVTdHJlYW0uaGVhZGVyc1tlLnRvTG93ZXJDYXNlKCldfSxpPSgwLHMudmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjphLGlzSHR0cDplLmlzSHR0cCxyYW5nZUNodW5rU2l6ZTpyLl9yYW5nZUNodW5rU2l6ZSxkaXNhYmxlUmFuZ2U6ci5fZGlzYWJsZVJhbmdlfSksbD1pLmFsbG93UmFuZ2VSZXF1ZXN0cyxjPWkuc3VnZ2VzdGVkTGVuZ3RoO3IuX2lzUmFuZ2VTdXBwb3J0ZWQ9bCxyLl9jb250ZW50TGVuZ3RoPWN8fHIuX2NvbnRlbnRMZW5ndGgsci5fZmlsZW5hbWU9KDAscy5leHRyYWN0RmlsZW5hbWVGcm9tSGVhZGVyKShhKX07cmV0dXJuKHI9Yyh0aGlzLHUodCkuY2FsbCh0aGlzLGUpKSkuX3JlcXVlc3Q9bnVsbCwiaHR0cDoiPT09ci5fdXJsLnByb3RvY29sP3IuX3JlcXVlc3Q9Yi5yZXF1ZXN0KEMoci5fdXJsLGUuaHR0cEhlYWRlcnMpLG4pOnIuX3JlcXVlc3Q9dy5yZXF1ZXN0KEMoci5fdXJsLGUuaHR0cEhlYWRlcnMpLG4pLHIuX3JlcXVlc3Qub24oImVycm9yIiwoZnVuY3Rpb24oZSl7ci5fc3RvcmVkRXJyb3I9ZSxyLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QoZSl9KSksci5fcmVxdWVzdC5lbmQoKSxyfXJldHVybiBmKHQsZSksdH0oeCksRT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTtmb3IodmFyIGkgaW4gbSh0aGlzLHQpLChhPWModGhpcyx1KHQpLmNhbGwodGhpcyxlKSkpLl9odHRwSGVhZGVycz17fSxlLmh0dHBIZWFkZXJzKXt2YXIgcz1lLmh0dHBIZWFkZXJzW2ldO3ZvaWQgMCE9PXMmJihhLl9odHRwSGVhZGVyc1tpXT1zKX1hLl9odHRwSGVhZGVycy5SYW5nZT0iYnl0ZXM9Ii5jb25jYXQociwiLSIpLmNvbmNhdChuLTEpO3ZhciBsPWZ1bmN0aW9uKGUpe2lmKDQwNCE9PWUuc3RhdHVzQ29kZSlhLl9zZXRSZWFkYWJsZVN0cmVhbShlKTtlbHNle3ZhciB0PW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChhLl91cmwsJyIuJykpO2EuX3N0b3JlZEVycm9yPXR9fTtyZXR1cm4gYS5fcmVxdWVzdD1udWxsLCJodHRwOiI9PT1hLl91cmwucHJvdG9jb2w/YS5fcmVxdWVzdD1iLnJlcXVlc3QoQyhhLl91cmwsYS5faHR0cEhlYWRlcnMpLGwpOmEuX3JlcXVlc3Q9dy5yZXF1ZXN0KEMoYS5fdXJsLGEuX2h0dHBIZWFkZXJzKSxsKSxhLl9yZXF1ZXN0Lm9uKCJlcnJvciIsKGZ1bmN0aW9uKGUpe2EuX3N0b3JlZEVycm9yPWV9KSksYS5fcmVxdWVzdC5lbmQoKSxhfXJldHVybiBmKHQsZSksdH0oQSksVD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KSxyPWModGhpcyx1KHQpLmNhbGwodGhpcyxlKSk7dmFyIG49ZGVjb2RlVVJJQ29tcG9uZW50KHIuX3VybC5wYXRoKTtyZXR1cm4gUy50ZXN0KHIuX3VybC5ocmVmKSYmKG49bi5yZXBsYWNlKC9eXC8vLCIiKSkseS5sc3RhdChuLChmdW5jdGlvbihlLHQpe2lmKGUpcmV0dXJuIkVOT0VOVCI9PT1lLmNvZGUmJihlPW5ldyBvLk1pc3NpbmdQREZFeGNlcHRpb24oJ01pc3NpbmcgUERGICInLmNvbmNhdChuLCciLicpKSksci5fc3RvcmVkRXJyb3I9ZSx2b2lkIHIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlamVjdChlKTtyLl9jb250ZW50TGVuZ3RoPXQuc2l6ZSxyLl9zZXRSZWFkYWJsZVN0cmVhbSh5LmNyZWF0ZVJlYWRTdHJlYW0obikpLHIuX2hlYWRlcnNDYXBhYmlsaXR5LnJlc29sdmUoKX0pKSxyfXJldHVybiBmKHQsZSksdH0oeCksUj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTttKHRoaXMsdCksYT1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsZSkpO3ZhciBpPWRlY29kZVVSSUNvbXBvbmVudChhLl91cmwucGF0aCk7cmV0dXJuIFMudGVzdChhLl91cmwuaHJlZikmJihpPWkucmVwbGFjZSgvXlwvLywiIikpLGEuX3NldFJlYWRhYmxlU3RyZWFtKHkuY3JlYXRlUmVhZFN0cmVhbShpLHtzdGFydDpyLGVuZDpuLTF9KSksYX1yZXR1cm4gZih0LGUpLHR9KEEpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3I9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gNDA0PT09ZXx8MD09PWUmJi9eZmlsZTovLnRlc3QodCk/bmV3IG4uTWlzc2luZ1BERkV4Y2VwdGlvbignTWlzc2luZyBQREYgIicrdCsnIi4nKTpuZXcgbi5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oIlVuZXhwZWN0ZWQgc2VydmVyIHJlc3BvbnNlICgiK2UrJykgd2hpbGUgcmV0cmlldmluZyBQREYgIicrdCsnIi4nLGUpfSx0LmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXI9ZnVuY3Rpb24oZSl7dmFyIHQ9ZSgiQ29udGVudC1EaXNwb3NpdGlvbiIpO2lmKHQpe3ZhciByPSgwLGEuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyKSh0KTtpZigvXC5wZGYkL2kudGVzdChyKSlyZXR1cm4gcn1yZXR1cm4gbnVsbH0sdC52YWxpZGF0ZVJhbmdlUmVxdWVzdENhcGFiaWxpdGllcz1mdW5jdGlvbihlKXt2YXIgdD1lLmdldFJlc3BvbnNlSGVhZGVyLHI9ZS5pc0h0dHAsYT1lLnJhbmdlQ2h1bmtTaXplLGk9ZS5kaXNhYmxlUmFuZ2U7KDAsbi5hc3NlcnQpKGE+MCwiUmFuZ2UgY2h1bmsgc2l6ZSBtdXN0IGJlIGxhcmdlciB0aGFuIHplcm8iKTt2YXIgbz17YWxsb3dSYW5nZVJlcXVlc3RzOiExLHN1Z2dlc3RlZExlbmd0aDp2b2lkIDB9LHM9cGFyc2VJbnQodCgiQ29udGVudC1MZW5ndGgiKSwxMCk7cmV0dXJuIE51bWJlci5pc0ludGVnZXIocyk/KG8uc3VnZ2VzdGVkTGVuZ3RoPXMsczw9MiphP286aXx8IXI/bzoiYnl0ZXMiIT09dCgiQWNjZXB0LVJhbmdlcyIpP286ImlkZW50aXR5IiE9PSh0KCJDb250ZW50LUVuY29kaW5nIil8fCJpZGVudGl0eSIpP286KG8uYWxsb3dSYW5nZVJlcXVlc3RzPSEwLG8pKTpvfSx0LnZhbGlkYXRlUmVzcG9uc2VTdGF0dXM9ZnVuY3Rpb24oZSl7cmV0dXJuIDIwMD09PWV8fDIwNj09PWV9O3ZhciBuPXIoMSksYT1yKDE2Nyl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RmlsZW5hbWVGcm9tQ29udGVudERpc3Bvc2l0aW9uSGVhZGVyPWZ1bmN0aW9uKGUpe3ZhciB0PSEwLHI9bygiZmlsZW5hbWVcXCoiLCJpIikuZXhlYyhlKTtpZihyKXt2YXIgYT1jKHI9clsxXSk7cmV0dXJuIGwoYT1mKGE9dShhPXVuZXNjYXBlKGEpKSkpfWlmKHI9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9W10sYT1vKCJmaWxlbmFtZVxcKigoPyEwXFxkKVxcZCspKFxcKj8pIiwiaWciKTtudWxsIT09KHQ9YS5leGVjKGUpKTspe3ZhciBpPW4odCw0KSxzPWlbMV0sbD1pWzJdLGY9aVszXTtpZigocz1wYXJzZUludChzLDEwKSlpbiByKXtpZigwPT09cylicmVha31lbHNlIHJbc109W2wsZl19dmFyIGg9W107Zm9yKHM9MDtzPHIubGVuZ3RoJiZzIGluIHI7KytzKXt2YXIgZD1uKHJbc10sMik7bD1kWzBdLGY9YyhmPWRbMV0pLGwmJihmPXVuZXNjYXBlKGYpLDA9PT1zJiYoZj11KGYpKSksaC5wdXNoKGYpfXJldHVybiBoLmpvaW4oIiIpfShlKSlyZXR1cm4gbChmKHIpKTtpZihyPW8oImZpbGVuYW1lIiwiaSIpLmV4ZWMoZSkpe3ZhciBpPWMocj1yWzFdKTtyZXR1cm4gbChpPWYoaSkpfWZ1bmN0aW9uIG8oZSx0KXtyZXR1cm4gbmV3IFJlZ0V4cCgiKD86Xnw7KVxccyoiK2UrJ1xccyo9XFxzKihbXiI7XFxzXVteO1xcc10qfCIoPzpbXiJcXFxcXXxcXFxcIj8pKyI/KScsdCl9ZnVuY3Rpb24gcyhlLHIpe2lmKGUpe2lmKCEvXltceDAwLVx4RkZdKyQvLnRlc3QocikpcmV0dXJuIHI7dHJ5e3ZhciBuPW5ldyBUZXh0RGVjb2RlcihlLHtmYXRhbDohMH0pLGE9QXJyYXkuZnJvbShyLChmdW5jdGlvbihlKXtyZXR1cm4gMjU1JmUuY2hhckNvZGVBdCgwKX0pKTtyPW4uZGVjb2RlKG5ldyBVaW50OEFycmF5KGEpKSx0PSExfWNhdGNoKG4pe2lmKC9edXRmLT84JC9pLnRlc3QoZSkpdHJ5e3I9ZGVjb2RlVVJJQ29tcG9uZW50KGVzY2FwZShyKSksdD0hMX1jYXRjaChlKXt9fX1yZXR1cm4gcn1mdW5jdGlvbiBsKGUpe3JldHVybiB0JiYvW1x4ODAtXHhmZl0vLnRlc3QoZSkmJihlPXMoInV0Zi04IixlKSx0JiYoZT1zKCJpc28tODg1OS0xIixlKSkpLGV9ZnVuY3Rpb24gYyhlKXtpZihlLnN0YXJ0c1dpdGgoJyInKSl7Zm9yKHZhciB0PWUuc2xpY2UoMSkuc3BsaXQoJ1xcIicpLHI9MDtyPHQubGVuZ3RoOysrcil7dmFyIG49dFtyXS5pbmRleE9mKCciJyk7LTEhPT1uJiYodFtyXT10W3JdLnNsaWNlKDAsbiksdC5sZW5ndGg9cisxKSx0W3JdPXRbcl0ucmVwbGFjZSgvXFwoLikvZywiJDEiKX1lPXQuam9pbignIicpfXJldHVybiBlfWZ1bmN0aW9uIHUoZSl7dmFyIHQ9ZS5pbmRleE9mKCInIik7cmV0dXJuLTE9PT10P2U6cyhlLnNsaWNlKDAsdCksZS5zbGljZSh0KzEpLnJlcGxhY2UoL15bXiddKicvLCIiKSl9ZnVuY3Rpb24gZihlKXtyZXR1cm4hZS5zdGFydHNXaXRoKCI9PyIpfHwvW1x4MDAtXHgxOVx4ODAtXHhmZl0vLnRlc3QoZSk/ZTplLnJlcGxhY2UoLz1cPyhbXHctXSopXD8oW1FxQmJdKVw/KCg/OlteP118XD8oPyE9KSkqKVw/PS9nLChmdW5jdGlvbihlLHQscixuKXtpZigicSI9PT1yfHwiUSI9PT1yKXJldHVybiBzKHQsbj0obj1uLnJlcGxhY2UoL18vZywiICIpKS5yZXBsYWNlKC89KFswLTlhLWZBLUZdezJ9KS9nLChmdW5jdGlvbihlLHQpe3JldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlKHBhcnNlSW50KHQsMTYpKX0pKSk7dHJ5e249YXRvYihuKX1jYXRjaChlKXt9cmV0dXJuIHModCxuKX0pKX1yZXR1cm4iIn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGRmV0Y2hTdHJlYW09dm9pZCAwO3ZhciBuLGE9KG49cigxNDcpKSYmbi5fX2VzTW9kdWxlP246e2RlZmF1bHQ6bn0saT1yKDEpLG89cigxNjYpO2Z1bmN0aW9uIHMoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBsKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe3MoaSxuLGEsbyxsLCJuZXh0IixlKX1mdW5jdGlvbiBsKGUpe3MoaSxuLGEsbyxsLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiBjKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gdShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybiB0JiZ1KGUucHJvdG90eXBlLHQpLHImJnUoZSxyKSxlfWZ1bmN0aW9uIGgoZSx0LHIpe3JldHVybnttZXRob2Q6IkdFVCIsaGVhZGVyczplLHNpZ25hbDpyJiZyLnNpZ25hbCxtb2RlOiJjb3JzIixjcmVkZW50aWFsczp0PyJpbmNsdWRlIjoic2FtZS1vcmlnaW4iLHJlZGlyZWN0OiJmb2xsb3cifX12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7Yyh0aGlzLGUpLHRoaXMuc291cmNlPXQsdGhpcy5pc0h0dHA9L15odHRwcz86L2kudGVzdCh0LnVybCksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmdC5odHRwSGVhZGVyc3x8e30sdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbCx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzPVtdfXJldHVybiBmKGUsW3trZXk6ImdldEZ1bGxSZWFkZXIiLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuKDAsaS5hc3NlcnQpKCF0aGlzLl9mdWxsUmVxdWVzdFJlYWRlciksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bmV3IHAodGhpcyksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXJ9fSx7a2V5OiJnZXRSYW5nZVJlYWRlciIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbSh0aGlzLGUsdCk7cmV0dXJuIHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnMucHVzaChyKSxyfX0se2tleToiY2FuY2VsQWxsUmVxdWVzdHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbmNlbChlKX0pKX19XSksZX0oKTt0LlBERkZldGNoU3RyZWFtPWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXRoaXM7Yyh0aGlzLGUpLHRoaXMuX3N0cmVhbT10LHRoaXMuX3JlYWRlcj1udWxsLHRoaXMuX2xvYWRlZD0wLHRoaXMuX2ZpbGVuYW1lPW51bGw7dmFyIG49dC5zb3VyY2U7Zm9yKHZhciBhIGluIHRoaXMuX3dpdGhDcmVkZW50aWFscz1uLndpdGhDcmVkZW50aWFscyx0aGlzLl9jb250ZW50TGVuZ3RoPW4ubGVuZ3RoLHRoaXMuX2hlYWRlcnNDYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksdGhpcy5fZGlzYWJsZVJhbmdlPW4uZGlzYWJsZVJhbmdlfHwhMSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1uLnJhbmdlQ2h1bmtTaXplLHRoaXMuX3JhbmdlQ2h1bmtTaXplfHx0aGlzLl9kaXNhYmxlUmFuZ2V8fCh0aGlzLl9kaXNhYmxlUmFuZ2U9ITApLCJ1bmRlZmluZWQiIT10eXBlb2YgQWJvcnRDb250cm9sbGVyJiYodGhpcy5fYWJvcnRDb250cm9sbGVyPW5ldyBBYm9ydENvbnRyb2xsZXIpLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFuLmRpc2FibGVTdHJlYW0sdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hbi5kaXNhYmxlUmFuZ2UsdGhpcy5faGVhZGVycz1uZXcgSGVhZGVycyx0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpe3ZhciBzPXRoaXMuX3N0cmVhbS5odHRwSGVhZGVyc1thXTt2b2lkIDAhPT1zJiZ0aGlzLl9oZWFkZXJzLmFwcGVuZChhLHMpfXZhciBsPW4udXJsO2ZldGNoKGwsaCh0aGlzLl9oZWFkZXJzLHRoaXMuX3dpdGhDcmVkZW50aWFscyx0aGlzLl9hYm9ydENvbnRyb2xsZXIpKS50aGVuKChmdW5jdGlvbihlKXtpZighKDAsby52YWxpZGF0ZVJlc3BvbnNlU3RhdHVzKShlLnN0YXR1cykpdGhyb3coMCxvLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKGUuc3RhdHVzLGwpO3IuX3JlYWRlcj1lLmJvZHkuZ2V0UmVhZGVyKCksci5faGVhZGVyc0NhcGFiaWxpdHkucmVzb2x2ZSgpO3ZhciB0PWZ1bmN0aW9uKHQpe3JldHVybiBlLmhlYWRlcnMuZ2V0KHQpfSxuPSgwLG8udmFsaWRhdGVSYW5nZVJlcXVlc3RDYXBhYmlsaXRpZXMpKHtnZXRSZXNwb25zZUhlYWRlcjp0LGlzSHR0cDpyLl9zdHJlYW0uaXNIdHRwLHJhbmdlQ2h1bmtTaXplOnIuX3JhbmdlQ2h1bmtTaXplLGRpc2FibGVSYW5nZTpyLl9kaXNhYmxlUmFuZ2V9KSxhPW4uYWxsb3dSYW5nZVJlcXVlc3RzLHM9bi5zdWdnZXN0ZWRMZW5ndGg7ci5faXNSYW5nZVN1cHBvcnRlZD1hLHIuX2NvbnRlbnRMZW5ndGg9c3x8ci5fY29udGVudExlbmd0aCxyLl9maWxlbmFtZT0oMCxvLmV4dHJhY3RGaWxlbmFtZUZyb21IZWFkZXIpKHQpLCFyLl9pc1N0cmVhbWluZ1N1cHBvcnRlZCYmci5faXNSYW5nZVN1cHBvcnRlZCYmci5jYW5jZWwobmV3IGkuQWJvcnRFeGNlcHRpb24oInN0cmVhbWluZyBpcyBkaXNhYmxlZCIpKX0pKS5jYXRjaCh0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5yZWplY3QpLHRoaXMub25Qcm9ncmVzcz1udWxsfXZhciB0O3JldHVybiBmKGUsW3trZXk6InJlYWQiLHZhbHVlOih0PWwoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4saTtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLm5leHQ9Mix0aGlzLl9oZWFkZXJzQ2FwYWJpbGl0eS5wcm9taXNlO2Nhc2UgMjpyZXR1cm4gZS5uZXh0PTQsdGhpcy5fcmVhZGVyLnJlYWQoKTtjYXNlIDQ6aWYodD1lLnNlbnQscj10LnZhbHVlLCEobj10LmRvbmUpKXtlLm5leHQ9OTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOnIsZG9uZTpufSk7Y2FzZSA5OnJldHVybiB0aGlzLl9sb2FkZWQrPXIuYnl0ZUxlbmd0aCx0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOnRoaXMuX2xvYWRlZCx0b3RhbDp0aGlzLl9jb250ZW50TGVuZ3RofSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlciYmdGhpcy5fcmVhZGVyLmNhbmNlbChlKSx0aGlzLl9hYm9ydENvbnRyb2xsZXImJnRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX0se2tleToiaGVhZGVyc1JlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5faGVhZGVyc0NhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6ImZpbGVuYW1lIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9fSx7a2V5OiJjb250ZW50TGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH19LHtrZXk6ImlzUmFuZ2VTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfX0se2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19XSksZX0oKSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7dmFyIGE9dGhpcztjKHRoaXMsZSksdGhpcy5fc3RyZWFtPXQsdGhpcy5fcmVhZGVyPW51bGwsdGhpcy5fbG9hZGVkPTA7dmFyIHM9dC5zb3VyY2U7Zm9yKHZhciBsIGluIHRoaXMuX3dpdGhDcmVkZW50aWFscz1zLndpdGhDcmVkZW50aWFscyx0aGlzLl9yZWFkQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPSFzLmRpc2FibGVTdHJlYW0sInVuZGVmaW5lZCIhPXR5cGVvZiBBYm9ydENvbnRyb2xsZXImJih0aGlzLl9hYm9ydENvbnRyb2xsZXI9bmV3IEFib3J0Q29udHJvbGxlciksdGhpcy5faGVhZGVycz1uZXcgSGVhZGVycyx0aGlzLl9zdHJlYW0uaHR0cEhlYWRlcnMpe3ZhciB1PXRoaXMuX3N0cmVhbS5odHRwSGVhZGVyc1tsXTt2b2lkIDAhPT11JiZ0aGlzLl9oZWFkZXJzLmFwcGVuZChsLHUpfXZhciBmPXIrIi0iKyhuLTEpO3RoaXMuX2hlYWRlcnMuYXBwZW5kKCJSYW5nZSIsImJ5dGVzPSIrZik7dmFyIGQ9cy51cmw7ZmV0Y2goZCxoKHRoaXMuX2hlYWRlcnMsdGhpcy5fd2l0aENyZWRlbnRpYWxzLHRoaXMuX2Fib3J0Q29udHJvbGxlcikpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCEoMCxvLnZhbGlkYXRlUmVzcG9uc2VTdGF0dXMpKGUuc3RhdHVzKSl0aHJvdygwLG8uY3JlYXRlUmVzcG9uc2VTdGF0dXNFcnJvcikoZS5zdGF0dXMsZCk7YS5fcmVhZENhcGFiaWxpdHkucmVzb2x2ZSgpLGEuX3JlYWRlcj1lLmJvZHkuZ2V0UmVhZGVyKCl9KSksdGhpcy5vblByb2dyZXNzPW51bGx9dmFyIHQ7cmV0dXJuIGYoZSxbe2tleToicmVhZCIsdmFsdWU6KHQ9bChhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHIsbixpO3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUubmV4dD0yLHRoaXMuX3JlYWRDYXBhYmlsaXR5LnByb21pc2U7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCx0aGlzLl9yZWFkZXIucmVhZCgpO2Nhc2UgNDppZih0PWUuc2VudCxyPXQudmFsdWUsIShuPXQuZG9uZSkpe2UubmV4dD05O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6cixkb25lOm59KTtjYXNlIDk6cmV0dXJuIHRoaXMuX2xvYWRlZCs9ci5ieXRlTGVuZ3RoLHRoaXMub25Qcm9ncmVzcyYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6dGhpcy5fbG9hZGVkfSksaT1uZXcgVWludDhBcnJheShyKS5idWZmZXIsZS5hYnJ1cHQoInJldHVybiIse3ZhbHVlOmksZG9uZTohMX0pO2Nhc2UgMTM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pfSx7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlciYmdGhpcy5fcmVhZGVyLmNhbmNlbChlKSx0aGlzLl9hYm9ydENvbnRyb2xsZXImJnRoaXMuX2Fib3J0Q29udHJvbGxlci5hYm9ydCgpfX0se2tleToiaXNTdHJlYW1pbmdTdXBwb3J0ZWQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH19XSksZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZOZXR3b3JrU3RyZWFtPW0sdC5OZXR3b3JrTWFuYWdlcj11O3ZhciBuPXMocigxNDcpKSxhPXIoMSksaT1yKDE2Niksbz1zKHIoMykpO2Z1bmN0aW9uIHMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIGwoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBjKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2woaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2woaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiB1KGUsdCl7dGhpcy51cmw9ZSx0PXR8fHt9LHRoaXMuaXNIdHRwPS9eaHR0cHM/Oi9pLnRlc3QoZSksdGhpcy5odHRwSGVhZGVycz10aGlzLmlzSHR0cCYmdC5odHRwSGVhZGVyc3x8e30sdGhpcy53aXRoQ3JlZGVudGlhbHM9dC53aXRoQ3JlZGVudGlhbHN8fCExLHRoaXMuZ2V0WGhyPXQuZ2V0WGhyfHxmdW5jdGlvbigpe3JldHVybiBuZXcgWE1MSHR0cFJlcXVlc3R9LHRoaXMuY3VyclhocklkPTAsdGhpcy5wZW5kaW5nUmVxdWVzdHM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmxvYWRlZFJlcXVlc3RzPU9iamVjdC5jcmVhdGUobnVsbCl9ZnVuY3Rpb24gZihlKXt2YXIgdD1lLnJlc3BvbnNlO3JldHVybiJzdHJpbmciIT10eXBlb2YgdD90OigwLGEuc3RyaW5nVG9CeXRlcykodCkuYnVmZmVyfXZhciBoLGQscD1mdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgWE1MSHR0cFJlcXVlc3Q7cmV0dXJuIGUub3BlbigiR0VUIixvLmRlZmF1bHQubG9jYXRpb24uaHJlZiksZS5yZXNwb25zZVR5cGU9Im1vei1jaHVua2VkLWFycmF5YnVmZmVyIiwibW96LWNodW5rZWQtYXJyYXlidWZmZXIiPT09ZS5yZXNwb25zZVR5cGV9Y2F0Y2goZSl7cmV0dXJuITF9fSgpO2Z1bmN0aW9uIG0oZSl7dGhpcy5fc291cmNlPWUsdGhpcy5fbWFuYWdlcj1uZXcgdShlLnVybCx7aHR0cEhlYWRlcnM6ZS5odHRwSGVhZGVycyx3aXRoQ3JlZGVudGlhbHM6ZS53aXRoQ3JlZGVudGlhbHN9KSx0aGlzLl9yYW5nZUNodW5rU2l6ZT1lLnJhbmdlQ2h1bmtTaXplLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW51bGwsdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycz1bXX1mdW5jdGlvbiBnKGUsdCl7dGhpcy5fbWFuYWdlcj1lO3ZhciByPXtvbkhlYWRlcnNSZWNlaXZlZDp0aGlzLl9vbkhlYWRlcnNSZWNlaXZlZC5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3NpdmVEYXRhOnQuZGlzYWJsZVN0cmVhbT9udWxsOnRoaXMuX29uUHJvZ3Jlc3NpdmVEYXRhLmJpbmQodGhpcyksb25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uRXJyb3I6dGhpcy5fb25FcnJvci5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl91cmw9dC51cmwsdGhpcy5fZnVsbFJlcXVlc3RJZD1lLnJlcXVlc3RGdWxsKHIpLHRoaXMuX2hlYWRlcnNSZWNlaXZlZENhcGFiaWxpdHk9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9kaXNhYmxlUmFuZ2U9dC5kaXNhYmxlUmFuZ2V8fCExLHRoaXMuX2NvbnRlbnRMZW5ndGg9dC5sZW5ndGgsdGhpcy5fcmFuZ2VDaHVua1NpemU9dC5yYW5nZUNodW5rU2l6ZSx0aGlzLl9yYW5nZUNodW5rU2l6ZXx8dGhpcy5fZGlzYWJsZVJhbmdlfHwodGhpcy5fZGlzYWJsZVJhbmdlPSEwKSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMSx0aGlzLl9pc1JhbmdlU3VwcG9ydGVkPSExLHRoaXMuX2NhY2hlZENodW5rcz1bXSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9kb25lPSExLHRoaXMuX3N0b3JlZEVycm9yPXZvaWQgMCx0aGlzLl9maWxlbmFtZT1udWxsLHRoaXMub25Qcm9ncmVzcz1udWxsfWZ1bmN0aW9uIHYoZSx0LHIpe3RoaXMuX21hbmFnZXI9ZTt2YXIgbj17b25Eb25lOnRoaXMuX29uRG9uZS5iaW5kKHRoaXMpLG9uUHJvZ3Jlc3M6dGhpcy5fb25Qcm9ncmVzcy5iaW5kKHRoaXMpfTt0aGlzLl9yZXF1ZXN0SWQ9ZS5yZXF1ZXN0UmFuZ2UodCxyLG4pLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX3F1ZXVlZENodW5rPW51bGwsdGhpcy5fZG9uZT0hMSx0aGlzLm9uUHJvZ3Jlc3M9bnVsbCx0aGlzLm9uQ2xvc2VkPW51bGx9dS5wcm90b3R5cGU9e3JlcXVlc3RSYW5nZTpmdW5jdGlvbihlLHQscil7dmFyIG49e2JlZ2luOmUsZW5kOnR9O2Zvcih2YXIgYSBpbiByKW5bYV09clthXTtyZXR1cm4gdGhpcy5yZXF1ZXN0KG4pfSxyZXF1ZXN0RnVsbDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5yZXF1ZXN0KGUpfSxyZXF1ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuZ2V0WGhyKCkscj10aGlzLmN1cnJYaHJJZCsrLG49dGhpcy5wZW5kaW5nUmVxdWVzdHNbcl09e3hocjp0fTtmb3IodmFyIGEgaW4gdC5vcGVuKCJHRVQiLHRoaXMudXJsKSx0LndpdGhDcmVkZW50aWFscz10aGlzLndpdGhDcmVkZW50aWFscyx0aGlzLmh0dHBIZWFkZXJzKXt2YXIgaT10aGlzLmh0dHBIZWFkZXJzW2FdO3ZvaWQgMCE9PWkmJnQuc2V0UmVxdWVzdEhlYWRlcihhLGkpfWlmKHRoaXMuaXNIdHRwJiYiYmVnaW4iaW4gZSYmImVuZCJpbiBlKXt2YXIgbz1lLmJlZ2luKyItIisoZS5lbmQtMSk7dC5zZXRSZXF1ZXN0SGVhZGVyKCJSYW5nZSIsImJ5dGVzPSIrbyksbi5leHBlY3RlZFN0YXR1cz0yMDZ9ZWxzZSBuLmV4cGVjdGVkU3RhdHVzPTIwMDtyZXR1cm4gcCYmZS5vblByb2dyZXNzaXZlRGF0YT8odC5yZXNwb25zZVR5cGU9Im1vei1jaHVua2VkLWFycmF5YnVmZmVyIixuLm9uUHJvZ3Jlc3NpdmVEYXRhPWUub25Qcm9ncmVzc2l2ZURhdGEsbi5tb3pDaHVua2VkPSEwKTp0LnJlc3BvbnNlVHlwZT0iYXJyYXlidWZmZXIiLGUub25FcnJvciYmKHQub25lcnJvcj1mdW5jdGlvbihyKXtlLm9uRXJyb3IodC5zdGF0dXMpfSksdC5vbnJlYWR5c3RhdGVjaGFuZ2U9dGhpcy5vblN0YXRlQ2hhbmdlLmJpbmQodGhpcyxyKSx0Lm9ucHJvZ3Jlc3M9dGhpcy5vblByb2dyZXNzLmJpbmQodGhpcyxyKSxuLm9uSGVhZGVyc1JlY2VpdmVkPWUub25IZWFkZXJzUmVjZWl2ZWQsbi5vbkRvbmU9ZS5vbkRvbmUsbi5vbkVycm9yPWUub25FcnJvcixuLm9uUHJvZ3Jlc3M9ZS5vblByb2dyZXNzLHQuc2VuZChudWxsKSxyfSxvblByb2dyZXNzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5wZW5kaW5nUmVxdWVzdHNbZV07aWYocil7aWYoci5tb3pDaHVua2VkKXt2YXIgbj1mKHIueGhyKTtyLm9uUHJvZ3Jlc3NpdmVEYXRhKG4pfXZhciBhPXIub25Qcm9ncmVzczthJiZhKHQpfX0sb25TdGF0ZUNoYW5nZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMucGVuZGluZ1JlcXVlc3RzW2VdO2lmKHIpe3ZhciBuPXIueGhyO2lmKG4ucmVhZHlTdGF0ZT49MiYmci5vbkhlYWRlcnNSZWNlaXZlZCYmKHIub25IZWFkZXJzUmVjZWl2ZWQoKSxkZWxldGUgci5vbkhlYWRlcnNSZWNlaXZlZCksND09PW4ucmVhZHlTdGF0ZSYmZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cylpZihkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0sMD09PW4uc3RhdHVzJiZ0aGlzLmlzSHR0cClyLm9uRXJyb3ImJnIub25FcnJvcihuLnN0YXR1cyk7ZWxzZXt2YXIgYT1uLnN0YXR1c3x8MjAwO2lmKDIwMD09PWEmJjIwNj09PXIuZXhwZWN0ZWRTdGF0dXN8fGE9PT1yLmV4cGVjdGVkU3RhdHVzKXt0aGlzLmxvYWRlZFJlcXVlc3RzW2VdPSEwO3ZhciBpPWYobik7aWYoMjA2PT09YSl7dmFyIG89bi5nZXRSZXNwb25zZUhlYWRlcigiQ29udGVudC1SYW5nZSIpLHM9L2J5dGVzIChcZCspLShcZCspXC8oXGQrKS8uZXhlYyhvKSxsPXBhcnNlSW50KHNbMV0sMTApO3Iub25Eb25lKHtiZWdpbjpsLGNodW5rOml9KX1lbHNlIHIub25Qcm9ncmVzc2l2ZURhdGE/ci5vbkRvbmUobnVsbCk6aT9yLm9uRG9uZSh7YmVnaW46MCxjaHVuazppfSk6ci5vbkVycm9yJiZyLm9uRXJyb3Iobi5zdGF0dXMpfWVsc2Ugci5vbkVycm9yJiZyLm9uRXJyb3Iobi5zdGF0dXMpfX19LGhhc1BlbmRpbmdSZXF1ZXN0czpmdW5jdGlvbigpe2Zvcih2YXIgZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0cylyZXR1cm4hMDtyZXR1cm4hMX0sZ2V0UmVxdWVzdFhocjpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0ueGhyfSxpc1N0cmVhbWluZ1JlcXVlc3Q6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLnBlbmRpbmdSZXF1ZXN0c1tlXS5vblByb2dyZXNzaXZlRGF0YX0saXNQZW5kaW5nUmVxdWVzdDpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbiB0aGlzLnBlbmRpbmdSZXF1ZXN0c30saXNMb2FkZWRSZXF1ZXN0OmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXMubG9hZGVkUmVxdWVzdHN9LGFib3J0QWxsUmVxdWVzdHM6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5wZW5kaW5nUmVxdWVzdHMpdGhpcy5hYm9ydFJlcXVlc3QoMHxlKX0sYWJvcnRSZXF1ZXN0OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucGVuZGluZ1JlcXVlc3RzW2VdLnhocjtkZWxldGUgdGhpcy5wZW5kaW5nUmVxdWVzdHNbZV0sdC5hYm9ydCgpfX0sbS5wcm90b3R5cGU9e19vblJhbmdlUmVxdWVzdFJlYWRlckNsb3NlZDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLmluZGV4T2YoZSk7dD49MCYmdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zcGxpY2UodCwxKX0sZ2V0RnVsbFJlYWRlcjpmdW5jdGlvbigpe3JldHVybigwLGEuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyBnKHRoaXMuX21hbmFnZXIsdGhpcy5fc291cmNlKSx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcn0sZ2V0UmFuZ2VSZWFkZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdih0aGlzLl9tYW5hZ2VyLGUsdCk7cmV0dXJuIHIub25DbG9zZWQ9dGhpcy5fb25SYW5nZVJlcXVlc3RSZWFkZXJDbG9zZWQuYmluZCh0aGlzKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnB1c2gocikscn0sY2FuY2VsQWxsUmVxdWVzdHM6ZnVuY3Rpb24oZSl7dGhpcy5fZnVsbFJlcXVlc3RSZWFkZXImJnRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyLmNhbmNlbChlKSx0aGlzLl9yYW5nZVJlcXVlc3RSZWFkZXJzLnNsaWNlKDApLmZvckVhY2goKGZ1bmN0aW9uKHQpe3QuY2FuY2VsKGUpfSkpfX0sZy5wcm90b3R5cGU9e19vbkhlYWRlcnNSZWNlaXZlZDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2Z1bGxSZXF1ZXN0SWQsdD10aGlzLl9tYW5hZ2VyLmdldFJlcXVlc3RYaHIoZSkscj1mdW5jdGlvbihlKXtyZXR1cm4gdC5nZXRSZXNwb25zZUhlYWRlcihlKX0sbj0oMCxpLnZhbGlkYXRlUmFuZ2VSZXF1ZXN0Q2FwYWJpbGl0aWVzKSh7Z2V0UmVzcG9uc2VIZWFkZXI6cixpc0h0dHA6dGhpcy5fbWFuYWdlci5pc0h0dHAscmFuZ2VDaHVua1NpemU6dGhpcy5fcmFuZ2VDaHVua1NpemUsZGlzYWJsZVJhbmdlOnRoaXMuX2Rpc2FibGVSYW5nZX0pLGE9bi5hbGxvd1JhbmdlUmVxdWVzdHMsbz1uLnN1Z2dlc3RlZExlbmd0aDthJiYodGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hMCksdGhpcy5fY29udGVudExlbmd0aD1vfHx0aGlzLl9jb250ZW50TGVuZ3RoLHRoaXMuX2ZpbGVuYW1lPSgwLGkuZXh0cmFjdEZpbGVuYW1lRnJvbUhlYWRlcikocik7dmFyIHM9dGhpcy5fbWFuYWdlcjtzLmlzU3RyZWFtaW5nUmVxdWVzdChlKT90aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMDp0aGlzLl9pc1JhbmdlU3VwcG9ydGVkJiZzLmFib3J0UmVxdWVzdChlKSx0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlc29sdmUoKX0sX29uUHJvZ3Jlc3NpdmVEYXRhOmZ1bmN0aW9uKGUpe3RoaXMuX3JlcXVlc3RzLmxlbmd0aD4wP3RoaXMuX3JlcXVlc3RzLnNoaWZ0KCkucmVzb2x2ZSh7dmFsdWU6ZSxkb25lOiExfSk6dGhpcy5fY2FjaGVkQ2h1bmtzLnB1c2goZSl9LF9vbkRvbmU6ZnVuY3Rpb24oZSl7ZSYmdGhpcy5fb25Qcm9ncmVzc2l2ZURhdGEoZS5jaHVuayksdGhpcy5fZG9uZT0hMCx0aGlzLl9jYWNoZWRDaHVua3MubGVuZ3RoPjB8fCh0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSksdGhpcy5fcmVxdWVzdHM9W10pfSxfb25FcnJvcjpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl91cmwscj0oMCxpLmNyZWF0ZVJlc3BvbnNlU3RhdHVzRXJyb3IpKGUsdCk7dGhpcy5fc3RvcmVkRXJyb3I9cix0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnJlamVjdChyKSx0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlamVjdChyKX0pKSx0aGlzLl9yZXF1ZXN0cz1bXSx0aGlzLl9jYWNoZWRDaHVua3M9W119LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpe3RoaXMub25Qcm9ncmVzcyYmdGhpcy5vblByb2dyZXNzKHtsb2FkZWQ6ZS5sb2FkZWQsdG90YWw6ZS5sZW5ndGhDb21wdXRhYmxlP2UudG90YWw6dGhpcy5fY29udGVudExlbmd0aH0pfSxnZXQgZmlsZW5hbWUoKXtyZXR1cm4gdGhpcy5fZmlsZW5hbWV9LGdldCBpc1JhbmdlU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzUmFuZ2VTdXBwb3J0ZWR9LGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZH0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH0sZ2V0IGhlYWRlcnNSZWFkeSgpe3JldHVybiB0aGlzLl9oZWFkZXJzUmVjZWl2ZWRDYXBhYmlsaXR5LnByb21pc2V9LHJlYWQ6KGg9YyhuLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LHI7cmV0dXJuIG4uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZighdGhpcy5fc3RvcmVkRXJyb3Ipe2UubmV4dD0yO2JyZWFrfXRocm93IHRoaXMuX3N0b3JlZEVycm9yO2Nhc2UgMjppZighKHRoaXMuX2NhY2hlZENodW5rcy5sZW5ndGg+MCkpe2UubmV4dD01O2JyZWFrfXJldHVybiB0PXRoaXMuX2NhY2hlZENodW5rcy5zaGlmdCgpLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp0LGRvbmU6ITF9KTtjYXNlIDU6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD03O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDc6cmV0dXJuIHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLGUuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIGguYXBwbHkodGhpcyxhcmd1bWVudHMpfSksY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX2RvbmU9ITAsdGhpcy5faGVhZGVyc1JlY2VpdmVkQ2FwYWJpbGl0eS5yZWplY3QoZSksdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX21hbmFnZXIuaXNQZW5kaW5nUmVxdWVzdCh0aGlzLl9mdWxsUmVxdWVzdElkKSYmdGhpcy5fbWFuYWdlci5hYm9ydFJlcXVlc3QodGhpcy5fZnVsbFJlcXVlc3RJZCksdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXI9bnVsbH19LHYucHJvdG90eXBlPXtfY2xvc2U6ZnVuY3Rpb24oKXt0aGlzLm9uQ2xvc2VkJiZ0aGlzLm9uQ2xvc2VkKHRoaXMpfSxfb25Eb25lOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2h1bms7dGhpcy5fcmVxdWVzdHMubGVuZ3RoPjA/dGhpcy5fcmVxdWVzdHMuc2hpZnQoKS5yZXNvbHZlKHt2YWx1ZTp0LGRvbmU6ITF9KTp0aGlzLl9xdWV1ZWRDaHVuaz10LHRoaXMuX2RvbmU9ITAsdGhpcy5fcmVxdWVzdHMuZm9yRWFjaCgoZnVuY3Rpb24oZSl7ZS5yZXNvbHZlKHt2YWx1ZTp2b2lkIDAsZG9uZTohMH0pfSkpLHRoaXMuX3JlcXVlc3RzPVtdLHRoaXMuX2Nsb3NlKCl9LF9vblByb2dyZXNzOmZ1bmN0aW9uKGUpeyF0aGlzLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZ0aGlzLm9uUHJvZ3Jlc3MmJnRoaXMub25Qcm9ncmVzcyh7bG9hZGVkOmUubG9hZGVkfSl9LGdldCBpc1N0cmVhbWluZ1N1cHBvcnRlZCgpe3JldHVybiExfSxyZWFkOihkPWMobi5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyO3JldHVybiBuLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYobnVsbD09PXRoaXMuX3F1ZXVlZENodW5rKXtlLm5leHQ9NDticmVha31yZXR1cm4gdD10aGlzLl9xdWV1ZWRDaHVuayx0aGlzLl9xdWV1ZWRDaHVuaz1udWxsLGUuYWJydXB0KCJyZXR1cm4iLHt2YWx1ZTp0LGRvbmU6ITF9KTtjYXNlIDQ6aWYoIXRoaXMuX2RvbmUpe2UubmV4dD02O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix7dmFsdWU6dm9pZCAwLGRvbmU6ITB9KTtjYXNlIDY6cmV0dXJuIHI9KDAsYS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSx0aGlzLl9yZXF1ZXN0cy5wdXNoKHIpLGUuYWJydXB0KCJyZXR1cm4iLHIucHJvbWlzZSk7Y2FzZSA5OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gZC5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxjYW5jZWw6ZnVuY3Rpb24oZSl7dGhpcy5fZG9uZT0hMCx0aGlzLl9yZXF1ZXN0cy5mb3JFYWNoKChmdW5jdGlvbihlKXtlLnJlc29sdmUoe3ZhbHVlOnZvaWQgMCxkb25lOiEwfSl9KSksdGhpcy5fcmVxdWVzdHM9W10sdGhpcy5fbWFuYWdlci5pc1BlbmRpbmdSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCkmJnRoaXMuX21hbmFnZXIuYWJvcnRSZXF1ZXN0KHRoaXMuX3JlcXVlc3RJZCksdGhpcy5fY2xvc2UoKX19fV0pfSxlLmV4cG9ydHM9aSgpfSkuY2FsbCh0aGlzLHIoMjkpLkJ1ZmZlcixyKDE4KSxyKDI0KSl9LGZ1bmN0aW9uKGUsdCl7ZnVuY3Rpb24gcih0KXtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9lLmV4cG9ydHM9cj1mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmUuZXhwb3J0cz1yPWZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0scih0KX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXQuZm9jdXNFdmVudHM9dC5rZXlib2FyZEV2ZW50cz10LnRvdWNoRXZlbnRzPXQubW91c2VFdmVudHM9dm9pZCAwO3ZhciBuPVsib25DbGljayIsIm9uQ29udGV4dE1lbnUiLCJvbkRvdWJsZUNsaWNrIiwib25EcmFnIiwib25EcmFnRW5kIiwib25EcmFnRW50ZXIiLCJvbkRyYWdFeGl0Iiwib25EcmFnTGVhdmUiLCJvbkRyYWdPdmVyIiwib25EcmFnU3RhcnQiLCJvbkRyb3AiLCJvbk1vdXNlRG93biIsIm9uTW91c2VFbnRlciIsIm9uTW91c2VMZWF2ZSIsIm9uTW91c2VNb3ZlIiwib25Nb3VzZU91dCIsIm9uTW91c2VPdmVyIiwib25Nb3VzZVVwIl07dC5tb3VzZUV2ZW50cz1uO3ZhciBhPVsib25Ub3VjaENhbmNlbCIsIm9uVG91Y2hFbmQiLCJvblRvdWNoTW92ZSIsIm9uVG91Y2hTdGFydCJdO3QudG91Y2hFdmVudHM9YTt2YXIgaT1bIm9uS2V5RG93biIsIm9uS2V5UHJlc3MiLCJvbktleVVwIl07dC5rZXlib2FyZEV2ZW50cz1pO3ZhciBvPVsib25Gb2N1cyIsIm9uQmx1ciJdO3QuZm9jdXNFdmVudHM9bzt2YXIgcz1mdW5jdGlvbihlLHQpe3ZhciByPXt9O3JldHVybltdLmNvbmNhdChuLGEsaSxvKS5mb3JFYWNoKChmdW5jdGlvbihuKXtlW25dJiYocltuXT1mdW5jdGlvbihyKXtyZXR1cm4gdD9lW25dKHIsdChuKSk6ZVtuXShyKX0pfSkpLHJ9O3QuZGVmYXVsdD1zfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJwZGZqcyIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuZGVmYXVsdH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiRG9jdW1lbnQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBpLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIk91dGxpbmUiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBvLmRlZmF1bHR9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIlBhZ2UiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBzLmRlZmF1bHR9fSk7dmFyIGE9bihyKDIwKSksaT1uKHIoNTUpKSxvPW4ocig3MSkpLHM9bihyKDc3KSksbD1yKDEwKTtsLmlzTG9jYWxGaWxlU3lzdGVtJiYoMCxsLndhcm5PbkRldikoIllvdSBhcmUgcnVubmluZyBSZWFjdC1QREYgZnJvbSB5b3VyIGxvY2FsIGZpbGUgc3lzdGVtLiBQREYuanMgV29ya2VyIG1heSBmYWlsIHRvIGxvYWQgZHVlIHRvIGJyb3dzZXIncyBzZWN1cml0eSBwb2xpY2llcy4gSWYgeW91J3JlIG9uIEdvb2dsZSBDaHJvbWUsIHlvdSBjYW4gdXNlIC0tYWxsb3ctZmlsZS1hY2Nlc3MtZnJvbS1maWxlcyBmbGFnIGZvciBkZWJ1Z2dpbmcgcHVycG9zZXMuIiksYS5kZWZhdWx0Lkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPSJwZGYud29ya2VyLmpzIn0sZnVuY3Rpb24oZSx0KXt2YXIgcixuLGE9ZS5leHBvcnRzPXt9O2Z1bmN0aW9uIGkoKXt0aHJvdyBuZXcgRXJyb3IoInNldFRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBvKCl7dGhyb3cgbmV3IEVycm9yKCJjbGVhclRpbWVvdXQgaGFzIG5vdCBiZWVuIGRlZmluZWQiKX1mdW5jdGlvbiBzKGUpe2lmKHI9PT1zZXRUaW1lb3V0KXJldHVybiBzZXRUaW1lb3V0KGUsMCk7aWYoKHI9PT1pfHwhcikmJnNldFRpbWVvdXQpcmV0dXJuIHI9c2V0VGltZW91dCxzZXRUaW1lb3V0KGUsMCk7dHJ5e3JldHVybiByKGUsMCl9Y2F0Y2godCl7dHJ5e3JldHVybiByLmNhbGwobnVsbCxlLDApfWNhdGNoKHQpe3JldHVybiByLmNhbGwodGhpcyxlLDApfX19IWZ1bmN0aW9uKCl7dHJ5e3I9ImZ1bmN0aW9uIj09dHlwZW9mIHNldFRpbWVvdXQ/c2V0VGltZW91dDppfWNhdGNoKGUpe3I9aX10cnl7bj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDpvfWNhdGNoKGUpe249b319KCk7dmFyIGwsYz1bXSx1PSExLGY9LTE7ZnVuY3Rpb24gaCgpe3UmJmwmJih1PSExLGwubGVuZ3RoP2M9bC5jb25jYXQoYyk6Zj0tMSxjLmxlbmd0aCYmZCgpKX1mdW5jdGlvbiBkKCl7aWYoIXUpe3ZhciBlPXMoaCk7dT0hMDtmb3IodmFyIHQ9Yy5sZW5ndGg7dDspe2ZvcihsPWMsYz1bXTsrK2Y8dDspbCYmbFtmXS5ydW4oKTtmPS0xLHQ9Yy5sZW5ndGh9bD1udWxsLHU9ITEsZnVuY3Rpb24oZSl7aWYobj09PWNsZWFyVGltZW91dClyZXR1cm4gY2xlYXJUaW1lb3V0KGUpO2lmKChuPT09b3x8IW4pJiZjbGVhclRpbWVvdXQpcmV0dXJuIG49Y2xlYXJUaW1lb3V0LGNsZWFyVGltZW91dChlKTt0cnl7bihlKX1jYXRjaCh0KXt0cnl7cmV0dXJuIG4uY2FsbChudWxsLGUpfWNhdGNoKHQpe3JldHVybiBuLmNhbGwodGhpcyxlKX19fShlKX19ZnVuY3Rpb24gcChlLHQpe3RoaXMuZnVuPWUsdGhpcy5hcnJheT10fWZ1bmN0aW9uIG0oKXt9YS5uZXh0VGljaz1mdW5jdGlvbihlKXt2YXIgdD1uZXcgQXJyYXkoYXJndW1lbnRzLmxlbmd0aC0xKTtpZihhcmd1bWVudHMubGVuZ3RoPjEpZm9yKHZhciByPTE7cjxhcmd1bWVudHMubGVuZ3RoO3IrKyl0W3ItMV09YXJndW1lbnRzW3JdO2MucHVzaChuZXcgcChlLHQpKSwxIT09Yy5sZW5ndGh8fHV8fHMoZCl9LHAucHJvdG90eXBlLnJ1bj1mdW5jdGlvbigpe3RoaXMuZnVuLmFwcGx5KG51bGwsdGhpcy5hcnJheSl9LGEudGl0bGU9ImJyb3dzZXIiLGEuYnJvd3Nlcj0hMCxhLmVudj17fSxhLmFyZ3Y9W10sYS52ZXJzaW9uPSIiLGEudmVyc2lvbnM9e30sYS5vbj1tLGEuYWRkTGlzdGVuZXI9bSxhLm9uY2U9bSxhLm9mZj1tLGEucmVtb3ZlTGlzdGVuZXI9bSxhLnJlbW92ZUFsbExpc3RlbmVycz1tLGEuZW1pdD1tLGEucHJlcGVuZExpc3RlbmVyPW0sYS5wcmVwZW5kT25jZUxpc3RlbmVyPW0sYS5saXN0ZW5lcnM9ZnVuY3Rpb24oZSl7cmV0dXJuW119LGEuYmluZGluZz1mdW5jdGlvbihlKXt0aHJvdyBuZXcgRXJyb3IoInByb2Nlc3MuYmluZGluZyBpcyBub3Qgc3VwcG9ydGVkIil9LGEuY3dkPWZ1bmN0aW9uKCl7cmV0dXJuIi8ifSxhLmNoZGlyPWZ1bmN0aW9uKGUpe3Rocm93IG5ldyBFcnJvcigicHJvY2Vzcy5jaGRpciBpcyBub3Qgc3VwcG9ydGVkIil9LGEudW1hc2s9ZnVuY3Rpb24oKXtyZXR1cm4gMH19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDUpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9MTt0PGFyZ3VtZW50cy5sZW5ndGg7dCsrKXt2YXIgcj1udWxsIT1hcmd1bWVudHNbdF0/YXJndW1lbnRzW3RdOnt9LGE9T2JqZWN0LmtleXMoT2JqZWN0KHIpKTsiZnVuY3Rpb24iPT10eXBlb2YgT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyYmKGE9YS5jb25jYXQoT2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyhyKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKHIsZSkuZW51bWVyYWJsZX0pKSkpLGEuZm9yRWFjaCgoZnVuY3Rpb24odCl7bihlLHQsclt0XSl9KSl9cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2Z1bmN0aW9uIHIodCxuKXtyZXR1cm4gZS5leHBvcnRzPXI9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9LHIodCxuKX1lLmV4cG9ydHM9cn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSk7dC5kZWZhdWx0PWZ1bmN0aW9uKCl7Zm9yKHZhciBlPWFyZ3VtZW50cy5sZW5ndGgsdD1BcnJheShlKSxyPTA7cjxlO3IrKyl0W3JdPWFyZ3VtZW50c1tyXTtyZXR1cm4gdC5yZWR1Y2UoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiB0fHx0IGluc3RhbmNlb2YgQXJyYXk/ZS5jb25jYXQodCk6ZX0pLFtdKS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpLmpvaW4oIiAiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qCm9iamVjdC1hc3NpZ24KKGMpIFNpbmRyZSBTb3JodXMKQGxpY2Vuc2UgTUlUCiovdmFyIG49T2JqZWN0LmdldE93blByb3BlcnR5U3ltYm9scyxhPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksaT1PYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlO2Z1bmN0aW9uIG8oZSl7aWYobnVsbD09ZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJPYmplY3QuYXNzaWduIGNhbm5vdCBiZSBjYWxsZWQgd2l0aCBudWxsIG9yIHVuZGVmaW5lZCIpO3JldHVybiBPYmplY3QoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dHJ5e2lmKCFPYmplY3QuYXNzaWduKXJldHVybiExO3ZhciBlPW5ldyBTdHJpbmcoImFiYyIpO2lmKGVbNV09ImRlIiwiNSI9PT1PYmplY3QuZ2V0T3duUHJvcGVydHlOYW1lcyhlKVswXSlyZXR1cm4hMTtmb3IodmFyIHQ9e30scj0wO3I8MTA7cisrKXRbIl8iK1N0cmluZy5mcm9tQ2hhckNvZGUocildPXI7aWYoIjAxMjM0NTY3ODkiIT09T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXModCkubWFwKChmdW5jdGlvbihlKXtyZXR1cm4gdFtlXX0pKS5qb2luKCIiKSlyZXR1cm4hMTt2YXIgbj17fTtyZXR1cm4iYWJjZGVmZ2hpamtsbW5vcHFyc3QiLnNwbGl0KCIiKS5mb3JFYWNoKChmdW5jdGlvbihlKXtuW2VdPWV9KSksImFiY2RlZmdoaWprbG1ub3BxcnN0Ij09PU9iamVjdC5rZXlzKE9iamVjdC5hc3NpZ24oe30sbikpLmpvaW4oIiIpfWNhdGNoKGUpe3JldHVybiExfX0oKT9PYmplY3QuYXNzaWduOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLHMsbD1vKGUpLGM9MTtjPGFyZ3VtZW50cy5sZW5ndGg7YysrKXtmb3IodmFyIHUgaW4gcj1PYmplY3QoYXJndW1lbnRzW2NdKSlhLmNhbGwocix1KSYmKGxbdV09clt1XSk7aWYobil7cz1uKHIpO2Zvcih2YXIgZj0wO2Y8cy5sZW5ndGg7ZisrKWkuY2FsbChyLHNbZl0pJiYobFtzW2ZdXT1yW3NbZl1dKX19cmV0dXJuIGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiOyhmdW5jdGlvbihlKXsKLyohCiAqIFRoZSBidWZmZXIgbW9kdWxlIGZyb20gbm9kZS5qcywgZm9yIHRoZSBicm93c2VyLgogKgogKiBAYXV0aG9yICAgRmVyb3NzIEFib3VraGFkaWplaCA8ZmVyb3NzQGZlcm9zcy5vcmc+IDxodHRwOi8vZmVyb3NzLm9yZz4KICogQGxpY2Vuc2UgIE1JVAogKi8KdmFyIG49cig0MSksYT1yKDQyKSxpPXIoNDMpO2Z1bmN0aW9uIG8oKXtyZXR1cm4gbC5UWVBFRF9BUlJBWV9TVVBQT1JUPzIxNDc0ODM2NDc6MTA3Mzc0MTgyM31mdW5jdGlvbiBzKGUsdCl7aWYobygpPHQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZWQgYXJyYXkgbGVuZ3RoIik7cmV0dXJuIGwuVFlQRURfQVJSQVlfU1VQUE9SVD8oZT1uZXcgVWludDhBcnJheSh0KSkuX19wcm90b19fPWwucHJvdG90eXBlOihudWxsPT09ZSYmKGU9bmV3IGwodCkpLGUubGVuZ3RoPXQpLGV9ZnVuY3Rpb24gbChlLHQscil7aWYoIShsLlRZUEVEX0FSUkFZX1NVUFBPUlR8fHRoaXMgaW5zdGFuY2VvZiBsKSlyZXR1cm4gbmV3IGwoZSx0LHIpO2lmKCJudW1iZXIiPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0KXRocm93IG5ldyBFcnJvcigiSWYgZW5jb2RpbmcgaXMgc3BlY2lmaWVkIHRoZW4gdGhlIGZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmciKTtyZXR1cm4gZih0aGlzLGUpfXJldHVybiBjKHRoaXMsZSx0LHIpfWZ1bmN0aW9uIGMoZSx0LHIsbil7aWYoIm51bWJlciI9PXR5cGVvZiB0KXRocm93IG5ldyBUeXBlRXJyb3IoJyJ2YWx1ZSIgYXJndW1lbnQgbXVzdCBub3QgYmUgYSBudW1iZXInKTtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiZ0IGluc3RhbmNlb2YgQXJyYXlCdWZmZXI/ZnVuY3Rpb24oZSx0LHIsbil7aWYodC5ieXRlTGVuZ3RoLHI8MHx8dC5ieXRlTGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidvZmZzZXQnIGlzIG91dCBvZiBib3VuZHMiKTtpZih0LmJ5dGVMZW5ndGg8cisobnx8MCkpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIidsZW5ndGgnIGlzIG91dCBvZiBib3VuZHMiKTt0PXZvaWQgMD09PXImJnZvaWQgMD09PW4/bmV3IFVpbnQ4QXJyYXkodCk6dm9pZCAwPT09bj9uZXcgVWludDhBcnJheSh0LHIpOm5ldyBVaW50OEFycmF5KHQscixuKTtsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KGU9dCkuX19wcm90b19fPWwucHJvdG90eXBlOmU9aChlLHQpO3JldHVybiBlfShlLHQscixuKToic3RyaW5nIj09dHlwZW9mIHQ/ZnVuY3Rpb24oZSx0LHIpeyJzdHJpbmciPT10eXBlb2YgciYmIiIhPT1yfHwocj0idXRmOCIpO2lmKCFsLmlzRW5jb2RpbmcocikpdGhyb3cgbmV3IFR5cGVFcnJvcignImVuY29kaW5nIiBtdXN0IGJlIGEgdmFsaWQgc3RyaW5nIGVuY29kaW5nJyk7dmFyIG49MHxwKHQsciksYT0oZT1zKGUsbikpLndyaXRlKHQscik7YSE9PW4mJihlPWUuc2xpY2UoMCxhKSk7cmV0dXJuIGV9KGUsdCxyKTpmdW5jdGlvbihlLHQpe2lmKGwuaXNCdWZmZXIodCkpe3ZhciByPTB8ZCh0Lmxlbmd0aCk7cmV0dXJuIDA9PT0oZT1zKGUscikpLmxlbmd0aD9lOih0LmNvcHkoZSwwLDAsciksZSl9aWYodCl7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBBcnJheUJ1ZmZlciYmdC5idWZmZXIgaW5zdGFuY2VvZiBBcnJheUJ1ZmZlcnx8Imxlbmd0aCJpbiB0KXJldHVybiJudW1iZXIiIT10eXBlb2YgdC5sZW5ndGh8fChuPXQubGVuZ3RoKSE9bj9zKGUsMCk6aChlLHQpO2lmKCJCdWZmZXIiPT09dC50eXBlJiZpKHQuZGF0YSkpcmV0dXJuIGgoZSx0LmRhdGEpfXZhciBuO3Rocm93IG5ldyBUeXBlRXJyb3IoIkZpcnN0IGFyZ3VtZW50IG11c3QgYmUgYSBzdHJpbmcsIEJ1ZmZlciwgQXJyYXlCdWZmZXIsIEFycmF5LCBvciBhcnJheS1saWtlIG9iamVjdC4iKX0oZSx0KX1mdW5jdGlvbiB1KGUpe2lmKCJudW1iZXIiIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCcic2l6ZSIgYXJndW1lbnQgbXVzdCBiZSBhIG51bWJlcicpO2lmKGU8MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcignInNpemUiIGFyZ3VtZW50IG11c3Qgbm90IGJlIG5lZ2F0aXZlJyl9ZnVuY3Rpb24gZihlLHQpe2lmKHUodCksZT1zKGUsdDwwPzA6MHxkKHQpKSwhbC5UWVBFRF9BUlJBWV9TVVBQT1JUKWZvcih2YXIgcj0wO3I8dDsrK3IpZVtyXT0wO3JldHVybiBlfWZ1bmN0aW9uIGgoZSx0KXt2YXIgcj10Lmxlbmd0aDwwPzA6MHxkKHQubGVuZ3RoKTtlPXMoZSxyKTtmb3IodmFyIG49MDtuPHI7bis9MSllW25dPTI1NSZ0W25dO3JldHVybiBlfWZ1bmN0aW9uIGQoZSl7aWYoZT49bygpKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIGFsbG9jYXRlIEJ1ZmZlciBsYXJnZXIgdGhhbiBtYXhpbXVtIHNpemU6IDB4IitvKCkudG9TdHJpbmcoMTYpKyIgYnl0ZXMiKTtyZXR1cm4gMHxlfWZ1bmN0aW9uIHAoZSx0KXtpZihsLmlzQnVmZmVyKGUpKXJldHVybiBlLmxlbmd0aDtpZigidW5kZWZpbmVkIiE9dHlwZW9mIEFycmF5QnVmZmVyJiYiZnVuY3Rpb24iPT10eXBlb2YgQXJyYXlCdWZmZXIuaXNWaWV3JiYoQXJyYXlCdWZmZXIuaXNWaWV3KGUpfHxlIGluc3RhbmNlb2YgQXJyYXlCdWZmZXIpKXJldHVybiBlLmJ5dGVMZW5ndGg7InN0cmluZyIhPXR5cGVvZiBlJiYoZT0iIitlKTt2YXIgcj1lLmxlbmd0aDtpZigwPT09cilyZXR1cm4gMDtmb3IodmFyIG49ITE7Oylzd2l0Y2godCl7Y2FzZSJhc2NpaSI6Y2FzZSJsYXRpbjEiOmNhc2UiYmluYXJ5IjpyZXR1cm4gcjtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOmNhc2Ugdm9pZCAwOnJldHVybiBVKGUpLmxlbmd0aDtjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuIDIqcjtjYXNlImhleCI6cmV0dXJuIHI+Pj4xO2Nhc2UiYmFzZTY0IjpyZXR1cm4gcShlKS5sZW5ndGg7ZGVmYXVsdDppZihuKXJldHVybiBVKGUpLmxlbmd0aDt0PSgiIit0KS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIG0oZSx0LHIpe3ZhciBuPSExO2lmKCh2b2lkIDA9PT10fHx0PDApJiYodD0wKSx0PnRoaXMubGVuZ3RoKXJldHVybiIiO2lmKCh2b2lkIDA9PT1yfHxyPnRoaXMubGVuZ3RoKSYmKHI9dGhpcy5sZW5ndGgpLHI8PTApcmV0dXJuIiI7aWYoKHI+Pj49MCk8PSh0Pj4+PTApKXJldHVybiIiO2ZvcihlfHwoZT0idXRmOCIpOzspc3dpdGNoKGUpe2Nhc2UiaGV4IjpyZXR1cm4gVCh0aGlzLHQscik7Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpyZXR1cm4gQyh0aGlzLHQscik7Y2FzZSJhc2NpaSI6cmV0dXJuIFAodGhpcyx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIEUodGhpcyx0LHIpO2Nhc2UiYmFzZTY0IjpyZXR1cm4gQSh0aGlzLHQscik7Y2FzZSJ1Y3MyIjpjYXNlInVjcy0yIjpjYXNlInV0ZjE2bGUiOmNhc2UidXRmLTE2bGUiOnJldHVybiBSKHRoaXMsdCxyKTtkZWZhdWx0OmlmKG4pdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIitlKTtlPShlKyIiKS50b0xvd2VyQ2FzZSgpLG49ITB9fWZ1bmN0aW9uIGcoZSx0LHIpe3ZhciBuPWVbdF07ZVt0XT1lW3JdLGVbcl09bn1mdW5jdGlvbiB2KGUsdCxyLG4sYSl7aWYoMD09PWUubGVuZ3RoKXJldHVybi0xO2lmKCJzdHJpbmciPT10eXBlb2Ygcj8obj1yLHI9MCk6cj4yMTQ3NDgzNjQ3P3I9MjE0NzQ4MzY0NzpyPC0yMTQ3NDgzNjQ4JiYocj0tMjE0NzQ4MzY0OCkscj0rcixpc05hTihyKSYmKHI9YT8wOmUubGVuZ3RoLTEpLHI8MCYmKHI9ZS5sZW5ndGgrcikscj49ZS5sZW5ndGgpe2lmKGEpcmV0dXJuLTE7cj1lLmxlbmd0aC0xfWVsc2UgaWYocjwwKXtpZighYSlyZXR1cm4tMTtyPTB9aWYoInN0cmluZyI9PXR5cGVvZiB0JiYodD1sLmZyb20odCxuKSksbC5pc0J1ZmZlcih0KSlyZXR1cm4gMD09PXQubGVuZ3RoPy0xOnkoZSx0LHIsbixhKTtpZigibnVtYmVyIj09dHlwZW9mIHQpcmV0dXJuIHQmPTI1NSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQmJiJmdW5jdGlvbiI9PXR5cGVvZiBVaW50OEFycmF5LnByb3RvdHlwZS5pbmRleE9mP2E/VWludDhBcnJheS5wcm90b3R5cGUuaW5kZXhPZi5jYWxsKGUsdCxyKTpVaW50OEFycmF5LnByb3RvdHlwZS5sYXN0SW5kZXhPZi5jYWxsKGUsdCxyKTp5KGUsW3RdLHIsbixhKTt0aHJvdyBuZXcgVHlwZUVycm9yKCJ2YWwgbXVzdCBiZSBzdHJpbmcsIG51bWJlciBvciBCdWZmZXIiKX1mdW5jdGlvbiB5KGUsdCxyLG4sYSl7dmFyIGksbz0xLHM9ZS5sZW5ndGgsbD10Lmxlbmd0aDtpZih2b2lkIDAhPT1uJiYoInVjczIiPT09KG49U3RyaW5nKG4pLnRvTG93ZXJDYXNlKCkpfHwidWNzLTIiPT09bnx8InV0ZjE2bGUiPT09bnx8InV0Zi0xNmxlIj09PW4pKXtpZihlLmxlbmd0aDwyfHx0Lmxlbmd0aDwyKXJldHVybi0xO289MixzLz0yLGwvPTIsci89Mn1mdW5jdGlvbiBjKGUsdCl7cmV0dXJuIDE9PT1vP2VbdF06ZS5yZWFkVUludDE2QkUodCpvKX1pZihhKXt2YXIgdT0tMTtmb3IoaT1yO2k8cztpKyspaWYoYyhlLGkpPT09Yyh0LC0xPT09dT8wOmktdSkpe2lmKC0xPT09dSYmKHU9aSksaS11KzE9PT1sKXJldHVybiB1Km99ZWxzZS0xIT09dSYmKGktPWktdSksdT0tMX1lbHNlIGZvcihyK2w+cyYmKHI9cy1sKSxpPXI7aT49MDtpLS0pe2Zvcih2YXIgZj0hMCxoPTA7aDxsO2grKylpZihjKGUsaStoKSE9PWModCxoKSl7Zj0hMTticmVha31pZihmKXJldHVybiBpfXJldHVybi0xfWZ1bmN0aW9uIGIoZSx0LHIsbil7cj1OdW1iZXIocil8fDA7dmFyIGE9ZS5sZW5ndGgtcjtuPyhuPU51bWJlcihuKSk+YSYmKG49YSk6bj1hO3ZhciBpPXQubGVuZ3RoO2lmKGklMiE9MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGhleCBzdHJpbmciKTtuPmkvMiYmKG49aS8yKTtmb3IodmFyIG89MDtvPG47KytvKXt2YXIgcz1wYXJzZUludCh0LnN1YnN0cigyKm8sMiksMTYpO2lmKGlzTmFOKHMpKXJldHVybiBvO2VbcitvXT1zfXJldHVybiBvfWZ1bmN0aW9uIHcoZSx0LHIsbil7cmV0dXJuIHooVSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBrKGUsdCxyLG4pe3JldHVybiB6KGZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTA7cjxlLmxlbmd0aDsrK3IpdC5wdXNoKDI1NSZlLmNoYXJDb2RlQXQocikpO3JldHVybiB0fSh0KSxlLHIsbil9ZnVuY3Rpb24gUyhlLHQscixuKXtyZXR1cm4gayhlLHQscixuKX1mdW5jdGlvbiBfKGUsdCxyLG4pe3JldHVybiB6KHEodCksZSxyLG4pfWZ1bmN0aW9uIHgoZSx0LHIsbil7cmV0dXJuIHooZnVuY3Rpb24oZSx0KXtmb3IodmFyIHIsbixhLGk9W10sbz0wO288ZS5sZW5ndGgmJiEoKHQtPTIpPDApOysrbylyPWUuY2hhckNvZGVBdChvKSxuPXI+PjgsYT1yJTI1NixpLnB1c2goYSksaS5wdXNoKG4pO3JldHVybiBpfSh0LGUubGVuZ3RoLXIpLGUscixuKX1mdW5jdGlvbiBBKGUsdCxyKXtyZXR1cm4gMD09PXQmJnI9PT1lLmxlbmd0aD9uLmZyb21CeXRlQXJyYXkoZSk6bi5mcm9tQnl0ZUFycmF5KGUuc2xpY2UodCxyKSl9ZnVuY3Rpb24gQyhlLHQscil7cj1NYXRoLm1pbihlLmxlbmd0aCxyKTtmb3IodmFyIG49W10sYT10O2E8cjspe3ZhciBpLG8scyxsLGM9ZVthXSx1PW51bGwsZj1jPjIzOT80OmM+MjIzPzM6Yz4xOTE/MjoxO2lmKGErZjw9cilzd2l0Y2goZil7Y2FzZSAxOmM8MTI4JiYodT1jKTticmVhaztjYXNlIDI6MTI4PT0oMTkyJihpPWVbYSsxXSkpJiYobD0oMzEmYyk8PDZ8NjMmaSk+MTI3JiYodT1sKTticmVhaztjYXNlIDM6aT1lW2ErMV0sbz1lW2ErMl0sMTI4PT0oMTkyJmkpJiYxMjg9PSgxOTImbykmJihsPSgxNSZjKTw8MTJ8KDYzJmkpPDw2fDYzJm8pPjIwNDcmJihsPDU1Mjk2fHxsPjU3MzQzKSYmKHU9bCk7YnJlYWs7Y2FzZSA0Omk9ZVthKzFdLG89ZVthKzJdLHM9ZVthKzNdLDEyOD09KDE5MiZpKSYmMTI4PT0oMTkyJm8pJiYxMjg9PSgxOTImcykmJihsPSgxNSZjKTw8MTh8KDYzJmkpPDwxMnwoNjMmbyk8PDZ8NjMmcyk+NjU1MzUmJmw8MTExNDExMiYmKHU9bCl9bnVsbD09PXU/KHU9NjU1MzMsZj0xKTp1PjY1NTM1JiYodS09NjU1MzYsbi5wdXNoKHU+Pj4xMCYxMDIzfDU1Mjk2KSx1PTU2MzIwfDEwMjMmdSksbi5wdXNoKHUpLGErPWZ9cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUubGVuZ3RoO2lmKHQ8PTQwOTYpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUuYXBwbHkoU3RyaW5nLGUpO3ZhciByPSIiLG49MDtmb3IoO248dDspcis9U3RyaW5nLmZyb21DaGFyQ29kZS5hcHBseShTdHJpbmcsZS5zbGljZShuLG4rPTQwOTYpKTtyZXR1cm4gcn0obil9dC5CdWZmZXI9bCx0LlNsb3dCdWZmZXI9ZnVuY3Rpb24oZSl7K2UhPWUmJihlPTApO3JldHVybiBsLmFsbG9jKCtlKX0sdC5JTlNQRUNUX01BWF9CWVRFUz01MCxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ9dm9pZCAwIT09ZS5UWVBFRF9BUlJBWV9TVVBQT1JUP2UuVFlQRURfQVJSQVlfU1VQUE9SVDpmdW5jdGlvbigpe3RyeXt2YXIgZT1uZXcgVWludDhBcnJheSgxKTtyZXR1cm4gZS5fX3Byb3RvX189e19fcHJvdG9fXzpVaW50OEFycmF5LnByb3RvdHlwZSxmb286ZnVuY3Rpb24oKXtyZXR1cm4gNDJ9fSw0Mj09PWUuZm9vKCkmJiJmdW5jdGlvbiI9PXR5cGVvZiBlLnN1YmFycmF5JiYwPT09ZS5zdWJhcnJheSgxLDEpLmJ5dGVMZW5ndGh9Y2F0Y2goZSl7cmV0dXJuITF9fSgpLHQua01heExlbmd0aD1vKCksbC5wb29sU2l6ZT04MTkyLGwuX2F1Z21lbnQ9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19fPWwucHJvdG90eXBlLGV9LGwuZnJvbT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGMobnVsbCxlLHQscil9LGwuVFlQRURfQVJSQVlfU1VQUE9SVCYmKGwucHJvdG90eXBlLl9fcHJvdG9fXz1VaW50OEFycmF5LnByb3RvdHlwZSxsLl9fcHJvdG9fXz1VaW50OEFycmF5LCJ1bmRlZmluZWQiIT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuc3BlY2llcyYmbFtTeW1ib2wuc3BlY2llc109PT1sJiZPYmplY3QuZGVmaW5lUHJvcGVydHkobCxTeW1ib2wuc3BlY2llcyx7dmFsdWU6bnVsbCxjb25maWd1cmFibGU6ITB9KSksbC5hbGxvYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3JldHVybiB1KHQpLHQ8PTA/cyhlLHQpOnZvaWQgMCE9PXI/InN0cmluZyI9PXR5cGVvZiBuP3MoZSx0KS5maWxsKHIsbik6cyhlLHQpLmZpbGwocik6cyhlLHQpfShudWxsLGUsdCxyKX0sbC5hbGxvY1Vuc2FmZT1mdW5jdGlvbihlKXtyZXR1cm4gZihudWxsLGUpfSxsLmFsbG9jVW5zYWZlU2xvdz1mdW5jdGlvbihlKXtyZXR1cm4gZihudWxsLGUpfSxsLmlzQnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiEobnVsbD09ZXx8IWUuX2lzQnVmZmVyKX0sbC5jb21wYXJlPWZ1bmN0aW9uKGUsdCl7aWYoIWwuaXNCdWZmZXIoZSl8fCFsLmlzQnVmZmVyKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkFyZ3VtZW50cyBtdXN0IGJlIEJ1ZmZlcnMiKTtpZihlPT09dClyZXR1cm4gMDtmb3IodmFyIHI9ZS5sZW5ndGgsbj10Lmxlbmd0aCxhPTAsaT1NYXRoLm1pbihyLG4pO2E8aTsrK2EpaWYoZVthXSE9PXRbYV0pe3I9ZVthXSxuPXRbYV07YnJlYWt9cmV0dXJuIHI8bj8tMTpuPHI/MTowfSxsLmlzRW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKFN0cmluZyhlKS50b0xvd2VyQ2FzZSgpKXtjYXNlImhleCI6Y2FzZSJ1dGY4IjpjYXNlInV0Zi04IjpjYXNlImFzY2lpIjpjYXNlImxhdGluMSI6Y2FzZSJiaW5hcnkiOmNhc2UiYmFzZTY0IjpjYXNlInVjczIiOmNhc2UidWNzLTIiOmNhc2UidXRmMTZsZSI6Y2FzZSJ1dGYtMTZsZSI6cmV0dXJuITA7ZGVmYXVsdDpyZXR1cm4hMX19LGwuY29uY2F0PWZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO2lmKDA9PT1lLmxlbmd0aClyZXR1cm4gbC5hbGxvYygwKTt2YXIgcjtpZih2b2lkIDA9PT10KWZvcih0PTAscj0wO3I8ZS5sZW5ndGg7KytyKXQrPWVbcl0ubGVuZ3RoO3ZhciBuPWwuYWxsb2NVbnNhZmUodCksYT0wO2ZvcihyPTA7cjxlLmxlbmd0aDsrK3Ipe3ZhciBvPWVbcl07aWYoIWwuaXNCdWZmZXIobykpdGhyb3cgbmV3IFR5cGVFcnJvcignImxpc3QiIGFyZ3VtZW50IG11c3QgYmUgYW4gQXJyYXkgb2YgQnVmZmVycycpO28uY29weShuLGEpLGErPW8ubGVuZ3RofXJldHVybiBufSxsLmJ5dGVMZW5ndGg9cCxsLnByb3RvdHlwZS5faXNCdWZmZXI9ITAsbC5wcm90b3R5cGUuc3dhcDE2PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSUyIT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgMTYtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz0yKWcodGhpcyx0LHQrMSk7cmV0dXJuIHRoaXN9LGwucHJvdG90eXBlLnN3YXAzMj1mdW5jdGlvbigpe3ZhciBlPXRoaXMubGVuZ3RoO2lmKGUlNCE9MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiQnVmZmVyIHNpemUgbXVzdCBiZSBhIG11bHRpcGxlIG9mIDMyLWJpdHMiKTtmb3IodmFyIHQ9MDt0PGU7dCs9NClnKHRoaXMsdCx0KzMpLGcodGhpcyx0KzEsdCsyKTtyZXR1cm4gdGhpc30sbC5wcm90b3R5cGUuc3dhcDY0PWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5sZW5ndGg7aWYoZSU4IT0wKXRocm93IG5ldyBSYW5nZUVycm9yKCJCdWZmZXIgc2l6ZSBtdXN0IGJlIGEgbXVsdGlwbGUgb2YgNjQtYml0cyIpO2Zvcih2YXIgdD0wO3Q8ZTt0Kz04KWcodGhpcyx0LHQrNyksZyh0aGlzLHQrMSx0KzYpLGcodGhpcyx0KzIsdCs1KSxnKHRoaXMsdCszLHQrNCk7cmV0dXJuIHRoaXN9LGwucHJvdG90eXBlLnRvU3RyaW5nPWZ1bmN0aW9uKCl7dmFyIGU9MHx0aGlzLmxlbmd0aDtyZXR1cm4gMD09PWU/IiI6MD09PWFyZ3VtZW50cy5sZW5ndGg/Qyh0aGlzLDAsZSk6bS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LGwucHJvdG90eXBlLmVxdWFscz1mdW5jdGlvbihlKXtpZighbC5pc0J1ZmZlcihlKSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBtdXN0IGJlIGEgQnVmZmVyIik7cmV0dXJuIHRoaXM9PT1lfHwwPT09bC5jb21wYXJlKHRoaXMsZSl9LGwucHJvdG90eXBlLmluc3BlY3Q9ZnVuY3Rpb24oKXt2YXIgZT0iIixyPXQuSU5TUEVDVF9NQVhfQllURVM7cmV0dXJuIHRoaXMubGVuZ3RoPjAmJihlPXRoaXMudG9TdHJpbmcoImhleCIsMCxyKS5tYXRjaCgvLnsyfS9nKS5qb2luKCIgIiksdGhpcy5sZW5ndGg+ciYmKGUrPSIgLi4uICIpKSwiPEJ1ZmZlciAiK2UrIj4ifSxsLnByb3RvdHlwZS5jb21wYXJlPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aWYoIWwuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciIpO2lmKHZvaWQgMD09PXQmJih0PTApLHZvaWQgMD09PXImJihyPWU/ZS5sZW5ndGg6MCksdm9pZCAwPT09biYmKG49MCksdm9pZCAwPT09YSYmKGE9dGhpcy5sZW5ndGgpLHQ8MHx8cj5lLmxlbmd0aHx8bjwwfHxhPnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJvdXQgb2YgcmFuZ2UgaW5kZXgiKTtpZihuPj1hJiZ0Pj1yKXJldHVybiAwO2lmKG4+PWEpcmV0dXJuLTE7aWYodD49cilyZXR1cm4gMTtpZih0aGlzPT09ZSlyZXR1cm4gMDtmb3IodmFyIGk9KGE+Pj49MCktKG4+Pj49MCksbz0ocj4+Pj0wKS0odD4+Pj0wKSxzPU1hdGgubWluKGksbyksYz10aGlzLnNsaWNlKG4sYSksdT1lLnNsaWNlKHQsciksZj0wO2Y8czsrK2YpaWYoY1tmXSE9PXVbZl0pe2k9Y1tmXSxvPXVbZl07YnJlYWt9cmV0dXJuIGk8bz8tMTpvPGk/MTowfSxsLnByb3RvdHlwZS5pbmNsdWRlcz1mdW5jdGlvbihlLHQscil7cmV0dXJuLTEhPT10aGlzLmluZGV4T2YoZSx0LHIpfSxsLnByb3RvdHlwZS5pbmRleE9mPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdih0aGlzLGUsdCxyLCEwKX0sbC5wcm90b3R5cGUubGFzdEluZGV4T2Y9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB2KHRoaXMsZSx0LHIsITEpfSxsLnByb3RvdHlwZS53cml0ZT1mdW5jdGlvbihlLHQscixuKXtpZih2b2lkIDA9PT10KW49InV0ZjgiLHI9dGhpcy5sZW5ndGgsdD0wO2Vsc2UgaWYodm9pZCAwPT09ciYmInN0cmluZyI9PXR5cGVvZiB0KW49dCxyPXRoaXMubGVuZ3RoLHQ9MDtlbHNle2lmKCFpc0Zpbml0ZSh0KSl0aHJvdyBuZXcgRXJyb3IoIkJ1ZmZlci53cml0ZShzdHJpbmcsIGVuY29kaW5nLCBvZmZzZXRbLCBsZW5ndGhdKSBpcyBubyBsb25nZXIgc3VwcG9ydGVkIik7dHw9MCxpc0Zpbml0ZShyKT8ocnw9MCx2b2lkIDA9PT1uJiYobj0idXRmOCIpKToobj1yLHI9dm9pZCAwKX12YXIgYT10aGlzLmxlbmd0aC10O2lmKCh2b2lkIDA9PT1yfHxyPmEpJiYocj1hKSxlLmxlbmd0aD4wJiYocjwwfHx0PDApfHx0PnRoaXMubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJBdHRlbXB0IHRvIHdyaXRlIG91dHNpZGUgYnVmZmVyIGJvdW5kcyIpO258fChuPSJ1dGY4Iik7Zm9yKHZhciBpPSExOzspc3dpdGNoKG4pe2Nhc2UiaGV4IjpyZXR1cm4gYih0aGlzLGUsdCxyKTtjYXNlInV0ZjgiOmNhc2UidXRmLTgiOnJldHVybiB3KHRoaXMsZSx0LHIpO2Nhc2UiYXNjaWkiOnJldHVybiBrKHRoaXMsZSx0LHIpO2Nhc2UibGF0aW4xIjpjYXNlImJpbmFyeSI6cmV0dXJuIFModGhpcyxlLHQscik7Y2FzZSJiYXNlNjQiOnJldHVybiBfKHRoaXMsZSx0LHIpO2Nhc2UidWNzMiI6Y2FzZSJ1Y3MtMiI6Y2FzZSJ1dGYxNmxlIjpjYXNlInV0Zi0xNmxlIjpyZXR1cm4geCh0aGlzLGUsdCxyKTtkZWZhdWx0OmlmKGkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKTtuPSgiIituKS50b0xvd2VyQ2FzZSgpLGk9ITB9fSxsLnByb3RvdHlwZS50b0pTT049ZnVuY3Rpb24oKXtyZXR1cm57dHlwZToiQnVmZmVyIixkYXRhOkFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKHRoaXMuX2Fycnx8dGhpcywwKX19O2Z1bmN0aW9uIFAoZSx0LHIpe3ZhciBuPSIiO3I9TWF0aC5taW4oZS5sZW5ndGgscik7Zm9yKHZhciBhPXQ7YTxyOysrYSluKz1TdHJpbmcuZnJvbUNoYXJDb2RlKDEyNyZlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBFKGUsdCxyKXt2YXIgbj0iIjtyPU1hdGgubWluKGUubGVuZ3RoLHIpO2Zvcih2YXIgYT10O2E8cjsrK2Epbis9U3RyaW5nLmZyb21DaGFyQ29kZShlW2FdKTtyZXR1cm4gbn1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbj1lLmxlbmd0aDsoIXR8fHQ8MCkmJih0PTApLCghcnx8cjwwfHxyPm4pJiYocj1uKTtmb3IodmFyIGE9IiIsaT10O2k8cjsrK2kpYSs9QihlW2ldKTtyZXR1cm4gYX1mdW5jdGlvbiBSKGUsdCxyKXtmb3IodmFyIG49ZS5zbGljZSh0LHIpLGE9IiIsaT0wO2k8bi5sZW5ndGg7aSs9MilhKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG5baV0rMjU2Km5baSsxXSk7cmV0dXJuIGF9ZnVuY3Rpb24gTyhlLHQscil7aWYoZSUxIT0wfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIm9mZnNldCBpcyBub3QgdWludCIpO2lmKGUrdD5yKXRocm93IG5ldyBSYW5nZUVycm9yKCJUcnlpbmcgdG8gYWNjZXNzIGJleW9uZCBidWZmZXIgbGVuZ3RoIil9ZnVuY3Rpb24gSShlLHQscixuLGEsaSl7aWYoIWwuaXNCdWZmZXIoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcignImJ1ZmZlciIgYXJndW1lbnQgbXVzdCBiZSBhIEJ1ZmZlciBpbnN0YW5jZScpO2lmKHQ+YXx8dDxpKXRocm93IG5ldyBSYW5nZUVycm9yKCcidmFsdWUiIGFyZ3VtZW50IGlzIG91dCBvZiBib3VuZHMnKTtpZihyK24+ZS5sZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIEYoZSx0LHIsbil7dDwwJiYodD02NTUzNSt0KzEpO2Zvcih2YXIgYT0wLGk9TWF0aC5taW4oZS5sZW5ndGgtciwyKTthPGk7KythKWVbcithXT0odCYyNTU8PDgqKG4/YToxLWEpKT4+PjgqKG4/YToxLWEpfWZ1bmN0aW9uIEwoZSx0LHIsbil7dDwwJiYodD00Mjk0OTY3Mjk1K3QrMSk7Zm9yKHZhciBhPTAsaT1NYXRoLm1pbihlLmxlbmd0aC1yLDQpO2E8aTsrK2EpZVtyK2FdPXQ+Pj44KihuP2E6My1hKSYyNTV9ZnVuY3Rpb24gRChlLHQscixuLGEsaSl7aWYocituPmUubGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJJbmRleCBvdXQgb2YgcmFuZ2UiKTtpZihyPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkluZGV4IG91dCBvZiByYW5nZSIpfWZ1bmN0aW9uIE4oZSx0LHIsbixpKXtyZXR1cm4gaXx8RChlLDAsciw0KSxhLndyaXRlKGUsdCxyLG4sMjMsNCkscis0fWZ1bmN0aW9uIE0oZSx0LHIsbixpKXtyZXR1cm4gaXx8RChlLDAsciw4KSxhLndyaXRlKGUsdCxyLG4sNTIsOCkscis4fWwucHJvdG90eXBlLnNsaWNlPWZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLmxlbmd0aDtpZigoZT1+fmUpPDA/KGUrPW4pPDAmJihlPTApOmU+biYmKGU9biksKHQ9dm9pZCAwPT09dD9uOn5+dCk8MD8odCs9bik8MCYmKHQ9MCk6dD5uJiYodD1uKSx0PGUmJih0PWUpLGwuVFlQRURfQVJSQVlfU1VQUE9SVCkocj10aGlzLnN1YmFycmF5KGUsdCkpLl9fcHJvdG9fXz1sLnByb3RvdHlwZTtlbHNle3ZhciBhPXQtZTtyPW5ldyBsKGEsdm9pZCAwKTtmb3IodmFyIGk9MDtpPGE7KytpKXJbaV09dGhpc1tpK2VdfXJldHVybiByfSxsLnByb3RvdHlwZS5yZWFkVUludExFPWZ1bmN0aW9uKGUsdCxyKXtlfD0wLHR8PTAscnx8TyhlLHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgbj10aGlzW2VdLGE9MSxpPTA7KytpPHQmJihhKj0yNTYpOyluKz10aGlzW2UraV0qYTtyZXR1cm4gbn0sbC5wcm90b3R5cGUucmVhZFVJbnRCRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fE8oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlKy0tdF0sYT0xO3Q+MCYmKGEqPTI1Nik7KW4rPXRoaXNbZSstLXRdKmE7cmV0dXJuIG59LGwucHJvdG90eXBlLnJlYWRVSW50OD1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsMSx0aGlzLmxlbmd0aCksdGhpc1tlXX0sbC5wcm90b3R5cGUucmVhZFVJbnQxNkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdfHRoaXNbZSsxXTw8OH0sbC5wcm90b3R5cGUucmVhZFVJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwyLHRoaXMubGVuZ3RoKSx0aGlzW2VdPDw4fHRoaXNbZSsxXX0sbC5wcm90b3R5cGUucmVhZFVJbnQzMkxFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSw0LHRoaXMubGVuZ3RoKSwodGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNikrMTY3NzcyMTYqdGhpc1tlKzNdfSxsLnByb3RvdHlwZS5yZWFkVUludDMyQkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TyhlLDQsdGhpcy5sZW5ndGgpLDE2Nzc3MjE2KnRoaXNbZV0rKHRoaXNbZSsxXTw8MTZ8dGhpc1tlKzJdPDw4fHRoaXNbZSszXSl9LGwucHJvdG90eXBlLnJlYWRJbnRMRT1mdW5jdGlvbihlLHQscil7ZXw9MCx0fD0wLHJ8fE8oZSx0LHRoaXMubGVuZ3RoKTtmb3IodmFyIG49dGhpc1tlXSxhPTEsaT0wOysraTx0JiYoYSo9MjU2KTspbis9dGhpc1tlK2ldKmE7cmV0dXJuIG4+PShhKj0xMjgpJiYobi09TWF0aC5wb3coMiw4KnQpKSxufSxsLnByb3RvdHlwZS5yZWFkSW50QkU9ZnVuY3Rpb24oZSx0LHIpe2V8PTAsdHw9MCxyfHxPKGUsdCx0aGlzLmxlbmd0aCk7Zm9yKHZhciBuPXQsYT0xLGk9dGhpc1tlKy0tbl07bj4wJiYoYSo9MjU2KTspaSs9dGhpc1tlKy0tbl0qYTtyZXR1cm4gaT49KGEqPTEyOCkmJihpLT1NYXRoLnBvdygyLDgqdCkpLGl9LGwucHJvdG90eXBlLnJlYWRJbnQ4PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSwxLHRoaXMubGVuZ3RoKSwxMjgmdGhpc1tlXT8tMSooMjU1LXRoaXNbZV0rMSk6dGhpc1tlXX0sbC5wcm90b3R5cGUucmVhZEludDE2TEU9ZnVuY3Rpb24oZSx0KXt0fHxPKGUsMix0aGlzLmxlbmd0aCk7dmFyIHI9dGhpc1tlXXx0aGlzW2UrMV08PDg7cmV0dXJuIDMyNzY4JnI/NDI5NDkwMTc2MHxyOnJ9LGwucHJvdG90eXBlLnJlYWRJbnQxNkJFPWZ1bmN0aW9uKGUsdCl7dHx8TyhlLDIsdGhpcy5sZW5ndGgpO3ZhciByPXRoaXNbZSsxXXx0aGlzW2VdPDw4O3JldHVybiAzMjc2OCZyPzQyOTQ5MDE3NjB8cjpyfSxsLnByb3RvdHlwZS5yZWFkSW50MzJMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXXx0aGlzW2UrMV08PDh8dGhpc1tlKzJdPDwxNnx0aGlzW2UrM108PDI0fSxsLnByb3RvdHlwZS5yZWFkSW50MzJCRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksdGhpc1tlXTw8MjR8dGhpc1tlKzFdPDwxNnx0aGlzW2UrMl08PDh8dGhpc1tlKzNdfSxsLnByb3RvdHlwZS5yZWFkRmxvYXRMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsNCx0aGlzLmxlbmd0aCksYS5yZWFkKHRoaXMsZSwhMCwyMyw0KX0sbC5wcm90b3R5cGUucmVhZEZsb2F0QkU9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdHx8TyhlLDQsdGhpcy5sZW5ndGgpLGEucmVhZCh0aGlzLGUsITEsMjMsNCl9LGwucHJvdG90eXBlLnJlYWREb3VibGVMRT1mdW5jdGlvbihlLHQpe3JldHVybiB0fHxPKGUsOCx0aGlzLmxlbmd0aCksYS5yZWFkKHRoaXMsZSwhMCw1Miw4KX0sbC5wcm90b3R5cGUucmVhZERvdWJsZUJFPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIHR8fE8oZSw4LHRoaXMubGVuZ3RoKSxhLnJlYWQodGhpcyxlLCExLDUyLDgpfSxsLnByb3RvdHlwZS53cml0ZVVJbnRMRT1mdW5jdGlvbihlLHQscixuKXsoZT0rZSx0fD0wLHJ8PTAsbil8fEkodGhpcyxlLHQscixNYXRoLnBvdygyLDgqciktMSwwKTt2YXIgYT0xLGk9MDtmb3IodGhpc1t0XT0yNTUmZTsrK2k8ciYmKGEqPTI1Nik7KXRoaXNbdCtpXT1lL2EmMjU1O3JldHVybiB0K3J9LGwucHJvdG90eXBlLndyaXRlVUludEJFPWZ1bmN0aW9uKGUsdCxyLG4peyhlPStlLHR8PTAscnw9MCxuKXx8SSh0aGlzLGUsdCxyLE1hdGgucG93KDIsOCpyKS0xLDApO3ZhciBhPXItMSxpPTE7Zm9yKHRoaXNbdCthXT0yNTUmZTstLWE+PTAmJihpKj0yNTYpOyl0aGlzW3QrYV09ZS9pJjI1NTtyZXR1cm4gdCtyfSxsLnByb3RvdHlwZS53cml0ZVVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMSwyNTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSx0aGlzW3RdPTI1NSZlLHQrMX0sbC5wcm90b3R5cGUud3JpdGVVSW50MTZMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDIsNjU1MzUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Rih0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZVVJbnQxNkJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMiw2NTUzNSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjgsdGhpc1t0KzFdPTI1NSZlKTpGKHRoaXMsZSx0LCExKSx0KzJ9LGwucHJvdG90eXBlLndyaXRlVUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCw0LDQyOTQ5NjcyOTUsMCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3QrM109ZT4+PjI0LHRoaXNbdCsyXT1lPj4+MTYsdGhpc1t0KzFdPWU+Pj44LHRoaXNbdF09MjU1JmUpOkwodGhpcyxlLHQsITApLHQrNH0sbC5wcm90b3R5cGUud3JpdGVVSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDQsNDI5NDk2NzI5NSwwKSxsLlRZUEVEX0FSUkFZX1NVUFBPUlQ/KHRoaXNbdF09ZT4+PjI0LHRoaXNbdCsxXT1lPj4+MTYsdGhpc1t0KzJdPWU+Pj44LHRoaXNbdCszXT0yNTUmZSk6TCh0aGlzLGUsdCwhMSksdCs0fSxsLnByb3RvdHlwZS53cml0ZUludExFPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKGU9K2UsdHw9MCwhbil7dmFyIGE9TWF0aC5wb3coMiw4KnItMSk7SSh0aGlzLGUsdCxyLGEtMSwtYSl9dmFyIGk9MCxvPTEscz0wO2Zvcih0aGlzW3RdPTI1NSZlOysraTxyJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpLTFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sbC5wcm90b3R5cGUud3JpdGVJbnRCRT1mdW5jdGlvbihlLHQscixuKXtpZihlPStlLHR8PTAsIW4pe3ZhciBhPU1hdGgucG93KDIsOCpyLTEpO0kodGhpcyxlLHQscixhLTEsLWEpfXZhciBpPXItMSxvPTEscz0wO2Zvcih0aGlzW3QraV09MjU1JmU7LS1pPj0wJiYobyo9MjU2KTspZTwwJiYwPT09cyYmMCE9PXRoaXNbdCtpKzFdJiYocz0xKSx0aGlzW3QraV09KGUvbz4+MCktcyYyNTU7cmV0dXJuIHQrcn0sbC5wcm90b3R5cGUud3JpdGVJbnQ4PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gZT0rZSx0fD0wLHJ8fEkodGhpcyxlLHQsMSwxMjcsLTEyOCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUfHwoZT1NYXRoLmZsb29yKGUpKSxlPDAmJihlPTI1NStlKzEpLHRoaXNbdF09MjU1JmUsdCsxfSxsLnByb3RvdHlwZS53cml0ZUludDE2TEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPTI1NSZlLHRoaXNbdCsxXT1lPj4+OCk6Rih0aGlzLGUsdCwhMCksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDE2QkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCwyLDMyNzY3LC0zMjc2OCksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj44LHRoaXNbdCsxXT0yNTUmZSk6Rih0aGlzLGUsdCwhMSksdCsyfSxsLnByb3RvdHlwZS53cml0ZUludDMyTEU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlPStlLHR8PTAscnx8SSh0aGlzLGUsdCw0LDIxNDc0ODM2NDcsLTIxNDc0ODM2NDgpLGwuVFlQRURfQVJSQVlfU1VQUE9SVD8odGhpc1t0XT0yNTUmZSx0aGlzW3QrMV09ZT4+PjgsdGhpc1t0KzJdPWU+Pj4xNix0aGlzW3QrM109ZT4+PjI0KTpMKHRoaXMsZSx0LCEwKSx0KzR9LGwucHJvdG90eXBlLndyaXRlSW50MzJCRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9K2UsdHw9MCxyfHxJKHRoaXMsZSx0LDQsMjE0NzQ4MzY0NywtMjE0NzQ4MzY0OCksZTwwJiYoZT00Mjk0OTY3Mjk1K2UrMSksbC5UWVBFRF9BUlJBWV9TVVBQT1JUPyh0aGlzW3RdPWU+Pj4yNCx0aGlzW3QrMV09ZT4+PjE2LHRoaXNbdCsyXT1lPj4+OCx0aGlzW3QrM109MjU1JmUpOkwodGhpcyxlLHQsITEpLHQrNH0sbC5wcm90b3R5cGUud3JpdGVGbG9hdExFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTih0aGlzLGUsdCwhMCxyKX0sbC5wcm90b3R5cGUud3JpdGVGbG9hdEJFPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gTih0aGlzLGUsdCwhMSxyKX0sbC5wcm90b3R5cGUud3JpdGVEb3VibGVMRT1mdW5jdGlvbihlLHQscil7cmV0dXJuIE0odGhpcyxlLHQsITAscil9LGwucHJvdG90eXBlLndyaXRlRG91YmxlQkU9ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBNKHRoaXMsZSx0LCExLHIpfSxsLnByb3RvdHlwZS5jb3B5PWZ1bmN0aW9uKGUsdCxyLG4pe2lmKHJ8fChyPTApLG58fDA9PT1ufHwobj10aGlzLmxlbmd0aCksdD49ZS5sZW5ndGgmJih0PWUubGVuZ3RoKSx0fHwodD0wKSxuPjAmJm48ciYmKG49ciksbj09PXIpcmV0dXJuIDA7aWYoMD09PWUubGVuZ3RofHwwPT09dGhpcy5sZW5ndGgpcmV0dXJuIDA7aWYodDwwKXRocm93IG5ldyBSYW5nZUVycm9yKCJ0YXJnZXRTdGFydCBvdXQgb2YgYm91bmRzIik7aWYocjwwfHxyPj10aGlzLmxlbmd0aCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlU3RhcnQgb3V0IG9mIGJvdW5kcyIpO2lmKG48MCl0aHJvdyBuZXcgUmFuZ2VFcnJvcigic291cmNlRW5kIG91dCBvZiBib3VuZHMiKTtuPnRoaXMubGVuZ3RoJiYobj10aGlzLmxlbmd0aCksZS5sZW5ndGgtdDxuLXImJihuPWUubGVuZ3RoLXQrcik7dmFyIGEsaT1uLXI7aWYodGhpcz09PWUmJnI8dCYmdDxuKWZvcihhPWktMTthPj0wOy0tYSllW2ErdF09dGhpc1thK3JdO2Vsc2UgaWYoaTwxZTN8fCFsLlRZUEVEX0FSUkFZX1NVUFBPUlQpZm9yKGE9MDthPGk7KythKWVbYSt0XT10aGlzW2Ercl07ZWxzZSBVaW50OEFycmF5LnByb3RvdHlwZS5zZXQuY2FsbChlLHRoaXMuc3ViYXJyYXkocixyK2kpLHQpO3JldHVybiBpfSxsLnByb3RvdHlwZS5maWxsPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCJzdHJpbmciPT10eXBlb2YgZSl7aWYoInN0cmluZyI9PXR5cGVvZiB0PyhuPXQsdD0wLHI9dGhpcy5sZW5ndGgpOiJzdHJpbmciPT10eXBlb2YgciYmKG49cixyPXRoaXMubGVuZ3RoKSwxPT09ZS5sZW5ndGgpe3ZhciBhPWUuY2hhckNvZGVBdCgwKTthPDI1NiYmKGU9YSl9aWYodm9pZCAwIT09biYmInN0cmluZyIhPXR5cGVvZiBuKXRocm93IG5ldyBUeXBlRXJyb3IoImVuY29kaW5nIG11c3QgYmUgYSBzdHJpbmciKTtpZigic3RyaW5nIj09dHlwZW9mIG4mJiFsLmlzRW5jb2RpbmcobikpdGhyb3cgbmV3IFR5cGVFcnJvcigiVW5rbm93biBlbmNvZGluZzogIituKX1lbHNlIm51bWJlciI9PXR5cGVvZiBlJiYoZSY9MjU1KTtpZih0PDB8fHRoaXMubGVuZ3RoPHR8fHRoaXMubGVuZ3RoPHIpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIk91dCBvZiByYW5nZSBpbmRleCIpO2lmKHI8PXQpcmV0dXJuIHRoaXM7dmFyIGk7aWYodD4+Pj0wLHI9dm9pZCAwPT09cj90aGlzLmxlbmd0aDpyPj4+MCxlfHwoZT0wKSwibnVtYmVyIj09dHlwZW9mIGUpZm9yKGk9dDtpPHI7KytpKXRoaXNbaV09ZTtlbHNle3ZhciBvPWwuaXNCdWZmZXIoZSk/ZTpVKG5ldyBsKGUsbikudG9TdHJpbmcoKSkscz1vLmxlbmd0aDtmb3IoaT0wO2k8ci10OysraSl0aGlzW2krdF09b1tpJXNdfXJldHVybiB0aGlzfTt2YXIgaj0vW14rXC8wLTlBLVphLXotX10vZztmdW5jdGlvbiBCKGUpe3JldHVybiBlPDE2PyIwIitlLnRvU3RyaW5nKDE2KTplLnRvU3RyaW5nKDE2KX1mdW5jdGlvbiBVKGUsdCl7dmFyIHI7dD10fHwxLzA7Zm9yKHZhciBuPWUubGVuZ3RoLGE9bnVsbCxpPVtdLG89MDtvPG47KytvKXtpZigocj1lLmNoYXJDb2RlQXQobykpPjU1Mjk1JiZyPDU3MzQ0KXtpZighYSl7aWYocj41NjMxOSl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpO2NvbnRpbnVlfWlmKG8rMT09PW4peyh0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtjb250aW51ZX1hPXI7Y29udGludWV9aWYocjw1NjMyMCl7KHQtPTMpPi0xJiZpLnB1c2goMjM5LDE5MSwxODkpLGE9cjtjb250aW51ZX1yPTY1NTM2KyhhLTU1Mjk2PDwxMHxyLTU2MzIwKX1lbHNlIGEmJih0LT0zKT4tMSYmaS5wdXNoKDIzOSwxOTEsMTg5KTtpZihhPW51bGwscjwxMjgpe2lmKCh0LT0xKTwwKWJyZWFrO2kucHVzaChyKX1lbHNlIGlmKHI8MjA0OCl7aWYoKHQtPTIpPDApYnJlYWs7aS5wdXNoKHI+PjZ8MTkyLDYzJnJ8MTI4KX1lbHNlIGlmKHI8NjU1MzYpe2lmKCh0LT0zKTwwKWJyZWFrO2kucHVzaChyPj4xMnwyMjQscj4+NiY2M3wxMjgsNjMmcnwxMjgpfWVsc2V7aWYoIShyPDExMTQxMTIpKXRocm93IG5ldyBFcnJvcigiSW52YWxpZCBjb2RlIHBvaW50Iik7aWYoKHQtPTQpPDApYnJlYWs7aS5wdXNoKHI+PjE4fDI0MCxyPj4xMiY2M3wxMjgscj4+NiY2M3wxMjgsNjMmcnwxMjgpfX1yZXR1cm4gaX1mdW5jdGlvbiBxKGUpe3JldHVybiBuLnRvQnl0ZUFycmF5KGZ1bmN0aW9uKGUpe2lmKChlPWZ1bmN0aW9uKGUpe3JldHVybiBlLnRyaW0/ZS50cmltKCk6ZS5yZXBsYWNlKC9eXHMrfFxzKyQvZywiIil9KGUpLnJlcGxhY2UoaiwiIikpLmxlbmd0aDwyKXJldHVybiIiO2Zvcig7ZS5sZW5ndGglNCE9MDspZSs9Ij0iO3JldHVybiBlfShlKSl9ZnVuY3Rpb24geihlLHQscixuKXtmb3IodmFyIGE9MDthPG4mJiEoYStyPj10Lmxlbmd0aHx8YT49ZS5sZW5ndGgpOysrYSl0W2Ercl09ZVthXTtyZXR1cm4gYX19KS5jYWxsKHRoaXMscigxOCkpfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig1Nik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7aWYobnVsbD09ZSlyZXR1cm57fTt2YXIgcixhLGk9bihlLHQpO2lmKE9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMpe3ZhciBvPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHMoZSk7Zm9yKGE9MDthPG8ubGVuZ3RoO2ErKylyPW9bYV0sdC5pbmRleE9mKHIpPj0wfHxPYmplY3QucHJvdG90eXBlLnByb3BlcnR5SXNFbnVtZXJhYmxlLmNhbGwoZSxyKSYmKGlbcl09ZVtyXSl9cmV0dXJuIGl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIGE9bihyKDApKSxpPW4ocig0KSksbz1mdW5jdGlvbihlKXt2YXIgdD1lLmNoaWxkcmVuLHI9ZS50eXBlO3JldHVybiBhLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX21lc3NhZ2UgcmVhY3QtcGRmX19tZXNzYWdlLS0iLmNvbmNhdChyKX0sdCl9O28ucHJvcFR5cGVzPXtjaGlsZHJlbjppLmRlZmF1bHQubm9kZSx0eXBlOmkuZGVmYXVsdC5vbmVPZihbImVycm9yIiwibG9hZGluZyIsIm5vLWRhdGEiXSkuaXNSZXF1aXJlZH07dmFyIHM9bzt0LmRlZmF1bHQ9c30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj1yKDYwKS5QREZMaW5rU2VydmljZTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj0oMCxyKDApLmNyZWF0ZUNvbnRleHQpKG51bGwpO3QuZGVmYXVsdD1ufSxmdW5jdGlvbihlLHQscil7dmFyIG49cig3MyksYT1yKDc0KSxpPXIoNzUpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3JldHVybiBuKGUpfHxhKGUsdCl8fGkoKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uIGUoKXtpZigidW5kZWZpbmVkIiE9dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXyYmImZ1bmN0aW9uIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXy5jaGVja0RDRSl7MDt0cnl7X19SRUFDVF9ERVZUT09MU19HTE9CQUxfSE9PS19fLmNoZWNrRENFKGUpfWNhdGNoKGUpe2NvbnNvbGUuZXJyb3IoZSl9fX0oKSxlLmV4cG9ydHM9cigzOCl9LGZ1bmN0aW9uKGUsdCxyKXtlLmV4cG9ydHM9cig4OSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMAogKiByZWFjdC5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIG49cigyOCksYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZTeW1ib2wuZm9yLGk9YT9TeW1ib2wuZm9yKCJyZWFjdC5lbGVtZW50Iik6NjAxMDMsbz1hP1N5bWJvbC5mb3IoInJlYWN0LnBvcnRhbCIpOjYwMTA2LHM9YT9TeW1ib2wuZm9yKCJyZWFjdC5mcmFnbWVudCIpOjYwMTA3LGw9YT9TeW1ib2wuZm9yKCJyZWFjdC5zdHJpY3RfbW9kZSIpOjYwMTA4LGM9YT9TeW1ib2wuZm9yKCJyZWFjdC5wcm9maWxlciIpOjYwMTE0LHU9YT9TeW1ib2wuZm9yKCJyZWFjdC5wcm92aWRlciIpOjYwMTA5LGY9YT9TeW1ib2wuZm9yKCJyZWFjdC5jb250ZXh0Iik6NjAxMTAsaD1hP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsZD1hP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTM7YSYmU3ltYm9sLmZvcigicmVhY3Quc3VzcGVuc2VfbGlzdCIpO3ZhciBwPWE/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LG09YT9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTY7YSYmU3ltYm9sLmZvcigicmVhY3QuZnVuZGFtZW50YWwiKSxhJiZTeW1ib2wuZm9yKCJyZWFjdC5yZXNwb25kZXIiKSxhJiZTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO3ZhciBnPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD0iaHR0cHM6Ly9yZWFjdGpzLm9yZy9kb2NzL2Vycm9yLWRlY29kZXIuaHRtbD9pbnZhcmlhbnQ9IitlLHI9MTtyPGFyZ3VtZW50cy5sZW5ndGg7cisrKXQrPSImYXJnc1tdPSIrZW5jb2RlVVJJQ29tcG9uZW50KGFyZ3VtZW50c1tyXSk7cmV0dXJuIk1pbmlmaWVkIFJlYWN0IGVycm9yICMiK2UrIjsgdmlzaXQgIit0KyIgZm9yIHRoZSBmdWxsIG1lc3NhZ2Ugb3IgdXNlIHRoZSBub24tbWluaWZpZWQgZGV2IGVudmlyb25tZW50IGZvciBmdWxsIGVycm9ycyBhbmQgYWRkaXRpb25hbCBoZWxwZnVsIHdhcm5pbmdzLiJ9dmFyIHk9e2lzTW91bnRlZDpmdW5jdGlvbigpe3JldHVybiExfSxlbnF1ZXVlRm9yY2VVcGRhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVSZXBsYWNlU3RhdGU6ZnVuY3Rpb24oKXt9LGVucXVldWVTZXRTdGF0ZTpmdW5jdGlvbigpe319LGI9e307ZnVuY3Rpb24gdyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1yfHx5fWZ1bmN0aW9uIGsoKXt9ZnVuY3Rpb24gUyhlLHQscil7dGhpcy5wcm9wcz1lLHRoaXMuY29udGV4dD10LHRoaXMucmVmcz1iLHRoaXMudXBkYXRlcj1yfHx5fXcucHJvdG90eXBlLmlzUmVhY3RDb21wb25lbnQ9e30sdy5wcm90b3R5cGUuc2V0U3RhdGU9ZnVuY3Rpb24oZSx0KXtpZigib2JqZWN0IiE9dHlwZW9mIGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBlJiZudWxsIT1lKXRocm93IEVycm9yKHYoODUpKTt0aGlzLnVwZGF0ZXIuZW5xdWV1ZVNldFN0YXRlKHRoaXMsZSx0LCJzZXRTdGF0ZSIpfSx3LnByb3RvdHlwZS5mb3JjZVVwZGF0ZT1mdW5jdGlvbihlKXt0aGlzLnVwZGF0ZXIuZW5xdWV1ZUZvcmNlVXBkYXRlKHRoaXMsZSwiZm9yY2VVcGRhdGUiKX0say5wcm90b3R5cGU9dy5wcm90b3R5cGU7dmFyIF89Uy5wcm90b3R5cGU9bmV3IGs7Xy5jb25zdHJ1Y3Rvcj1TLG4oXyx3LnByb3RvdHlwZSksXy5pc1B1cmVSZWFjdENvbXBvbmVudD0hMDt2YXIgeD17Y3VycmVudDpudWxsfSxBPXtjdXJyZW50Om51bGx9LEM9T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eSxQPXtrZXk6ITAscmVmOiEwLF9fc2VsZjohMCxfX3NvdXJjZTohMH07ZnVuY3Rpb24gRShlLHQscil7dmFyIG4sYT17fSxvPW51bGwscz1udWxsO2lmKG51bGwhPXQpZm9yKG4gaW4gdm9pZCAwIT09dC5yZWYmJihzPXQucmVmKSx2b2lkIDAhPT10LmtleSYmKG89IiIrdC5rZXkpLHQpQy5jYWxsKHQsbikmJiFQLmhhc093blByb3BlcnR5KG4pJiYoYVtuXT10W25dKTt2YXIgbD1hcmd1bWVudHMubGVuZ3RoLTI7aWYoMT09PWwpYS5jaGlsZHJlbj1yO2Vsc2UgaWYoMTxsKXtmb3IodmFyIGM9QXJyYXkobCksdT0wO3U8bDt1KyspY1t1XT1hcmd1bWVudHNbdSsyXTthLmNoaWxkcmVuPWN9aWYoZSYmZS5kZWZhdWx0UHJvcHMpZm9yKG4gaW4gbD1lLmRlZmF1bHRQcm9wcyl2b2lkIDA9PT1hW25dJiYoYVtuXT1sW25dKTtyZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUsa2V5Om8scmVmOnMscHJvcHM6YSxfb3duZXI6QS5jdXJyZW50fX1mdW5jdGlvbiBUKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YgZSYmbnVsbCE9PWUmJmUuJCR0eXBlb2Y9PT1pfXZhciBSPS9cLysvZyxPPVtdO2Z1bmN0aW9uIEkoZSx0LHIsbil7aWYoTy5sZW5ndGgpe3ZhciBhPU8ucG9wKCk7cmV0dXJuIGEucmVzdWx0PWUsYS5rZXlQcmVmaXg9dCxhLmZ1bmM9cixhLmNvbnRleHQ9bixhLmNvdW50PTAsYX1yZXR1cm57cmVzdWx0OmUsa2V5UHJlZml4OnQsZnVuYzpyLGNvbnRleHQ6bixjb3VudDowfX1mdW5jdGlvbiBGKGUpe2UucmVzdWx0PW51bGwsZS5rZXlQcmVmaXg9bnVsbCxlLmZ1bmM9bnVsbCxlLmNvbnRleHQ9bnVsbCxlLmNvdW50PTAsMTA+Ty5sZW5ndGgmJk8ucHVzaChlKX1mdW5jdGlvbiBMKGUsdCxyKXtyZXR1cm4gbnVsbD09ZT8wOmZ1bmN0aW9uIGUodCxyLG4sYSl7dmFyIHM9dHlwZW9mIHQ7InVuZGVmaW5lZCIhPT1zJiYiYm9vbGVhbiIhPT1zfHwodD1udWxsKTt2YXIgbD0hMTtpZihudWxsPT09dClsPSEwO2Vsc2Ugc3dpdGNoKHMpe2Nhc2Uic3RyaW5nIjpjYXNlIm51bWJlciI6bD0hMDticmVhaztjYXNlIm9iamVjdCI6c3dpdGNoKHQuJCR0eXBlb2Ype2Nhc2UgaTpjYXNlIG86bD0hMH19aWYobClyZXR1cm4gbihhLHQsIiI9PT1yPyIuIitEKHQsMCk6ciksMTtpZihsPTAscj0iIj09PXI/Ii4iOnIrIjoiLEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBjPTA7Yzx0Lmxlbmd0aDtjKyspe3ZhciB1PXIrRChzPXRbY10sYyk7bCs9ZShzLHUsbixhKX1lbHNlIGlmKG51bGw9PT10fHwib2JqZWN0IiE9dHlwZW9mIHQ/dT1udWxsOnU9ImZ1bmN0aW9uIj09dHlwZW9mKHU9ZyYmdFtnXXx8dFsiQEBpdGVyYXRvciJdKT91Om51bGwsImZ1bmN0aW9uIj09dHlwZW9mIHUpZm9yKHQ9dS5jYWxsKHQpLGM9MDshKHM9dC5uZXh0KCkpLmRvbmU7KWwrPWUocz1zLnZhbHVlLHU9citEKHMsYysrKSxuLGEpO2Vsc2UgaWYoIm9iamVjdCI9PT1zKXRocm93IG49IiIrdCxFcnJvcih2KDMxLCJbb2JqZWN0IE9iamVjdF0iPT09bj8ib2JqZWN0IHdpdGgga2V5cyB7IitPYmplY3Qua2V5cyh0KS5qb2luKCIsICIpKyJ9IjpuLCIiKSk7cmV0dXJuIGx9KGUsIiIsdCxyKX1mdW5jdGlvbiBEKGUsdCl7cmV0dXJuIm9iamVjdCI9PXR5cGVvZiBlJiZudWxsIT09ZSYmbnVsbCE9ZS5rZXk/ZnVuY3Rpb24oZSl7dmFyIHQ9eyI9IjoiPTAiLCI6IjoiPTIifTtyZXR1cm4iJCIrKCIiK2UpLnJlcGxhY2UoL1s9Ol0vZywoZnVuY3Rpb24oZSl7cmV0dXJuIHRbZV19KSl9KGUua2V5KTp0LnRvU3RyaW5nKDM2KX1mdW5jdGlvbiBOKGUsdCl7ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKX1mdW5jdGlvbiBNKGUsdCxyKXt2YXIgbj1lLnJlc3VsdCxhPWUua2V5UHJlZml4O2U9ZS5mdW5jLmNhbGwoZS5jb250ZXh0LHQsZS5jb3VudCsrKSxBcnJheS5pc0FycmF5KGUpP2ooZSxuLHIsKGZ1bmN0aW9uKGUpe3JldHVybiBlfSkpOm51bGwhPWUmJihUKGUpJiYoZT1mdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjppLHR5cGU6ZS50eXBlLGtleTp0LHJlZjplLnJlZixwcm9wczplLnByb3BzLF9vd25lcjplLl9vd25lcn19KGUsYSsoIWUua2V5fHx0JiZ0LmtleT09PWUua2V5PyIiOigiIitlLmtleSkucmVwbGFjZShSLCIkJi8iKSsiLyIpK3IpKSxuLnB1c2goZSkpfWZ1bmN0aW9uIGooZSx0LHIsbixhKXt2YXIgaT0iIjtudWxsIT1yJiYoaT0oIiIrcikucmVwbGFjZShSLCIkJi8iKSsiLyIpLEwoZSxNLHQ9SSh0LGksbixhKSksRih0KX1mdW5jdGlvbiBCKCl7dmFyIGU9eC5jdXJyZW50O2lmKG51bGw9PT1lKXRocm93IEVycm9yKHYoMzIxKSk7cmV0dXJuIGV9dmFyIFU9e0NoaWxkcmVuOnttYXA6ZnVuY3Rpb24oZSx0LHIpe2lmKG51bGw9PWUpcmV0dXJuIGU7dmFyIG49W107cmV0dXJuIGooZSxuLG51bGwsdCxyKSxufSxmb3JFYWNoOmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXJldHVybiBlO0woZSxOLHQ9SShudWxsLG51bGwsdCxyKSksRih0KX0sY291bnQ6ZnVuY3Rpb24oZSl7cmV0dXJuIEwoZSwoZnVuY3Rpb24oKXtyZXR1cm4gbnVsbH0pLG51bGwpfSx0b0FycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PVtdO3JldHVybiBqKGUsdCxudWxsLChmdW5jdGlvbihlKXtyZXR1cm4gZX0pKSx0fSxvbmx5OmZ1bmN0aW9uKGUpe2lmKCFUKGUpKXRocm93IEVycm9yKHYoMTQzKSk7cmV0dXJuIGV9fSxjcmVhdGVSZWY6ZnVuY3Rpb24oKXtyZXR1cm57Y3VycmVudDpudWxsfX0sQ29tcG9uZW50OncsUHVyZUNvbXBvbmVudDpTLGNyZWF0ZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dCYmKHQ9bnVsbCksKGU9eyQkdHlwZW9mOmYsX2NhbGN1bGF0ZUNoYW5nZWRCaXRzOnQsX2N1cnJlbnRWYWx1ZTplLF9jdXJyZW50VmFsdWUyOmUsX3RocmVhZENvdW50OjAsUHJvdmlkZXI6bnVsbCxDb25zdW1lcjpudWxsfSkuUHJvdmlkZXI9eyQkdHlwZW9mOnUsX2NvbnRleHQ6ZX0sZS5Db25zdW1lcj1lfSxmb3J3YXJkUmVmOmZ1bmN0aW9uKGUpe3JldHVybnskJHR5cGVvZjpoLHJlbmRlcjplfX0sbGF6eTpmdW5jdGlvbihlKXtyZXR1cm57JCR0eXBlb2Y6bSxfY3RvcjplLF9zdGF0dXM6LTEsX3Jlc3VsdDpudWxsfX0sbWVtbzpmdW5jdGlvbihlLHQpe3JldHVybnskJHR5cGVvZjpwLHR5cGU6ZSxjb21wYXJlOnZvaWQgMD09PXQ/bnVsbDp0fX0sdXNlQ2FsbGJhY2s6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQigpLnVzZUNhbGxiYWNrKGUsdCl9LHVzZUNvbnRleHQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gQigpLnVzZUNvbnRleHQoZSx0KX0sdXNlRWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIoKS51c2VFZmZlY3QoZSx0KX0sdXNlSW1wZXJhdGl2ZUhhbmRsZTpmdW5jdGlvbihlLHQscil7cmV0dXJuIEIoKS51c2VJbXBlcmF0aXZlSGFuZGxlKGUsdCxyKX0sdXNlRGVidWdWYWx1ZTpmdW5jdGlvbigpe30sdXNlTGF5b3V0RWZmZWN0OmZ1bmN0aW9uKGUsdCl7cmV0dXJuIEIoKS51c2VMYXlvdXRFZmZlY3QoZSx0KX0sdXNlTWVtbzpmdW5jdGlvbihlLHQpe3JldHVybiBCKCkudXNlTWVtbyhlLHQpfSx1c2VSZWR1Y2VyOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gQigpLnVzZVJlZHVjZXIoZSx0LHIpfSx1c2VSZWY6ZnVuY3Rpb24oZSl7cmV0dXJuIEIoKS51c2VSZWYoZSl9LHVzZVN0YXRlOmZ1bmN0aW9uKGUpe3JldHVybiBCKCkudXNlU3RhdGUoZSl9LEZyYWdtZW50OnMsUHJvZmlsZXI6YyxTdHJpY3RNb2RlOmwsU3VzcGVuc2U6ZCxjcmVhdGVFbGVtZW50OkUsY2xvbmVFbGVtZW50OmZ1bmN0aW9uKGUsdCxyKXtpZihudWxsPT1lKXRocm93IEVycm9yKHYoMjY3LGUpKTt2YXIgYT1uKHt9LGUucHJvcHMpLG89ZS5rZXkscz1lLnJlZixsPWUuX293bmVyO2lmKG51bGwhPXQpe2lmKHZvaWQgMCE9PXQucmVmJiYocz10LnJlZixsPUEuY3VycmVudCksdm9pZCAwIT09dC5rZXkmJihvPSIiK3Qua2V5KSxlLnR5cGUmJmUudHlwZS5kZWZhdWx0UHJvcHMpdmFyIGM9ZS50eXBlLmRlZmF1bHRQcm9wcztmb3IodSBpbiB0KUMuY2FsbCh0LHUpJiYhUC5oYXNPd25Qcm9wZXJ0eSh1KSYmKGFbdV09dm9pZCAwPT09dFt1XSYmdm9pZCAwIT09Yz9jW3VdOnRbdV0pfXZhciB1PWFyZ3VtZW50cy5sZW5ndGgtMjtpZigxPT09dSlhLmNoaWxkcmVuPXI7ZWxzZSBpZigxPHUpe2M9QXJyYXkodSk7Zm9yKHZhciBmPTA7Zjx1O2YrKyljW2ZdPWFyZ3VtZW50c1tmKzJdO2EuY2hpbGRyZW49Y31yZXR1cm57JCR0eXBlb2Y6aSx0eXBlOmUudHlwZSxrZXk6byxyZWY6cyxwcm9wczphLF9vd25lcjpsfX0sY3JlYXRlRmFjdG9yeTpmdW5jdGlvbihlKXt2YXIgdD1FLmJpbmQobnVsbCxlKTtyZXR1cm4gdC50eXBlPWUsdH0saXNWYWxpZEVsZW1lbnQ6VCx2ZXJzaW9uOiIxNi4xMi4wIixfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7UmVhY3RDdXJyZW50RGlzcGF0Y2hlcjp4LFJlYWN0Q3VycmVudEJhdGNoQ29uZmlnOntzdXNwZW5zZTpudWxsfSxSZWFjdEN1cnJlbnRPd25lcjpBLElzU29tZVJlbmRlcmVyQWN0aW5nOntjdXJyZW50OiExfSxhc3NpZ246bn19LHE9e2RlZmF1bHQ6VX0sej1xJiZVfHxxO2UuZXhwb3J0cz16LmRlZmF1bHR8fHp9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MTYuMTIuMAogKiByZWFjdC1kb20ucHJvZHVjdGlvbi5taW4uanMKICoKICogQ29weXJpZ2h0IChjKSBGYWNlYm9vaywgSW5jLiBhbmQgaXRzIGFmZmlsaWF0ZXMuCiAqCiAqIFRoaXMgc291cmNlIGNvZGUgaXMgbGljZW5zZWQgdW5kZXIgdGhlIE1JVCBsaWNlbnNlIGZvdW5kIGluIHRoZQogKiBMSUNFTlNFIGZpbGUgaW4gdGhlIHJvb3QgZGlyZWN0b3J5IG9mIHRoaXMgc291cmNlIHRyZWUuCiAqL3ZhciBuPXIoMCksYT1yKDI4KSxpPXIoMzkpO2Z1bmN0aW9uIG8oZSl7Zm9yKHZhciB0PSJodHRwczovL3JlYWN0anMub3JnL2RvY3MvZXJyb3ItZGVjb2Rlci5odG1sP2ludmFyaWFudD0iK2Uscj0xO3I8YXJndW1lbnRzLmxlbmd0aDtyKyspdCs9IiZhcmdzW109IitlbmNvZGVVUklDb21wb25lbnQoYXJndW1lbnRzW3JdKTtyZXR1cm4iTWluaWZpZWQgUmVhY3QgZXJyb3IgIyIrZSsiOyB2aXNpdCAiK3QrIiBmb3IgdGhlIGZ1bGwgbWVzc2FnZSBvciB1c2UgdGhlIG5vbi1taW5pZmllZCBkZXYgZW52aXJvbm1lbnQgZm9yIGZ1bGwgZXJyb3JzIGFuZCBhZGRpdGlvbmFsIGhlbHBmdWwgd2FybmluZ3MuIn1pZighbil0aHJvdyBFcnJvcihvKDIyNykpO3ZhciBzPW51bGwsbD17fTtmdW5jdGlvbiBjKCl7aWYocylmb3IodmFyIGUgaW4gbCl7dmFyIHQ9bFtlXSxyPXMuaW5kZXhPZihlKTtpZighKC0xPHIpKXRocm93IEVycm9yKG8oOTYsZSkpO2lmKCFmW3JdKXtpZighdC5leHRyYWN0RXZlbnRzKXRocm93IEVycm9yKG8oOTcsZSkpO2Zvcih2YXIgbiBpbiBmW3JdPXQscj10LmV2ZW50VHlwZXMpe3ZhciBhPXZvaWQgMCxpPXJbbl0sYz10LGQ9bjtpZihoLmhhc093blByb3BlcnR5KGQpKXRocm93IEVycm9yKG8oOTksZCkpO2hbZF09aTt2YXIgcD1pLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzO2lmKHApe2ZvcihhIGluIHApcC5oYXNPd25Qcm9wZXJ0eShhKSYmdShwW2FdLGMsZCk7YT0hMH1lbHNlIGkucmVnaXN0cmF0aW9uTmFtZT8odShpLnJlZ2lzdHJhdGlvbk5hbWUsYyxkKSxhPSEwKTphPSExO2lmKCFhKXRocm93IEVycm9yKG8oOTgsbixlKSl9fX19ZnVuY3Rpb24gdShlLHQscil7aWYoZFtlXSl0aHJvdyBFcnJvcihvKDEwMCxlKSk7ZFtlXT10LHBbZV09dC5ldmVudFR5cGVzW3JdLmRlcGVuZGVuY2llc312YXIgZj1bXSxoPXt9LGQ9e30scD17fTtmdW5jdGlvbiBtKGUsdCxyLG4sYSxpLG8scyxsKXt2YXIgYz1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMyk7dHJ5e3QuYXBwbHkocixjKX1jYXRjaChlKXt0aGlzLm9uRXJyb3IoZSl9fXZhciBnPSExLHY9bnVsbCx5PSExLGI9bnVsbCx3PXtvbkVycm9yOmZ1bmN0aW9uKGUpe2c9ITAsdj1lfX07ZnVuY3Rpb24gayhlLHQscixuLGEsaSxvLHMsbCl7Zz0hMSx2PW51bGwsbS5hcHBseSh3LGFyZ3VtZW50cyl9dmFyIFM9bnVsbCxfPW51bGwseD1udWxsO2Z1bmN0aW9uIEEoZSx0LHIpe3ZhciBuPWUudHlwZXx8InVua25vd24tZXZlbnQiO2UuY3VycmVudFRhcmdldD14KHIpLGZ1bmN0aW9uKGUsdCxyLG4sYSxpLHMsbCxjKXtpZihrLmFwcGx5KHRoaXMsYXJndW1lbnRzKSxnKXtpZighZyl0aHJvdyBFcnJvcihvKDE5OCkpO3ZhciB1PXY7Zz0hMSx2PW51bGwseXx8KHk9ITAsYj11KX19KG4sdCx2b2lkIDAsZSksZS5jdXJyZW50VGFyZ2V0PW51bGx9ZnVuY3Rpb24gQyhlLHQpe2lmKG51bGw9PXQpdGhyb3cgRXJyb3IobygzMCkpO3JldHVybiBudWxsPT1lP3Q6QXJyYXkuaXNBcnJheShlKT9BcnJheS5pc0FycmF5KHQpPyhlLnB1c2guYXBwbHkoZSx0KSxlKTooZS5wdXNoKHQpLGUpOkFycmF5LmlzQXJyYXkodCk/W2VdLmNvbmNhdCh0KTpbZSx0XX1mdW5jdGlvbiBQKGUsdCxyKXtBcnJheS5pc0FycmF5KGUpP2UuZm9yRWFjaCh0LHIpOmUmJnQuY2FsbChyLGUpfXZhciBFPW51bGw7ZnVuY3Rpb24gVChlKXtpZihlKXt2YXIgdD1lLl9kaXNwYXRjaExpc3RlbmVycyxyPWUuX2Rpc3BhdGNoSW5zdGFuY2VzO2lmKEFycmF5LmlzQXJyYXkodCkpZm9yKHZhciBuPTA7bjx0Lmxlbmd0aCYmIWUuaXNQcm9wYWdhdGlvblN0b3BwZWQoKTtuKyspQShlLHRbbl0scltuXSk7ZWxzZSB0JiZBKGUsdCxyKTtlLl9kaXNwYXRjaExpc3RlbmVycz1udWxsLGUuX2Rpc3BhdGNoSW5zdGFuY2VzPW51bGwsZS5pc1BlcnNpc3RlbnQoKXx8ZS5jb25zdHJ1Y3Rvci5yZWxlYXNlKGUpfX1mdW5jdGlvbiBSKGUpe2lmKG51bGwhPT1lJiYoRT1DKEUsZSkpLGU9RSxFPW51bGwsZSl7aWYoUChlLFQpLEUpdGhyb3cgRXJyb3Iobyg5NSkpO2lmKHkpdGhyb3cgZT1iLHk9ITEsYj1udWxsLGV9fXZhciBPPXtpbmplY3RFdmVudFBsdWdpbk9yZGVyOmZ1bmN0aW9uKGUpe2lmKHMpdGhyb3cgRXJyb3IobygxMDEpKTtzPUFycmF5LnByb3RvdHlwZS5zbGljZS5jYWxsKGUpLGMoKX0saW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ITE7Zm9yKHQgaW4gZSlpZihlLmhhc093blByb3BlcnR5KHQpKXt2YXIgbj1lW3RdO2lmKCFsLmhhc093blByb3BlcnR5KHQpfHxsW3RdIT09bil7aWYobFt0XSl0aHJvdyBFcnJvcihvKDEwMix0KSk7bFt0XT1uLHI9ITB9fXImJmMoKX19O2Z1bmN0aW9uIEkoZSx0KXt2YXIgcj1lLnN0YXRlTm9kZTtpZighcilyZXR1cm4gbnVsbDt2YXIgbj1TKHIpO2lmKCFuKXJldHVybiBudWxsO3I9blt0XTtlOnN3aXRjaCh0KXtjYXNlIm9uQ2xpY2siOmNhc2Uib25DbGlja0NhcHR1cmUiOmNhc2Uib25Eb3VibGVDbGljayI6Y2FzZSJvbkRvdWJsZUNsaWNrQ2FwdHVyZSI6Y2FzZSJvbk1vdXNlRG93biI6Y2FzZSJvbk1vdXNlRG93bkNhcHR1cmUiOmNhc2Uib25Nb3VzZU1vdmUiOmNhc2Uib25Nb3VzZU1vdmVDYXB0dXJlIjpjYXNlIm9uTW91c2VVcCI6Y2FzZSJvbk1vdXNlVXBDYXB0dXJlIjoobj0hbi5kaXNhYmxlZCl8fChuPSEoImJ1dHRvbiI9PT0oZT1lLnR5cGUpfHwiaW5wdXQiPT09ZXx8InNlbGVjdCI9PT1lfHwidGV4dGFyZWEiPT09ZSkpLGU9IW47YnJlYWsgZTtkZWZhdWx0OmU9ITF9aWYoZSlyZXR1cm4gbnVsbDtpZihyJiYiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBFcnJvcihvKDIzMSx0LHR5cGVvZiByKSk7cmV0dXJuIHJ9dmFyIEY9bi5fX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDtGLmhhc093blByb3BlcnR5KCJSZWFjdEN1cnJlbnREaXNwYXRjaGVyIil8fChGLlJlYWN0Q3VycmVudERpc3BhdGNoZXI9e2N1cnJlbnQ6bnVsbH0pLEYuaGFzT3duUHJvcGVydHkoIlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnIil8fChGLlJlYWN0Q3VycmVudEJhdGNoQ29uZmlnPXtzdXNwZW5zZTpudWxsfSk7dmFyIEw9L14oLiopW1xcXC9dLyxEPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5mb3IsTj1EP1N5bWJvbC5mb3IoInJlYWN0LmVsZW1lbnQiKTo2MDEwMyxNPUQ/U3ltYm9sLmZvcigicmVhY3QucG9ydGFsIik6NjAxMDYsaj1EP1N5bWJvbC5mb3IoInJlYWN0LmZyYWdtZW50Iik6NjAxMDcsQj1EP1N5bWJvbC5mb3IoInJlYWN0LnN0cmljdF9tb2RlIik6NjAxMDgsVT1EP1N5bWJvbC5mb3IoInJlYWN0LnByb2ZpbGVyIik6NjAxMTQscT1EP1N5bWJvbC5mb3IoInJlYWN0LnByb3ZpZGVyIik6NjAxMDksej1EP1N5bWJvbC5mb3IoInJlYWN0LmNvbnRleHQiKTo2MDExMCxXPUQ/U3ltYm9sLmZvcigicmVhY3QuY29uY3VycmVudF9tb2RlIik6NjAxMTEsSD1EP1N5bWJvbC5mb3IoInJlYWN0LmZvcndhcmRfcmVmIik6NjAxMTIsRz1EP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlIik6NjAxMTMsVj1EP1N5bWJvbC5mb3IoInJlYWN0LnN1c3BlbnNlX2xpc3QiKTo2MDEyMCxYPUQ/U3ltYm9sLmZvcigicmVhY3QubWVtbyIpOjYwMTE1LFk9RD9TeW1ib2wuZm9yKCJyZWFjdC5sYXp5Iik6NjAxMTY7RCYmU3ltYm9sLmZvcigicmVhY3QuZnVuZGFtZW50YWwiKSxEJiZTeW1ib2wuZm9yKCJyZWFjdC5yZXNwb25kZXIiKSxEJiZTeW1ib2wuZm9yKCJyZWFjdC5zY29wZSIpO3ZhciBLPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJlN5bWJvbC5pdGVyYXRvcjtmdW5jdGlvbiBKKGUpe3JldHVybiBudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiBlP251bGw6ImZ1bmN0aW9uIj09dHlwZW9mKGU9SyYmZVtLXXx8ZVsiQEBpdGVyYXRvciJdKT9lOm51bGx9ZnVuY3Rpb24gUShlKXtpZihudWxsPT1lKXJldHVybiBudWxsO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fG51bGw7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiBlO3N3aXRjaChlKXtjYXNlIGo6cmV0dXJuIkZyYWdtZW50IjtjYXNlIE06cmV0dXJuIlBvcnRhbCI7Y2FzZSBVOnJldHVybiJQcm9maWxlciI7Y2FzZSBCOnJldHVybiJTdHJpY3RNb2RlIjtjYXNlIEc6cmV0dXJuIlN1c3BlbnNlIjtjYXNlIFY6cmV0dXJuIlN1c3BlbnNlTGlzdCJ9aWYoIm9iamVjdCI9PXR5cGVvZiBlKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHo6cmV0dXJuIkNvbnRleHQuQ29uc3VtZXIiO2Nhc2UgcTpyZXR1cm4iQ29udGV4dC5Qcm92aWRlciI7Y2FzZSBIOnZhciB0PWUucmVuZGVyO3JldHVybiB0PXQuZGlzcGxheU5hbWV8fHQubmFtZXx8IiIsZS5kaXNwbGF5TmFtZXx8KCIiIT09dD8iRm9yd2FyZFJlZigiK3QrIikiOiJGb3J3YXJkUmVmIik7Y2FzZSBYOnJldHVybiBRKGUudHlwZSk7Y2FzZSBZOmlmKGU9MT09PWUuX3N0YXR1cz9lLl9yZXN1bHQ6bnVsbClyZXR1cm4gUShlKX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBaKGUpe3ZhciB0PSIiO2Rve2U6c3dpdGNoKGUudGFnKXtjYXNlIDM6Y2FzZSA0OmNhc2UgNjpjYXNlIDc6Y2FzZSAxMDpjYXNlIDk6dmFyIHI9IiI7YnJlYWsgZTtkZWZhdWx0OnZhciBuPWUuX2RlYnVnT3duZXIsYT1lLl9kZWJ1Z1NvdXJjZSxpPVEoZS50eXBlKTtyPW51bGwsbiYmKHI9UShuLnR5cGUpKSxuPWksaT0iIixhP2k9IiAoYXQgIithLmZpbGVOYW1lLnJlcGxhY2UoTCwiIikrIjoiK2EubGluZU51bWJlcisiKSI6ciYmKGk9IiAoY3JlYXRlZCBieSAiK3IrIikiKSxyPSJcbiAgICBpbiAiKyhufHwiVW5rbm93biIpK2l9dCs9cixlPWUucmV0dXJufXdoaWxlKGUpO3JldHVybiB0fXZhciAkPSEoInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fHZvaWQgMD09PXdpbmRvdy5kb2N1bWVudHx8dm9pZCAwPT09d2luZG93LmRvY3VtZW50LmNyZWF0ZUVsZW1lbnQpLGVlPW51bGwsdGU9bnVsbCxyZT1udWxsO2Z1bmN0aW9uIG5lKGUpe2lmKGU9XyhlKSl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGVlKXRocm93IEVycm9yKG8oMjgwKSk7dmFyIHQ9UyhlLnN0YXRlTm9kZSk7ZWUoZS5zdGF0ZU5vZGUsZS50eXBlLHQpfX1mdW5jdGlvbiBhZShlKXt0ZT9yZT9yZS5wdXNoKGUpOnJlPVtlXTp0ZT1lfWZ1bmN0aW9uIGllKCl7aWYodGUpe3ZhciBlPXRlLHQ9cmU7aWYocmU9dGU9bnVsbCxuZShlKSx0KWZvcihlPTA7ZTx0Lmxlbmd0aDtlKyspbmUodFtlXSl9fWZ1bmN0aW9uIG9lKGUsdCl7cmV0dXJuIGUodCl9ZnVuY3Rpb24gc2UoZSx0LHIsbil7cmV0dXJuIGUodCxyLG4pfWZ1bmN0aW9uIGxlKCl7fXZhciBjZT1vZSx1ZT0hMSxmZT0hMTtmdW5jdGlvbiBoZSgpe251bGw9PT10ZSYmbnVsbD09PXJlfHwobGUoKSxpZSgpKX1uZXcgTWFwO3ZhciBkZT0vXls6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXVs6QS1aX2Etelx1MDBDMC1cdTAwRDZcdTAwRDgtXHUwMEY2XHUwMEY4LVx1MDJGRlx1MDM3MC1cdTAzN0RcdTAzN0YtXHUxRkZGXHUyMDBDLVx1MjAwRFx1MjA3MC1cdTIxOEZcdTJDMDAtXHUyRkVGXHUzMDAxLVx1RDdGRlx1RjkwMC1cdUZEQ0ZcdUZERjAtXHVGRkZEXC0uMC05XHUwMEI3XHUwMzAwLVx1MDM2Rlx1MjAzRi1cdTIwNDBdKiQvLHBlPU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHksbWU9e30sZ2U9e307ZnVuY3Rpb24gdmUoZSx0LHIsbixhLGkpe3RoaXMuYWNjZXB0c0Jvb2xlYW5zPTI9PT10fHwzPT09dHx8ND09PXQsdGhpcy5hdHRyaWJ1dGVOYW1lPW4sdGhpcy5hdHRyaWJ1dGVOYW1lc3BhY2U9YSx0aGlzLm11c3RVc2VQcm9wZXJ0eT1yLHRoaXMucHJvcGVydHlOYW1lPWUsdGhpcy50eXBlPXQsdGhpcy5zYW5pdGl6ZVVSTD1pfXZhciB5ZT17fTsiY2hpbGRyZW4gZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwgZGVmYXVsdFZhbHVlIGRlZmF1bHRDaGVja2VkIGlubmVySFRNTCBzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmcgc3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIHN0eWxlIi5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDAsITEsZSxudWxsLCExKX0pKSxbWyJhY2NlcHRDaGFyc2V0IiwiYWNjZXB0LWNoYXJzZXQiXSxbImNsYXNzTmFtZSIsImNsYXNzIl0sWyJodG1sRm9yIiwiZm9yIl0sWyJodHRwRXF1aXYiLCJodHRwLWVxdWl2Il1dLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWVbMF07eWVbdF09bmV3IHZlKHQsMSwhMSxlWzFdLG51bGwsITEpfSkpLFsiY29udGVudEVkaXRhYmxlIiwiZHJhZ2dhYmxlIiwic3BlbGxDaGVjayIsInZhbHVlIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMiwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSksWyJhdXRvUmV2ZXJzZSIsImV4dGVybmFsUmVzb3VyY2VzUmVxdWlyZWQiLCJmb2N1c2FibGUiLCJwcmVzZXJ2ZUFscGhhIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMiwhMSxlLG51bGwsITEpfSkpLCJhbGxvd0Z1bGxTY3JlZW4gYXN5bmMgYXV0b0ZvY3VzIGF1dG9QbGF5IGNvbnRyb2xzIGRlZmF1bHQgZGVmZXIgZGlzYWJsZWQgZGlzYWJsZVBpY3R1cmVJblBpY3R1cmUgZm9ybU5vVmFsaWRhdGUgaGlkZGVuIGxvb3Agbm9Nb2R1bGUgbm9WYWxpZGF0ZSBvcGVuIHBsYXlzSW5saW5lIHJlYWRPbmx5IHJlcXVpcmVkIHJldmVyc2VkIHNjb3BlZCBzZWFtbGVzcyBpdGVtU2NvcGUiLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMywhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSksWyJjaGVja2VkIiwibXVsdGlwbGUiLCJtdXRlZCIsInNlbGVjdGVkIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMywhMCxlLG51bGwsITEpfSkpLFsiY2FwdHVyZSIsImRvd25sb2FkIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsNCwhMSxlLG51bGwsITEpfSkpLFsiY29scyIsInJvd3MiLCJzaXplIiwic3BhbiJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDYsITEsZSxudWxsLCExKX0pKSxbInJvd1NwYW4iLCJzdGFydCJdLmZvckVhY2goKGZ1bmN0aW9uKGUpe3llW2VdPW5ldyB2ZShlLDUsITEsZS50b0xvd2VyQ2FzZSgpLG51bGwsITEpfSkpO3ZhciBiZT0vW1wtOl0oW2Etel0pL2c7ZnVuY3Rpb24gd2UoZSl7cmV0dXJuIGVbMV0udG9VcHBlckNhc2UoKX1mdW5jdGlvbiBrZShlKXtzd2l0Y2godHlwZW9mIGUpe2Nhc2UiYm9vbGVhbiI6Y2FzZSJudW1iZXIiOmNhc2Uib2JqZWN0IjpjYXNlInN0cmluZyI6Y2FzZSJ1bmRlZmluZWQiOnJldHVybiBlO2RlZmF1bHQ6cmV0dXJuIiJ9fWZ1bmN0aW9uIFNlKGUsdCxyLG4pe3ZhciBhPXllLmhhc093blByb3BlcnR5KHQpP3llW3RdOm51bGw7KG51bGwhPT1hPzA9PT1hLnR5cGU6IW4mJigyPHQubGVuZ3RoJiYoIm8iPT09dFswXXx8Ik8iPT09dFswXSkmJigibiI9PT10WzFdfHwiTiI9PT10WzFdKSkpfHwoZnVuY3Rpb24oZSx0LHIsbil7aWYobnVsbD09dHx8ZnVuY3Rpb24oZSx0LHIsbil7aWYobnVsbCE9PXImJjA9PT1yLnR5cGUpcmV0dXJuITE7c3dpdGNoKHR5cGVvZiB0KXtjYXNlImZ1bmN0aW9uIjpjYXNlInN5bWJvbCI6cmV0dXJuITA7Y2FzZSJib29sZWFuIjpyZXR1cm4hbiYmKG51bGwhPT1yPyFyLmFjY2VwdHNCb29sZWFuczoiZGF0YS0iIT09KGU9ZS50b0xvd2VyQ2FzZSgpLnNsaWNlKDAsNSkpJiYiYXJpYS0iIT09ZSk7ZGVmYXVsdDpyZXR1cm4hMX19KGUsdCxyLG4pKXJldHVybiEwO2lmKG4pcmV0dXJuITE7aWYobnVsbCE9PXIpc3dpdGNoKHIudHlwZSl7Y2FzZSAzOnJldHVybiF0O2Nhc2UgNDpyZXR1cm4hMT09PXQ7Y2FzZSA1OnJldHVybiBpc05hTih0KTtjYXNlIDY6cmV0dXJuIGlzTmFOKHQpfHwxPnR9cmV0dXJuITF9KHQscixhLG4pJiYocj1udWxsKSxufHxudWxsPT09YT9mdW5jdGlvbihlKXtyZXR1cm4hIXBlLmNhbGwoZ2UsZSl8fCFwZS5jYWxsKG1lLGUpJiYoZGUudGVzdChlKT9nZVtlXT0hMDoobWVbZV09ITAsITEpKX0odCkmJihudWxsPT09cj9lLnJlbW92ZUF0dHJpYnV0ZSh0KTplLnNldEF0dHJpYnV0ZSh0LCIiK3IpKTphLm11c3RVc2VQcm9wZXJ0eT9lW2EucHJvcGVydHlOYW1lXT1udWxsPT09cj8zIT09YS50eXBlJiYiIjpyOih0PWEuYXR0cmlidXRlTmFtZSxuPWEuYXR0cmlidXRlTmFtZXNwYWNlLG51bGw9PT1yP2UucmVtb3ZlQXR0cmlidXRlKHQpOihyPTM9PT0oYT1hLnR5cGUpfHw0PT09YSYmITA9PT1yPyIiOiIiK3Isbj9lLnNldEF0dHJpYnV0ZU5TKG4sdCxyKTplLnNldEF0dHJpYnV0ZSh0LHIpKSkpfWZ1bmN0aW9uIF9lKGUpe3ZhciB0PWUudHlwZTtyZXR1cm4oZT1lLm5vZGVOYW1lKSYmImlucHV0Ij09PWUudG9Mb3dlckNhc2UoKSYmKCJjaGVja2JveCI9PT10fHwicmFkaW8iPT09dCl9ZnVuY3Rpb24geGUoZSl7ZS5fdmFsdWVUcmFja2VyfHwoZS5fdmFsdWVUcmFja2VyPWZ1bmN0aW9uKGUpe3ZhciB0PV9lKGUpPyJjaGVja2VkIjoidmFsdWUiLHI9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcihlLmNvbnN0cnVjdG9yLnByb3RvdHlwZSx0KSxuPSIiK2VbdF07aWYoIWUuaGFzT3duUHJvcGVydHkodCkmJnZvaWQgMCE9PXImJiJmdW5jdGlvbiI9PXR5cGVvZiByLmdldCYmImZ1bmN0aW9uIj09dHlwZW9mIHIuc2V0KXt2YXIgYT1yLmdldCxpPXIuc2V0O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGEuY2FsbCh0aGlzKX0sc2V0OmZ1bmN0aW9uKGUpe249IiIrZSxpLmNhbGwodGhpcyxlKX19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOnIuZW51bWVyYWJsZX0pLHtnZXRWYWx1ZTpmdW5jdGlvbigpe3JldHVybiBufSxzZXRWYWx1ZTpmdW5jdGlvbihlKXtuPSIiK2V9LHN0b3BUcmFja2luZzpmdW5jdGlvbigpe2UuX3ZhbHVlVHJhY2tlcj1udWxsLGRlbGV0ZSBlW3RdfX19fShlKSl9ZnVuY3Rpb24gQWUoZSl7aWYoIWUpcmV0dXJuITE7dmFyIHQ9ZS5fdmFsdWVUcmFja2VyO2lmKCF0KXJldHVybiEwO3ZhciByPXQuZ2V0VmFsdWUoKSxuPSIiO3JldHVybiBlJiYobj1fZShlKT9lLmNoZWNrZWQ/InRydWUiOiJmYWxzZSI6ZS52YWx1ZSksKGU9bikhPT1yJiYodC5zZXRWYWx1ZShlKSwhMCl9ZnVuY3Rpb24gQ2UoZSx0KXt2YXIgcj10LmNoZWNrZWQ7cmV0dXJuIGEoe30sdCx7ZGVmYXVsdENoZWNrZWQ6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsdmFsdWU6dm9pZCAwLGNoZWNrZWQ6bnVsbCE9cj9yOmUuX3dyYXBwZXJTdGF0ZS5pbml0aWFsQ2hlY2tlZH0pfWZ1bmN0aW9uIFBlKGUsdCl7dmFyIHI9bnVsbD09dC5kZWZhdWx0VmFsdWU/IiI6dC5kZWZhdWx0VmFsdWUsbj1udWxsIT10LmNoZWNrZWQ/dC5jaGVja2VkOnQuZGVmYXVsdENoZWNrZWQ7cj1rZShudWxsIT10LnZhbHVlP3QudmFsdWU6ciksZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsQ2hlY2tlZDpuLGluaXRpYWxWYWx1ZTpyLGNvbnRyb2xsZWQ6ImNoZWNrYm94Ij09PXQudHlwZXx8InJhZGlvIj09PXQudHlwZT9udWxsIT10LmNoZWNrZWQ6bnVsbCE9dC52YWx1ZX19ZnVuY3Rpb24gRWUoZSx0KXtudWxsIT0odD10LmNoZWNrZWQpJiZTZShlLCJjaGVja2VkIix0LCExKX1mdW5jdGlvbiBUZShlLHQpe0VlKGUsdCk7dmFyIHI9a2UodC52YWx1ZSksbj10LnR5cGU7aWYobnVsbCE9cikibnVtYmVyIj09PW4/KDA9PT1yJiYiIj09PWUudmFsdWV8fGUudmFsdWUhPXIpJiYoZS52YWx1ZT0iIityKTplLnZhbHVlIT09IiIrciYmKGUudmFsdWU9IiIrcik7ZWxzZSBpZigic3VibWl0Ij09PW58fCJyZXNldCI9PT1uKXJldHVybiB2b2lkIGUucmVtb3ZlQXR0cmlidXRlKCJ2YWx1ZSIpO3QuaGFzT3duUHJvcGVydHkoInZhbHVlIik/T2UoZSx0LnR5cGUscik6dC5oYXNPd25Qcm9wZXJ0eSgiZGVmYXVsdFZhbHVlIikmJk9lKGUsdC50eXBlLGtlKHQuZGVmYXVsdFZhbHVlKSksbnVsbD09dC5jaGVja2VkJiZudWxsIT10LmRlZmF1bHRDaGVja2VkJiYoZS5kZWZhdWx0Q2hlY2tlZD0hIXQuZGVmYXVsdENoZWNrZWQpfWZ1bmN0aW9uIFJlKGUsdCxyKXtpZih0Lmhhc093blByb3BlcnR5KCJ2YWx1ZSIpfHx0Lmhhc093blByb3BlcnR5KCJkZWZhdWx0VmFsdWUiKSl7dmFyIG49dC50eXBlO2lmKCEoInN1Ym1pdCIhPT1uJiYicmVzZXQiIT09bnx8dm9pZCAwIT09dC52YWx1ZSYmbnVsbCE9PXQudmFsdWUpKXJldHVybjt0PSIiK2UuX3dyYXBwZXJTdGF0ZS5pbml0aWFsVmFsdWUscnx8dD09PWUudmFsdWV8fChlLnZhbHVlPXQpLGUuZGVmYXVsdFZhbHVlPXR9IiIhPT0ocj1lLm5hbWUpJiYoZS5uYW1lPSIiKSxlLmRlZmF1bHRDaGVja2VkPSFlLmRlZmF1bHRDaGVja2VkLGUuZGVmYXVsdENoZWNrZWQ9ISFlLl93cmFwcGVyU3RhdGUuaW5pdGlhbENoZWNrZWQsIiIhPT1yJiYoZS5uYW1lPXIpfWZ1bmN0aW9uIE9lKGUsdCxyKXsibnVtYmVyIj09PXQmJmUub3duZXJEb2N1bWVudC5hY3RpdmVFbGVtZW50PT09ZXx8KG51bGw9PXI/ZS5kZWZhdWx0VmFsdWU9IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZTplLmRlZmF1bHRWYWx1ZSE9PSIiK3ImJihlLmRlZmF1bHRWYWx1ZT0iIityKSl9ZnVuY3Rpb24gSWUoZSx0KXtyZXR1cm4gZT1hKHtjaGlsZHJlbjp2b2lkIDB9LHQpLCh0PWZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiBuLkNoaWxkcmVuLmZvckVhY2goZSwoZnVuY3Rpb24oZSl7bnVsbCE9ZSYmKHQrPWUpfSkpLHR9KHQuY2hpbGRyZW4pKSYmKGUuY2hpbGRyZW49dCksZX1mdW5jdGlvbiBGZShlLHQscixuKXtpZihlPWUub3B0aW9ucyx0KXt0PXt9O2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXRbIiQiK3JbYV1dPSEwO2ZvcihyPTA7cjxlLmxlbmd0aDtyKyspYT10Lmhhc093blByb3BlcnR5KCIkIitlW3JdLnZhbHVlKSxlW3JdLnNlbGVjdGVkIT09YSYmKGVbcl0uc2VsZWN0ZWQ9YSksYSYmbiYmKGVbcl0uZGVmYXVsdFNlbGVjdGVkPSEwKX1lbHNle2ZvcihyPSIiK2tlKHIpLHQ9bnVsbCxhPTA7YTxlLmxlbmd0aDthKyspe2lmKGVbYV0udmFsdWU9PT1yKXJldHVybiBlW2FdLnNlbGVjdGVkPSEwLHZvaWQobiYmKGVbYV0uZGVmYXVsdFNlbGVjdGVkPSEwKSk7bnVsbCE9PXR8fGVbYV0uZGlzYWJsZWR8fCh0PWVbYV0pfW51bGwhPT10JiYodC5zZWxlY3RlZD0hMCl9fWZ1bmN0aW9uIExlKGUsdCl7aWYobnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCl0aHJvdyBFcnJvcihvKDkxKSk7cmV0dXJuIGEoe30sdCx7dmFsdWU6dm9pZCAwLGRlZmF1bHRWYWx1ZTp2b2lkIDAsY2hpbGRyZW46IiIrZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZX0pfWZ1bmN0aW9uIERlKGUsdCl7dmFyIHI9dC52YWx1ZTtpZihudWxsPT1yKXtpZihyPXQuZGVmYXVsdFZhbHVlLG51bGwhPSh0PXQuY2hpbGRyZW4pKXtpZihudWxsIT1yKXRocm93IEVycm9yKG8oOTIpKTtpZihBcnJheS5pc0FycmF5KHQpKXtpZighKDE+PXQubGVuZ3RoKSl0aHJvdyBFcnJvcihvKDkzKSk7dD10WzBdfXI9dH1udWxsPT1yJiYocj0iIil9ZS5fd3JhcHBlclN0YXRlPXtpbml0aWFsVmFsdWU6a2Uocil9fWZ1bmN0aW9uIE5lKGUsdCl7dmFyIHI9a2UodC52YWx1ZSksbj1rZSh0LmRlZmF1bHRWYWx1ZSk7bnVsbCE9ciYmKChyPSIiK3IpIT09ZS52YWx1ZSYmKGUudmFsdWU9ciksbnVsbD09dC5kZWZhdWx0VmFsdWUmJmUuZGVmYXVsdFZhbHVlIT09ciYmKGUuZGVmYXVsdFZhbHVlPXIpKSxudWxsIT1uJiYoZS5kZWZhdWx0VmFsdWU9IiIrbil9ZnVuY3Rpb24gTWUoZSl7dmFyIHQ9ZS50ZXh0Q29udGVudDt0PT09ZS5fd3JhcHBlclN0YXRlLmluaXRpYWxWYWx1ZSYmIiIhPT10JiZudWxsIT09dCYmKGUudmFsdWU9dCl9ImFjY2VudC1oZWlnaHQgYWxpZ25tZW50LWJhc2VsaW5lIGFyYWJpYy1mb3JtIGJhc2VsaW5lLXNoaWZ0IGNhcC1oZWlnaHQgY2xpcC1wYXRoIGNsaXAtcnVsZSBjb2xvci1pbnRlcnBvbGF0aW9uIGNvbG9yLWludGVycG9sYXRpb24tZmlsdGVycyBjb2xvci1wcm9maWxlIGNvbG9yLXJlbmRlcmluZyBkb21pbmFudC1iYXNlbGluZSBlbmFibGUtYmFja2dyb3VuZCBmaWxsLW9wYWNpdHkgZmlsbC1ydWxlIGZsb29kLWNvbG9yIGZsb29kLW9wYWNpdHkgZm9udC1mYW1pbHkgZm9udC1zaXplIGZvbnQtc2l6ZS1hZGp1c3QgZm9udC1zdHJldGNoIGZvbnQtc3R5bGUgZm9udC12YXJpYW50IGZvbnQtd2VpZ2h0IGdseXBoLW5hbWUgZ2x5cGgtb3JpZW50YXRpb24taG9yaXpvbnRhbCBnbHlwaC1vcmllbnRhdGlvbi12ZXJ0aWNhbCBob3Jpei1hZHYteCBob3Jpei1vcmlnaW4teCBpbWFnZS1yZW5kZXJpbmcgbGV0dGVyLXNwYWNpbmcgbGlnaHRpbmctY29sb3IgbWFya2VyLWVuZCBtYXJrZXItbWlkIG1hcmtlci1zdGFydCBvdmVybGluZS1wb3NpdGlvbiBvdmVybGluZS10aGlja25lc3MgcGFpbnQtb3JkZXIgcGFub3NlLTEgcG9pbnRlci1ldmVudHMgcmVuZGVyaW5nLWludGVudCBzaGFwZS1yZW5kZXJpbmcgc3RvcC1jb2xvciBzdG9wLW9wYWNpdHkgc3RyaWtldGhyb3VnaC1wb3NpdGlvbiBzdHJpa2V0aHJvdWdoLXRoaWNrbmVzcyBzdHJva2UtZGFzaGFycmF5IHN0cm9rZS1kYXNob2Zmc2V0IHN0cm9rZS1saW5lY2FwIHN0cm9rZS1saW5lam9pbiBzdHJva2UtbWl0ZXJsaW1pdCBzdHJva2Utb3BhY2l0eSBzdHJva2Utd2lkdGggdGV4dC1hbmNob3IgdGV4dC1kZWNvcmF0aW9uIHRleHQtcmVuZGVyaW5nIHVuZGVybGluZS1wb3NpdGlvbiB1bmRlcmxpbmUtdGhpY2tuZXNzIHVuaWNvZGUtYmlkaSB1bmljb2RlLXJhbmdlIHVuaXRzLXBlci1lbSB2LWFscGhhYmV0aWMgdi1oYW5naW5nIHYtaWRlb2dyYXBoaWMgdi1tYXRoZW1hdGljYWwgdmVjdG9yLWVmZmVjdCB2ZXJ0LWFkdi15IHZlcnQtb3JpZ2luLXggdmVydC1vcmlnaW4teSB3b3JkLXNwYWNpbmcgd3JpdGluZy1tb2RlIHhtbG5zOnhsaW5rIHgtaGVpZ2h0Ii5zcGxpdCgiICIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3ZhciB0PWUucmVwbGFjZShiZSx3ZSk7eWVbdF09bmV3IHZlKHQsMSwhMSxlLG51bGwsITEpfSkpLCJ4bGluazphY3R1YXRlIHhsaW5rOmFyY3JvbGUgeGxpbms6cm9sZSB4bGluazpzaG93IHhsaW5rOnRpdGxlIHhsaW5rOnR5cGUiLnNwbGl0KCIgIikuZm9yRWFjaCgoZnVuY3Rpb24oZSl7dmFyIHQ9ZS5yZXBsYWNlKGJlLHdlKTt5ZVt0XT1uZXcgdmUodCwxLCExLGUsImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGxpbmsiLCExKX0pKSxbInhtbDpiYXNlIiwieG1sOmxhbmciLCJ4bWw6c3BhY2UiXS5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1lLnJlcGxhY2UoYmUsd2UpO3llW3RdPW5ldyB2ZSh0LDEsITEsZSwiaHR0cDovL3d3dy53My5vcmcvWE1MLzE5OTgvbmFtZXNwYWNlIiwhMSl9KSksWyJ0YWJJbmRleCIsImNyb3NzT3JpZ2luIl0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7eWVbZV09bmV3IHZlKGUsMSwhMSxlLnRvTG93ZXJDYXNlKCksbnVsbCwhMSl9KSkseWUueGxpbmtIcmVmPW5ldyB2ZSgieGxpbmtIcmVmIiwxLCExLCJ4bGluazpocmVmIiwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94bGluayIsITApLFsic3JjIiwiaHJlZiIsImFjdGlvbiIsImZvcm1BY3Rpb24iXS5mb3JFYWNoKChmdW5jdGlvbihlKXt5ZVtlXT1uZXcgdmUoZSwxLCExLGUudG9Mb3dlckNhc2UoKSxudWxsLCEwKX0pKTt2YXIgamU9Imh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwiLEJlPSJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI7ZnVuY3Rpb24gVWUoZSl7c3dpdGNoKGUpe2Nhc2Uic3ZnIjpyZXR1cm4iaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciO2Nhc2UibWF0aCI6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTgvTWF0aC9NYXRoTUwiO2RlZmF1bHQ6cmV0dXJuImh0dHA6Ly93d3cudzMub3JnLzE5OTkveGh0bWwifX1mdW5jdGlvbiBxZShlLHQpe3JldHVybiBudWxsPT1lfHwiaHR0cDovL3d3dy53My5vcmcvMTk5OS94aHRtbCI9PT1lP1VlKHQpOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyI9PT1lJiYiZm9yZWlnbk9iamVjdCI9PT10PyJodHRwOi8vd3d3LnczLm9yZy8xOTk5L3hodG1sIjplfXZhciB6ZSxXZT1mdW5jdGlvbihlKXtyZXR1cm4idW5kZWZpbmVkIiE9dHlwZW9mIE1TQXBwJiZNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbj9mdW5jdGlvbih0LHIsbixhKXtNU0FwcC5leGVjVW5zYWZlTG9jYWxGdW5jdGlvbigoZnVuY3Rpb24oKXtyZXR1cm4gZSh0LHIpfSkpfTplfSgoZnVuY3Rpb24oZSx0KXtpZihlLm5hbWVzcGFjZVVSSSE9PUJlfHwiaW5uZXJIVE1MImluIGUpZS5pbm5lckhUTUw9dDtlbHNle2ZvcigoemU9emV8fGRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5pbm5lckhUTUw9Ijxzdmc+Iit0LnZhbHVlT2YoKS50b1N0cmluZygpKyI8L3N2Zz4iLHQ9emUuZmlyc3RDaGlsZDtlLmZpcnN0Q2hpbGQ7KWUucmVtb3ZlQ2hpbGQoZS5maXJzdENoaWxkKTtmb3IoO3QuZmlyc3RDaGlsZDspZS5hcHBlbmRDaGlsZCh0LmZpcnN0Q2hpbGQpfX0pKTtmdW5jdGlvbiBIZShlLHQpe2lmKHQpe3ZhciByPWUuZmlyc3RDaGlsZDtpZihyJiZyPT09ZS5sYXN0Q2hpbGQmJjM9PT1yLm5vZGVUeXBlKXJldHVybiB2b2lkKHIubm9kZVZhbHVlPXQpfWUudGV4dENvbnRlbnQ9dH1mdW5jdGlvbiBHZShlLHQpe3ZhciByPXt9O3JldHVybiByW2UudG9Mb3dlckNhc2UoKV09dC50b0xvd2VyQ2FzZSgpLHJbIldlYmtpdCIrZV09IndlYmtpdCIrdCxyWyJNb3oiK2VdPSJtb3oiK3Qscn12YXIgVmU9e2FuaW1hdGlvbmVuZDpHZSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uRW5kIiksYW5pbWF0aW9uaXRlcmF0aW9uOkdlKCJBbmltYXRpb24iLCJBbmltYXRpb25JdGVyYXRpb24iKSxhbmltYXRpb25zdGFydDpHZSgiQW5pbWF0aW9uIiwiQW5pbWF0aW9uU3RhcnQiKSx0cmFuc2l0aW9uZW5kOkdlKCJUcmFuc2l0aW9uIiwiVHJhbnNpdGlvbkVuZCIpfSxYZT17fSxZZT17fTtmdW5jdGlvbiBLZShlKXtpZihYZVtlXSlyZXR1cm4gWGVbZV07aWYoIVZlW2VdKXJldHVybiBlO3ZhciB0LHI9VmVbZV07Zm9yKHQgaW4gcilpZihyLmhhc093blByb3BlcnR5KHQpJiZ0IGluIFllKXJldHVybiBYZVtlXT1yW3RdO3JldHVybiBlfSQmJihZZT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5zdHlsZSwiQW5pbWF0aW9uRXZlbnQiaW4gd2luZG93fHwoZGVsZXRlIFZlLmFuaW1hdGlvbmVuZC5hbmltYXRpb24sZGVsZXRlIFZlLmFuaW1hdGlvbml0ZXJhdGlvbi5hbmltYXRpb24sZGVsZXRlIFZlLmFuaW1hdGlvbnN0YXJ0LmFuaW1hdGlvbiksIlRyYW5zaXRpb25FdmVudCJpbiB3aW5kb3d8fGRlbGV0ZSBWZS50cmFuc2l0aW9uZW5kLnRyYW5zaXRpb24pO3ZhciBKZT1LZSgiYW5pbWF0aW9uZW5kIiksUWU9S2UoImFuaW1hdGlvbml0ZXJhdGlvbiIpLFplPUtlKCJhbmltYXRpb25zdGFydCIpLCRlPUtlKCJ0cmFuc2l0aW9uZW5kIiksZXQ9ImFib3J0IGNhbnBsYXkgY2FucGxheXRocm91Z2ggZHVyYXRpb25jaGFuZ2UgZW1wdGllZCBlbmNyeXB0ZWQgZW5kZWQgZXJyb3IgbG9hZGVkZGF0YSBsb2FkZWRtZXRhZGF0YSBsb2Fkc3RhcnQgcGF1c2UgcGxheSBwbGF5aW5nIHByb2dyZXNzIHJhdGVjaGFuZ2Ugc2Vla2VkIHNlZWtpbmcgc3RhbGxlZCBzdXNwZW5kIHRpbWV1cGRhdGUgdm9sdW1lY2hhbmdlIHdhaXRpbmciLnNwbGl0KCIgIik7ZnVuY3Rpb24gdHQoZSl7dmFyIHQ9ZSxyPWU7aWYoZS5hbHRlcm5hdGUpZm9yKDt0LnJldHVybjspdD10LnJldHVybjtlbHNle2U9dDtkb3swIT0oMTAyNiYodD1lKS5lZmZlY3RUYWcpJiYocj10LnJldHVybiksZT10LnJldHVybn13aGlsZShlKX1yZXR1cm4gMz09PXQudGFnP3I6bnVsbH1mdW5jdGlvbiBydChlKXtpZigxMz09PWUudGFnKXt2YXIgdD1lLm1lbW9pemVkU3RhdGU7aWYobnVsbD09PXQmJihudWxsIT09KGU9ZS5hbHRlcm5hdGUpJiYodD1lLm1lbW9pemVkU3RhdGUpKSxudWxsIT09dClyZXR1cm4gdC5kZWh5ZHJhdGVkfXJldHVybiBudWxsfWZ1bmN0aW9uIG50KGUpe2lmKHR0KGUpIT09ZSl0aHJvdyBFcnJvcihvKDE4OCkpfWZ1bmN0aW9uIGF0KGUpe2lmKCEoZT1mdW5jdGlvbihlKXt2YXIgdD1lLmFsdGVybmF0ZTtpZighdCl7aWYobnVsbD09PSh0PXR0KGUpKSl0aHJvdyBFcnJvcihvKDE4OCkpO3JldHVybiB0IT09ZT9udWxsOmV9Zm9yKHZhciByPWUsbj10Ozspe3ZhciBhPXIucmV0dXJuO2lmKG51bGw9PT1hKWJyZWFrO3ZhciBpPWEuYWx0ZXJuYXRlO2lmKG51bGw9PT1pKXtpZihudWxsIT09KG49YS5yZXR1cm4pKXtyPW47Y29udGludWV9YnJlYWt9aWYoYS5jaGlsZD09PWkuY2hpbGQpe2ZvcihpPWEuY2hpbGQ7aTspe2lmKGk9PT1yKXJldHVybiBudChhKSxlO2lmKGk9PT1uKXJldHVybiBudChhKSx0O2k9aS5zaWJsaW5nfXRocm93IEVycm9yKG8oMTg4KSl9aWYoci5yZXR1cm4hPT1uLnJldHVybilyPWEsbj1pO2Vsc2V7Zm9yKHZhciBzPSExLGw9YS5jaGlsZDtsOyl7aWYobD09PXIpe3M9ITAscj1hLG49aTticmVha31pZihsPT09bil7cz0hMCxuPWEscj1pO2JyZWFrfWw9bC5zaWJsaW5nfWlmKCFzKXtmb3IobD1pLmNoaWxkO2w7KXtpZihsPT09cil7cz0hMCxyPWksbj1hO2JyZWFrfWlmKGw9PT1uKXtzPSEwLG49aSxyPWE7YnJlYWt9bD1sLnNpYmxpbmd9aWYoIXMpdGhyb3cgRXJyb3IobygxODkpKX19aWYoci5hbHRlcm5hdGUhPT1uKXRocm93IEVycm9yKG8oMTkwKSl9aWYoMyE9PXIudGFnKXRocm93IEVycm9yKG8oMTg4KSk7cmV0dXJuIHIuc3RhdGVOb2RlLmN1cnJlbnQ9PT1yP2U6dH0oZSkpKXJldHVybiBudWxsO2Zvcih2YXIgdD1lOzspe2lmKDU9PT10LnRhZ3x8Nj09PXQudGFnKXJldHVybiB0O2lmKHQuY2hpbGQpdC5jaGlsZC5yZXR1cm49dCx0PXQuY2hpbGQ7ZWxzZXtpZih0PT09ZSlicmVhaztmb3IoOyF0LnNpYmxpbmc7KXtpZighdC5yZXR1cm58fHQucmV0dXJuPT09ZSlyZXR1cm4gbnVsbDt0PXQucmV0dXJufXQuc2libGluZy5yZXR1cm49dC5yZXR1cm4sdD10LnNpYmxpbmd9fXJldHVybiBudWxsfXZhciBpdCxvdCxzdCxsdD0hMSxjdD1bXSx1dD1udWxsLGZ0PW51bGwsaHQ9bnVsbCxkdD1uZXcgTWFwLHB0PW5ldyBNYXAsbXQ9W10sZ3Q9Im1vdXNlZG93biBtb3VzZXVwIHRvdWNoY2FuY2VsIHRvdWNoZW5kIHRvdWNoc3RhcnQgYXV4Y2xpY2sgZGJsY2xpY2sgcG9pbnRlcmNhbmNlbCBwb2ludGVyZG93biBwb2ludGVydXAgZHJhZ2VuZCBkcmFnc3RhcnQgZHJvcCBjb21wb3NpdGlvbmVuZCBjb21wb3NpdGlvbnN0YXJ0IGtleWRvd24ga2V5cHJlc3Mga2V5dXAgaW5wdXQgdGV4dElucHV0IGNsb3NlIGNhbmNlbCBjb3B5IGN1dCBwYXN0ZSBjbGljayBjaGFuZ2UgY29udGV4dG1lbnUgcmVzZXQgc3VibWl0Ii5zcGxpdCgiICIpLHZ0PSJmb2N1cyBibHVyIGRyYWdlbnRlciBkcmFnbGVhdmUgbW91c2VvdmVyIG1vdXNlb3V0IHBvaW50ZXJvdmVyIHBvaW50ZXJvdXQgZ290cG9pbnRlcmNhcHR1cmUgbG9zdHBvaW50ZXJjYXB0dXJlIi5zcGxpdCgiICIpO2Z1bmN0aW9uIHl0KGUsdCxyLG4pe3JldHVybntibG9ja2VkT246ZSx0b3BMZXZlbFR5cGU6dCxldmVudFN5c3RlbUZsYWdzOjMyfHIsbmF0aXZlRXZlbnQ6bn19ZnVuY3Rpb24gYnQoZSx0KXtzd2l0Y2goZSl7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjp1dD1udWxsO2JyZWFrO2Nhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdsZWF2ZSI6ZnQ9bnVsbDticmVhaztjYXNlIm1vdXNlb3ZlciI6Y2FzZSJtb3VzZW91dCI6aHQ9bnVsbDticmVhaztjYXNlInBvaW50ZXJvdmVyIjpjYXNlInBvaW50ZXJvdXQiOmR0LmRlbGV0ZSh0LnBvaW50ZXJJZCk7YnJlYWs7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJsb3N0cG9pbnRlcmNhcHR1cmUiOnB0LmRlbGV0ZSh0LnBvaW50ZXJJZCl9fWZ1bmN0aW9uIHd0KGUsdCxyLG4sYSl7cmV0dXJuIG51bGw9PT1lfHxlLm5hdGl2ZUV2ZW50IT09YT8oZT15dCh0LHIsbixhKSxudWxsIT09dCYmKG51bGwhPT0odD1jbih0KSkmJm90KHQpKSxlKTooZS5ldmVudFN5c3RlbUZsYWdzfD1uLGUpfWZ1bmN0aW9uIGt0KGUpe3ZhciB0PWxuKGUudGFyZ2V0KTtpZihudWxsIT09dCl7dmFyIHI9dHQodCk7aWYobnVsbCE9PXIpaWYoMTM9PT0odD1yLnRhZykpe2lmKG51bGwhPT0odD1ydChyKSkpcmV0dXJuIGUuYmxvY2tlZE9uPXQsdm9pZCBpLnVuc3RhYmxlX3J1bldpdGhQcmlvcml0eShlLnByaW9yaXR5LChmdW5jdGlvbigpe3N0KHIpfSkpfWVsc2UgaWYoMz09PXQmJnIuc3RhdGVOb2RlLmh5ZHJhdGUpcmV0dXJuIHZvaWQoZS5ibG9ja2VkT249Mz09PXIudGFnP3Iuc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbCl9ZS5ibG9ja2VkT249bnVsbH1mdW5jdGlvbiBTdChlKXtpZihudWxsIT09ZS5ibG9ja2VkT24pcmV0dXJuITE7dmFyIHQ9UnIoZS50b3BMZXZlbFR5cGUsZS5ldmVudFN5c3RlbUZsYWdzLGUubmF0aXZlRXZlbnQpO2lmKG51bGwhPT10KXt2YXIgcj1jbih0KTtyZXR1cm4gbnVsbCE9PXImJm90KHIpLGUuYmxvY2tlZE9uPXQsITF9cmV0dXJuITB9ZnVuY3Rpb24gX3QoZSx0LHIpe1N0KGUpJiZyLmRlbGV0ZSh0KX1mdW5jdGlvbiB4dCgpe2ZvcihsdD0hMTswPGN0Lmxlbmd0aDspe3ZhciBlPWN0WzBdO2lmKG51bGwhPT1lLmJsb2NrZWRPbil7bnVsbCE9PShlPWNuKGUuYmxvY2tlZE9uKSkmJml0KGUpO2JyZWFrfXZhciB0PVJyKGUudG9wTGV2ZWxUeXBlLGUuZXZlbnRTeXN0ZW1GbGFncyxlLm5hdGl2ZUV2ZW50KTtudWxsIT09dD9lLmJsb2NrZWRPbj10OmN0LnNoaWZ0KCl9bnVsbCE9PXV0JiZTdCh1dCkmJih1dD1udWxsKSxudWxsIT09ZnQmJlN0KGZ0KSYmKGZ0PW51bGwpLG51bGwhPT1odCYmU3QoaHQpJiYoaHQ9bnVsbCksZHQuZm9yRWFjaChfdCkscHQuZm9yRWFjaChfdCl9ZnVuY3Rpb24gQXQoZSx0KXtlLmJsb2NrZWRPbj09PXQmJihlLmJsb2NrZWRPbj1udWxsLGx0fHwobHQ9ITAsaS51bnN0YWJsZV9zY2hlZHVsZUNhbGxiYWNrKGkudW5zdGFibGVfTm9ybWFsUHJpb3JpdHkseHQpKSl9ZnVuY3Rpb24gQ3QoZSl7ZnVuY3Rpb24gdCh0KXtyZXR1cm4gQXQodCxlKX1pZigwPGN0Lmxlbmd0aCl7QXQoY3RbMF0sZSk7Zm9yKHZhciByPTE7cjxjdC5sZW5ndGg7cisrKXt2YXIgbj1jdFtyXTtuLmJsb2NrZWRPbj09PWUmJihuLmJsb2NrZWRPbj1udWxsKX19Zm9yKG51bGwhPT11dCYmQXQodXQsZSksbnVsbCE9PWZ0JiZBdChmdCxlKSxudWxsIT09aHQmJkF0KGh0LGUpLGR0LmZvckVhY2godCkscHQuZm9yRWFjaCh0KSxyPTA7cjxtdC5sZW5ndGg7cisrKShuPW10W3JdKS5ibG9ja2VkT249PT1lJiYobi5ibG9ja2VkT249bnVsbCk7Zm9yKDswPG10Lmxlbmd0aCYmbnVsbD09PShyPW10WzBdKS5ibG9ja2VkT247KWt0KHIpLG51bGw9PT1yLmJsb2NrZWRPbiYmbXQuc2hpZnQoKX1mdW5jdGlvbiBQdChlKXtyZXR1cm4oZT1lLnRhcmdldHx8ZS5zcmNFbGVtZW50fHx3aW5kb3cpLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50JiYoZT1lLmNvcnJlc3BvbmRpbmdVc2VFbGVtZW50KSwzPT09ZS5ub2RlVHlwZT9lLnBhcmVudE5vZGU6ZX1mdW5jdGlvbiBFdChlKXtkb3tlPWUucmV0dXJufXdoaWxlKGUmJjUhPT1lLnRhZyk7cmV0dXJuIGV8fG51bGx9ZnVuY3Rpb24gVHQoZSx0LHIpeyh0PUkoZSxyLmRpc3BhdGNoQ29uZmlnLnBoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzW3RdKSkmJihyLl9kaXNwYXRjaExpc3RlbmVycz1DKHIuX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLHIuX2Rpc3BhdGNoSW5zdGFuY2VzPUMoci5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIFJ0KGUpe2lmKGUmJmUuZGlzcGF0Y2hDb25maWcucGhhc2VkUmVnaXN0cmF0aW9uTmFtZXMpe2Zvcih2YXIgdD1lLl90YXJnZXRJbnN0LHI9W107dDspci5wdXNoKHQpLHQ9RXQodCk7Zm9yKHQ9ci5sZW5ndGg7MDx0LS07KVR0KHJbdF0sImNhcHR1cmVkIixlKTtmb3IodD0wO3Q8ci5sZW5ndGg7dCsrKVR0KHJbdF0sImJ1YmJsZWQiLGUpfX1mdW5jdGlvbiBPdChlLHQscil7ZSYmciYmci5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lJiYodD1JKGUsci5kaXNwYXRjaENvbmZpZy5yZWdpc3RyYXRpb25OYW1lKSkmJihyLl9kaXNwYXRjaExpc3RlbmVycz1DKHIuX2Rpc3BhdGNoTGlzdGVuZXJzLHQpLHIuX2Rpc3BhdGNoSW5zdGFuY2VzPUMoci5fZGlzcGF0Y2hJbnN0YW5jZXMsZSkpfWZ1bmN0aW9uIEl0KGUpe2UmJmUuZGlzcGF0Y2hDb25maWcucmVnaXN0cmF0aW9uTmFtZSYmT3QoZS5fdGFyZ2V0SW5zdCxudWxsLGUpfWZ1bmN0aW9uIEZ0KGUpe1AoZSxSdCl9ZnVuY3Rpb24gTHQoKXtyZXR1cm4hMH1mdW5jdGlvbiBEdCgpe3JldHVybiExfWZ1bmN0aW9uIE50KGUsdCxyLG4pe2Zvcih2YXIgYSBpbiB0aGlzLmRpc3BhdGNoQ29uZmlnPWUsdGhpcy5fdGFyZ2V0SW5zdD10LHRoaXMubmF0aXZlRXZlbnQ9cixlPXRoaXMuY29uc3RydWN0b3IuSW50ZXJmYWNlKWUuaGFzT3duUHJvcGVydHkoYSkmJigodD1lW2FdKT90aGlzW2FdPXQocik6InRhcmdldCI9PT1hP3RoaXMudGFyZ2V0PW46dGhpc1thXT1yW2FdKTtyZXR1cm4gdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9KG51bGwhPXIuZGVmYXVsdFByZXZlbnRlZD9yLmRlZmF1bHRQcmV2ZW50ZWQ6ITE9PT1yLnJldHVyblZhbHVlKT9MdDpEdCx0aGlzLmlzUHJvcGFnYXRpb25TdG9wcGVkPUR0LHRoaXN9ZnVuY3Rpb24gTXQoZSx0LHIsbil7aWYodGhpcy5ldmVudFBvb2wubGVuZ3RoKXt2YXIgYT10aGlzLmV2ZW50UG9vbC5wb3AoKTtyZXR1cm4gdGhpcy5jYWxsKGEsZSx0LHIsbiksYX1yZXR1cm4gbmV3IHRoaXMoZSx0LHIsbil9ZnVuY3Rpb24ganQoZSl7aWYoIShlIGluc3RhbmNlb2YgdGhpcykpdGhyb3cgRXJyb3IobygyNzkpKTtlLmRlc3RydWN0b3IoKSwxMD50aGlzLmV2ZW50UG9vbC5sZW5ndGgmJnRoaXMuZXZlbnRQb29sLnB1c2goZSl9ZnVuY3Rpb24gQnQoZSl7ZS5ldmVudFBvb2w9W10sZS5nZXRQb29sZWQ9TXQsZS5yZWxlYXNlPWp0fWEoTnQucHJvdG90eXBlLHtwcmV2ZW50RGVmYXVsdDpmdW5jdGlvbigpe3RoaXMuZGVmYXVsdFByZXZlbnRlZD0hMDt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnByZXZlbnREZWZhdWx0P2UucHJldmVudERlZmF1bHQoKToidW5rbm93biIhPXR5cGVvZiBlLnJldHVyblZhbHVlJiYoZS5yZXR1cm5WYWx1ZT0hMSksdGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9THQpfSxzdG9wUHJvcGFnYXRpb246ZnVuY3Rpb24oKXt2YXIgZT10aGlzLm5hdGl2ZUV2ZW50O2UmJihlLnN0b3BQcm9wYWdhdGlvbj9lLnN0b3BQcm9wYWdhdGlvbigpOiJ1bmtub3duIiE9dHlwZW9mIGUuY2FuY2VsQnViYmxlJiYoZS5jYW5jZWxCdWJibGU9ITApLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9THQpfSxwZXJzaXN0OmZ1bmN0aW9uKCl7dGhpcy5pc1BlcnNpc3RlbnQ9THR9LGlzUGVyc2lzdGVudDpEdCxkZXN0cnVjdG9yOmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLmNvbnN0cnVjdG9yLkludGVyZmFjZTtmb3IoZSBpbiB0KXRoaXNbZV09bnVsbDt0aGlzLm5hdGl2ZUV2ZW50PXRoaXMuX3RhcmdldEluc3Q9dGhpcy5kaXNwYXRjaENvbmZpZz1udWxsLHRoaXMuaXNQcm9wYWdhdGlvblN0b3BwZWQ9dGhpcy5pc0RlZmF1bHRQcmV2ZW50ZWQ9RHQsdGhpcy5fZGlzcGF0Y2hJbnN0YW5jZXM9dGhpcy5fZGlzcGF0Y2hMaXN0ZW5lcnM9bnVsbH19KSxOdC5JbnRlcmZhY2U9e3R5cGU6bnVsbCx0YXJnZXQ6bnVsbCxjdXJyZW50VGFyZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIG51bGx9LGV2ZW50UGhhc2U6bnVsbCxidWJibGVzOm51bGwsY2FuY2VsYWJsZTpudWxsLHRpbWVTdGFtcDpmdW5jdGlvbihlKXtyZXR1cm4gZS50aW1lU3RhbXB8fERhdGUubm93KCl9LGRlZmF1bHRQcmV2ZW50ZWQ6bnVsbCxpc1RydXN0ZWQ6bnVsbH0sTnQuZXh0ZW5kPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt9ZnVuY3Rpb24gcigpe3JldHVybiBuLmFwcGx5KHRoaXMsYXJndW1lbnRzKX12YXIgbj10aGlzO3QucHJvdG90eXBlPW4ucHJvdG90eXBlO3ZhciBpPW5ldyB0O3JldHVybiBhKGksci5wcm90b3R5cGUpLHIucHJvdG90eXBlPWksci5wcm90b3R5cGUuY29uc3RydWN0b3I9cixyLkludGVyZmFjZT1hKHt9LG4uSW50ZXJmYWNlLGUpLHIuZXh0ZW5kPW4uZXh0ZW5kLEJ0KHIpLHJ9LEJ0KE50KTt2YXIgVXQ9TnQuZXh0ZW5kKHthbmltYXRpb25OYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxxdD1OdC5leHRlbmQoe2NsaXBib2FyZERhdGE6ZnVuY3Rpb24oZSl7cmV0dXJuImNsaXBib2FyZERhdGEiaW4gZT9lLmNsaXBib2FyZERhdGE6d2luZG93LmNsaXBib2FyZERhdGF9fSksenQ9TnQuZXh0ZW5kKHt2aWV3Om51bGwsZGV0YWlsOm51bGx9KSxXdD16dC5leHRlbmQoe3JlbGF0ZWRUYXJnZXQ6bnVsbH0pO2Z1bmN0aW9uIEh0KGUpe3ZhciB0PWUua2V5Q29kZTtyZXR1cm4iY2hhckNvZGUiaW4gZT8wPT09KGU9ZS5jaGFyQ29kZSkmJjEzPT09dCYmKGU9MTMpOmU9dCwxMD09PWUmJihlPTEzKSwzMjw9ZXx8MTM9PT1lP2U6MH12YXIgR3Q9e0VzYzoiRXNjYXBlIixTcGFjZWJhcjoiICIsTGVmdDoiQXJyb3dMZWZ0IixVcDoiQXJyb3dVcCIsUmlnaHQ6IkFycm93UmlnaHQiLERvd246IkFycm93RG93biIsRGVsOiJEZWxldGUiLFdpbjoiT1MiLE1lbnU6IkNvbnRleHRNZW51IixBcHBzOiJDb250ZXh0TWVudSIsU2Nyb2xsOiJTY3JvbGxMb2NrIixNb3pQcmludGFibGVLZXk6IlVuaWRlbnRpZmllZCJ9LFZ0PXs4OiJCYWNrc3BhY2UiLDk6IlRhYiIsMTI6IkNsZWFyIiwxMzoiRW50ZXIiLDE2OiJTaGlmdCIsMTc6IkNvbnRyb2wiLDE4OiJBbHQiLDE5OiJQYXVzZSIsMjA6IkNhcHNMb2NrIiwyNzoiRXNjYXBlIiwzMjoiICIsMzM6IlBhZ2VVcCIsMzQ6IlBhZ2VEb3duIiwzNToiRW5kIiwzNjoiSG9tZSIsMzc6IkFycm93TGVmdCIsMzg6IkFycm93VXAiLDM5OiJBcnJvd1JpZ2h0Iiw0MDoiQXJyb3dEb3duIiw0NToiSW5zZXJ0Iiw0NjoiRGVsZXRlIiwxMTI6IkYxIiwxMTM6IkYyIiwxMTQ6IkYzIiwxMTU6IkY0IiwxMTY6IkY1IiwxMTc6IkY2IiwxMTg6IkY3IiwxMTk6IkY4IiwxMjA6IkY5IiwxMjE6IkYxMCIsMTIyOiJGMTEiLDEyMzoiRjEyIiwxNDQ6Ik51bUxvY2siLDE0NToiU2Nyb2xsTG9jayIsMjI0OiJNZXRhIn0sWHQ9e0FsdDoiYWx0S2V5IixDb250cm9sOiJjdHJsS2V5IixNZXRhOiJtZXRhS2V5IixTaGlmdDoic2hpZnRLZXkifTtmdW5jdGlvbiBZdChlKXt2YXIgdD10aGlzLm5hdGl2ZUV2ZW50O3JldHVybiB0LmdldE1vZGlmaWVyU3RhdGU/dC5nZXRNb2RpZmllclN0YXRlKGUpOiEhKGU9WHRbZV0pJiYhIXRbZV19ZnVuY3Rpb24gS3QoKXtyZXR1cm4gWXR9Zm9yKHZhciBKdD16dC5leHRlbmQoe2tleTpmdW5jdGlvbihlKXtpZihlLmtleSl7dmFyIHQ9R3RbZS5rZXldfHxlLmtleTtpZigiVW5pZGVudGlmaWVkIiE9PXQpcmV0dXJuIHR9cmV0dXJuImtleXByZXNzIj09PWUudHlwZT8xMz09PShlPUh0KGUpKT8iRW50ZXIiOlN0cmluZy5mcm9tQ2hhckNvZGUoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP1Z0W2Uua2V5Q29kZV18fCJVbmlkZW50aWZpZWQiOiIifSxsb2NhdGlvbjpudWxsLGN0cmxLZXk6bnVsbCxzaGlmdEtleTpudWxsLGFsdEtleTpudWxsLG1ldGFLZXk6bnVsbCxyZXBlYXQ6bnVsbCxsb2NhbGU6bnVsbCxnZXRNb2RpZmllclN0YXRlOkt0LGNoYXJDb2RlOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SHQoZSk6MH0sa2V5Q29kZTpmdW5jdGlvbihlKXtyZXR1cm4ia2V5ZG93biI9PT1lLnR5cGV8fCJrZXl1cCI9PT1lLnR5cGU/ZS5rZXlDb2RlOjB9LHdoaWNoOmZ1bmN0aW9uKGUpe3JldHVybiJrZXlwcmVzcyI9PT1lLnR5cGU/SHQoZSk6ImtleWRvd24iPT09ZS50eXBlfHwia2V5dXAiPT09ZS50eXBlP2Uua2V5Q29kZTowfX0pLFF0PTAsWnQ9MCwkdD0hMSxlcj0hMSx0cj16dC5leHRlbmQoe3NjcmVlblg6bnVsbCxzY3JlZW5ZOm51bGwsY2xpZW50WDpudWxsLGNsaWVudFk6bnVsbCxwYWdlWDpudWxsLHBhZ2VZOm51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsYWx0S2V5Om51bGwsbWV0YUtleTpudWxsLGdldE1vZGlmaWVyU3RhdGU6S3QsYnV0dG9uOm51bGwsYnV0dG9uczpudWxsLHJlbGF0ZWRUYXJnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGUucmVsYXRlZFRhcmdldHx8KGUuZnJvbUVsZW1lbnQ9PT1lLnNyY0VsZW1lbnQ/ZS50b0VsZW1lbnQ6ZS5mcm9tRWxlbWVudCl9LG1vdmVtZW50WDpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRYImluIGUpcmV0dXJuIGUubW92ZW1lbnRYO3ZhciB0PVF0O3JldHVybiBRdD1lLnNjcmVlblgsJHQ/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5YLXQ6MDooJHQ9ITAsMCl9LG1vdmVtZW50WTpmdW5jdGlvbihlKXtpZigibW92ZW1lbnRZImluIGUpcmV0dXJuIGUubW92ZW1lbnRZO3ZhciB0PVp0O3JldHVybiBadD1lLnNjcmVlblksZXI/Im1vdXNlbW92ZSI9PT1lLnR5cGU/ZS5zY3JlZW5ZLXQ6MDooZXI9ITAsMCl9fSkscnI9dHIuZXh0ZW5kKHtwb2ludGVySWQ6bnVsbCx3aWR0aDpudWxsLGhlaWdodDpudWxsLHByZXNzdXJlOm51bGwsdGFuZ2VudGlhbFByZXNzdXJlOm51bGwsdGlsdFg6bnVsbCx0aWx0WTpudWxsLHR3aXN0Om51bGwscG9pbnRlclR5cGU6bnVsbCxpc1ByaW1hcnk6bnVsbH0pLG5yPXRyLmV4dGVuZCh7ZGF0YVRyYW5zZmVyOm51bGx9KSxhcj16dC5leHRlbmQoe3RvdWNoZXM6bnVsbCx0YXJnZXRUb3VjaGVzOm51bGwsY2hhbmdlZFRvdWNoZXM6bnVsbCxhbHRLZXk6bnVsbCxtZXRhS2V5Om51bGwsY3RybEtleTpudWxsLHNoaWZ0S2V5Om51bGwsZ2V0TW9kaWZpZXJTdGF0ZTpLdH0pLGlyPU50LmV4dGVuZCh7cHJvcGVydHlOYW1lOm51bGwsZWxhcHNlZFRpbWU6bnVsbCxwc2V1ZG9FbGVtZW50Om51bGx9KSxvcj10ci5leHRlbmQoe2RlbHRhWDpmdW5jdGlvbihlKXtyZXR1cm4iZGVsdGFYImluIGU/ZS5kZWx0YVg6IndoZWVsRGVsdGFYImluIGU/LWUud2hlZWxEZWx0YVg6MH0sZGVsdGFZOmZ1bmN0aW9uKGUpe3JldHVybiJkZWx0YVkiaW4gZT9lLmRlbHRhWToid2hlZWxEZWx0YVkiaW4gZT8tZS53aGVlbERlbHRhWToid2hlZWxEZWx0YSJpbiBlPy1lLndoZWVsRGVsdGE6MH0sZGVsdGFaOm51bGwsZGVsdGFNb2RlOm51bGx9KSxzcj1bWyJibHVyIiwiYmx1ciIsMF0sWyJjYW5jZWwiLCJjYW5jZWwiLDBdLFsiY2xpY2siLCJjbGljayIsMF0sWyJjbG9zZSIsImNsb3NlIiwwXSxbImNvbnRleHRtZW51IiwiY29udGV4dE1lbnUiLDBdLFsiY29weSIsImNvcHkiLDBdLFsiY3V0IiwiY3V0IiwwXSxbImF1eGNsaWNrIiwiYXV4Q2xpY2siLDBdLFsiZGJsY2xpY2siLCJkb3VibGVDbGljayIsMF0sWyJkcmFnZW5kIiwiZHJhZ0VuZCIsMF0sWyJkcmFnc3RhcnQiLCJkcmFnU3RhcnQiLDBdLFsiZHJvcCIsImRyb3AiLDBdLFsiZm9jdXMiLCJmb2N1cyIsMF0sWyJpbnB1dCIsImlucHV0IiwwXSxbImludmFsaWQiLCJpbnZhbGlkIiwwXSxbImtleWRvd24iLCJrZXlEb3duIiwwXSxbImtleXByZXNzIiwia2V5UHJlc3MiLDBdLFsia2V5dXAiLCJrZXlVcCIsMF0sWyJtb3VzZWRvd24iLCJtb3VzZURvd24iLDBdLFsibW91c2V1cCIsIm1vdXNlVXAiLDBdLFsicGFzdGUiLCJwYXN0ZSIsMF0sWyJwYXVzZSIsInBhdXNlIiwwXSxbInBsYXkiLCJwbGF5IiwwXSxbInBvaW50ZXJjYW5jZWwiLCJwb2ludGVyQ2FuY2VsIiwwXSxbInBvaW50ZXJkb3duIiwicG9pbnRlckRvd24iLDBdLFsicG9pbnRlcnVwIiwicG9pbnRlclVwIiwwXSxbInJhdGVjaGFuZ2UiLCJyYXRlQ2hhbmdlIiwwXSxbInJlc2V0IiwicmVzZXQiLDBdLFsic2Vla2VkIiwic2Vla2VkIiwwXSxbInN1Ym1pdCIsInN1Ym1pdCIsMF0sWyJ0b3VjaGNhbmNlbCIsInRvdWNoQ2FuY2VsIiwwXSxbInRvdWNoZW5kIiwidG91Y2hFbmQiLDBdLFsidG91Y2hzdGFydCIsInRvdWNoU3RhcnQiLDBdLFsidm9sdW1lY2hhbmdlIiwidm9sdW1lQ2hhbmdlIiwwXSxbImRyYWciLCJkcmFnIiwxXSxbImRyYWdlbnRlciIsImRyYWdFbnRlciIsMV0sWyJkcmFnZXhpdCIsImRyYWdFeGl0IiwxXSxbImRyYWdsZWF2ZSIsImRyYWdMZWF2ZSIsMV0sWyJkcmFnb3ZlciIsImRyYWdPdmVyIiwxXSxbIm1vdXNlbW92ZSIsIm1vdXNlTW92ZSIsMV0sWyJtb3VzZW91dCIsIm1vdXNlT3V0IiwxXSxbIm1vdXNlb3ZlciIsIm1vdXNlT3ZlciIsMV0sWyJwb2ludGVybW92ZSIsInBvaW50ZXJNb3ZlIiwxXSxbInBvaW50ZXJvdXQiLCJwb2ludGVyT3V0IiwxXSxbInBvaW50ZXJvdmVyIiwicG9pbnRlck92ZXIiLDFdLFsic2Nyb2xsIiwic2Nyb2xsIiwxXSxbInRvZ2dsZSIsInRvZ2dsZSIsMV0sWyJ0b3VjaG1vdmUiLCJ0b3VjaE1vdmUiLDFdLFsid2hlZWwiLCJ3aGVlbCIsMV0sWyJhYm9ydCIsImFib3J0IiwyXSxbSmUsImFuaW1hdGlvbkVuZCIsMl0sW1FlLCJhbmltYXRpb25JdGVyYXRpb24iLDJdLFtaZSwiYW5pbWF0aW9uU3RhcnQiLDJdLFsiY2FucGxheSIsImNhblBsYXkiLDJdLFsiY2FucGxheXRocm91Z2giLCJjYW5QbGF5VGhyb3VnaCIsMl0sWyJkdXJhdGlvbmNoYW5nZSIsImR1cmF0aW9uQ2hhbmdlIiwyXSxbImVtcHRpZWQiLCJlbXB0aWVkIiwyXSxbImVuY3J5cHRlZCIsImVuY3J5cHRlZCIsMl0sWyJlbmRlZCIsImVuZGVkIiwyXSxbImVycm9yIiwiZXJyb3IiLDJdLFsiZ290cG9pbnRlcmNhcHR1cmUiLCJnb3RQb2ludGVyQ2FwdHVyZSIsMl0sWyJsb2FkIiwibG9hZCIsMl0sWyJsb2FkZWRkYXRhIiwibG9hZGVkRGF0YSIsMl0sWyJsb2FkZWRtZXRhZGF0YSIsImxvYWRlZE1ldGFkYXRhIiwyXSxbImxvYWRzdGFydCIsImxvYWRTdGFydCIsMl0sWyJsb3N0cG9pbnRlcmNhcHR1cmUiLCJsb3N0UG9pbnRlckNhcHR1cmUiLDJdLFsicGxheWluZyIsInBsYXlpbmciLDJdLFsicHJvZ3Jlc3MiLCJwcm9ncmVzcyIsMl0sWyJzZWVraW5nIiwic2Vla2luZyIsMl0sWyJzdGFsbGVkIiwic3RhbGxlZCIsMl0sWyJzdXNwZW5kIiwic3VzcGVuZCIsMl0sWyJ0aW1ldXBkYXRlIiwidGltZVVwZGF0ZSIsMl0sWyRlLCJ0cmFuc2l0aW9uRW5kIiwyXSxbIndhaXRpbmciLCJ3YWl0aW5nIiwyXV0sbHI9e30sY3I9e30sdXI9MDt1cjxzci5sZW5ndGg7dXIrKyl7dmFyIGZyPXNyW3VyXSxocj1mclswXSxkcj1mclsxXSxwcj1mclsyXSxtcj0ib24iKyhkclswXS50b1VwcGVyQ2FzZSgpK2RyLnNsaWNlKDEpKSxncj17cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6bXIsY2FwdHVyZWQ6bXIrIkNhcHR1cmUifSxkZXBlbmRlbmNpZXM6W2hyXSxldmVudFByaW9yaXR5OnByfTtscltkcl09Z3IsY3JbaHJdPWdyfXZhciB2cj17ZXZlbnRUeXBlczpscixnZXRFdmVudFByaW9yaXR5OmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT0oZT1jcltlXSk/ZS5ldmVudFByaW9yaXR5OjJ9LGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9Y3JbZV07aWYoIWEpcmV0dXJuIG51bGw7c3dpdGNoKGUpe2Nhc2Uia2V5cHJlc3MiOmlmKDA9PT1IdChyKSlyZXR1cm4gbnVsbDtjYXNlImtleWRvd24iOmNhc2Uia2V5dXAiOmU9SnQ7YnJlYWs7Y2FzZSJibHVyIjpjYXNlImZvY3VzIjplPVd0O2JyZWFrO2Nhc2UiY2xpY2siOmlmKDI9PT1yLmJ1dHRvbilyZXR1cm4gbnVsbDtjYXNlImF1eGNsaWNrIjpjYXNlImRibGNsaWNrIjpjYXNlIm1vdXNlZG93biI6Y2FzZSJtb3VzZW1vdmUiOmNhc2UibW91c2V1cCI6Y2FzZSJtb3VzZW91dCI6Y2FzZSJtb3VzZW92ZXIiOmNhc2UiY29udGV4dG1lbnUiOmU9dHI7YnJlYWs7Y2FzZSJkcmFnIjpjYXNlImRyYWdlbmQiOmNhc2UiZHJhZ2VudGVyIjpjYXNlImRyYWdleGl0IjpjYXNlImRyYWdsZWF2ZSI6Y2FzZSJkcmFnb3ZlciI6Y2FzZSJkcmFnc3RhcnQiOmNhc2UiZHJvcCI6ZT1ucjticmVhaztjYXNlInRvdWNoY2FuY2VsIjpjYXNlInRvdWNoZW5kIjpjYXNlInRvdWNobW92ZSI6Y2FzZSJ0b3VjaHN0YXJ0IjplPWFyO2JyZWFrO2Nhc2UgSmU6Y2FzZSBRZTpjYXNlIFplOmU9VXQ7YnJlYWs7Y2FzZSAkZTplPWlyO2JyZWFrO2Nhc2Uic2Nyb2xsIjplPXp0O2JyZWFrO2Nhc2Uid2hlZWwiOmU9b3I7YnJlYWs7Y2FzZSJjb3B5IjpjYXNlImN1dCI6Y2FzZSJwYXN0ZSI6ZT1xdDticmVhaztjYXNlImdvdHBvaW50ZXJjYXB0dXJlIjpjYXNlImxvc3Rwb2ludGVyY2FwdHVyZSI6Y2FzZSJwb2ludGVyY2FuY2VsIjpjYXNlInBvaW50ZXJkb3duIjpjYXNlInBvaW50ZXJtb3ZlIjpjYXNlInBvaW50ZXJvdXQiOmNhc2UicG9pbnRlcm92ZXIiOmNhc2UicG9pbnRlcnVwIjplPXJyO2JyZWFrO2RlZmF1bHQ6ZT1OdH1yZXR1cm4gRnQodD1lLmdldFBvb2xlZChhLHQscixuKSksdH19LHlyPWkudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksYnI9aS51bnN0YWJsZV9ydW5XaXRoUHJpb3JpdHksd3I9dnIuZ2V0RXZlbnRQcmlvcml0eSxrcj1bXTtmdW5jdGlvbiBTcihlKXt2YXIgdD1lLnRhcmdldEluc3Qscj10O2Rve2lmKCFyKXtlLmFuY2VzdG9ycy5wdXNoKHIpO2JyZWFrfXZhciBuPXI7aWYoMz09PW4udGFnKW49bi5zdGF0ZU5vZGUuY29udGFpbmVySW5mbztlbHNle2Zvcig7bi5yZXR1cm47KW49bi5yZXR1cm47bj0zIT09bi50YWc/bnVsbDpuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvfWlmKCFuKWJyZWFrOzUhPT0odD1yLnRhZykmJjYhPT10fHxlLmFuY2VzdG9ycy5wdXNoKHIpLHI9bG4obil9d2hpbGUocik7Zm9yKHI9MDtyPGUuYW5jZXN0b3JzLmxlbmd0aDtyKyspe3Q9ZS5hbmNlc3RvcnNbcl07dmFyIGE9UHQoZS5uYXRpdmVFdmVudCk7bj1lLnRvcExldmVsVHlwZTtmb3IodmFyIGk9ZS5uYXRpdmVFdmVudCxvPWUuZXZlbnRTeXN0ZW1GbGFncyxzPW51bGwsbD0wO2w8Zi5sZW5ndGg7bCsrKXt2YXIgYz1mW2xdO2MmJihjPWMuZXh0cmFjdEV2ZW50cyhuLHQsaSxhLG8pKSYmKHM9QyhzLGMpKX1SKHMpfX12YXIgX3I9ITA7ZnVuY3Rpb24geHIoZSx0KXtBcih0LGUsITEpfWZ1bmN0aW9uIEFyKGUsdCxyKXtzd2l0Y2god3IodCkpe2Nhc2UgMDp2YXIgbj1Dci5iaW5kKG51bGwsdCwxKTticmVhaztjYXNlIDE6bj1Qci5iaW5kKG51bGwsdCwxKTticmVhaztkZWZhdWx0Om49VHIuYmluZChudWxsLHQsMSl9cj9lLmFkZEV2ZW50TGlzdGVuZXIodCxuLCEwKTplLmFkZEV2ZW50TGlzdGVuZXIodCxuLCExKX1mdW5jdGlvbiBDcihlLHQscil7dWV8fGxlKCk7dmFyIG49VHIsYT11ZTt1ZT0hMDt0cnl7c2UobixlLHQscil9ZmluYWxseXsodWU9YSl8fGhlKCl9fWZ1bmN0aW9uIFByKGUsdCxyKXticih5cixUci5iaW5kKG51bGwsZSx0LHIpKX1mdW5jdGlvbiBFcihlLHQscixuKXtpZihrci5sZW5ndGgpe3ZhciBhPWtyLnBvcCgpO2EudG9wTGV2ZWxUeXBlPWUsYS5ldmVudFN5c3RlbUZsYWdzPXQsYS5uYXRpdmVFdmVudD1yLGEudGFyZ2V0SW5zdD1uLGU9YX1lbHNlIGU9e3RvcExldmVsVHlwZTplLGV2ZW50U3lzdGVtRmxhZ3M6dCxuYXRpdmVFdmVudDpyLHRhcmdldEluc3Q6bixhbmNlc3RvcnM6W119O3RyeXtpZih0PVNyLHI9ZSxmZSl0KHIsdm9pZCAwKTtlbHNle2ZlPSEwO3RyeXtjZSh0LHIsdm9pZCAwKX1maW5hbGx5e2ZlPSExLGhlKCl9fX1maW5hbGx5e2UudG9wTGV2ZWxUeXBlPW51bGwsZS5uYXRpdmVFdmVudD1udWxsLGUudGFyZ2V0SW5zdD1udWxsLGUuYW5jZXN0b3JzLmxlbmd0aD0wLGtyLmxlbmd0aDwxMCYma3IucHVzaChlKX19ZnVuY3Rpb24gVHIoZSx0LHIpe2lmKF9yKWlmKDA8Y3QubGVuZ3RoJiYtMTxndC5pbmRleE9mKGUpKWU9eXQobnVsbCxlLHQsciksY3QucHVzaChlKTtlbHNle3ZhciBuPVJyKGUsdCxyKTtudWxsPT09bj9idChlLHIpOi0xPGd0LmluZGV4T2YoZSk/KGU9eXQobixlLHQsciksY3QucHVzaChlKSk6ZnVuY3Rpb24oZSx0LHIsbil7c3dpdGNoKHQpe2Nhc2UiZm9jdXMiOnJldHVybiB1dD13dCh1dCxlLHQscixuKSwhMDtjYXNlImRyYWdlbnRlciI6cmV0dXJuIGZ0PXd0KGZ0LGUsdCxyLG4pLCEwO2Nhc2UibW91c2VvdmVyIjpyZXR1cm4gaHQ9d3QoaHQsZSx0LHIsbiksITA7Y2FzZSJwb2ludGVyb3ZlciI6dmFyIGE9bi5wb2ludGVySWQ7cmV0dXJuIGR0LnNldChhLHd0KGR0LmdldChhKXx8bnVsbCxlLHQscixuKSksITA7Y2FzZSJnb3Rwb2ludGVyY2FwdHVyZSI6cmV0dXJuIGE9bi5wb2ludGVySWQscHQuc2V0KGEsd3QocHQuZ2V0KGEpfHxudWxsLGUsdCxyLG4pKSwhMH1yZXR1cm4hMX0obixlLHQscil8fChidChlLHIpLEVyKGUsdCxyLG51bGwpKX19ZnVuY3Rpb24gUnIoZSx0LHIpe3ZhciBuPVB0KHIpO2lmKG51bGwhPT0obj1sbihuKSkpe3ZhciBhPXR0KG4pO2lmKG51bGw9PT1hKW49bnVsbDtlbHNle3ZhciBpPWEudGFnO2lmKDEzPT09aSl7aWYobnVsbCE9PShuPXJ0KGEpKSlyZXR1cm4gbjtuPW51bGx9ZWxzZSBpZigzPT09aSl7aWYoYS5zdGF0ZU5vZGUuaHlkcmF0ZSlyZXR1cm4gMz09PWEudGFnP2Euc3RhdGVOb2RlLmNvbnRhaW5lckluZm86bnVsbDtuPW51bGx9ZWxzZSBhIT09biYmKG49bnVsbCl9fXJldHVybiBFcihlLHQscixuKSxudWxsfWZ1bmN0aW9uIE9yKGUpe2lmKCEkKXJldHVybiExO3ZhciB0PShlPSJvbiIrZSlpbiBkb2N1bWVudDtyZXR1cm4gdHx8KCh0PWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpKS5zZXRBdHRyaWJ1dGUoZSwicmV0dXJuOyIpLHQ9ImZ1bmN0aW9uIj09dHlwZW9mIHRbZV0pLHR9dmFyIElyPW5ldygiZnVuY3Rpb24iPT10eXBlb2YgV2Vha01hcD9XZWFrTWFwOk1hcCk7ZnVuY3Rpb24gRnIoZSl7dmFyIHQ9SXIuZ2V0KGUpO3JldHVybiB2b2lkIDA9PT10JiYodD1uZXcgU2V0LElyLnNldChlLHQpKSx0fWZ1bmN0aW9uIExyKGUsdCxyKXtpZighci5oYXMoZSkpe3N3aXRjaChlKXtjYXNlInNjcm9sbCI6QXIodCwic2Nyb2xsIiwhMCk7YnJlYWs7Y2FzZSJmb2N1cyI6Y2FzZSJibHVyIjpBcih0LCJmb2N1cyIsITApLEFyKHQsImJsdXIiLCEwKSxyLmFkZCgiYmx1ciIpLHIuYWRkKCJmb2N1cyIpO2JyZWFrO2Nhc2UiY2FuY2VsIjpjYXNlImNsb3NlIjpPcihlKSYmQXIodCxlLCEwKTticmVhaztjYXNlImludmFsaWQiOmNhc2Uic3VibWl0IjpjYXNlInJlc2V0IjpicmVhaztkZWZhdWx0Oi0xPT09ZXQuaW5kZXhPZihlKSYmeHIoZSx0KX1yLmFkZChlKX19dmFyIERyPXthbmltYXRpb25JdGVyYXRpb25Db3VudDohMCxib3JkZXJJbWFnZU91dHNldDohMCxib3JkZXJJbWFnZVNsaWNlOiEwLGJvcmRlckltYWdlV2lkdGg6ITAsYm94RmxleDohMCxib3hGbGV4R3JvdXA6ITAsYm94T3JkaW5hbEdyb3VwOiEwLGNvbHVtbkNvdW50OiEwLGNvbHVtbnM6ITAsZmxleDohMCxmbGV4R3JvdzohMCxmbGV4UG9zaXRpdmU6ITAsZmxleFNocmluazohMCxmbGV4TmVnYXRpdmU6ITAsZmxleE9yZGVyOiEwLGdyaWRBcmVhOiEwLGdyaWRSb3c6ITAsZ3JpZFJvd0VuZDohMCxncmlkUm93U3BhbjohMCxncmlkUm93U3RhcnQ6ITAsZ3JpZENvbHVtbjohMCxncmlkQ29sdW1uRW5kOiEwLGdyaWRDb2x1bW5TcGFuOiEwLGdyaWRDb2x1bW5TdGFydDohMCxmb250V2VpZ2h0OiEwLGxpbmVDbGFtcDohMCxsaW5lSGVpZ2h0OiEwLG9wYWNpdHk6ITAsb3JkZXI6ITAsb3JwaGFuczohMCx0YWJTaXplOiEwLHdpZG93czohMCx6SW5kZXg6ITAsem9vbTohMCxmaWxsT3BhY2l0eTohMCxmbG9vZE9wYWNpdHk6ITAsc3RvcE9wYWNpdHk6ITAsc3Ryb2tlRGFzaGFycmF5OiEwLHN0cm9rZURhc2hvZmZzZXQ6ITAsc3Ryb2tlTWl0ZXJsaW1pdDohMCxzdHJva2VPcGFjaXR5OiEwLHN0cm9rZVdpZHRoOiEwfSxOcj1bIldlYmtpdCIsIm1zIiwiTW96IiwiTyJdO2Z1bmN0aW9uIE1yKGUsdCxyKXtyZXR1cm4gbnVsbD09dHx8ImJvb2xlYW4iPT10eXBlb2YgdHx8IiI9PT10PyIiOnJ8fCJudW1iZXIiIT10eXBlb2YgdHx8MD09PXR8fERyLmhhc093blByb3BlcnR5KGUpJiZEcltlXT8oIiIrdCkudHJpbSgpOnQrInB4In1mdW5jdGlvbiBqcihlLHQpe2Zvcih2YXIgciBpbiBlPWUuc3R5bGUsdClpZih0Lmhhc093blByb3BlcnR5KHIpKXt2YXIgbj0wPT09ci5pbmRleE9mKCItLSIpLGE9TXIocix0W3JdLG4pOyJmbG9hdCI9PT1yJiYocj0iY3NzRmxvYXQiKSxuP2Uuc2V0UHJvcGVydHkocixhKTplW3JdPWF9fU9iamVjdC5rZXlzKERyKS5mb3JFYWNoKChmdW5jdGlvbihlKXtOci5mb3JFYWNoKChmdW5jdGlvbih0KXt0PXQrZS5jaGFyQXQoMCkudG9VcHBlckNhc2UoKStlLnN1YnN0cmluZygxKSxEclt0XT1EcltlXX0pKX0pKTt2YXIgQnI9YSh7bWVudWl0ZW06ITB9LHthcmVhOiEwLGJhc2U6ITAsYnI6ITAsY29sOiEwLGVtYmVkOiEwLGhyOiEwLGltZzohMCxpbnB1dDohMCxrZXlnZW46ITAsbGluazohMCxtZXRhOiEwLHBhcmFtOiEwLHNvdXJjZTohMCx0cmFjazohMCx3YnI6ITB9KTtmdW5jdGlvbiBVcihlLHQpe2lmKHQpe2lmKEJyW2VdJiYobnVsbCE9dC5jaGlsZHJlbnx8bnVsbCE9dC5kYW5nZXJvdXNseVNldElubmVySFRNTCkpdGhyb3cgRXJyb3IobygxMzcsZSwiIikpO2lmKG51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpe2lmKG51bGwhPXQuY2hpbGRyZW4pdGhyb3cgRXJyb3Iobyg2MCkpO2lmKCEoIm9iamVjdCI9PXR5cGVvZiB0LmRhbmdlcm91c2x5U2V0SW5uZXJIVE1MJiYiX19odG1sImluIHQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwpKXRocm93IEVycm9yKG8oNjEpKX1pZihudWxsIT10LnN0eWxlJiYib2JqZWN0IiE9dHlwZW9mIHQuc3R5bGUpdGhyb3cgRXJyb3Iobyg2MiwiIikpfX1mdW5jdGlvbiBxcihlLHQpe2lmKC0xPT09ZS5pbmRleE9mKCItIikpcmV0dXJuInN0cmluZyI9PXR5cGVvZiB0LmlzO3N3aXRjaChlKXtjYXNlImFubm90YXRpb24teG1sIjpjYXNlImNvbG9yLXByb2ZpbGUiOmNhc2UiZm9udC1mYWNlIjpjYXNlImZvbnQtZmFjZS1zcmMiOmNhc2UiZm9udC1mYWNlLXVyaSI6Y2FzZSJmb250LWZhY2UtZm9ybWF0IjpjYXNlImZvbnQtZmFjZS1uYW1lIjpjYXNlIm1pc3NpbmctZ2x5cGgiOnJldHVybiExO2RlZmF1bHQ6cmV0dXJuITB9fWZ1bmN0aW9uIHpyKGUsdCl7dmFyIHI9RnIoZT05PT09ZS5ub2RlVHlwZXx8MTE9PT1lLm5vZGVUeXBlP2U6ZS5vd25lckRvY3VtZW50KTt0PXBbdF07Zm9yKHZhciBuPTA7bjx0Lmxlbmd0aDtuKyspTHIodFtuXSxlLHIpfWZ1bmN0aW9uIFdyKCl7fWZ1bmN0aW9uIEhyKGUpe2lmKHZvaWQgMD09PShlPWV8fCgidW5kZWZpbmVkIiE9dHlwZW9mIGRvY3VtZW50P2RvY3VtZW50OnZvaWQgMCkpKXJldHVybiBudWxsO3RyeXtyZXR1cm4gZS5hY3RpdmVFbGVtZW50fHxlLmJvZHl9Y2F0Y2godCl7cmV0dXJuIGUuYm9keX19ZnVuY3Rpb24gR3IoZSl7Zm9yKDtlJiZlLmZpcnN0Q2hpbGQ7KWU9ZS5maXJzdENoaWxkO3JldHVybiBlfWZ1bmN0aW9uIFZyKGUsdCl7dmFyIHIsbj1HcihlKTtmb3IoZT0wO247KXtpZigzPT09bi5ub2RlVHlwZSl7aWYocj1lK24udGV4dENvbnRlbnQubGVuZ3RoLGU8PXQmJnI+PXQpcmV0dXJue25vZGU6bixvZmZzZXQ6dC1lfTtlPXJ9ZTp7Zm9yKDtuOyl7aWYobi5uZXh0U2libGluZyl7bj1uLm5leHRTaWJsaW5nO2JyZWFrIGV9bj1uLnBhcmVudE5vZGV9bj12b2lkIDB9bj1HcihuKX19ZnVuY3Rpb24gWHIoKXtmb3IodmFyIGU9d2luZG93LHQ9SHIoKTt0IGluc3RhbmNlb2YgZS5IVE1MSUZyYW1lRWxlbWVudDspe3RyeXt2YXIgcj0ic3RyaW5nIj09dHlwZW9mIHQuY29udGVudFdpbmRvdy5sb2NhdGlvbi5ocmVmfWNhdGNoKGUpe3I9ITF9aWYoIXIpYnJlYWs7dD1IcigoZT10LmNvbnRlbnRXaW5kb3cpLmRvY3VtZW50KX1yZXR1cm4gdH1mdW5jdGlvbiBZcihlKXt2YXIgdD1lJiZlLm5vZGVOYW1lJiZlLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7cmV0dXJuIHQmJigiaW5wdXQiPT09dCYmKCJ0ZXh0Ij09PWUudHlwZXx8InNlYXJjaCI9PT1lLnR5cGV8fCJ0ZWwiPT09ZS50eXBlfHwidXJsIj09PWUudHlwZXx8InBhc3N3b3JkIj09PWUudHlwZSl8fCJ0ZXh0YXJlYSI9PT10fHwidHJ1ZSI9PT1lLmNvbnRlbnRFZGl0YWJsZSl9dmFyIEtyPW51bGwsSnI9bnVsbDtmdW5jdGlvbiBRcihlLHQpe3N3aXRjaChlKXtjYXNlImJ1dHRvbiI6Y2FzZSJpbnB1dCI6Y2FzZSJzZWxlY3QiOmNhc2UidGV4dGFyZWEiOnJldHVybiEhdC5hdXRvRm9jdXN9cmV0dXJuITF9ZnVuY3Rpb24gWnIoZSx0KXtyZXR1cm4idGV4dGFyZWEiPT09ZXx8Im9wdGlvbiI9PT1lfHwibm9zY3JpcHQiPT09ZXx8InN0cmluZyI9PXR5cGVvZiB0LmNoaWxkcmVufHwibnVtYmVyIj09dHlwZW9mIHQuY2hpbGRyZW58fCJvYmplY3QiPT10eXBlb2YgdC5kYW5nZXJvdXNseVNldElubmVySFRNTCYmbnVsbCE9PXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwmJm51bGwhPXQuZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwuX19odG1sfXZhciAkcj0iZnVuY3Rpb24iPT10eXBlb2Ygc2V0VGltZW91dD9zZXRUaW1lb3V0OnZvaWQgMCxlbj0iZnVuY3Rpb24iPT10eXBlb2YgY2xlYXJUaW1lb3V0P2NsZWFyVGltZW91dDp2b2lkIDA7ZnVuY3Rpb24gdG4oZSl7Zm9yKDtudWxsIT1lO2U9ZS5uZXh0U2libGluZyl7dmFyIHQ9ZS5ub2RlVHlwZTtpZigxPT09dHx8Mz09PXQpYnJlYWt9cmV0dXJuIGV9ZnVuY3Rpb24gcm4oZSl7ZT1lLnByZXZpb3VzU2libGluZztmb3IodmFyIHQ9MDtlOyl7aWYoOD09PWUubm9kZVR5cGUpe3ZhciByPWUuZGF0YTtpZigiJCI9PT1yfHwiJCEiPT09cnx8IiQ/Ij09PXIpe2lmKDA9PT10KXJldHVybiBlO3QtLX1lbHNlIi8kIj09PXImJnQrK31lPWUucHJldmlvdXNTaWJsaW5nfXJldHVybiBudWxsfXZhciBubj1NYXRoLnJhbmRvbSgpLnRvU3RyaW5nKDM2KS5zbGljZSgyKSxhbj0iX19yZWFjdEludGVybmFsSW5zdGFuY2UkIitubixvbj0iX19yZWFjdEV2ZW50SGFuZGxlcnMkIitubixzbj0iX19yZWFjdENvbnRhaW5lcmUkIitubjtmdW5jdGlvbiBsbihlKXt2YXIgdD1lW2FuXTtpZih0KXJldHVybiB0O2Zvcih2YXIgcj1lLnBhcmVudE5vZGU7cjspe2lmKHQ9cltzbl18fHJbYW5dKXtpZihyPXQuYWx0ZXJuYXRlLG51bGwhPT10LmNoaWxkfHxudWxsIT09ciYmbnVsbCE9PXIuY2hpbGQpZm9yKGU9cm4oZSk7bnVsbCE9PWU7KXtpZihyPWVbYW5dKXJldHVybiByO2U9cm4oZSl9cmV0dXJuIHR9cj0oZT1yKS5wYXJlbnROb2RlfXJldHVybiBudWxsfWZ1bmN0aW9uIGNuKGUpe3JldHVybiEoZT1lW2FuXXx8ZVtzbl0pfHw1IT09ZS50YWcmJjYhPT1lLnRhZyYmMTMhPT1lLnRhZyYmMyE9PWUudGFnP251bGw6ZX1mdW5jdGlvbiB1bihlKXtpZig1PT09ZS50YWd8fDY9PT1lLnRhZylyZXR1cm4gZS5zdGF0ZU5vZGU7dGhyb3cgRXJyb3IobygzMykpfWZ1bmN0aW9uIGZuKGUpe3JldHVybiBlW29uXXx8bnVsbH12YXIgaG49bnVsbCxkbj1udWxsLHBuPW51bGw7ZnVuY3Rpb24gbW4oKXtpZihwbilyZXR1cm4gcG47dmFyIGUsdCxyPWRuLG49ci5sZW5ndGgsYT0idmFsdWUiaW4gaG4/aG4udmFsdWU6aG4udGV4dENvbnRlbnQsaT1hLmxlbmd0aDtmb3IoZT0wO2U8biYmcltlXT09PWFbZV07ZSsrKTt2YXIgbz1uLWU7Zm9yKHQ9MTt0PD1vJiZyW24tdF09PT1hW2ktdF07dCsrKTtyZXR1cm4gcG49YS5zbGljZShlLDE8dD8xLXQ6dm9pZCAwKX12YXIgZ249TnQuZXh0ZW5kKHtkYXRhOm51bGx9KSx2bj1OdC5leHRlbmQoe2RhdGE6bnVsbH0pLHluPVs5LDEzLDI3LDMyXSxibj0kJiYiQ29tcG9zaXRpb25FdmVudCJpbiB3aW5kb3csd249bnVsbDskJiYiZG9jdW1lbnRNb2RlImluIGRvY3VtZW50JiYod249ZG9jdW1lbnQuZG9jdW1lbnRNb2RlKTt2YXIga249JCYmIlRleHRFdmVudCJpbiB3aW5kb3cmJiF3bixTbj0kJiYoIWJufHx3biYmODx3biYmMTE+PXduKSxfbj1TdHJpbmcuZnJvbUNoYXJDb2RlKDMyKSx4bj17YmVmb3JlSW5wdXQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkJlZm9yZUlucHV0IixjYXB0dXJlZDoib25CZWZvcmVJbnB1dENhcHR1cmUifSxkZXBlbmRlbmNpZXM6WyJjb21wb3NpdGlvbmVuZCIsImtleXByZXNzIiwidGV4dElucHV0IiwicGFzdGUiXX0sY29tcG9zaXRpb25FbmQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uRW5kIixjYXB0dXJlZDoib25Db21wb3NpdGlvbkVuZENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29tcG9zaXRpb25lbmQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uU3RhcnQ6e3BoYXNlZFJlZ2lzdHJhdGlvbk5hbWVzOntidWJibGVkOiJvbkNvbXBvc2l0aW9uU3RhcnQiLGNhcHR1cmVkOiJvbkNvbXBvc2l0aW9uU3RhcnRDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9uc3RhcnQga2V5ZG93biBrZXlwcmVzcyBrZXl1cCBtb3VzZWRvd24iLnNwbGl0KCIgIil9LGNvbXBvc2l0aW9uVXBkYXRlOntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25Db21wb3NpdGlvblVwZGF0ZSIsY2FwdHVyZWQ6Im9uQ29tcG9zaXRpb25VcGRhdGVDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNvbXBvc2l0aW9udXBkYXRlIGtleWRvd24ga2V5cHJlc3Mga2V5dXAgbW91c2Vkb3duIi5zcGxpdCgiICIpfX0sQW49ITE7ZnVuY3Rpb24gQ24oZSx0KXtzd2l0Y2goZSl7Y2FzZSJrZXl1cCI6cmV0dXJuLTEhPT15bi5pbmRleE9mKHQua2V5Q29kZSk7Y2FzZSJrZXlkb3duIjpyZXR1cm4gMjI5IT09dC5rZXlDb2RlO2Nhc2Uia2V5cHJlc3MiOmNhc2UibW91c2Vkb3duIjpjYXNlImJsdXIiOnJldHVybiEwO2RlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIFBuKGUpe3JldHVybiJvYmplY3QiPT10eXBlb2YoZT1lLmRldGFpbCkmJiJkYXRhImluIGU/ZS5kYXRhOm51bGx9dmFyIEVuPSExO3ZhciBUbj17ZXZlbnRUeXBlczp4bixleHRyYWN0RXZlbnRzOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhO2lmKGJuKWU6e3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uc3RhcnQiOnZhciBpPXhuLmNvbXBvc2l0aW9uU3RhcnQ7YnJlYWsgZTtjYXNlImNvbXBvc2l0aW9uZW5kIjppPXhuLmNvbXBvc2l0aW9uRW5kO2JyZWFrIGU7Y2FzZSJjb21wb3NpdGlvbnVwZGF0ZSI6aT14bi5jb21wb3NpdGlvblVwZGF0ZTticmVhayBlfWk9dm9pZCAwfWVsc2UgRW4/Q24oZSxyKSYmKGk9eG4uY29tcG9zaXRpb25FbmQpOiJrZXlkb3duIj09PWUmJjIyOT09PXIua2V5Q29kZSYmKGk9eG4uY29tcG9zaXRpb25TdGFydCk7cmV0dXJuIGk/KFNuJiYia28iIT09ci5sb2NhbGUmJihFbnx8aSE9PXhuLmNvbXBvc2l0aW9uU3RhcnQ/aT09PXhuLmNvbXBvc2l0aW9uRW5kJiZFbiYmKGE9bW4oKSk6KGRuPSJ2YWx1ZSJpbihobj1uKT9obi52YWx1ZTpobi50ZXh0Q29udGVudCxFbj0hMCkpLGk9Z24uZ2V0UG9vbGVkKGksdCxyLG4pLGE/aS5kYXRhPWE6bnVsbCE9PShhPVBuKHIpKSYmKGkuZGF0YT1hKSxGdChpKSxhPWkpOmE9bnVsbCwoZT1rbj9mdW5jdGlvbihlLHQpe3N3aXRjaChlKXtjYXNlImNvbXBvc2l0aW9uZW5kIjpyZXR1cm4gUG4odCk7Y2FzZSJrZXlwcmVzcyI6cmV0dXJuIDMyIT09dC53aGljaD9udWxsOihBbj0hMCxfbik7Y2FzZSJ0ZXh0SW5wdXQiOnJldHVybihlPXQuZGF0YSk9PT1fbiYmQW4/bnVsbDplO2RlZmF1bHQ6cmV0dXJuIG51bGx9fShlLHIpOmZ1bmN0aW9uKGUsdCl7aWYoRW4pcmV0dXJuImNvbXBvc2l0aW9uZW5kIj09PWV8fCFibiYmQ24oZSx0KT8oZT1tbigpLHBuPWRuPWhuPW51bGwsRW49ITEsZSk6bnVsbDtzd2l0Y2goZSl7Y2FzZSJwYXN0ZSI6cmV0dXJuIG51bGw7Y2FzZSJrZXlwcmVzcyI6aWYoISh0LmN0cmxLZXl8fHQuYWx0S2V5fHx0Lm1ldGFLZXkpfHx0LmN0cmxLZXkmJnQuYWx0S2V5KXtpZih0LmNoYXImJjE8dC5jaGFyLmxlbmd0aClyZXR1cm4gdC5jaGFyO2lmKHQud2hpY2gpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUodC53aGljaCl9cmV0dXJuIG51bGw7Y2FzZSJjb21wb3NpdGlvbmVuZCI6cmV0dXJuIFNuJiYia28iIT09dC5sb2NhbGU/bnVsbDp0LmRhdGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19KGUscikpPygodD12bi5nZXRQb29sZWQoeG4uYmVmb3JlSW5wdXQsdCxyLG4pKS5kYXRhPWUsRnQodCkpOnQ9bnVsbCxudWxsPT09YT90Om51bGw9PT10P2E6W2EsdF19fSxSbj17Y29sb3I6ITAsZGF0ZTohMCxkYXRldGltZTohMCwiZGF0ZXRpbWUtbG9jYWwiOiEwLGVtYWlsOiEwLG1vbnRoOiEwLG51bWJlcjohMCxwYXNzd29yZDohMCxyYW5nZTohMCxzZWFyY2g6ITAsdGVsOiEwLHRleHQ6ITAsdGltZTohMCx1cmw6ITAsd2VlazohMH07ZnVuY3Rpb24gT24oZSl7dmFyIHQ9ZSYmZS5ub2RlTmFtZSYmZS5ub2RlTmFtZS50b0xvd2VyQ2FzZSgpO3JldHVybiJpbnB1dCI9PT10PyEhUm5bZS50eXBlXToidGV4dGFyZWEiPT09dH12YXIgSW49e2NoYW5nZTp7cGhhc2VkUmVnaXN0cmF0aW9uTmFtZXM6e2J1YmJsZWQ6Im9uQ2hhbmdlIixjYXB0dXJlZDoib25DaGFuZ2VDYXB0dXJlIn0sZGVwZW5kZW5jaWVzOiJibHVyIGNoYW5nZSBjbGljayBmb2N1cyBpbnB1dCBrZXlkb3duIGtleXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19O2Z1bmN0aW9uIEZuKGUsdCxyKXtyZXR1cm4oZT1OdC5nZXRQb29sZWQoSW4uY2hhbmdlLGUsdCxyKSkudHlwZT0iY2hhbmdlIixhZShyKSxGdChlKSxlfXZhciBMbj1udWxsLERuPW51bGw7ZnVuY3Rpb24gTm4oZSl7UihlKX1mdW5jdGlvbiBNbihlKXtpZihBZSh1bihlKSkpcmV0dXJuIGV9ZnVuY3Rpb24gam4oZSx0KXtpZigiY2hhbmdlIj09PWUpcmV0dXJuIHR9dmFyIEJuPSExO2Z1bmN0aW9uIFVuKCl7TG4mJihMbi5kZXRhY2hFdmVudCgib25wcm9wZXJ0eWNoYW5nZSIscW4pLERuPUxuPW51bGwpfWZ1bmN0aW9uIHFuKGUpe2lmKCJ2YWx1ZSI9PT1lLnByb3BlcnR5TmFtZSYmTW4oRG4pKWlmKGU9Rm4oRG4sZSxQdChlKSksdWUpUihlKTtlbHNle3VlPSEwO3RyeXtvZShObixlKX1maW5hbGx5e3VlPSExLGhlKCl9fX1mdW5jdGlvbiB6bihlLHQscil7ImZvY3VzIj09PWU/KFVuKCksRG49ciwoTG49dCkuYXR0YWNoRXZlbnQoIm9ucHJvcGVydHljaGFuZ2UiLHFuKSk6ImJsdXIiPT09ZSYmVW4oKX1mdW5jdGlvbiBXbihlKXtpZigic2VsZWN0aW9uY2hhbmdlIj09PWV8fCJrZXl1cCI9PT1lfHwia2V5ZG93biI9PT1lKXJldHVybiBNbihEbil9ZnVuY3Rpb24gSG4oZSx0KXtpZigiY2xpY2siPT09ZSlyZXR1cm4gTW4odCl9ZnVuY3Rpb24gR24oZSx0KXtpZigiaW5wdXQiPT09ZXx8ImNoYW5nZSI9PT1lKXJldHVybiBNbih0KX0kJiYoQm49T3IoImlucHV0IikmJighZG9jdW1lbnQuZG9jdW1lbnRNb2RlfHw5PGRvY3VtZW50LmRvY3VtZW50TW9kZSkpO3ZhciBWbixYbj17ZXZlbnRUeXBlczpJbixfaXNJbnB1dEV2ZW50U3VwcG9ydGVkOkJuLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dD91bih0KTp3aW5kb3csaT1hLm5vZGVOYW1lJiZhLm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk7aWYoInNlbGVjdCI9PT1pfHwiaW5wdXQiPT09aSYmImZpbGUiPT09YS50eXBlKXZhciBvPWpuO2Vsc2UgaWYoT24oYSkpaWYoQm4pbz1HbjtlbHNle289V247dmFyIHM9em59ZWxzZShpPWEubm9kZU5hbWUpJiYiaW5wdXQiPT09aS50b0xvd2VyQ2FzZSgpJiYoImNoZWNrYm94Ij09PWEudHlwZXx8InJhZGlvIj09PWEudHlwZSkmJihvPUhuKTtpZihvJiYobz1vKGUsdCkpKXJldHVybiBGbihvLHIsbik7cyYmcyhlLGEsdCksImJsdXIiPT09ZSYmKGU9YS5fd3JhcHBlclN0YXRlKSYmZS5jb250cm9sbGVkJiYibnVtYmVyIj09PWEudHlwZSYmT2UoYSwibnVtYmVyIixhLnZhbHVlKX19LFluPXttb3VzZUVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvbk1vdXNlRW50ZXIiLGRlcGVuZGVuY2llczpbIm1vdXNlb3V0IiwibW91c2VvdmVyIl19LG1vdXNlTGVhdmU6e3JlZ2lzdHJhdGlvbk5hbWU6Im9uTW91c2VMZWF2ZSIsZGVwZW5kZW5jaWVzOlsibW91c2VvdXQiLCJtb3VzZW92ZXIiXX0scG9pbnRlckVudGVyOntyZWdpc3RyYXRpb25OYW1lOiJvblBvaW50ZXJFbnRlciIsZGVwZW5kZW5jaWVzOlsicG9pbnRlcm91dCIsInBvaW50ZXJvdmVyIl19LHBvaW50ZXJMZWF2ZTp7cmVnaXN0cmF0aW9uTmFtZToib25Qb2ludGVyTGVhdmUiLGRlcGVuZGVuY2llczpbInBvaW50ZXJvdXQiLCJwb2ludGVyb3ZlciJdfX0sS249e2V2ZW50VHlwZXM6WW4sZXh0cmFjdEV2ZW50czpmdW5jdGlvbihlLHQscixuLGEpe3ZhciBpPSJtb3VzZW92ZXIiPT09ZXx8InBvaW50ZXJvdmVyIj09PWUsbz0ibW91c2VvdXQiPT09ZXx8InBvaW50ZXJvdXQiPT09ZTtpZihpJiYwPT0oMzImYSkmJihyLnJlbGF0ZWRUYXJnZXR8fHIuZnJvbUVsZW1lbnQpfHwhbyYmIWkpcmV0dXJuIG51bGw7aWYoYT1uLndpbmRvdz09PW4/bjooYT1uLm93bmVyRG9jdW1lbnQpP2EuZGVmYXVsdFZpZXd8fGEucGFyZW50V2luZG93OndpbmRvdyxvPyhvPXQsbnVsbCE9PSh0PSh0PXIucmVsYXRlZFRhcmdldHx8ci50b0VsZW1lbnQpP2xuKHQpOm51bGwpJiYodCE9PShpPXR0KHQpKXx8NSE9PXQudGFnJiY2IT09dC50YWcpJiYodD1udWxsKSk6bz1udWxsLG89PT10KXJldHVybiBudWxsO2lmKCJtb3VzZW91dCI9PT1lfHwibW91c2VvdmVyIj09PWUpdmFyIHM9dHIsbD1Zbi5tb3VzZUxlYXZlLGM9WW4ubW91c2VFbnRlcix1PSJtb3VzZSI7ZWxzZSJwb2ludGVyb3V0IiE9PWUmJiJwb2ludGVyb3ZlciIhPT1lfHwocz1ycixsPVluLnBvaW50ZXJMZWF2ZSxjPVluLnBvaW50ZXJFbnRlcix1PSJwb2ludGVyIik7aWYoZT1udWxsPT1vP2E6dW4obyksYT1udWxsPT10P2E6dW4odCksKGw9cy5nZXRQb29sZWQobCxvLHIsbikpLnR5cGU9dSsibGVhdmUiLGwudGFyZ2V0PWUsbC5yZWxhdGVkVGFyZ2V0PWEsKG49cy5nZXRQb29sZWQoYyx0LHIsbikpLnR5cGU9dSsiZW50ZXIiLG4udGFyZ2V0PWEsbi5yZWxhdGVkVGFyZ2V0PWUsdT10LChzPW8pJiZ1KWU6e2ZvcihlPXUsbz0wLHQ9Yz1zO3Q7dD1FdCh0KSlvKys7Zm9yKHQ9MCxhPWU7YTthPUV0KGEpKXQrKztmb3IoOzA8by10OyljPUV0KGMpLG8tLTtmb3IoOzA8dC1vOyllPUV0KGUpLHQtLTtmb3IoO28tLTspe2lmKGM9PT1lfHxjPT09ZS5hbHRlcm5hdGUpYnJlYWsgZTtjPUV0KGMpLGU9RXQoZSl9Yz1udWxsfWVsc2UgYz1udWxsO2ZvcihlPWMsYz1bXTtzJiZzIT09ZSYmKG51bGw9PT0obz1zLmFsdGVybmF0ZSl8fG8hPT1lKTspYy5wdXNoKHMpLHM9RXQocyk7Zm9yKHM9W107dSYmdSE9PWUmJihudWxsPT09KG89dS5hbHRlcm5hdGUpfHxvIT09ZSk7KXMucHVzaCh1KSx1PUV0KHUpO2Zvcih1PTA7dTxjLmxlbmd0aDt1KyspT3QoY1t1XSwiYnViYmxlZCIsbCk7Zm9yKHU9cy5sZW5ndGg7MDx1LS07KU90KHNbdV0sImNhcHR1cmVkIixuKTtyZXR1cm4gcj09PVZuPyhWbj1udWxsLFtsXSk6KFZuPXIsW2wsbl0pfX07dmFyIEpuPSJmdW5jdGlvbiI9PXR5cGVvZiBPYmplY3QuaXM/T2JqZWN0LmlzOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU9PT10JiYoMCE9PWV8fDEvZT09MS90KXx8ZSE9ZSYmdCE9dH0sUW49T2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eTtmdW5jdGlvbiBabihlLHQpe2lmKEpuKGUsdCkpcmV0dXJuITA7aWYoIm9iamVjdCIhPXR5cGVvZiBlfHxudWxsPT09ZXx8Im9iamVjdCIhPXR5cGVvZiB0fHxudWxsPT09dClyZXR1cm4hMTt2YXIgcj1PYmplY3Qua2V5cyhlKSxuPU9iamVjdC5rZXlzKHQpO2lmKHIubGVuZ3RoIT09bi5sZW5ndGgpcmV0dXJuITE7Zm9yKG49MDtuPHIubGVuZ3RoO24rKylpZighUW4uY2FsbCh0LHJbbl0pfHwhSm4oZVtyW25dXSx0W3Jbbl1dKSlyZXR1cm4hMTtyZXR1cm4hMH12YXIgJG49JCYmImRvY3VtZW50TW9kZSJpbiBkb2N1bWVudCYmMTE+PWRvY3VtZW50LmRvY3VtZW50TW9kZSxlYT17c2VsZWN0OntwaGFzZWRSZWdpc3RyYXRpb25OYW1lczp7YnViYmxlZDoib25TZWxlY3QiLGNhcHR1cmVkOiJvblNlbGVjdENhcHR1cmUifSxkZXBlbmRlbmNpZXM6ImJsdXIgY29udGV4dG1lbnUgZHJhZ2VuZCBmb2N1cyBrZXlkb3duIGtleXVwIG1vdXNlZG93biBtb3VzZXVwIHNlbGVjdGlvbmNoYW5nZSIuc3BsaXQoIiAiKX19LHRhPW51bGwscmE9bnVsbCxuYT1udWxsLGFhPSExO2Z1bmN0aW9uIGlhKGUsdCl7dmFyIHI9dC53aW5kb3c9PT10P3QuZG9jdW1lbnQ6OT09PXQubm9kZVR5cGU/dDp0Lm93bmVyRG9jdW1lbnQ7cmV0dXJuIGFhfHxudWxsPT10YXx8dGEhPT1IcihyKT9udWxsOigic2VsZWN0aW9uU3RhcnQiaW4ocj10YSkmJllyKHIpP3I9e3N0YXJ0OnIuc2VsZWN0aW9uU3RhcnQsZW5kOnIuc2VsZWN0aW9uRW5kfTpyPXthbmNob3JOb2RlOihyPShyLm93bmVyRG9jdW1lbnQmJnIub3duZXJEb2N1bWVudC5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24oKSkuYW5jaG9yTm9kZSxhbmNob3JPZmZzZXQ6ci5hbmNob3JPZmZzZXQsZm9jdXNOb2RlOnIuZm9jdXNOb2RlLGZvY3VzT2Zmc2V0OnIuZm9jdXNPZmZzZXR9LG5hJiZabihuYSxyKT9udWxsOihuYT1yLChlPU50LmdldFBvb2xlZChlYS5zZWxlY3QscmEsZSx0KSkudHlwZT0ic2VsZWN0IixlLnRhcmdldD10YSxGdChlKSxlKSl9dmFyIG9hPXtldmVudFR5cGVzOmVhLGV4dHJhY3RFdmVudHM6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaT1uLndpbmRvdz09PW4/bi5kb2N1bWVudDo5PT09bi5ub2RlVHlwZT9uOm4ub3duZXJEb2N1bWVudDtpZighKGE9IWkpKXtlOntpPUZyKGkpLGE9cC5vblNlbGVjdDtmb3IodmFyIG89MDtvPGEubGVuZ3RoO28rKylpZighaS5oYXMoYVtvXSkpe2k9ITE7YnJlYWsgZX1pPSEwfWE9IWl9aWYoYSlyZXR1cm4gbnVsbDtzd2l0Y2goaT10P3VuKHQpOndpbmRvdyxlKXtjYXNlImZvY3VzIjooT24oaSl8fCJ0cnVlIj09PWkuY29udGVudEVkaXRhYmxlKSYmKHRhPWkscmE9dCxuYT1udWxsKTticmVhaztjYXNlImJsdXIiOm5hPXJhPXRhPW51bGw7YnJlYWs7Y2FzZSJtb3VzZWRvd24iOmFhPSEwO2JyZWFrO2Nhc2UiY29udGV4dG1lbnUiOmNhc2UibW91c2V1cCI6Y2FzZSJkcmFnZW5kIjpyZXR1cm4gYWE9ITEsaWEocixuKTtjYXNlInNlbGVjdGlvbmNoYW5nZSI6aWYoJG4pYnJlYWs7Y2FzZSJrZXlkb3duIjpjYXNlImtleXVwIjpyZXR1cm4gaWEocixuKX1yZXR1cm4gbnVsbH19O08uaW5qZWN0RXZlbnRQbHVnaW5PcmRlcigiUmVzcG9uZGVyRXZlbnRQbHVnaW4gU2ltcGxlRXZlbnRQbHVnaW4gRW50ZXJMZWF2ZUV2ZW50UGx1Z2luIENoYW5nZUV2ZW50UGx1Z2luIFNlbGVjdEV2ZW50UGx1Z2luIEJlZm9yZUlucHV0RXZlbnRQbHVnaW4iLnNwbGl0KCIgIikpLFM9Zm4sXz1jbix4PXVuLE8uaW5qZWN0RXZlbnRQbHVnaW5zQnlOYW1lKHtTaW1wbGVFdmVudFBsdWdpbjp2cixFbnRlckxlYXZlRXZlbnRQbHVnaW46S24sQ2hhbmdlRXZlbnRQbHVnaW46WG4sU2VsZWN0RXZlbnRQbHVnaW46b2EsQmVmb3JlSW5wdXRFdmVudFBsdWdpbjpUbn0pLG5ldyBTZXQ7dmFyIHNhPVtdLGxhPS0xO2Z1bmN0aW9uIGNhKGUpezA+bGF8fChlLmN1cnJlbnQ9c2FbbGFdLHNhW2xhXT1udWxsLGxhLS0pfWZ1bmN0aW9uIHVhKGUsdCl7bGErKyxzYVtsYV09ZS5jdXJyZW50LGUuY3VycmVudD10fXZhciBmYT17fSxoYT17Y3VycmVudDpmYX0sZGE9e2N1cnJlbnQ6ITF9LHBhPWZhO2Z1bmN0aW9uIG1hKGUsdCl7dmFyIHI9ZS50eXBlLmNvbnRleHRUeXBlcztpZighcilyZXR1cm4gZmE7dmFyIG49ZS5zdGF0ZU5vZGU7aWYobiYmbi5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PT09dClyZXR1cm4gbi5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dDt2YXIgYSxpPXt9O2ZvcihhIGluIHIpaVthXT10W2FdO3JldHVybiBuJiYoKGU9ZS5zdGF0ZU5vZGUpLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkVW5tYXNrZWRDaGlsZENvbnRleHQ9dCxlLl9fcmVhY3RJbnRlcm5hbE1lbW9pemVkTWFza2VkQ2hpbGRDb250ZXh0PWkpLGl9ZnVuY3Rpb24gZ2EoZSl7cmV0dXJuIG51bGwhPShlPWUuY2hpbGRDb250ZXh0VHlwZXMpfWZ1bmN0aW9uIHZhKGUpe2NhKGRhKSxjYShoYSl9ZnVuY3Rpb24geWEoZSl7Y2EoZGEpLGNhKGhhKX1mdW5jdGlvbiBiYShlLHQscil7aWYoaGEuY3VycmVudCE9PWZhKXRocm93IEVycm9yKG8oMTY4KSk7dWEoaGEsdCksdWEoZGEscil9ZnVuY3Rpb24gd2EoZSx0LHIpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKGU9dC5jaGlsZENvbnRleHRUeXBlcywiZnVuY3Rpb24iIT10eXBlb2Ygbi5nZXRDaGlsZENvbnRleHQpcmV0dXJuIHI7Zm9yKHZhciBpIGluIG49bi5nZXRDaGlsZENvbnRleHQoKSlpZighKGkgaW4gZSkpdGhyb3cgRXJyb3IobygxMDgsUSh0KXx8IlVua25vd24iLGkpKTtyZXR1cm4gYSh7fSxyLHt9LG4pfWZ1bmN0aW9uIGthKGUpe3ZhciB0PWUuc3RhdGVOb2RlO3JldHVybiB0PXQmJnQuX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHR8fGZhLHBhPWhhLmN1cnJlbnQsdWEoaGEsdCksdWEoZGEsZGEuY3VycmVudCksITB9ZnVuY3Rpb24gU2EoZSx0LHIpe3ZhciBuPWUuc3RhdGVOb2RlO2lmKCFuKXRocm93IEVycm9yKG8oMTY5KSk7cj8odD13YShlLHQscGEpLG4uX19yZWFjdEludGVybmFsTWVtb2l6ZWRNZXJnZWRDaGlsZENvbnRleHQ9dCxjYShkYSksY2EoaGEpLHVhKGhhLHQpKTpjYShkYSksdWEoZGEscil9dmFyIF9hPWkudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5LHhhPWkudW5zdGFibGVfc2NoZWR1bGVDYWxsYmFjayxBYT1pLnVuc3RhYmxlX2NhbmNlbENhbGxiYWNrLENhPWkudW5zdGFibGVfc2hvdWxkWWllbGQsUGE9aS51bnN0YWJsZV9yZXF1ZXN0UGFpbnQsRWE9aS51bnN0YWJsZV9ub3csVGE9aS51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbCxSYT1pLnVuc3RhYmxlX0ltbWVkaWF0ZVByaW9yaXR5LE9hPWkudW5zdGFibGVfVXNlckJsb2NraW5nUHJpb3JpdHksSWE9aS51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eSxGYT1pLnVuc3RhYmxlX0xvd1ByaW9yaXR5LExhPWkudW5zdGFibGVfSWRsZVByaW9yaXR5LERhPXt9LE5hPXZvaWQgMCE9PVBhP1BhOmZ1bmN0aW9uKCl7fSxNYT1udWxsLGphPW51bGwsQmE9ITEsVWE9RWEoKSxxYT0xZTQ+VWE/RWE6ZnVuY3Rpb24oKXtyZXR1cm4gRWEoKS1VYX07ZnVuY3Rpb24gemEoKXtzd2l0Y2goVGEoKSl7Y2FzZSBSYTpyZXR1cm4gOTk7Y2FzZSBPYTpyZXR1cm4gOTg7Y2FzZSBJYTpyZXR1cm4gOTc7Y2FzZSBGYTpyZXR1cm4gOTY7Y2FzZSBMYTpyZXR1cm4gOTU7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMzMikpfX1mdW5jdGlvbiBXYShlKXtzd2l0Y2goZSl7Y2FzZSA5OTpyZXR1cm4gUmE7Y2FzZSA5ODpyZXR1cm4gT2E7Y2FzZSA5NzpyZXR1cm4gSWE7Y2FzZSA5NjpyZXR1cm4gRmE7Y2FzZSA5NTpyZXR1cm4gTGE7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMzMikpfX1mdW5jdGlvbiBIYShlLHQpe3JldHVybiBlPVdhKGUpLF9hKGUsdCl9ZnVuY3Rpb24gR2EoZSx0LHIpe3JldHVybiBlPVdhKGUpLHhhKGUsdCxyKX1mdW5jdGlvbiBWYShlKXtyZXR1cm4gbnVsbD09PU1hPyhNYT1bZV0samE9eGEoUmEsWWEpKTpNYS5wdXNoKGUpLERhfWZ1bmN0aW9uIFhhKCl7aWYobnVsbCE9PWphKXt2YXIgZT1qYTtqYT1udWxsLEFhKGUpfVlhKCl9ZnVuY3Rpb24gWWEoKXtpZighQmEmJm51bGwhPT1NYSl7QmE9ITA7dmFyIGU9MDt0cnl7dmFyIHQ9TWE7SGEoOTksKGZ1bmN0aW9uKCl7Zm9yKDtlPHQubGVuZ3RoO2UrKyl7dmFyIHI9dFtlXTtkb3tyPXIoITApfXdoaWxlKG51bGwhPT1yKX19KSksTWE9bnVsbH1jYXRjaCh0KXt0aHJvdyBudWxsIT09TWEmJihNYT1NYS5zbGljZShlKzEpKSx4YShSYSxYYSksdH1maW5hbGx5e0JhPSExfX19dmFyIEthPTM7ZnVuY3Rpb24gSmEoZSx0LHIpe3JldHVybiAxMDczNzQxODIxLSgxKygoMTA3Mzc0MTgyMS1lK3QvMTApLyhyLz0xMCl8MCkpKnJ9ZnVuY3Rpb24gUWEoZSx0KXtpZihlJiZlLmRlZmF1bHRQcm9wcylmb3IodmFyIHIgaW4gdD1hKHt9LHQpLGU9ZS5kZWZhdWx0UHJvcHMpdm9pZCAwPT09dFtyXSYmKHRbcl09ZVtyXSk7cmV0dXJuIHR9dmFyIFphPXtjdXJyZW50Om51bGx9LCRhPW51bGwsZWk9bnVsbCx0aT1udWxsO2Z1bmN0aW9uIHJpKCl7dGk9ZWk9JGE9bnVsbH1mdW5jdGlvbiBuaShlLHQpe3ZhciByPWUudHlwZS5fY29udGV4dDt1YShaYSxyLl9jdXJyZW50VmFsdWUpLHIuX2N1cnJlbnRWYWx1ZT10fWZ1bmN0aW9uIGFpKGUpe3ZhciB0PVphLmN1cnJlbnQ7Y2EoWmEpLGUudHlwZS5fY29udGV4dC5fY3VycmVudFZhbHVlPXR9ZnVuY3Rpb24gaWkoZSx0KXtmb3IoO251bGwhPT1lOyl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYoZS5jaGlsZEV4cGlyYXRpb25UaW1lPHQpZS5jaGlsZEV4cGlyYXRpb25UaW1lPXQsbnVsbCE9PXImJnIuY2hpbGRFeHBpcmF0aW9uVGltZTx0JiYoci5jaGlsZEV4cGlyYXRpb25UaW1lPXQpO2Vsc2V7aWYoIShudWxsIT09ciYmci5jaGlsZEV4cGlyYXRpb25UaW1lPHQpKWJyZWFrO3IuY2hpbGRFeHBpcmF0aW9uVGltZT10fWU9ZS5yZXR1cm59fWZ1bmN0aW9uIG9pKGUsdCl7JGE9ZSx0aT1laT1udWxsLG51bGwhPT0oZT1lLmRlcGVuZGVuY2llcykmJm51bGwhPT1lLmZpcnN0Q29udGV4dCYmKGUuZXhwaXJhdGlvblRpbWU+PXQmJihxbz0hMCksZS5maXJzdENvbnRleHQ9bnVsbCl9ZnVuY3Rpb24gc2koZSx0KXtpZih0aSE9PWUmJiExIT09dCYmMCE9PXQpaWYoIm51bWJlciI9PXR5cGVvZiB0JiYxMDczNzQxODIzIT09dHx8KHRpPWUsdD0xMDczNzQxODIzKSx0PXtjb250ZXh0OmUsb2JzZXJ2ZWRCaXRzOnQsbmV4dDpudWxsfSxudWxsPT09ZWkpe2lmKG51bGw9PT0kYSl0aHJvdyBFcnJvcihvKDMwOCkpO2VpPXQsJGEuZGVwZW5kZW5jaWVzPXtleHBpcmF0aW9uVGltZTowLGZpcnN0Q29udGV4dDp0LHJlc3BvbmRlcnM6bnVsbH19ZWxzZSBlaT1laS5uZXh0PXQ7cmV0dXJuIGUuX2N1cnJlbnRWYWx1ZX12YXIgbGk9ITE7ZnVuY3Rpb24gY2koZSl7cmV0dXJue2Jhc2VTdGF0ZTplLGZpcnN0VXBkYXRlOm51bGwsbGFzdFVwZGF0ZTpudWxsLGZpcnN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxsYXN0Q2FwdHVyZWRVcGRhdGU6bnVsbCxmaXJzdEVmZmVjdDpudWxsLGxhc3RFZmZlY3Q6bnVsbCxmaXJzdENhcHR1cmVkRWZmZWN0Om51bGwsbGFzdENhcHR1cmVkRWZmZWN0Om51bGx9fWZ1bmN0aW9uIHVpKGUpe3JldHVybntiYXNlU3RhdGU6ZS5iYXNlU3RhdGUsZmlyc3RVcGRhdGU6ZS5maXJzdFVwZGF0ZSxsYXN0VXBkYXRlOmUubGFzdFVwZGF0ZSxmaXJzdENhcHR1cmVkVXBkYXRlOm51bGwsbGFzdENhcHR1cmVkVXBkYXRlOm51bGwsZmlyc3RFZmZlY3Q6bnVsbCxsYXN0RWZmZWN0Om51bGwsZmlyc3RDYXB0dXJlZEVmZmVjdDpudWxsLGxhc3RDYXB0dXJlZEVmZmVjdDpudWxsfX1mdW5jdGlvbiBmaShlLHQpe3JldHVybntleHBpcmF0aW9uVGltZTplLHN1c3BlbnNlQ29uZmlnOnQsdGFnOjAscGF5bG9hZDpudWxsLGNhbGxiYWNrOm51bGwsbmV4dDpudWxsLG5leHRFZmZlY3Q6bnVsbH19ZnVuY3Rpb24gaGkoZSx0KXtudWxsPT09ZS5sYXN0VXBkYXRlP2UuZmlyc3RVcGRhdGU9ZS5sYXN0VXBkYXRlPXQ6KGUubGFzdFVwZGF0ZS5uZXh0PXQsZS5sYXN0VXBkYXRlPXQpfWZ1bmN0aW9uIGRpKGUsdCl7dmFyIHI9ZS5hbHRlcm5hdGU7aWYobnVsbD09PXIpe3ZhciBuPWUudXBkYXRlUXVldWUsYT1udWxsO251bGw9PT1uJiYobj1lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSkpfWVsc2Ugbj1lLnVwZGF0ZVF1ZXVlLGE9ci51cGRhdGVRdWV1ZSxudWxsPT09bj9udWxsPT09YT8obj1lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSksYT1yLnVwZGF0ZVF1ZXVlPWNpKHIubWVtb2l6ZWRTdGF0ZSkpOm49ZS51cGRhdGVRdWV1ZT11aShhKTpudWxsPT09YSYmKGE9ci51cGRhdGVRdWV1ZT11aShuKSk7bnVsbD09PWF8fG49PT1hP2hpKG4sdCk6bnVsbD09PW4ubGFzdFVwZGF0ZXx8bnVsbD09PWEubGFzdFVwZGF0ZT8oaGkobix0KSxoaShhLHQpKTooaGkobix0KSxhLmxhc3RVcGRhdGU9dCl9ZnVuY3Rpb24gcGkoZSx0KXt2YXIgcj1lLnVwZGF0ZVF1ZXVlO251bGw9PT0ocj1udWxsPT09cj9lLnVwZGF0ZVF1ZXVlPWNpKGUubWVtb2l6ZWRTdGF0ZSk6bWkoZSxyKSkubGFzdENhcHR1cmVkVXBkYXRlP3IuZmlyc3RDYXB0dXJlZFVwZGF0ZT1yLmxhc3RDYXB0dXJlZFVwZGF0ZT10OihyLmxhc3RDYXB0dXJlZFVwZGF0ZS5uZXh0PXQsci5sYXN0Q2FwdHVyZWRVcGRhdGU9dCl9ZnVuY3Rpb24gbWkoZSx0KXt2YXIgcj1lLmFsdGVybmF0ZTtyZXR1cm4gbnVsbCE9PXImJnQ9PT1yLnVwZGF0ZVF1ZXVlJiYodD1lLnVwZGF0ZVF1ZXVlPXVpKHQpKSx0fWZ1bmN0aW9uIGdpKGUsdCxyLG4saSxvKXtzd2l0Y2goci50YWcpe2Nhc2UgMTpyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YoZT1yLnBheWxvYWQpP2UuY2FsbChvLG4saSk6ZTtjYXNlIDM6ZS5lZmZlY3RUYWc9LTQwOTcmZS5lZmZlY3RUYWd8NjQ7Y2FzZSAwOmlmKG51bGw9PShpPSJmdW5jdGlvbiI9PXR5cGVvZihlPXIucGF5bG9hZCk/ZS5jYWxsKG8sbixpKTplKSlicmVhaztyZXR1cm4gYSh7fSxuLGkpO2Nhc2UgMjpsaT0hMH1yZXR1cm4gbn1mdW5jdGlvbiB2aShlLHQscixuLGEpe2xpPSExO2Zvcih2YXIgaT0odD1taShlLHQpKS5iYXNlU3RhdGUsbz1udWxsLHM9MCxsPXQuZmlyc3RVcGRhdGUsYz1pO251bGwhPT1sOyl7dmFyIHU9bC5leHBpcmF0aW9uVGltZTt1PGE/KG51bGw9PT1vJiYobz1sLGk9Yyksczx1JiYocz11KSk6KGZsKHUsbC5zdXNwZW5zZUNvbmZpZyksYz1naShlLDAsbCxjLHIsbiksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdEVmZmVjdD90LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1sOih0Lmxhc3RFZmZlY3QubmV4dEVmZmVjdD1sLHQubGFzdEVmZmVjdD1sKSkpLGw9bC5uZXh0fWZvcih1PW51bGwsbD10LmZpcnN0Q2FwdHVyZWRVcGRhdGU7bnVsbCE9PWw7KXt2YXIgZj1sLmV4cGlyYXRpb25UaW1lO2Y8YT8obnVsbD09PXUmJih1PWwsbnVsbD09PW8mJihpPWMpKSxzPGYmJihzPWYpKTooYz1naShlLDAsbCxjLHIsbiksbnVsbCE9PWwuY2FsbGJhY2smJihlLmVmZmVjdFRhZ3w9MzIsbC5uZXh0RWZmZWN0PW51bGwsbnVsbD09PXQubGFzdENhcHR1cmVkRWZmZWN0P3QuZmlyc3RDYXB0dXJlZEVmZmVjdD10Lmxhc3RDYXB0dXJlZEVmZmVjdD1sOih0Lmxhc3RDYXB0dXJlZEVmZmVjdC5uZXh0RWZmZWN0PWwsdC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bCkpKSxsPWwubmV4dH1udWxsPT09byYmKHQubGFzdFVwZGF0ZT1udWxsKSxudWxsPT09dT90Lmxhc3RDYXB0dXJlZFVwZGF0ZT1udWxsOmUuZWZmZWN0VGFnfD0zMixudWxsPT09byYmbnVsbD09PXUmJihpPWMpLHQuYmFzZVN0YXRlPWksdC5maXJzdFVwZGF0ZT1vLHQuZmlyc3RDYXB0dXJlZFVwZGF0ZT11LGhsKHMpLGUuZXhwaXJhdGlvblRpbWU9cyxlLm1lbW9pemVkU3RhdGU9Y31mdW5jdGlvbiB5aShlLHQscil7bnVsbCE9PXQuZmlyc3RDYXB0dXJlZFVwZGF0ZSYmKG51bGwhPT10Lmxhc3RVcGRhdGUmJih0Lmxhc3RVcGRhdGUubmV4dD10LmZpcnN0Q2FwdHVyZWRVcGRhdGUsdC5sYXN0VXBkYXRlPXQubGFzdENhcHR1cmVkVXBkYXRlKSx0LmZpcnN0Q2FwdHVyZWRVcGRhdGU9dC5sYXN0Q2FwdHVyZWRVcGRhdGU9bnVsbCksYmkodC5maXJzdEVmZmVjdCxyKSx0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1udWxsLGJpKHQuZmlyc3RDYXB0dXJlZEVmZmVjdCxyKSx0LmZpcnN0Q2FwdHVyZWRFZmZlY3Q9dC5sYXN0Q2FwdHVyZWRFZmZlY3Q9bnVsbH1mdW5jdGlvbiBiaShlLHQpe2Zvcig7bnVsbCE9PWU7KXt2YXIgcj1lLmNhbGxiYWNrO2lmKG51bGwhPT1yKXtlLmNhbGxiYWNrPW51bGw7dmFyIG49dDtpZigiZnVuY3Rpb24iIT10eXBlb2Ygcil0aHJvdyBFcnJvcihvKDE5MSxyKSk7ci5jYWxsKG4pfWU9ZS5uZXh0RWZmZWN0fX12YXIgd2k9Ri5SZWFjdEN1cnJlbnRCYXRjaENvbmZpZyxraT0obmV3IG4uQ29tcG9uZW50KS5yZWZzO2Z1bmN0aW9uIFNpKGUsdCxyLG4pe3I9bnVsbD09KHI9cihuLHQ9ZS5tZW1vaXplZFN0YXRlKSk/dDphKHt9LHQsciksZS5tZW1vaXplZFN0YXRlPXIsbnVsbCE9PShuPWUudXBkYXRlUXVldWUpJiYwPT09ZS5leHBpcmF0aW9uVGltZSYmKG4uYmFzZVN0YXRlPXIpfXZhciBfaT17aXNNb3VudGVkOmZ1bmN0aW9uKGUpe3JldHVybiEhKGU9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyKSYmdHQoZSk9PT1lfSxlbnF1ZXVlU2V0U3RhdGU6ZnVuY3Rpb24oZSx0LHIpe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciBuPVpzKCksYT13aS5zdXNwZW5zZTsoYT1maShuPSRzKG4sZSxhKSxhKSkucGF5bG9hZD10LG51bGwhPXImJihhLmNhbGxiYWNrPXIpLGRpKGUsYSksZWwoZSxuKX0sZW5xdWV1ZVJlcGxhY2VTdGF0ZTpmdW5jdGlvbihlLHQscil7ZT1lLl9yZWFjdEludGVybmFsRmliZXI7dmFyIG49WnMoKSxhPXdpLnN1c3BlbnNlOyhhPWZpKG49JHMobixlLGEpLGEpKS50YWc9MSxhLnBheWxvYWQ9dCxudWxsIT1yJiYoYS5jYWxsYmFjaz1yKSxkaShlLGEpLGVsKGUsbil9LGVucXVldWVGb3JjZVVwZGF0ZTpmdW5jdGlvbihlLHQpe2U9ZS5fcmVhY3RJbnRlcm5hbEZpYmVyO3ZhciByPVpzKCksbj13aS5zdXNwZW5zZTsobj1maShyPSRzKHIsZSxuKSxuKSkudGFnPTIsbnVsbCE9dCYmKG4uY2FsbGJhY2s9dCksZGkoZSxuKSxlbChlLHIpfX07ZnVuY3Rpb24geGkoZSx0LHIsbixhLGksbyl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mKGU9ZS5zdGF0ZU5vZGUpLnNob3VsZENvbXBvbmVudFVwZGF0ZT9lLnNob3VsZENvbXBvbmVudFVwZGF0ZShuLGksbyk6IXQucHJvdG90eXBlfHwhdC5wcm90b3R5cGUuaXNQdXJlUmVhY3RDb21wb25lbnR8fCghWm4ocixuKXx8IVpuKGEsaSkpfWZ1bmN0aW9uIEFpKGUsdCxyKXt2YXIgbj0hMSxhPWZhLGk9dC5jb250ZXh0VHlwZTtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pP2k9c2koaSk6KGE9Z2EodCk/cGE6aGEuY3VycmVudCxpPShuPW51bGwhPShuPXQuY29udGV4dFR5cGVzKSk/bWEoZSxhKTpmYSksdD1uZXcgdChyLGkpLGUubWVtb2l6ZWRTdGF0ZT1udWxsIT09dC5zdGF0ZSYmdm9pZCAwIT09dC5zdGF0ZT90LnN0YXRlOm51bGwsdC51cGRhdGVyPV9pLGUuc3RhdGVOb2RlPXQsdC5fcmVhY3RJbnRlcm5hbEZpYmVyPWUsbiYmKChlPWUuc3RhdGVOb2RlKS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZFVubWFza2VkQ2hpbGRDb250ZXh0PWEsZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1hc2tlZENoaWxkQ29udGV4dD1pKSx0fWZ1bmN0aW9uIENpKGUsdCxyLG4pe2U9dC5zdGF0ZSwiZnVuY3Rpb24iPT10eXBlb2YgdC5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiZ0LmNvbXBvbmVudFdpbGxSZWNlaXZlUHJvcHMocixuKSwiZnVuY3Rpb24iPT10eXBlb2YgdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyYmdC5VTlNBRkVfY29tcG9uZW50V2lsbFJlY2VpdmVQcm9wcyhyLG4pLHQuc3RhdGUhPT1lJiZfaS5lbnF1ZXVlUmVwbGFjZVN0YXRlKHQsdC5zdGF0ZSxudWxsKX1mdW5jdGlvbiBQaShlLHQscixuKXt2YXIgYT1lLnN0YXRlTm9kZTthLnByb3BzPXIsYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUsYS5yZWZzPWtpO3ZhciBpPXQuY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aT9hLmNvbnRleHQ9c2koaSk6KGk9Z2EodCk/cGE6aGEuY3VycmVudCxhLmNvbnRleHQ9bWEoZSxpKSksbnVsbCE9PShpPWUudXBkYXRlUXVldWUpJiYodmkoZSxpLHIsYSxuKSxhLnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSksImZ1bmN0aW9uIj09dHlwZW9mKGk9dC5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpJiYoU2koZSx0LGksciksYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpLCJmdW5jdGlvbiI9PXR5cGVvZiB0LmdldERlcml2ZWRTdGF0ZUZyb21Qcm9wc3x8ImZ1bmN0aW9uIj09dHlwZW9mIGEuZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fCJmdW5jdGlvbiIhPXR5cGVvZiBhLlVOU0FGRV9jb21wb25lbnRXaWxsTW91bnQmJiJmdW5jdGlvbiIhPXR5cGVvZiBhLmNvbXBvbmVudFdpbGxNb3VudHx8KHQ9YS5zdGF0ZSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnRXaWxsTW91bnQmJmEuY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIGEuVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmYS5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCksdCE9PWEuc3RhdGUmJl9pLmVucXVldWVSZXBsYWNlU3RhdGUoYSxhLnN0YXRlLG51bGwpLG51bGwhPT0oaT1lLnVwZGF0ZVF1ZXVlKSYmKHZpKGUsaSxyLGEsbiksYS5zdGF0ZT1lLm1lbW9pemVkU3RhdGUpKSwiZnVuY3Rpb24iPT10eXBlb2YgYS5jb21wb25lbnREaWRNb3VudCYmKGUuZWZmZWN0VGFnfD00KX12YXIgRWk9QXJyYXkuaXNBcnJheTtmdW5jdGlvbiBUaShlLHQscil7aWYobnVsbCE9PShlPXIucmVmKSYmImZ1bmN0aW9uIiE9dHlwZW9mIGUmJiJvYmplY3QiIT10eXBlb2YgZSl7aWYoci5fb3duZXIpe2lmKHI9ci5fb3duZXIpe2lmKDEhPT1yLnRhZyl0aHJvdyBFcnJvcihvKDMwOSkpO3ZhciBuPXIuc3RhdGVOb2RlfWlmKCFuKXRocm93IEVycm9yKG8oMTQ3LGUpKTt2YXIgYT0iIitlO3JldHVybiBudWxsIT09dCYmbnVsbCE9PXQucmVmJiYiZnVuY3Rpb24iPT10eXBlb2YgdC5yZWYmJnQucmVmLl9zdHJpbmdSZWY9PT1hP3QucmVmOigodD1mdW5jdGlvbihlKXt2YXIgdD1uLnJlZnM7dD09PWtpJiYodD1uLnJlZnM9e30pLG51bGw9PT1lP2RlbGV0ZSB0W2FdOnRbYV09ZX0pLl9zdHJpbmdSZWY9YSx0KX1pZigic3RyaW5nIiE9dHlwZW9mIGUpdGhyb3cgRXJyb3IobygyODQpKTtpZighci5fb3duZXIpdGhyb3cgRXJyb3IobygyOTAsZSkpfXJldHVybiBlfWZ1bmN0aW9uIFJpKGUsdCl7aWYoInRleHRhcmVhIiE9PWUudHlwZSl0aHJvdyBFcnJvcihvKDMxLCJbb2JqZWN0IE9iamVjdF0iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKHQpPyJvYmplY3Qgd2l0aCBrZXlzIHsiK09iamVjdC5rZXlzKHQpLmpvaW4oIiwgIikrIn0iOnQsIiIpKX1mdW5jdGlvbiBPaShlKXtmdW5jdGlvbiB0KHQscil7aWYoZSl7dmFyIG49dC5sYXN0RWZmZWN0O251bGwhPT1uPyhuLm5leHRFZmZlY3Q9cix0Lmxhc3RFZmZlY3Q9cik6dC5maXJzdEVmZmVjdD10Lmxhc3RFZmZlY3Q9cixyLm5leHRFZmZlY3Q9bnVsbCxyLmVmZmVjdFRhZz04fX1mdW5jdGlvbiByKHIsbil7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKDtudWxsIT09bjspdChyLG4pLG49bi5zaWJsaW5nO3JldHVybiBudWxsfWZ1bmN0aW9uIG4oZSx0KXtmb3IoZT1uZXcgTWFwO251bGwhPT10OyludWxsIT09dC5rZXk/ZS5zZXQodC5rZXksdCk6ZS5zZXQodC5pbmRleCx0KSx0PXQuc2libGluZztyZXR1cm4gZX1mdW5jdGlvbiBhKGUsdCxyKXtyZXR1cm4oZT1JbChlLHQpKS5pbmRleD0wLGUuc2libGluZz1udWxsLGV9ZnVuY3Rpb24gaSh0LHIsbil7cmV0dXJuIHQuaW5kZXg9bixlP251bGwhPT0obj10LmFsdGVybmF0ZSk/KG49bi5pbmRleCk8cj8odC5lZmZlY3RUYWc9MixyKTpuOih0LmVmZmVjdFRhZz0yLHIpOnJ9ZnVuY3Rpb24gcyh0KXtyZXR1cm4gZSYmbnVsbD09PXQuYWx0ZXJuYXRlJiYodC5lZmZlY3RUYWc9MiksdH1mdW5jdGlvbiBsKGUsdCxyLG4pe3JldHVybiBudWxsPT09dHx8NiE9PXQudGFnPygodD1EbChyLGUubW9kZSxuKSkucmV0dXJuPWUsdCk6KCh0PWEodCxyKSkucmV0dXJuPWUsdCl9ZnVuY3Rpb24gYyhlLHQscixuKXtyZXR1cm4gbnVsbCE9PXQmJnQuZWxlbWVudFR5cGU9PT1yLnR5cGU/KChuPWEodCxyLnByb3BzKSkucmVmPVRpKGUsdCxyKSxuLnJldHVybj1lLG4pOigobj1GbChyLnR5cGUsci5rZXksci5wcm9wcyxudWxsLGUubW9kZSxuKSkucmVmPVRpKGUsdCxyKSxuLnJldHVybj1lLG4pfWZ1bmN0aW9uIHUoZSx0LHIsbil7cmV0dXJuIG51bGw9PT10fHw0IT09dC50YWd8fHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8hPT1yLmNvbnRhaW5lckluZm98fHQuc3RhdGVOb2RlLmltcGxlbWVudGF0aW9uIT09ci5pbXBsZW1lbnRhdGlvbj8oKHQ9TmwocixlLm1vZGUsbikpLnJldHVybj1lLHQpOigodD1hKHQsci5jaGlsZHJlbnx8W10pKS5yZXR1cm49ZSx0KX1mdW5jdGlvbiBmKGUsdCxyLG4saSl7cmV0dXJuIG51bGw9PT10fHw3IT09dC50YWc/KCh0PUxsKHIsZS5tb2RlLG4saSkpLnJldHVybj1lLHQpOigodD1hKHQscikpLnJldHVybj1lLHQpfWZ1bmN0aW9uIGgoZSx0LHIpe2lmKCJzdHJpbmciPT10eXBlb2YgdHx8Im51bWJlciI9PXR5cGVvZiB0KXJldHVybih0PURsKCIiK3QsZS5tb2RlLHIpKS5yZXR1cm49ZSx0O2lmKCJvYmplY3QiPT10eXBlb2YgdCYmbnVsbCE9PXQpe3N3aXRjaCh0LiQkdHlwZW9mKXtjYXNlIE46cmV0dXJuKHI9RmwodC50eXBlLHQua2V5LHQucHJvcHMsbnVsbCxlLm1vZGUscikpLnJlZj1UaShlLG51bGwsdCksci5yZXR1cm49ZSxyO2Nhc2UgTTpyZXR1cm4odD1ObCh0LGUubW9kZSxyKSkucmV0dXJuPWUsdH1pZihFaSh0KXx8Sih0KSlyZXR1cm4odD1MbCh0LGUubW9kZSxyLG51bGwpKS5yZXR1cm49ZSx0O1JpKGUsdCl9cmV0dXJuIG51bGx9ZnVuY3Rpb24gZChlLHQscixuKXt2YXIgYT1udWxsIT09dD90LmtleTpudWxsO2lmKCJzdHJpbmciPT10eXBlb2Ygcnx8Im51bWJlciI9PXR5cGVvZiByKXJldHVybiBudWxsIT09YT9udWxsOmwoZSx0LCIiK3Isbik7aWYoIm9iamVjdCI9PXR5cGVvZiByJiZudWxsIT09cil7c3dpdGNoKHIuJCR0eXBlb2Ype2Nhc2UgTjpyZXR1cm4gci5rZXk9PT1hP3IudHlwZT09PWo/ZihlLHQsci5wcm9wcy5jaGlsZHJlbixuLGEpOmMoZSx0LHIsbik6bnVsbDtjYXNlIE06cmV0dXJuIHIua2V5PT09YT91KGUsdCxyLG4pOm51bGx9aWYoRWkocil8fEoocikpcmV0dXJuIG51bGwhPT1hP251bGw6ZihlLHQscixuLG51bGwpO1JpKGUscil9cmV0dXJuIG51bGx9ZnVuY3Rpb24gcChlLHQscixuLGEpe2lmKCJzdHJpbmciPT10eXBlb2Ygbnx8Im51bWJlciI9PXR5cGVvZiBuKXJldHVybiBsKHQsZT1lLmdldChyKXx8bnVsbCwiIituLGEpO2lmKCJvYmplY3QiPT10eXBlb2YgbiYmbnVsbCE9PW4pe3N3aXRjaChuLiQkdHlwZW9mKXtjYXNlIE46cmV0dXJuIGU9ZS5nZXQobnVsbD09PW4ua2V5P3I6bi5rZXkpfHxudWxsLG4udHlwZT09PWo/Zih0LGUsbi5wcm9wcy5jaGlsZHJlbixhLG4ua2V5KTpjKHQsZSxuLGEpO2Nhc2UgTTpyZXR1cm4gdSh0LGU9ZS5nZXQobnVsbD09PW4ua2V5P3I6bi5rZXkpfHxudWxsLG4sYSl9aWYoRWkobil8fEoobikpcmV0dXJuIGYodCxlPWUuZ2V0KHIpfHxudWxsLG4sYSxudWxsKTtSaSh0LG4pfXJldHVybiBudWxsfWZ1bmN0aW9uIG0oYSxvLHMsbCl7Zm9yKHZhciBjPW51bGwsdT1udWxsLGY9byxtPW89MCxnPW51bGw7bnVsbCE9PWYmJm08cy5sZW5ndGg7bSsrKXtmLmluZGV4Pm0/KGc9ZixmPW51bGwpOmc9Zi5zaWJsaW5nO3ZhciB2PWQoYSxmLHNbbV0sbCk7aWYobnVsbD09PXYpe251bGw9PT1mJiYoZj1nKTticmVha31lJiZmJiZudWxsPT09di5hbHRlcm5hdGUmJnQoYSxmKSxvPWkodixvLG0pLG51bGw9PT11P2M9djp1LnNpYmxpbmc9dix1PXYsZj1nfWlmKG09PT1zLmxlbmd0aClyZXR1cm4gcihhLGYpLGM7aWYobnVsbD09PWYpe2Zvcig7bTxzLmxlbmd0aDttKyspbnVsbCE9PShmPWgoYSxzW21dLGwpKSYmKG89aShmLG8sbSksbnVsbD09PXU/Yz1mOnUuc2libGluZz1mLHU9Zik7cmV0dXJuIGN9Zm9yKGY9bihhLGYpO208cy5sZW5ndGg7bSsrKW51bGwhPT0oZz1wKGYsYSxtLHNbbV0sbCkpJiYoZSYmbnVsbCE9PWcuYWx0ZXJuYXRlJiZmLmRlbGV0ZShudWxsPT09Zy5rZXk/bTpnLmtleSksbz1pKGcsbyxtKSxudWxsPT09dT9jPWc6dS5zaWJsaW5nPWcsdT1nKTtyZXR1cm4gZSYmZi5mb3JFYWNoKChmdW5jdGlvbihlKXtyZXR1cm4gdChhLGUpfSkpLGN9ZnVuY3Rpb24gZyhhLHMsbCxjKXt2YXIgdT1KKGwpO2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB1KXRocm93IEVycm9yKG8oMTUwKSk7aWYobnVsbD09KGw9dS5jYWxsKGwpKSl0aHJvdyBFcnJvcihvKDE1MSkpO2Zvcih2YXIgZj11PW51bGwsbT1zLGc9cz0wLHY9bnVsbCx5PWwubmV4dCgpO251bGwhPT1tJiYheS5kb25lO2crKyx5PWwubmV4dCgpKXttLmluZGV4Pmc/KHY9bSxtPW51bGwpOnY9bS5zaWJsaW5nO3ZhciBiPWQoYSxtLHkudmFsdWUsYyk7aWYobnVsbD09PWIpe251bGw9PT1tJiYobT12KTticmVha31lJiZtJiZudWxsPT09Yi5hbHRlcm5hdGUmJnQoYSxtKSxzPWkoYixzLGcpLG51bGw9PT1mP3U9YjpmLnNpYmxpbmc9YixmPWIsbT12fWlmKHkuZG9uZSlyZXR1cm4gcihhLG0pLHU7aWYobnVsbD09PW0pe2Zvcig7IXkuZG9uZTtnKysseT1sLm5leHQoKSludWxsIT09KHk9aChhLHkudmFsdWUsYykpJiYocz1pKHkscyxnKSxudWxsPT09Zj91PXk6Zi5zaWJsaW5nPXksZj15KTtyZXR1cm4gdX1mb3IobT1uKGEsbSk7IXkuZG9uZTtnKysseT1sLm5leHQoKSludWxsIT09KHk9cChtLGEsZyx5LnZhbHVlLGMpKSYmKGUmJm51bGwhPT15LmFsdGVybmF0ZSYmbS5kZWxldGUobnVsbD09PXkua2V5P2c6eS5rZXkpLHM9aSh5LHMsZyksbnVsbD09PWY/dT15OmYuc2libGluZz15LGY9eSk7cmV0dXJuIGUmJm0uZm9yRWFjaCgoZnVuY3Rpb24oZSl7cmV0dXJuIHQoYSxlKX0pKSx1fXJldHVybiBmdW5jdGlvbihlLG4saSxsKXt2YXIgYz0ib2JqZWN0Ij09dHlwZW9mIGkmJm51bGwhPT1pJiZpLnR5cGU9PT1qJiZudWxsPT09aS5rZXk7YyYmKGk9aS5wcm9wcy5jaGlsZHJlbik7dmFyIHU9Im9iamVjdCI9PXR5cGVvZiBpJiZudWxsIT09aTtpZih1KXN3aXRjaChpLiQkdHlwZW9mKXtjYXNlIE46ZTp7Zm9yKHU9aS5rZXksYz1uO251bGwhPT1jOyl7aWYoYy5rZXk9PT11KXtpZig3PT09Yy50YWc/aS50eXBlPT09ajpjLmVsZW1lbnRUeXBlPT09aS50eXBlKXtyKGUsYy5zaWJsaW5nKSwobj1hKGMsaS50eXBlPT09aj9pLnByb3BzLmNoaWxkcmVuOmkucHJvcHMpKS5yZWY9VGkoZSxjLGkpLG4ucmV0dXJuPWUsZT1uO2JyZWFrIGV9cihlLGMpO2JyZWFrfXQoZSxjKSxjPWMuc2libGluZ31pLnR5cGU9PT1qPygobj1MbChpLnByb3BzLmNoaWxkcmVuLGUubW9kZSxsLGkua2V5KSkucmV0dXJuPWUsZT1uKTooKGw9RmwoaS50eXBlLGkua2V5LGkucHJvcHMsbnVsbCxlLm1vZGUsbCkpLnJlZj1UaShlLG4saSksbC5yZXR1cm49ZSxlPWwpfXJldHVybiBzKGUpO2Nhc2UgTTplOntmb3IoYz1pLmtleTtudWxsIT09bjspe2lmKG4ua2V5PT09Yyl7aWYoND09PW4udGFnJiZuLnN0YXRlTm9kZS5jb250YWluZXJJbmZvPT09aS5jb250YWluZXJJbmZvJiZuLnN0YXRlTm9kZS5pbXBsZW1lbnRhdGlvbj09PWkuaW1wbGVtZW50YXRpb24pe3IoZSxuLnNpYmxpbmcpLChuPWEobixpLmNoaWxkcmVufHxbXSkpLnJldHVybj1lLGU9bjticmVhayBlfXIoZSxuKTticmVha310KGUsbiksbj1uLnNpYmxpbmd9KG49TmwoaSxlLm1vZGUsbCkpLnJldHVybj1lLGU9bn1yZXR1cm4gcyhlKX1pZigic3RyaW5nIj09dHlwZW9mIGl8fCJudW1iZXIiPT10eXBlb2YgaSlyZXR1cm4gaT0iIitpLG51bGwhPT1uJiY2PT09bi50YWc/KHIoZSxuLnNpYmxpbmcpLChuPWEobixpKSkucmV0dXJuPWUsZT1uKToocihlLG4pLChuPURsKGksZS5tb2RlLGwpKS5yZXR1cm49ZSxlPW4pLHMoZSk7aWYoRWkoaSkpcmV0dXJuIG0oZSxuLGksbCk7aWYoSihpKSlyZXR1cm4gZyhlLG4saSxsKTtpZih1JiZSaShlLGkpLHZvaWQgMD09PWkmJiFjKXN3aXRjaChlLnRhZyl7Y2FzZSAxOmNhc2UgMDp0aHJvdyBlPWUudHlwZSxFcnJvcihvKDE1MixlLmRpc3BsYXlOYW1lfHxlLm5hbWV8fCJDb21wb25lbnQiKSl9cmV0dXJuIHIoZSxuKX19dmFyIElpPU9pKCEwKSxGaT1PaSghMSksTGk9e30sRGk9e2N1cnJlbnQ6TGl9LE5pPXtjdXJyZW50OkxpfSxNaT17Y3VycmVudDpMaX07ZnVuY3Rpb24gamkoZSl7aWYoZT09PUxpKXRocm93IEVycm9yKG8oMTc0KSk7cmV0dXJuIGV9ZnVuY3Rpb24gQmkoZSx0KXt1YShNaSx0KSx1YShOaSxlKSx1YShEaSxMaSk7dmFyIHI9dC5ub2RlVHlwZTtzd2l0Y2gocil7Y2FzZSA5OmNhc2UgMTE6dD0odD10LmRvY3VtZW50RWxlbWVudCk/dC5uYW1lc3BhY2VVUkk6cWUobnVsbCwiIik7YnJlYWs7ZGVmYXVsdDp0PXFlKHQ9KHI9OD09PXI/dC5wYXJlbnROb2RlOnQpLm5hbWVzcGFjZVVSSXx8bnVsbCxyPXIudGFnTmFtZSl9Y2EoRGkpLHVhKERpLHQpfWZ1bmN0aW9uIFVpKGUpe2NhKERpKSxjYShOaSksY2EoTWkpfWZ1bmN0aW9uIHFpKGUpe2ppKE1pLmN1cnJlbnQpO3ZhciB0PWppKERpLmN1cnJlbnQpLHI9cWUodCxlLnR5cGUpO3QhPT1yJiYodWEoTmksZSksdWEoRGkscikpfWZ1bmN0aW9uIHppKGUpe05pLmN1cnJlbnQ9PT1lJiYoY2EoRGkpLGNhKE5pKSl9dmFyIFdpPXtjdXJyZW50OjB9O2Z1bmN0aW9uIEhpKGUpe2Zvcih2YXIgdD1lO251bGwhPT10Oyl7aWYoMTM9PT10LnRhZyl7dmFyIHI9dC5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1yJiYobnVsbD09PShyPXIuZGVoeWRyYXRlZCl8fCIkPyI9PT1yLmRhdGF8fCIkISI9PT1yLmRhdGEpKXJldHVybiB0fWVsc2UgaWYoMTk9PT10LnRhZyYmdm9pZCAwIT09dC5tZW1vaXplZFByb3BzLnJldmVhbE9yZGVyKXtpZigwIT0oNjQmdC5lZmZlY3RUYWcpKXJldHVybiB0fWVsc2UgaWYobnVsbCE9PXQuY2hpbGQpe3QuY2hpbGQucmV0dXJuPXQsdD10LmNoaWxkO2NvbnRpbnVlfWlmKHQ9PT1lKWJyZWFrO2Zvcig7bnVsbD09PXQuc2libGluZzspe2lmKG51bGw9PT10LnJldHVybnx8dC5yZXR1cm49PT1lKXJldHVybiBudWxsO3Q9dC5yZXR1cm59dC5zaWJsaW5nLnJldHVybj10LnJldHVybix0PXQuc2libGluZ31yZXR1cm4gbnVsbH1mdW5jdGlvbiBHaShlLHQpe3JldHVybntyZXNwb25kZXI6ZSxwcm9wczp0fX12YXIgVmk9Ri5SZWFjdEN1cnJlbnREaXNwYXRjaGVyLFhpPUYuUmVhY3RDdXJyZW50QmF0Y2hDb25maWcsWWk9MCxLaT1udWxsLEppPW51bGwsUWk9bnVsbCxaaT1udWxsLCRpPW51bGwsZW89bnVsbCx0bz0wLHJvPW51bGwsbm89MCxhbz0hMSxpbz1udWxsLG9vPTA7ZnVuY3Rpb24gc28oKXt0aHJvdyBFcnJvcihvKDMyMSkpfWZ1bmN0aW9uIGxvKGUsdCl7aWYobnVsbD09PXQpcmV0dXJuITE7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aCYmcjxlLmxlbmd0aDtyKyspaWYoIUpuKGVbcl0sdFtyXSkpcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gY28oZSx0LHIsbixhLGkpe2lmKFlpPWksS2k9dCxRaT1udWxsIT09ZT9lLm1lbW9pemVkU3RhdGU6bnVsbCxWaS5jdXJyZW50PW51bGw9PT1RaT9UbzpSbyx0PXIobixhKSxhbyl7ZG97YW89ITEsb28rPTEsUWk9bnVsbCE9PWU/ZS5tZW1vaXplZFN0YXRlOm51bGwsZW89Wmkscm89JGk9Smk9bnVsbCxWaS5jdXJyZW50PVJvLHQ9cihuLGEpfXdoaWxlKGFvKTtpbz1udWxsLG9vPTB9aWYoVmkuY3VycmVudD1FbywoZT1LaSkubWVtb2l6ZWRTdGF0ZT1aaSxlLmV4cGlyYXRpb25UaW1lPXRvLGUudXBkYXRlUXVldWU9cm8sZS5lZmZlY3RUYWd8PW5vLGU9bnVsbCE9PUppJiZudWxsIT09SmkubmV4dCxZaT0wLGVvPSRpPVppPVFpPUppPUtpPW51bGwsdG89MCxybz1udWxsLG5vPTAsZSl0aHJvdyBFcnJvcihvKDMwMCkpO3JldHVybiB0fWZ1bmN0aW9uIHVvKCl7VmkuY3VycmVudD1FbyxZaT0wLGVvPSRpPVppPVFpPUppPUtpPW51bGwsdG89MCxybz1udWxsLG5vPTAsYW89ITEsaW89bnVsbCxvbz0wfWZ1bmN0aW9uIGZvKCl7dmFyIGU9e21lbW9pemVkU3RhdGU6bnVsbCxiYXNlU3RhdGU6bnVsbCxxdWV1ZTpudWxsLGJhc2VVcGRhdGU6bnVsbCxuZXh0Om51bGx9O3JldHVybiBudWxsPT09JGk/Wmk9JGk9ZTokaT0kaS5uZXh0PWUsJGl9ZnVuY3Rpb24gaG8oKXtpZihudWxsIT09ZW8pZW89KCRpPWVvKS5uZXh0LFFpPW51bGwhPT0oSmk9UWkpP0ppLm5leHQ6bnVsbDtlbHNle2lmKG51bGw9PT1RaSl0aHJvdyBFcnJvcihvKDMxMCkpO3ZhciBlPXttZW1vaXplZFN0YXRlOihKaT1RaSkubWVtb2l6ZWRTdGF0ZSxiYXNlU3RhdGU6SmkuYmFzZVN0YXRlLHF1ZXVlOkppLnF1ZXVlLGJhc2VVcGRhdGU6SmkuYmFzZVVwZGF0ZSxuZXh0Om51bGx9OyRpPW51bGw9PT0kaT9aaT1lOiRpLm5leHQ9ZSxRaT1KaS5uZXh0fXJldHVybiAkaX1mdW5jdGlvbiBwbyhlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0P3QoZSk6dH1mdW5jdGlvbiBtbyhlKXt2YXIgdD1obygpLHI9dC5xdWV1ZTtpZihudWxsPT09cil0aHJvdyBFcnJvcihvKDMxMSkpO2lmKHIubGFzdFJlbmRlcmVkUmVkdWNlcj1lLDA8b28pe3ZhciBuPXIuZGlzcGF0Y2g7aWYobnVsbCE9PWlvKXt2YXIgYT1pby5nZXQocik7aWYodm9pZCAwIT09YSl7aW8uZGVsZXRlKHIpO3ZhciBpPXQubWVtb2l6ZWRTdGF0ZTtkb3tpPWUoaSxhLmFjdGlvbiksYT1hLm5leHR9d2hpbGUobnVsbCE9PWEpO3JldHVybiBKbihpLHQubWVtb2l6ZWRTdGF0ZSl8fChxbz0hMCksdC5tZW1vaXplZFN0YXRlPWksdC5iYXNlVXBkYXRlPT09ci5sYXN0JiYodC5iYXNlU3RhdGU9aSksci5sYXN0UmVuZGVyZWRTdGF0ZT1pLFtpLG5dfX1yZXR1cm5bdC5tZW1vaXplZFN0YXRlLG5dfW49ci5sYXN0O3ZhciBzPXQuYmFzZVVwZGF0ZTtpZihpPXQuYmFzZVN0YXRlLG51bGwhPT1zPyhudWxsIT09biYmKG4ubmV4dD1udWxsKSxuPXMubmV4dCk6bj1udWxsIT09bj9uLm5leHQ6bnVsbCxudWxsIT09bil7dmFyIGw9YT1udWxsLGM9bix1PSExO2Rve3ZhciBmPWMuZXhwaXJhdGlvblRpbWU7ZjxZaT8odXx8KHU9ITAsbD1zLGE9aSksZj50byYmaGwodG89ZikpOihmbChmLGMuc3VzcGVuc2VDb25maWcpLGk9Yy5lYWdlclJlZHVjZXI9PT1lP2MuZWFnZXJTdGF0ZTplKGksYy5hY3Rpb24pKSxzPWMsYz1jLm5leHR9d2hpbGUobnVsbCE9PWMmJmMhPT1uKTt1fHwobD1zLGE9aSksSm4oaSx0Lm1lbW9pemVkU3RhdGUpfHwocW89ITApLHQubWVtb2l6ZWRTdGF0ZT1pLHQuYmFzZVVwZGF0ZT1sLHQuYmFzZVN0YXRlPWEsci5sYXN0UmVuZGVyZWRTdGF0ZT1pfXJldHVyblt0Lm1lbW9pemVkU3RhdGUsci5kaXNwYXRjaF19ZnVuY3Rpb24gZ28oZSl7dmFyIHQ9Zm8oKTtyZXR1cm4iZnVuY3Rpb24iPT10eXBlb2YgZSYmKGU9ZSgpKSx0Lm1lbW9pemVkU3RhdGU9dC5iYXNlU3RhdGU9ZSxlPShlPXQucXVldWU9e2xhc3Q6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6cG8sbGFzdFJlbmRlcmVkU3RhdGU6ZX0pLmRpc3BhdGNoPVBvLmJpbmQobnVsbCxLaSxlKSxbdC5tZW1vaXplZFN0YXRlLGVdfWZ1bmN0aW9uIHZvKGUpe3JldHVybiBtbyhwbyl9ZnVuY3Rpb24geW8oZSx0LHIsbil7cmV0dXJuIGU9e3RhZzplLGNyZWF0ZTp0LGRlc3Ryb3k6cixkZXBzOm4sbmV4dDpudWxsfSxudWxsPT09cm8/KHJvPXtsYXN0RWZmZWN0Om51bGx9KS5sYXN0RWZmZWN0PWUubmV4dD1lOm51bGw9PT0odD1yby5sYXN0RWZmZWN0KT9yby5sYXN0RWZmZWN0PWUubmV4dD1lOihyPXQubmV4dCx0Lm5leHQ9ZSxlLm5leHQ9cixyby5sYXN0RWZmZWN0PWUpLGV9ZnVuY3Rpb24gYm8oZSx0LHIsbil7dmFyIGE9Zm8oKTtub3w9ZSxhLm1lbW9pemVkU3RhdGU9eW8odCxyLHZvaWQgMCx2b2lkIDA9PT1uP251bGw6bil9ZnVuY3Rpb24gd28oZSx0LHIsbil7dmFyIGE9aG8oKTtuPXZvaWQgMD09PW4/bnVsbDpuO3ZhciBpPXZvaWQgMDtpZihudWxsIT09Smkpe3ZhciBvPUppLm1lbW9pemVkU3RhdGU7aWYoaT1vLmRlc3Ryb3ksbnVsbCE9PW4mJmxvKG4sby5kZXBzKSlyZXR1cm4gdm9pZCB5bygwLHIsaSxuKX1ub3w9ZSxhLm1lbW9pemVkU3RhdGU9eW8odCxyLGksbil9ZnVuY3Rpb24ga28oZSx0KXtyZXR1cm4gYm8oNTE2LDE5MixlLHQpfWZ1bmN0aW9uIFNvKGUsdCl7cmV0dXJuIHdvKDUxNiwxOTIsZSx0KX1mdW5jdGlvbiBfbyhlLHQpe3JldHVybiJmdW5jdGlvbiI9PXR5cGVvZiB0PyhlPWUoKSx0KGUpLGZ1bmN0aW9uKCl7dChudWxsKX0pOm51bGwhPXQ/KGU9ZSgpLHQuY3VycmVudD1lLGZ1bmN0aW9uKCl7dC5jdXJyZW50PW51bGx9KTp2b2lkIDB9ZnVuY3Rpb24geG8oKXt9ZnVuY3Rpb24gQW8oZSx0KXtyZXR1cm4gZm8oKS5tZW1vaXplZFN0YXRlPVtlLHZvaWQgMD09PXQ/bnVsbDp0XSxlfWZ1bmN0aW9uIENvKGUsdCl7dmFyIHI9aG8oKTt0PXZvaWQgMD09PXQ/bnVsbDp0O3ZhciBuPXIubWVtb2l6ZWRTdGF0ZTtyZXR1cm4gbnVsbCE9PW4mJm51bGwhPT10JiZsbyh0LG5bMV0pP25bMF06KHIubWVtb2l6ZWRTdGF0ZT1bZSx0XSxlKX1mdW5jdGlvbiBQbyhlLHQscil7aWYoISgyNT5vbykpdGhyb3cgRXJyb3IobygzMDEpKTt2YXIgbj1lLmFsdGVybmF0ZTtpZihlPT09S2l8fG51bGwhPT1uJiZuPT09S2kpaWYoYW89ITAsZT17ZXhwaXJhdGlvblRpbWU6WWksc3VzcGVuc2VDb25maWc6bnVsbCxhY3Rpb246cixlYWdlclJlZHVjZXI6bnVsbCxlYWdlclN0YXRlOm51bGwsbmV4dDpudWxsfSxudWxsPT09aW8mJihpbz1uZXcgTWFwKSx2b2lkIDA9PT0ocj1pby5nZXQodCkpKWlvLnNldCh0LGUpO2Vsc2V7Zm9yKHQ9cjtudWxsIT09dC5uZXh0Oyl0PXQubmV4dDt0Lm5leHQ9ZX1lbHNle3ZhciBhPVpzKCksaT13aS5zdXNwZW5zZTtpPXtleHBpcmF0aW9uVGltZTphPSRzKGEsZSxpKSxzdXNwZW5zZUNvbmZpZzppLGFjdGlvbjpyLGVhZ2VyUmVkdWNlcjpudWxsLGVhZ2VyU3RhdGU6bnVsbCxuZXh0Om51bGx9O3ZhciBzPXQubGFzdDtpZihudWxsPT09cylpLm5leHQ9aTtlbHNle3ZhciBsPXMubmV4dDtudWxsIT09bCYmKGkubmV4dD1sKSxzLm5leHQ9aX1pZih0Lmxhc3Q9aSwwPT09ZS5leHBpcmF0aW9uVGltZSYmKG51bGw9PT1ufHwwPT09bi5leHBpcmF0aW9uVGltZSkmJm51bGwhPT0obj10Lmxhc3RSZW5kZXJlZFJlZHVjZXIpKXRyeXt2YXIgYz10Lmxhc3RSZW5kZXJlZFN0YXRlLHU9bihjLHIpO2lmKGkuZWFnZXJSZWR1Y2VyPW4saS5lYWdlclN0YXRlPXUsSm4odSxjKSlyZXR1cm59Y2F0Y2goZSl7fWVsKGUsYSl9fXZhciBFbz17cmVhZENvbnRleHQ6c2ksdXNlQ2FsbGJhY2s6c28sdXNlQ29udGV4dDpzbyx1c2VFZmZlY3Q6c28sdXNlSW1wZXJhdGl2ZUhhbmRsZTpzbyx1c2VMYXlvdXRFZmZlY3Q6c28sdXNlTWVtbzpzbyx1c2VSZWR1Y2VyOnNvLHVzZVJlZjpzbyx1c2VTdGF0ZTpzbyx1c2VEZWJ1Z1ZhbHVlOnNvLHVzZVJlc3BvbmRlcjpzbyx1c2VEZWZlcnJlZFZhbHVlOnNvLHVzZVRyYW5zaXRpb246c299LFRvPXtyZWFkQ29udGV4dDpzaSx1c2VDYWxsYmFjazpBbyx1c2VDb250ZXh0OnNpLHVzZUVmZmVjdDprbyx1c2VJbXBlcmF0aXZlSGFuZGxlOmZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gcj1udWxsIT1yP3IuY29uY2F0KFtlXSk6bnVsbCxibyg0LDM2LF9vLmJpbmQobnVsbCx0LGUpLHIpfSx1c2VMYXlvdXRFZmZlY3Q6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gYm8oNCwzNixlLHQpfSx1c2VNZW1vOmZ1bmN0aW9uKGUsdCl7dmFyIHI9Zm8oKTtyZXR1cm4gdD12b2lkIDA9PT10P251bGw6dCxlPWUoKSxyLm1lbW9pemVkU3RhdGU9W2UsdF0sZX0sdXNlUmVkdWNlcjpmdW5jdGlvbihlLHQscil7dmFyIG49Zm8oKTtyZXR1cm4gdD12b2lkIDAhPT1yP3IodCk6dCxuLm1lbW9pemVkU3RhdGU9bi5iYXNlU3RhdGU9dCxlPShlPW4ucXVldWU9e2xhc3Q6bnVsbCxkaXNwYXRjaDpudWxsLGxhc3RSZW5kZXJlZFJlZHVjZXI6ZSxsYXN0UmVuZGVyZWRTdGF0ZTp0fSkuZGlzcGF0Y2g9UG8uYmluZChudWxsLEtpLGUpLFtuLm1lbW9pemVkU3RhdGUsZV19LHVzZVJlZjpmdW5jdGlvbihlKXtyZXR1cm4gZT17Y3VycmVudDplfSxmbygpLm1lbW9pemVkU3RhdGU9ZX0sdXNlU3RhdGU6Z28sdXNlRGVidWdWYWx1ZTp4byx1c2VSZXNwb25kZXI6R2ksdXNlRGVmZXJyZWRWYWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWdvKGUpLG49clswXSxhPXJbMV07cmV0dXJuIGtvKChmdW5jdGlvbigpe2kudW5zdGFibGVfbmV4dCgoZnVuY3Rpb24oKXt2YXIgcj1YaS5zdXNwZW5zZTtYaS5zdXNwZW5zZT12b2lkIDA9PT10P251bGw6dDt0cnl7YShlKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2UsdF0pLG59LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9Z28oITEpLHI9dFswXSxuPXRbMV07cmV0dXJuW0FvKChmdW5jdGlvbih0KXtuKCEwKSxpLnVuc3RhYmxlX25leHQoKGZ1bmN0aW9uKCl7dmFyIHI9WGkuc3VzcGVuc2U7WGkuc3VzcGVuc2U9dm9pZCAwPT09ZT9udWxsOmU7dHJ5e24oITEpLHQoKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2Uscl0pLHJdfX0sUm89e3JlYWRDb250ZXh0OnNpLHVzZUNhbGxiYWNrOkNvLHVzZUNvbnRleHQ6c2ksdXNlRWZmZWN0OlNvLHVzZUltcGVyYXRpdmVIYW5kbGU6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiByPW51bGwhPXI/ci5jb25jYXQoW2VdKTpudWxsLHdvKDQsMzYsX28uYmluZChudWxsLHQsZSkscil9LHVzZUxheW91dEVmZmVjdDpmdW5jdGlvbihlLHQpe3JldHVybiB3byg0LDM2LGUsdCl9LHVzZU1lbW86ZnVuY3Rpb24oZSx0KXt2YXIgcj1obygpO3Q9dm9pZCAwPT09dD9udWxsOnQ7dmFyIG49ci5tZW1vaXplZFN0YXRlO3JldHVybiBudWxsIT09biYmbnVsbCE9PXQmJmxvKHQsblsxXSk/blswXTooZT1lKCksci5tZW1vaXplZFN0YXRlPVtlLHRdLGUpfSx1c2VSZWR1Y2VyOm1vLHVzZVJlZjpmdW5jdGlvbigpe3JldHVybiBobygpLm1lbW9pemVkU3RhdGV9LHVzZVN0YXRlOnZvLHVzZURlYnVnVmFsdWU6eG8sdXNlUmVzcG9uZGVyOkdpLHVzZURlZmVycmVkVmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcj12bygpLG49clswXSxhPXJbMV07cmV0dXJuIFNvKChmdW5jdGlvbigpe2kudW5zdGFibGVfbmV4dCgoZnVuY3Rpb24oKXt2YXIgcj1YaS5zdXNwZW5zZTtYaS5zdXNwZW5zZT12b2lkIDA9PT10P251bGw6dDt0cnl7YShlKX1maW5hbGx5e1hpLnN1c3BlbnNlPXJ9fSkpfSksW2UsdF0pLG59LHVzZVRyYW5zaXRpb246ZnVuY3Rpb24oZSl7dmFyIHQ9dm8oKSxyPXRbMF0sbj10WzFdO3JldHVybltDbygoZnVuY3Rpb24odCl7bighMCksaS51bnN0YWJsZV9uZXh0KChmdW5jdGlvbigpe3ZhciByPVhpLnN1c3BlbnNlO1hpLnN1c3BlbnNlPXZvaWQgMD09PWU/bnVsbDplO3RyeXtuKCExKSx0KCl9ZmluYWxseXtYaS5zdXNwZW5zZT1yfX0pKX0pLFtlLHJdKSxyXX19LE9vPW51bGwsSW89bnVsbCxGbz0hMTtmdW5jdGlvbiBMbyhlLHQpe3ZhciByPVJsKDUsbnVsbCxudWxsLDApO3IuZWxlbWVudFR5cGU9IkRFTEVURUQiLHIudHlwZT0iREVMRVRFRCIsci5zdGF0ZU5vZGU9dCxyLnJldHVybj1lLHIuZWZmZWN0VGFnPTgsbnVsbCE9PWUubGFzdEVmZmVjdD8oZS5sYXN0RWZmZWN0Lm5leHRFZmZlY3Q9cixlLmxhc3RFZmZlY3Q9cik6ZS5maXJzdEVmZmVjdD1lLmxhc3RFZmZlY3Q9cn1mdW5jdGlvbiBEbyhlLHQpe3N3aXRjaChlLnRhZyl7Y2FzZSA1OnZhciByPWUudHlwZTtyZXR1cm4gbnVsbCE9PSh0PTEhPT10Lm5vZGVUeXBlfHxyLnRvTG93ZXJDYXNlKCkhPT10Lm5vZGVOYW1lLnRvTG93ZXJDYXNlKCk/bnVsbDp0KSYmKGUuc3RhdGVOb2RlPXQsITApO2Nhc2UgNjpyZXR1cm4gbnVsbCE9PSh0PSIiPT09ZS5wZW5kaW5nUHJvcHN8fDMhPT10Lm5vZGVUeXBlP251bGw6dCkmJihlLnN0YXRlTm9kZT10LCEwKTtjYXNlIDEzOmRlZmF1bHQ6cmV0dXJuITF9fWZ1bmN0aW9uIE5vKGUpe2lmKEZvKXt2YXIgdD1JbztpZih0KXt2YXIgcj10O2lmKCFEbyhlLHQpKXtpZighKHQ9dG4oci5uZXh0U2libGluZykpfHwhRG8oZSx0KSlyZXR1cm4gZS5lZmZlY3RUYWc9LTEwMjUmZS5lZmZlY3RUYWd8MixGbz0hMSx2b2lkKE9vPWUpO0xvKE9vLHIpfU9vPWUsSW89dG4odC5maXJzdENoaWxkKX1lbHNlIGUuZWZmZWN0VGFnPS0xMDI1JmUuZWZmZWN0VGFnfDIsRm89ITEsT289ZX19ZnVuY3Rpb24gTW8oZSl7Zm9yKGU9ZS5yZXR1cm47bnVsbCE9PWUmJjUhPT1lLnRhZyYmMyE9PWUudGFnJiYxMyE9PWUudGFnOyllPWUucmV0dXJuO09vPWV9ZnVuY3Rpb24gam8oZSl7aWYoZSE9PU9vKXJldHVybiExO2lmKCFGbylyZXR1cm4gTW8oZSksRm89ITAsITE7dmFyIHQ9ZS50eXBlO2lmKDUhPT1lLnRhZ3x8ImhlYWQiIT09dCYmImJvZHkiIT09dCYmIVpyKHQsZS5tZW1vaXplZFByb3BzKSlmb3IodD1Jbzt0OylMbyhlLHQpLHQ9dG4odC5uZXh0U2libGluZyk7aWYoTW8oZSksMTM9PT1lLnRhZyl7aWYoIShlPW51bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpP2UuZGVoeWRyYXRlZDpudWxsKSl0aHJvdyBFcnJvcihvKDMxNykpO2U6e2ZvcihlPWUubmV4dFNpYmxpbmcsdD0wO2U7KXtpZig4PT09ZS5ub2RlVHlwZSl7dmFyIHI9ZS5kYXRhO2lmKCIvJCI9PT1yKXtpZigwPT09dCl7SW89dG4oZS5uZXh0U2libGluZyk7YnJlYWsgZX10LS19ZWxzZSIkIiE9PXImJiIkISIhPT1yJiYiJD8iIT09cnx8dCsrfWU9ZS5uZXh0U2libGluZ31Jbz1udWxsfX1lbHNlIElvPU9vP3RuKGUuc3RhdGVOb2RlLm5leHRTaWJsaW5nKTpudWxsO3JldHVybiEwfWZ1bmN0aW9uIEJvKCl7SW89T289bnVsbCxGbz0hMX12YXIgVW89Ri5SZWFjdEN1cnJlbnRPd25lcixxbz0hMTtmdW5jdGlvbiB6byhlLHQscixuKXt0LmNoaWxkPW51bGw9PT1lP0ZpKHQsbnVsbCxyLG4pOklpKHQsZS5jaGlsZCxyLG4pfWZ1bmN0aW9uIFdvKGUsdCxyLG4sYSl7cj1yLnJlbmRlcjt2YXIgaT10LnJlZjtyZXR1cm4gb2kodCxhKSxuPWNvKGUsdCxyLG4saSxhKSxudWxsPT09ZXx8cW8/KHQuZWZmZWN0VGFnfD0xLHpvKGUsdCxuLGEpLHQuY2hpbGQpOih0LnVwZGF0ZVF1ZXVlPWUudXBkYXRlUXVldWUsdC5lZmZlY3RUYWcmPS01MTcsZS5leHBpcmF0aW9uVGltZTw9YSYmKGUuZXhwaXJhdGlvblRpbWU9MCksaXMoZSx0LGEpKX1mdW5jdGlvbiBIbyhlLHQscixuLGEsaSl7aWYobnVsbD09PWUpe3ZhciBvPXIudHlwZTtyZXR1cm4iZnVuY3Rpb24iIT10eXBlb2Ygb3x8T2wobyl8fHZvaWQgMCE9PW8uZGVmYXVsdFByb3BzfHxudWxsIT09ci5jb21wYXJlfHx2b2lkIDAhPT1yLmRlZmF1bHRQcm9wcz8oKGU9Rmwoci50eXBlLG51bGwsbixudWxsLHQubW9kZSxpKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKToodC50YWc9MTUsdC50eXBlPW8sR28oZSx0LG8sbixhLGkpKX1yZXR1cm4gbz1lLmNoaWxkLGE8aSYmKGE9by5tZW1vaXplZFByb3BzLChyPW51bGwhPT0ocj1yLmNvbXBhcmUpP3I6Wm4pKGEsbikmJmUucmVmPT09dC5yZWYpP2lzKGUsdCxpKToodC5lZmZlY3RUYWd8PTEsKGU9SWwobyxuKSkucmVmPXQucmVmLGUucmV0dXJuPXQsdC5jaGlsZD1lKX1mdW5jdGlvbiBHbyhlLHQscixuLGEsaSl7cmV0dXJuIG51bGwhPT1lJiZabihlLm1lbW9pemVkUHJvcHMsbikmJmUucmVmPT09dC5yZWYmJihxbz0hMSxhPGkpP2lzKGUsdCxpKTpYbyhlLHQscixuLGkpfWZ1bmN0aW9uIFZvKGUsdCl7dmFyIHI9dC5yZWY7KG51bGw9PT1lJiZudWxsIT09cnx8bnVsbCE9PWUmJmUucmVmIT09cikmJih0LmVmZmVjdFRhZ3w9MTI4KX1mdW5jdGlvbiBYbyhlLHQscixuLGEpe3ZhciBpPWdhKHIpP3BhOmhhLmN1cnJlbnQ7cmV0dXJuIGk9bWEodCxpKSxvaSh0LGEpLHI9Y28oZSx0LHIsbixpLGEpLG51bGw9PT1lfHxxbz8odC5lZmZlY3RUYWd8PTEsem8oZSx0LHIsYSksdC5jaGlsZCk6KHQudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0LmVmZmVjdFRhZyY9LTUxNyxlLmV4cGlyYXRpb25UaW1lPD1hJiYoZS5leHBpcmF0aW9uVGltZT0wKSxpcyhlLHQsYSkpfWZ1bmN0aW9uIFlvKGUsdCxyLG4sYSl7aWYoZ2Eocikpe3ZhciBpPSEwO2thKHQpfWVsc2UgaT0hMTtpZihvaSh0LGEpLG51bGw9PT10LnN0YXRlTm9kZSludWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksQWkodCxyLG4pLFBpKHQscixuLGEpLG49ITA7ZWxzZSBpZihudWxsPT09ZSl7dmFyIG89dC5zdGF0ZU5vZGUscz10Lm1lbW9pemVkUHJvcHM7by5wcm9wcz1zO3ZhciBsPW8uY29udGV4dCxjPXIuY29udGV4dFR5cGU7Im9iamVjdCI9PXR5cGVvZiBjJiZudWxsIT09Yz9jPXNpKGMpOmM9bWEodCxjPWdhKHIpP3BhOmhhLmN1cnJlbnQpO3ZhciB1PXIuZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzLGY9ImZ1bmN0aW9uIj09dHlwZW9mIHV8fCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlO2Z8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwocyE9PW58fGwhPT1jKSYmQ2kodCxvLG4sYyksbGk9ITE7dmFyIGg9dC5tZW1vaXplZFN0YXRlO2w9by5zdGF0ZT1oO3ZhciBkPXQudXBkYXRlUXVldWU7bnVsbCE9PWQmJih2aSh0LGQsbixvLGEpLGw9dC5tZW1vaXplZFN0YXRlKSxzIT09bnx8aCE9PWx8fGRhLmN1cnJlbnR8fGxpPygiZnVuY3Rpb24iPT10eXBlb2YgdSYmKFNpKHQscix1LG4pLGw9dC5tZW1vaXplZFN0YXRlKSwocz1saXx8eGkodCxyLHMsbixoLGwsYykpPyhmfHwiZnVuY3Rpb24iIT10eXBlb2Ygby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50JiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnR8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsTW91bnQmJm8uY29tcG9uZW50V2lsbE1vdW50KCksImZ1bmN0aW9uIj09dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxNb3VudCYmby5VTlNBRkVfY29tcG9uZW50V2lsbE1vdW50KCkpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmNvbXBvbmVudERpZE1vdW50JiYodC5lZmZlY3RUYWd8PTQpKTooImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksdC5tZW1vaXplZFByb3BzPW4sdC5tZW1vaXplZFN0YXRlPWwpLG8ucHJvcHM9bixvLnN0YXRlPWwsby5jb250ZXh0PWMsbj1zKTooImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkTW91bnQmJih0LmVmZmVjdFRhZ3w9NCksbj0hMSl9ZWxzZSBvPXQuc3RhdGVOb2RlLHM9dC5tZW1vaXplZFByb3BzLG8ucHJvcHM9dC50eXBlPT09dC5lbGVtZW50VHlwZT9zOlFhKHQudHlwZSxzKSxsPW8uY29udGV4dCwib2JqZWN0Ij09dHlwZW9mKGM9ci5jb250ZXh0VHlwZSkmJm51bGwhPT1jP2M9c2koYyk6Yz1tYSh0LGM9Z2Eocik/cGE6aGEuY3VycmVudCksKGY9ImZ1bmN0aW9uIj09dHlwZW9mKHU9ci5nZXREZXJpdmVkU3RhdGVGcm9tUHJvcHMpfHwiZnVuY3Rpb24iPT10eXBlb2Ygby5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSl8fCJmdW5jdGlvbiIhPXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzJiYiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnRXaWxsUmVjZWl2ZVByb3BzfHwocyE9PW58fGwhPT1jKSYmQ2kodCxvLG4sYyksbGk9ITEsbD10Lm1lbW9pemVkU3RhdGUsaD1vLnN0YXRlPWwsbnVsbCE9PShkPXQudXBkYXRlUXVldWUpJiYodmkodCxkLG4sbyxhKSxoPXQubWVtb2l6ZWRTdGF0ZSkscyE9PW58fGwhPT1ofHxkYS5jdXJyZW50fHxsaT8oImZ1bmN0aW9uIj09dHlwZW9mIHUmJihTaSh0LHIsdSxuKSxoPXQubWVtb2l6ZWRTdGF0ZSksKHU9bGl8fHhpKHQscixzLG4sbCxoLGMpKT8oZnx8ImZ1bmN0aW9uIiE9dHlwZW9mIG8uVU5TQUZFX2NvbXBvbmVudFdpbGxVcGRhdGUmJiJmdW5jdGlvbiIhPXR5cGVvZiBvLmNvbXBvbmVudFdpbGxVcGRhdGV8fCgiZnVuY3Rpb24iPT10eXBlb2Ygby5jb21wb25lbnRXaWxsVXBkYXRlJiZvLmNvbXBvbmVudFdpbGxVcGRhdGUobixoLGMpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlJiZvLlVOU0FGRV9jb21wb25lbnRXaWxsVXBkYXRlKG4saCxjKSksImZ1bmN0aW9uIj09dHlwZW9mIG8uY29tcG9uZW50RGlkVXBkYXRlJiYodC5lZmZlY3RUYWd8PTQpLCJmdW5jdGlvbiI9PXR5cGVvZiBvLmdldFNuYXBzaG90QmVmb3JlVXBkYXRlJiYodC5lZmZlY3RUYWd8PTI1NikpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSx0Lm1lbW9pemVkUHJvcHM9bix0Lm1lbW9pemVkU3RhdGU9aCksby5wcm9wcz1uLG8uc3RhdGU9aCxvLmNvbnRleHQ9YyxuPXUpOigiZnVuY3Rpb24iIT10eXBlb2Ygby5jb21wb25lbnREaWRVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9NCksImZ1bmN0aW9uIiE9dHlwZW9mIG8uZ2V0U25hcHNob3RCZWZvcmVVcGRhdGV8fHM9PT1lLm1lbW9pemVkUHJvcHMmJmw9PT1lLm1lbW9pemVkU3RhdGV8fCh0LmVmZmVjdFRhZ3w9MjU2KSxuPSExKTtyZXR1cm4gS28oZSx0LHIsbixpLGEpfWZ1bmN0aW9uIEtvKGUsdCxyLG4sYSxpKXtWbyhlLHQpO3ZhciBvPTAhPSg2NCZ0LmVmZmVjdFRhZyk7aWYoIW4mJiFvKXJldHVybiBhJiZTYSh0LHIsITEpLGlzKGUsdCxpKTtuPXQuc3RhdGVOb2RlLFVvLmN1cnJlbnQ9dDt2YXIgcz1vJiYiZnVuY3Rpb24iIT10eXBlb2Ygci5nZXREZXJpdmVkU3RhdGVGcm9tRXJyb3I/bnVsbDpuLnJlbmRlcigpO3JldHVybiB0LmVmZmVjdFRhZ3w9MSxudWxsIT09ZSYmbz8odC5jaGlsZD1JaSh0LGUuY2hpbGQsbnVsbCxpKSx0LmNoaWxkPUlpKHQsbnVsbCxzLGkpKTp6byhlLHQscyxpKSx0Lm1lbW9pemVkU3RhdGU9bi5zdGF0ZSxhJiZTYSh0LHIsITApLHQuY2hpbGR9ZnVuY3Rpb24gSm8oZSl7dmFyIHQ9ZS5zdGF0ZU5vZGU7dC5wZW5kaW5nQ29udGV4dD9iYSgwLHQucGVuZGluZ0NvbnRleHQsdC5wZW5kaW5nQ29udGV4dCE9PXQuY29udGV4dCk6dC5jb250ZXh0JiZiYSgwLHQuY29udGV4dCwhMSksQmkoZSx0LmNvbnRhaW5lckluZm8pfXZhciBRbyxabywkbyxlcz17ZGVoeWRyYXRlZDpudWxsLHJldHJ5VGltZTowfTtmdW5jdGlvbiB0cyhlLHQscil7dmFyIG4sYT10Lm1vZGUsaT10LnBlbmRpbmdQcm9wcyxvPVdpLmN1cnJlbnQscz0hMTtpZigobj0wIT0oNjQmdC5lZmZlY3RUYWcpKXx8KG49MCE9KDImbykmJihudWxsPT09ZXx8bnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSkpLG4/KHM9ITAsdC5lZmZlY3RUYWcmPS02NSk6bnVsbCE9PWUmJm51bGw9PT1lLm1lbW9pemVkU3RhdGV8fHZvaWQgMD09PWkuZmFsbGJhY2t8fCEwPT09aS51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8KG98PTEpLHVhKFdpLDEmbyksbnVsbD09PWUpe2lmKHZvaWQgMCE9PWkuZmFsbGJhY2smJk5vKHQpLHMpe2lmKHM9aS5mYWxsYmFjaywoaT1MbChudWxsLGEsMCxudWxsKSkucmV0dXJuPXQsMD09KDImdC5tb2RlKSlmb3IoZT1udWxsIT09dC5tZW1vaXplZFN0YXRlP3QuY2hpbGQuY2hpbGQ6dC5jaGlsZCxpLmNoaWxkPWU7bnVsbCE9PWU7KWUucmV0dXJuPWksZT1lLnNpYmxpbmc7cmV0dXJuKHI9TGwocyxhLHIsbnVsbCkpLnJldHVybj10LGkuc2libGluZz1yLHQubWVtb2l6ZWRTdGF0ZT1lcyx0LmNoaWxkPWkscn1yZXR1cm4gYT1pLmNoaWxkcmVuLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQuY2hpbGQ9RmkodCxudWxsLGEscil9aWYobnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSl7aWYoYT0oZT1lLmNoaWxkKS5zaWJsaW5nLHMpe2lmKGk9aS5mYWxsYmFjaywocj1JbChlLGUucGVuZGluZ1Byb3BzKSkucmV0dXJuPXQsMD09KDImdC5tb2RlKSYmKHM9bnVsbCE9PXQubWVtb2l6ZWRTdGF0ZT90LmNoaWxkLmNoaWxkOnQuY2hpbGQpIT09ZS5jaGlsZClmb3Ioci5jaGlsZD1zO251bGwhPT1zOylzLnJldHVybj1yLHM9cy5zaWJsaW5nO3JldHVybihhPUlsKGEsaSxhLmV4cGlyYXRpb25UaW1lKSkucmV0dXJuPXQsci5zaWJsaW5nPWEsci5jaGlsZEV4cGlyYXRpb25UaW1lPTAsdC5tZW1vaXplZFN0YXRlPWVzLHQuY2hpbGQ9cixhfXJldHVybiByPUlpKHQsZS5jaGlsZCxpLmNoaWxkcmVuLHIpLHQubWVtb2l6ZWRTdGF0ZT1udWxsLHQuY2hpbGQ9cn1pZihlPWUuY2hpbGQscyl7aWYocz1pLmZhbGxiYWNrLChpPUxsKG51bGwsYSwwLG51bGwpKS5yZXR1cm49dCxpLmNoaWxkPWUsbnVsbCE9PWUmJihlLnJldHVybj1pKSwwPT0oMiZ0Lm1vZGUpKWZvcihlPW51bGwhPT10Lm1lbW9pemVkU3RhdGU/dC5jaGlsZC5jaGlsZDp0LmNoaWxkLGkuY2hpbGQ9ZTtudWxsIT09ZTspZS5yZXR1cm49aSxlPWUuc2libGluZztyZXR1cm4ocj1MbChzLGEscixudWxsKSkucmV0dXJuPXQsaS5zaWJsaW5nPXIsci5lZmZlY3RUYWd8PTIsaS5jaGlsZEV4cGlyYXRpb25UaW1lPTAsdC5tZW1vaXplZFN0YXRlPWVzLHQuY2hpbGQ9aSxyfXJldHVybiB0Lm1lbW9pemVkU3RhdGU9bnVsbCx0LmNoaWxkPUlpKHQsZSxpLmNoaWxkcmVuLHIpfWZ1bmN0aW9uIHJzKGUsdCl7ZS5leHBpcmF0aW9uVGltZTx0JiYoZS5leHBpcmF0aW9uVGltZT10KTt2YXIgcj1lLmFsdGVybmF0ZTtudWxsIT09ciYmci5leHBpcmF0aW9uVGltZTx0JiYoci5leHBpcmF0aW9uVGltZT10KSxpaShlLnJldHVybix0KX1mdW5jdGlvbiBucyhlLHQscixuLGEsaSl7dmFyIG89ZS5tZW1vaXplZFN0YXRlO251bGw9PT1vP2UubWVtb2l6ZWRTdGF0ZT17aXNCYWNrd2FyZHM6dCxyZW5kZXJpbmc6bnVsbCxsYXN0Om4sdGFpbDpyLHRhaWxFeHBpcmF0aW9uOjAsdGFpbE1vZGU6YSxsYXN0RWZmZWN0Oml9OihvLmlzQmFja3dhcmRzPXQsby5yZW5kZXJpbmc9bnVsbCxvLmxhc3Q9bixvLnRhaWw9cixvLnRhaWxFeHBpcmF0aW9uPTAsby50YWlsTW9kZT1hLG8ubGFzdEVmZmVjdD1pKX1mdW5jdGlvbiBhcyhlLHQscil7dmFyIG49dC5wZW5kaW5nUHJvcHMsYT1uLnJldmVhbE9yZGVyLGk9bi50YWlsO2lmKHpvKGUsdCxuLmNoaWxkcmVuLHIpLDAhPSgyJihuPVdpLmN1cnJlbnQpKSluPTEmbnwyLHQuZWZmZWN0VGFnfD02NDtlbHNle2lmKG51bGwhPT1lJiYwIT0oNjQmZS5lZmZlY3RUYWcpKWU6Zm9yKGU9dC5jaGlsZDtudWxsIT09ZTspe2lmKDEzPT09ZS50YWcpbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmcnMoZSxyKTtlbHNlIGlmKDE5PT09ZS50YWcpcnMoZSxyKTtlbHNlIGlmKG51bGwhPT1lLmNoaWxkKXtlLmNoaWxkLnJldHVybj1lLGU9ZS5jaGlsZDtjb250aW51ZX1pZihlPT09dClicmVhayBlO2Zvcig7bnVsbD09PWUuc2libGluZzspe2lmKG51bGw9PT1lLnJldHVybnx8ZS5yZXR1cm49PT10KWJyZWFrIGU7ZT1lLnJldHVybn1lLnNpYmxpbmcucmV0dXJuPWUucmV0dXJuLGU9ZS5zaWJsaW5nfW4mPTF9aWYodWEoV2ksbiksMD09KDImdC5tb2RlKSl0Lm1lbW9pemVkU3RhdGU9bnVsbDtlbHNlIHN3aXRjaChhKXtjYXNlImZvcndhcmRzIjpmb3Iocj10LmNoaWxkLGE9bnVsbDtudWxsIT09cjspbnVsbCE9PShlPXIuYWx0ZXJuYXRlKSYmbnVsbD09PUhpKGUpJiYoYT1yKSxyPXIuc2libGluZztudWxsPT09KHI9YSk/KGE9dC5jaGlsZCx0LmNoaWxkPW51bGwpOihhPXIuc2libGluZyxyLnNpYmxpbmc9bnVsbCksbnModCwhMSxhLHIsaSx0Lmxhc3RFZmZlY3QpO2JyZWFrO2Nhc2UiYmFja3dhcmRzIjpmb3Iocj1udWxsLGE9dC5jaGlsZCx0LmNoaWxkPW51bGw7bnVsbCE9PWE7KXtpZihudWxsIT09KGU9YS5hbHRlcm5hdGUpJiZudWxsPT09SGkoZSkpe3QuY2hpbGQ9YTticmVha31lPWEuc2libGluZyxhLnNpYmxpbmc9cixyPWEsYT1lfW5zKHQsITAscixudWxsLGksdC5sYXN0RWZmZWN0KTticmVhaztjYXNlInRvZ2V0aGVyIjpucyh0LCExLG51bGwsbnVsbCx2b2lkIDAsdC5sYXN0RWZmZWN0KTticmVhaztkZWZhdWx0OnQubWVtb2l6ZWRTdGF0ZT1udWxsfXJldHVybiB0LmNoaWxkfWZ1bmN0aW9uIGlzKGUsdCxyKXtudWxsIT09ZSYmKHQuZGVwZW5kZW5jaWVzPWUuZGVwZW5kZW5jaWVzKTt2YXIgbj10LmV4cGlyYXRpb25UaW1lO2lmKDAhPT1uJiZobChuKSx0LmNoaWxkRXhwaXJhdGlvblRpbWU8cilyZXR1cm4gbnVsbDtpZihudWxsIT09ZSYmdC5jaGlsZCE9PWUuY2hpbGQpdGhyb3cgRXJyb3IobygxNTMpKTtpZihudWxsIT09dC5jaGlsZCl7Zm9yKHI9SWwoZT10LmNoaWxkLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpLHQuY2hpbGQ9cixyLnJldHVybj10O251bGwhPT1lLnNpYmxpbmc7KWU9ZS5zaWJsaW5nLChyPXIuc2libGluZz1JbChlLGUucGVuZGluZ1Byb3BzLGUuZXhwaXJhdGlvblRpbWUpKS5yZXR1cm49dDtyLnNpYmxpbmc9bnVsbH1yZXR1cm4gdC5jaGlsZH1mdW5jdGlvbiBvcyhlKXtlLmVmZmVjdFRhZ3w9NH1mdW5jdGlvbiBzcyhlLHQpe3N3aXRjaChlLnRhaWxNb2RlKXtjYXNlImhpZGRlbiI6dD1lLnRhaWw7Zm9yKHZhciByPW51bGw7bnVsbCE9PXQ7KW51bGwhPT10LmFsdGVybmF0ZSYmKHI9dCksdD10LnNpYmxpbmc7bnVsbD09PXI/ZS50YWlsPW51bGw6ci5zaWJsaW5nPW51bGw7YnJlYWs7Y2FzZSJjb2xsYXBzZWQiOnI9ZS50YWlsO2Zvcih2YXIgbj1udWxsO251bGwhPT1yOyludWxsIT09ci5hbHRlcm5hdGUmJihuPXIpLHI9ci5zaWJsaW5nO251bGw9PT1uP3R8fG51bGw9PT1lLnRhaWw/ZS50YWlsPW51bGw6ZS50YWlsLnNpYmxpbmc9bnVsbDpuLnNpYmxpbmc9bnVsbH19ZnVuY3Rpb24gbHMoZSl7c3dpdGNoKGUudGFnKXtjYXNlIDE6Z2EoZS50eXBlKSYmdmEoKTt2YXIgdD1lLmVmZmVjdFRhZztyZXR1cm4gNDA5NiZ0PyhlLmVmZmVjdFRhZz0tNDA5NyZ0fDY0LGUpOm51bGw7Y2FzZSAzOmlmKFVpKCkseWEoKSwwIT0oNjQmKHQ9ZS5lZmZlY3RUYWcpKSl0aHJvdyBFcnJvcihvKDI4NSkpO3JldHVybiBlLmVmZmVjdFRhZz0tNDA5NyZ0fDY0LGU7Y2FzZSA1OnJldHVybiB6aShlKSxudWxsO2Nhc2UgMTM6cmV0dXJuIGNhKFdpKSw0MDk2Jih0PWUuZWZmZWN0VGFnKT8oZS5lZmZlY3RUYWc9LTQwOTcmdHw2NCxlKTpudWxsO2Nhc2UgMTk6cmV0dXJuIGNhKFdpKSxudWxsO2Nhc2UgNDpyZXR1cm4gVWkoKSxudWxsO2Nhc2UgMTA6cmV0dXJuIGFpKGUpLG51bGw7ZGVmYXVsdDpyZXR1cm4gbnVsbH19ZnVuY3Rpb24gY3MoZSx0KXtyZXR1cm57dmFsdWU6ZSxzb3VyY2U6dCxzdGFjazpaKHQpfX1Rbz1mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj10LmNoaWxkO251bGwhPT1yOyl7aWYoNT09PXIudGFnfHw2PT09ci50YWcpZS5hcHBlbmRDaGlsZChyLnN0YXRlTm9kZSk7ZWxzZSBpZig0IT09ci50YWcmJm51bGwhPT1yLmNoaWxkKXtyLmNoaWxkLnJldHVybj1yLHI9ci5jaGlsZDtjb250aW51ZX1pZihyPT09dClicmVhaztmb3IoO251bGw9PT1yLnNpYmxpbmc7KXtpZihudWxsPT09ci5yZXR1cm58fHIucmV0dXJuPT09dClyZXR1cm47cj1yLnJldHVybn1yLnNpYmxpbmcucmV0dXJuPXIucmV0dXJuLHI9ci5zaWJsaW5nfX0sWm89ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1lLm1lbW9pemVkUHJvcHM7aWYobyE9PW4pe3ZhciBzLGwsYz10LnN0YXRlTm9kZTtzd2l0Y2goamkoRGkuY3VycmVudCksZT1udWxsLHIpe2Nhc2UiaW5wdXQiOm89Q2UoYyxvKSxuPUNlKGMsbiksZT1bXTticmVhaztjYXNlIm9wdGlvbiI6bz1JZShjLG8pLG49SWUoYyxuKSxlPVtdO2JyZWFrO2Nhc2Uic2VsZWN0IjpvPWEoe30sbyx7dmFsdWU6dm9pZCAwfSksbj1hKHt9LG4se3ZhbHVlOnZvaWQgMH0pLGU9W107YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6bz1MZShjLG8pLG49TGUoYyxuKSxlPVtdO2JyZWFrO2RlZmF1bHQ6ImZ1bmN0aW9uIiE9dHlwZW9mIG8ub25DbGljayYmImZ1bmN0aW9uIj09dHlwZW9mIG4ub25DbGljayYmKGMub25jbGljaz1Xcil9Zm9yKHMgaW4gVXIocixuKSxyPW51bGwsbylpZighbi5oYXNPd25Qcm9wZXJ0eShzKSYmby5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9b1tzXSlpZigic3R5bGUiPT09cylmb3IobCBpbiBjPW9bc10pYy5oYXNPd25Qcm9wZXJ0eShsKSYmKHJ8fChyPXt9KSxyW2xdPSIiKTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIiE9PXMmJiJjaGlsZHJlbiIhPT1zJiYic3VwcHJlc3NDb250ZW50RWRpdGFibGVXYXJuaW5nIiE9PXMmJiJzdXBwcmVzc0h5ZHJhdGlvbldhcm5pbmciIT09cyYmImF1dG9Gb2N1cyIhPT1zJiYoZC5oYXNPd25Qcm9wZXJ0eShzKT9lfHwoZT1bXSk6KGU9ZXx8W10pLnB1c2gocyxudWxsKSk7Zm9yKHMgaW4gbil7dmFyIHU9bltzXTtpZihjPW51bGwhPW8/b1tzXTp2b2lkIDAsbi5oYXNPd25Qcm9wZXJ0eShzKSYmdSE9PWMmJihudWxsIT11fHxudWxsIT1jKSlpZigic3R5bGUiPT09cylpZihjKXtmb3IobCBpbiBjKSFjLmhhc093blByb3BlcnR5KGwpfHx1JiZ1Lmhhc093blByb3BlcnR5KGwpfHwocnx8KHI9e30pLHJbbF09IiIpO2ZvcihsIGluIHUpdS5oYXNPd25Qcm9wZXJ0eShsKSYmY1tsXSE9PXVbbF0mJihyfHwocj17fSkscltsXT11W2xdKX1lbHNlIHJ8fChlfHwoZT1bXSksZS5wdXNoKHMscikpLHI9dTtlbHNlImRhbmdlcm91c2x5U2V0SW5uZXJIVE1MIj09PXM/KHU9dT91Ll9faHRtbDp2b2lkIDAsYz1jP2MuX19odG1sOnZvaWQgMCxudWxsIT11JiZjIT09dSYmKGU9ZXx8W10pLnB1c2gocywiIit1KSk6ImNoaWxkcmVuIj09PXM/Yz09PXV8fCJzdHJpbmciIT10eXBlb2YgdSYmIm51bWJlciIhPXR5cGVvZiB1fHwoZT1lfHxbXSkucHVzaChzLCIiK3UpOiJzdXBwcmVzc0NvbnRlbnRFZGl0YWJsZVdhcm5pbmciIT09cyYmInN1cHByZXNzSHlkcmF0aW9uV2FybmluZyIhPT1zJiYoZC5oYXNPd25Qcm9wZXJ0eShzKT8obnVsbCE9dSYmenIoaSxzKSxlfHxjPT09dXx8KGU9W10pKTooZT1lfHxbXSkucHVzaChzLHUpKX1yJiYoZT1lfHxbXSkucHVzaCgic3R5bGUiLHIpLGk9ZSwodC51cGRhdGVRdWV1ZT1pKSYmb3ModCl9fSwkbz1mdW5jdGlvbihlLHQscixuKXtyIT09biYmb3ModCl9O3ZhciB1cz0iZnVuY3Rpb24iPT10eXBlb2YgV2Vha1NldD9XZWFrU2V0OlNldDtmdW5jdGlvbiBmcyhlLHQpe3ZhciByPXQuc291cmNlLG49dC5zdGFjaztudWxsPT09biYmbnVsbCE9PXImJihuPVoocikpLG51bGwhPT1yJiZRKHIudHlwZSksdD10LnZhbHVlLG51bGwhPT1lJiYxPT09ZS50YWcmJlEoZS50eXBlKTt0cnl7Y29uc29sZS5lcnJvcih0KX1jYXRjaChlKXtzZXRUaW1lb3V0KChmdW5jdGlvbigpe3Rocm93IGV9KSl9fWZ1bmN0aW9uIGhzKGUpe3ZhciB0PWUucmVmO2lmKG51bGwhPT10KWlmKCJmdW5jdGlvbiI9PXR5cGVvZiB0KXRyeXt0KG51bGwpfWNhdGNoKHQpe3hsKGUsdCl9ZWxzZSB0LmN1cnJlbnQ9bnVsbH1mdW5jdGlvbiBkcyhlLHQpe3N3aXRjaCh0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNTpwcygyLDAsdCk7YnJlYWs7Y2FzZSAxOmlmKDI1NiZ0LmVmZmVjdFRhZyYmbnVsbCE9PWUpe3ZhciByPWUubWVtb2l6ZWRQcm9wcyxuPWUubWVtb2l6ZWRTdGF0ZTt0PShlPXQuc3RhdGVOb2RlKS5nZXRTbmFwc2hvdEJlZm9yZVVwZGF0ZSh0LmVsZW1lbnRUeXBlPT09dC50eXBlP3I6UWEodC50eXBlLHIpLG4pLGUuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGU9dH1icmVhaztjYXNlIDM6Y2FzZSA1OmNhc2UgNjpjYXNlIDQ6Y2FzZSAxNzpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWZ1bmN0aW9uIHBzKGUsdCxyKXtpZihudWxsIT09KHI9bnVsbCE9PShyPXIudXBkYXRlUXVldWUpP3IubGFzdEVmZmVjdDpudWxsKSl7dmFyIG49cj1yLm5leHQ7ZG97aWYoMCE9KG4udGFnJmUpKXt2YXIgYT1uLmRlc3Ryb3k7bi5kZXN0cm95PXZvaWQgMCx2b2lkIDAhPT1hJiZhKCl9MCE9KG4udGFnJnQpJiYoYT1uLmNyZWF0ZSxuLmRlc3Ryb3k9YSgpKSxuPW4ubmV4dH13aGlsZShuIT09cil9fWZ1bmN0aW9uIG1zKGUsdCxyKXtzd2l0Y2goImZ1bmN0aW9uIj09dHlwZW9mIEVsJiZFbCh0KSx0LnRhZyl7Y2FzZSAwOmNhc2UgMTE6Y2FzZSAxNDpjYXNlIDE1OmlmKG51bGwhPT0oZT10LnVwZGF0ZVF1ZXVlKSYmbnVsbCE9PShlPWUubGFzdEVmZmVjdCkpe3ZhciBuPWUubmV4dDtIYSg5NzxyPzk3OnIsKGZ1bmN0aW9uKCl7dmFyIGU9bjtkb3t2YXIgcj1lLmRlc3Ryb3k7aWYodm9pZCAwIT09cil7dmFyIGE9dDt0cnl7cigpfWNhdGNoKGUpe3hsKGEsZSl9fWU9ZS5uZXh0fXdoaWxlKGUhPT1uKX0pKX1icmVhaztjYXNlIDE6aHModCksImZ1bmN0aW9uIj09dHlwZW9mKHI9dC5zdGF0ZU5vZGUpLmNvbXBvbmVudFdpbGxVbm1vdW50JiZmdW5jdGlvbihlLHQpe3RyeXt0LnByb3BzPWUubWVtb2l6ZWRQcm9wcyx0LnN0YXRlPWUubWVtb2l6ZWRTdGF0ZSx0LmNvbXBvbmVudFdpbGxVbm1vdW50KCl9Y2F0Y2godCl7eGwoZSx0KX19KHQscik7YnJlYWs7Y2FzZSA1OmhzKHQpO2JyZWFrO2Nhc2UgNDpicyhlLHQscil9fWZ1bmN0aW9uIGdzKGUpe3ZhciB0PWUuYWx0ZXJuYXRlO2UucmV0dXJuPW51bGwsZS5jaGlsZD1udWxsLGUubWVtb2l6ZWRTdGF0ZT1udWxsLGUudXBkYXRlUXVldWU9bnVsbCxlLmRlcGVuZGVuY2llcz1udWxsLGUuYWx0ZXJuYXRlPW51bGwsZS5maXJzdEVmZmVjdD1udWxsLGUubGFzdEVmZmVjdD1udWxsLGUucGVuZGluZ1Byb3BzPW51bGwsZS5tZW1vaXplZFByb3BzPW51bGwsbnVsbCE9PXQmJmdzKHQpfWZ1bmN0aW9uIHZzKGUpe3JldHVybiA1PT09ZS50YWd8fDM9PT1lLnRhZ3x8ND09PWUudGFnfWZ1bmN0aW9uIHlzKGUpe2U6e2Zvcih2YXIgdD1lLnJldHVybjtudWxsIT09dDspe2lmKHZzKHQpKXt2YXIgcj10O2JyZWFrIGV9dD10LnJldHVybn10aHJvdyBFcnJvcihvKDE2MCkpfXN3aXRjaCh0PXIuc3RhdGVOb2RlLHIudGFnKXtjYXNlIDU6dmFyIG49ITE7YnJlYWs7Y2FzZSAzOmNhc2UgNDp0PXQuY29udGFpbmVySW5mbyxuPSEwO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygxNjEpKX0xNiZyLmVmZmVjdFRhZyYmKEhlKHQsIiIpLHIuZWZmZWN0VGFnJj0tMTcpO2U6dDpmb3Iocj1lOzspe2Zvcig7bnVsbD09PXIuc2libGluZzspe2lmKG51bGw9PT1yLnJldHVybnx8dnMoci5yZXR1cm4pKXtyPW51bGw7YnJlYWsgZX1yPXIucmV0dXJufWZvcihyLnNpYmxpbmcucmV0dXJuPXIucmV0dXJuLHI9ci5zaWJsaW5nOzUhPT1yLnRhZyYmNiE9PXIudGFnJiYxOCE9PXIudGFnOyl7aWYoMiZyLmVmZmVjdFRhZyljb250aW51ZSB0O2lmKG51bGw9PT1yLmNoaWxkfHw0PT09ci50YWcpY29udGludWUgdDtyLmNoaWxkLnJldHVybj1yLHI9ci5jaGlsZH1pZighKDImci5lZmZlY3RUYWcpKXtyPXIuc3RhdGVOb2RlO2JyZWFrIGV9fWZvcih2YXIgYT1lOzspe3ZhciBpPTU9PT1hLnRhZ3x8Nj09PWEudGFnO2lmKGkpe3ZhciBzPWk/YS5zdGF0ZU5vZGU6YS5zdGF0ZU5vZGUuaW5zdGFuY2U7aWYocilpZihuKXt2YXIgbD1zO3M9ciw4PT09KGk9dCkubm9kZVR5cGU/aS5wYXJlbnROb2RlLmluc2VydEJlZm9yZShsLHMpOmkuaW5zZXJ0QmVmb3JlKGwscyl9ZWxzZSB0Lmluc2VydEJlZm9yZShzLHIpO2Vsc2Ugbj8oOD09PShsPXQpLm5vZGVUeXBlPyhpPWwucGFyZW50Tm9kZSkuaW5zZXJ0QmVmb3JlKHMsbCk6KGk9bCkuYXBwZW5kQ2hpbGQocyksbnVsbCE9KGw9bC5fcmVhY3RSb290Q29udGFpbmVyKXx8bnVsbCE9PWkub25jbGlja3x8KGkub25jbGljaz1XcikpOnQuYXBwZW5kQ2hpbGQocyl9ZWxzZSBpZig0IT09YS50YWcmJm51bGwhPT1hLmNoaWxkKXthLmNoaWxkLnJldHVybj1hLGE9YS5jaGlsZDtjb250aW51ZX1pZihhPT09ZSlicmVhaztmb3IoO251bGw9PT1hLnNpYmxpbmc7KXtpZihudWxsPT09YS5yZXR1cm58fGEucmV0dXJuPT09ZSlyZXR1cm47YT1hLnJldHVybn1hLnNpYmxpbmcucmV0dXJuPWEucmV0dXJuLGE9YS5zaWJsaW5nfX1mdW5jdGlvbiBicyhlLHQscil7Zm9yKHZhciBuLGEsaT10LHM9ITE7Oyl7aWYoIXMpe3M9aS5yZXR1cm47ZTpmb3IoOzspe2lmKG51bGw9PT1zKXRocm93IEVycm9yKG8oMTYwKSk7c3dpdGNoKG49cy5zdGF0ZU5vZGUscy50YWcpe2Nhc2UgNTphPSExO2JyZWFrIGU7Y2FzZSAzOmNhc2UgNDpuPW4uY29udGFpbmVySW5mbyxhPSEwO2JyZWFrIGV9cz1zLnJldHVybn1zPSEwfWlmKDU9PT1pLnRhZ3x8Nj09PWkudGFnKXtlOmZvcih2YXIgbD1lLGM9aSx1PXIsZj1jOzspaWYobXMobCxmLHUpLG51bGwhPT1mLmNoaWxkJiY0IT09Zi50YWcpZi5jaGlsZC5yZXR1cm49ZixmPWYuY2hpbGQ7ZWxzZXtpZihmPT09YylicmVhaztmb3IoO251bGw9PT1mLnNpYmxpbmc7KXtpZihudWxsPT09Zi5yZXR1cm58fGYucmV0dXJuPT09YylicmVhayBlO2Y9Zi5yZXR1cm59Zi5zaWJsaW5nLnJldHVybj1mLnJldHVybixmPWYuc2libGluZ31hPyhsPW4sYz1pLnN0YXRlTm9kZSw4PT09bC5ub2RlVHlwZT9sLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoYyk6bC5yZW1vdmVDaGlsZChjKSk6bi5yZW1vdmVDaGlsZChpLnN0YXRlTm9kZSl9ZWxzZSBpZig0PT09aS50YWcpe2lmKG51bGwhPT1pLmNoaWxkKXtuPWkuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8sYT0hMCxpLmNoaWxkLnJldHVybj1pLGk9aS5jaGlsZDtjb250aW51ZX19ZWxzZSBpZihtcyhlLGksciksbnVsbCE9PWkuY2hpbGQpe2kuY2hpbGQucmV0dXJuPWksaT1pLmNoaWxkO2NvbnRpbnVlfWlmKGk9PT10KWJyZWFrO2Zvcig7bnVsbD09PWkuc2libGluZzspe2lmKG51bGw9PT1pLnJldHVybnx8aS5yZXR1cm49PT10KXJldHVybjs0PT09KGk9aS5yZXR1cm4pLnRhZyYmKHM9ITEpfWkuc2libGluZy5yZXR1cm49aS5yZXR1cm4saT1pLnNpYmxpbmd9fWZ1bmN0aW9uIHdzKGUsdCl7c3dpdGNoKHQudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE0OmNhc2UgMTU6cHMoNCw4LHQpO2JyZWFrO2Nhc2UgMTpicmVhaztjYXNlIDU6dmFyIHI9dC5zdGF0ZU5vZGU7aWYobnVsbCE9cil7dmFyIG49dC5tZW1vaXplZFByb3BzLGE9bnVsbCE9PWU/ZS5tZW1vaXplZFByb3BzOm47ZT10LnR5cGU7dmFyIGk9dC51cGRhdGVRdWV1ZTtpZih0LnVwZGF0ZVF1ZXVlPW51bGwsbnVsbCE9PWkpe2ZvcihyW29uXT1uLCJpbnB1dCI9PT1lJiYicmFkaW8iPT09bi50eXBlJiZudWxsIT1uLm5hbWUmJkVlKHIsbikscXIoZSxhKSx0PXFyKGUsbiksYT0wO2E8aS5sZW5ndGg7YSs9Mil7dmFyIHM9aVthXSxsPWlbYSsxXTsic3R5bGUiPT09cz9qcihyLGwpOiJkYW5nZXJvdXNseVNldElubmVySFRNTCI9PT1zP1dlKHIsbCk6ImNoaWxkcmVuIj09PXM/SGUocixsKTpTZShyLHMsbCx0KX1zd2l0Y2goZSl7Y2FzZSJpbnB1dCI6VGUocixuKTticmVhaztjYXNlInRleHRhcmVhIjpOZShyLG4pO2JyZWFrO2Nhc2Uic2VsZWN0Ijp0PXIuX3dyYXBwZXJTdGF0ZS53YXNNdWx0aXBsZSxyLl93cmFwcGVyU3RhdGUud2FzTXVsdGlwbGU9ISFuLm11bHRpcGxlLG51bGwhPShlPW4udmFsdWUpP0ZlKHIsISFuLm11bHRpcGxlLGUsITEpOnQhPT0hIW4ubXVsdGlwbGUmJihudWxsIT1uLmRlZmF1bHRWYWx1ZT9GZShyLCEhbi5tdWx0aXBsZSxuLmRlZmF1bHRWYWx1ZSwhMCk6RmUociwhIW4ubXVsdGlwbGUsbi5tdWx0aXBsZT9bXToiIiwhMSkpfX19YnJlYWs7Y2FzZSA2OmlmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihvKDE2MikpO3Quc3RhdGVOb2RlLm5vZGVWYWx1ZT10Lm1lbW9pemVkUHJvcHM7YnJlYWs7Y2FzZSAzOih0PXQuc3RhdGVOb2RlKS5oeWRyYXRlJiYodC5oeWRyYXRlPSExLEN0KHQuY29udGFpbmVySW5mbykpO2JyZWFrO2Nhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihyPXQsbnVsbD09PXQubWVtb2l6ZWRTdGF0ZT9uPSExOihuPSEwLHI9dC5jaGlsZCxVcz1xYSgpKSxudWxsIT09cillOmZvcihlPXI7Oyl7aWYoNT09PWUudGFnKWk9ZS5zdGF0ZU5vZGUsbj8iZnVuY3Rpb24iPT10eXBlb2YoaT1pLnN0eWxlKS5zZXRQcm9wZXJ0eT9pLnNldFByb3BlcnR5KCJkaXNwbGF5Iiwibm9uZSIsImltcG9ydGFudCIpOmkuZGlzcGxheT0ibm9uZSI6KGk9ZS5zdGF0ZU5vZGUsYT1udWxsIT0oYT1lLm1lbW9pemVkUHJvcHMuc3R5bGUpJiZhLmhhc093blByb3BlcnR5KCJkaXNwbGF5Iik/YS5kaXNwbGF5Om51bGwsaS5zdHlsZS5kaXNwbGF5PU1yKCJkaXNwbGF5IixhKSk7ZWxzZSBpZig2PT09ZS50YWcpZS5zdGF0ZU5vZGUubm9kZVZhbHVlPW4/IiI6ZS5tZW1vaXplZFByb3BzO2Vsc2V7aWYoMTM9PT1lLnRhZyYmbnVsbCE9PWUubWVtb2l6ZWRTdGF0ZSYmbnVsbD09PWUubWVtb2l6ZWRTdGF0ZS5kZWh5ZHJhdGVkKXsoaT1lLmNoaWxkLnNpYmxpbmcpLnJldHVybj1lLGU9aTtjb250aW51ZX1pZihudWxsIT09ZS5jaGlsZCl7ZS5jaGlsZC5yZXR1cm49ZSxlPWUuY2hpbGQ7Y29udGludWV9fWlmKGU9PT1yKWJyZWFrIGU7Zm9yKDtudWxsPT09ZS5zaWJsaW5nOyl7aWYobnVsbD09PWUucmV0dXJufHxlLnJldHVybj09PXIpYnJlYWsgZTtlPWUucmV0dXJufWUuc2libGluZy5yZXR1cm49ZS5yZXR1cm4sZT1lLnNpYmxpbmd9a3ModCk7YnJlYWs7Y2FzZSAxOTprcyh0KTticmVhaztjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWZ1bmN0aW9uIGtzKGUpe3ZhciB0PWUudXBkYXRlUXVldWU7aWYobnVsbCE9PXQpe2UudXBkYXRlUXVldWU9bnVsbDt2YXIgcj1lLnN0YXRlTm9kZTtudWxsPT09ciYmKHI9ZS5zdGF0ZU5vZGU9bmV3IHVzKSx0LmZvckVhY2goKGZ1bmN0aW9uKHQpe3ZhciBuPUNsLmJpbmQobnVsbCxlLHQpO3IuaGFzKHQpfHwoci5hZGQodCksdC50aGVuKG4sbikpfSkpfX12YXIgU3M9ImZ1bmN0aW9uIj09dHlwZW9mIFdlYWtNYXA/V2Vha01hcDpNYXA7ZnVuY3Rpb24gX3MoZSx0LHIpeyhyPWZpKHIsbnVsbCkpLnRhZz0zLHIucGF5bG9hZD17ZWxlbWVudDpudWxsfTt2YXIgbj10LnZhbHVlO3JldHVybiByLmNhbGxiYWNrPWZ1bmN0aW9uKCl7enN8fCh6cz0hMCxXcz1uKSxmcyhlLHQpfSxyfWZ1bmN0aW9uIHhzKGUsdCxyKXsocj1maShyLG51bGwpKS50YWc9Mzt2YXIgbj1lLnR5cGUuZ2V0RGVyaXZlZFN0YXRlRnJvbUVycm9yO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBuKXt2YXIgYT10LnZhbHVlO3IucGF5bG9hZD1mdW5jdGlvbigpe3JldHVybiBmcyhlLHQpLG4oYSl9fXZhciBpPWUuc3RhdGVOb2RlO3JldHVybiBudWxsIT09aSYmImZ1bmN0aW9uIj09dHlwZW9mIGkuY29tcG9uZW50RGlkQ2F0Y2gmJihyLmNhbGxiYWNrPWZ1bmN0aW9uKCl7ImZ1bmN0aW9uIiE9dHlwZW9mIG4mJihudWxsPT09SHM/SHM9bmV3IFNldChbdGhpc10pOkhzLmFkZCh0aGlzKSxmcyhlLHQpKTt2YXIgcj10LnN0YWNrO3RoaXMuY29tcG9uZW50RGlkQ2F0Y2godC52YWx1ZSx7Y29tcG9uZW50U3RhY2s6bnVsbCE9PXI/cjoiIn0pfSkscn12YXIgQXMsQ3M9TWF0aC5jZWlsLFBzPUYuUmVhY3RDdXJyZW50RGlzcGF0Y2hlcixFcz1GLlJlYWN0Q3VycmVudE93bmVyLFRzPTAsUnM9bnVsbCxPcz1udWxsLElzPTAsRnM9MCxMcz1udWxsLERzPTEwNzM3NDE4MjMsTnM9MTA3Mzc0MTgyMyxNcz1udWxsLGpzPTAsQnM9ITEsVXM9MCxxcz1udWxsLHpzPSExLFdzPW51bGwsSHM9bnVsbCxHcz0hMSxWcz1udWxsLFhzPTkwLFlzPW51bGwsS3M9MCxKcz1udWxsLFFzPTA7ZnVuY3Rpb24gWnMoKXtyZXR1cm4gMCE9KDQ4JlRzKT8xMDczNzQxODIxLShxYSgpLzEwfDApOjAhPT1Rcz9RczpRcz0xMDczNzQxODIxLShxYSgpLzEwfDApfWZ1bmN0aW9uICRzKGUsdCxyKXtpZigwPT0oMiYodD10Lm1vZGUpKSlyZXR1cm4gMTA3Mzc0MTgyMzt2YXIgbj16YSgpO2lmKDA9PSg0JnQpKXJldHVybiA5OT09PW4/MTA3Mzc0MTgyMzoxMDczNzQxODIyO2lmKDAhPSgxNiZUcykpcmV0dXJuIElzO2lmKG51bGwhPT1yKWU9SmEoZSwwfHIudGltZW91dE1zfHw1ZTMsMjUwKTtlbHNlIHN3aXRjaChuKXtjYXNlIDk5OmU9MTA3Mzc0MTgyMzticmVhaztjYXNlIDk4OmU9SmEoZSwxNTAsMTAwKTticmVhaztjYXNlIDk3OmNhc2UgOTY6ZT1KYShlLDVlMywyNTApO2JyZWFrO2Nhc2UgOTU6ZT0yO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygzMjYpKX1yZXR1cm4gbnVsbCE9PVJzJiZlPT09SXMmJi0tZSxlfWZ1bmN0aW9uIGVsKGUsdCl7aWYoNTA8S3MpdGhyb3cgS3M9MCxKcz1udWxsLEVycm9yKG8oMTg1KSk7aWYobnVsbCE9PShlPXRsKGUsdCkpKXt2YXIgcj16YSgpOzEwNzM3NDE4MjM9PT10PzAhPSg4JlRzKSYmMD09KDQ4JlRzKT9pbChlKToobmwoZSksMD09PVRzJiZYYSgpKTpubChlKSwwPT0oNCZUcyl8fDk4IT09ciYmOTkhPT1yfHwobnVsbD09PVlzP1lzPW5ldyBNYXAoW1tlLHRdXSk6KHZvaWQgMD09PShyPVlzLmdldChlKSl8fHI+dCkmJllzLnNldChlLHQpKX19ZnVuY3Rpb24gdGwoZSx0KXtlLmV4cGlyYXRpb25UaW1lPHQmJihlLmV4cGlyYXRpb25UaW1lPXQpO3ZhciByPWUuYWx0ZXJuYXRlO251bGwhPT1yJiZyLmV4cGlyYXRpb25UaW1lPHQmJihyLmV4cGlyYXRpb25UaW1lPXQpO3ZhciBuPWUucmV0dXJuLGE9bnVsbDtpZihudWxsPT09biYmMz09PWUudGFnKWE9ZS5zdGF0ZU5vZGU7ZWxzZSBmb3IoO251bGwhPT1uOyl7aWYocj1uLmFsdGVybmF0ZSxuLmNoaWxkRXhwaXJhdGlvblRpbWU8dCYmKG4uY2hpbGRFeHBpcmF0aW9uVGltZT10KSxudWxsIT09ciYmci5jaGlsZEV4cGlyYXRpb25UaW1lPHQmJihyLmNoaWxkRXhwaXJhdGlvblRpbWU9dCksbnVsbD09PW4ucmV0dXJuJiYzPT09bi50YWcpe2E9bi5zdGF0ZU5vZGU7YnJlYWt9bj1uLnJldHVybn1yZXR1cm4gbnVsbCE9PWEmJihScz09PWEmJihobCh0KSw0PT09RnMmJkJsKGEsSXMpKSxVbChhLHQpKSxhfWZ1bmN0aW9uIHJsKGUpe3ZhciB0PWUubGFzdEV4cGlyZWRUaW1lO3JldHVybiAwIT09dD90OmpsKGUsdD1lLmZpcnN0UGVuZGluZ1RpbWUpPyh0PWUubGFzdFBpbmdlZFRpbWUpPihlPWUubmV4dEtub3duUGVuZGluZ0xldmVsKT90OmU6dH1mdW5jdGlvbiBubChlKXtpZigwIT09ZS5sYXN0RXhwaXJlZFRpbWUpZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPTEwNzM3NDE4MjMsZS5jYWxsYmFja1ByaW9yaXR5PTk5LGUuY2FsbGJhY2tOb2RlPVZhKGlsLmJpbmQobnVsbCxlKSk7ZWxzZXt2YXIgdD1ybChlKSxyPWUuY2FsbGJhY2tOb2RlO2lmKDA9PT10KW51bGwhPT1yJiYoZS5jYWxsYmFja05vZGU9bnVsbCxlLmNhbGxiYWNrRXhwaXJhdGlvblRpbWU9MCxlLmNhbGxiYWNrUHJpb3JpdHk9OTApO2Vsc2V7dmFyIG49WnMoKTtpZigxMDczNzQxODIzPT09dD9uPTk5OjE9PT10fHwyPT09dD9uPTk1Om49MD49KG49MTAqKDEwNzM3NDE4MjEtdCktMTAqKDEwNzM3NDE4MjEtbikpPzk5OjI1MD49bj85ODo1MjUwPj1uPzk3Ojk1LG51bGwhPT1yKXt2YXIgYT1lLmNhbGxiYWNrUHJpb3JpdHk7aWYoZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPT09dCYmYT49bilyZXR1cm47ciE9PURhJiZBYShyKX1lLmNhbGxiYWNrRXhwaXJhdGlvblRpbWU9dCxlLmNhbGxiYWNrUHJpb3JpdHk9bix0PTEwNzM3NDE4MjM9PT10P1ZhKGlsLmJpbmQobnVsbCxlKSk6R2EobixhbC5iaW5kKG51bGwsZSkse3RpbWVvdXQ6MTAqKDEwNzM3NDE4MjEtdCktcWEoKX0pLGUuY2FsbGJhY2tOb2RlPXR9fX1mdW5jdGlvbiBhbChlLHQpe2lmKFFzPTAsdClyZXR1cm4gcWwoZSx0PVpzKCkpLG5sKGUpLG51bGw7dmFyIHI9cmwoZSk7aWYoMCE9PXIpe2lmKHQ9ZS5jYWxsYmFja05vZGUsMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO2lmKGtsKCksZT09PVJzJiZyPT09SXN8fGxsKGUsciksbnVsbCE9PU9zKXt2YXIgbj1UcztUc3w9MTY7Zm9yKHZhciBhPXVsKCk7Oyl0cnl7cGwoKTticmVha31jYXRjaCh0KXtjbChlLHQpfWlmKHJpKCksVHM9bixQcy5jdXJyZW50PWEsMT09PUZzKXRocm93IHQ9THMsbGwoZSxyKSxCbChlLHIpLG5sKGUpLHQ7aWYobnVsbD09PU9zKXN3aXRjaChhPWUuZmluaXNoZWRXb3JrPWUuY3VycmVudC5hbHRlcm5hdGUsZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lPXIsbj1GcyxScz1udWxsLG4pe2Nhc2UgMDpjYXNlIDE6dGhyb3cgRXJyb3IobygzNDUpKTtjYXNlIDI6cWwoZSwyPHI/MjpyKTticmVhaztjYXNlIDM6aWYoQmwoZSxyKSxyPT09KG49ZS5sYXN0U3VzcGVuZGVkVGltZSkmJihlLm5leHRLbm93blBlbmRpbmdMZXZlbD12bChhKSksMTA3Mzc0MTgyMz09PURzJiYxMDwoYT1Vcys1MDAtcWEoKSkpe2lmKEJzKXt2YXIgaT1lLmxhc3RQaW5nZWRUaW1lO2lmKDA9PT1pfHxpPj1yKXtlLmxhc3RQaW5nZWRUaW1lPXIsbGwoZSxyKTticmVha319aWYoMCE9PShpPXJsKGUpKSYmaSE9PXIpYnJlYWs7aWYoMCE9PW4mJm4hPT1yKXtlLmxhc3RQaW5nZWRUaW1lPW47YnJlYWt9ZS50aW1lb3V0SGFuZGxlPSRyKHlsLmJpbmQobnVsbCxlKSxhKTticmVha315bChlKTticmVhaztjYXNlIDQ6aWYoQmwoZSxyKSxyPT09KG49ZS5sYXN0U3VzcGVuZGVkVGltZSkmJihlLm5leHRLbm93blBlbmRpbmdMZXZlbD12bChhKSksQnMmJigwPT09KGE9ZS5sYXN0UGluZ2VkVGltZSl8fGE+PXIpKXtlLmxhc3RQaW5nZWRUaW1lPXIsbGwoZSxyKTticmVha31pZigwIT09KGE9cmwoZSkpJiZhIT09cilicmVhaztpZigwIT09biYmbiE9PXIpe2UubGFzdFBpbmdlZFRpbWU9bjticmVha31pZigxMDczNzQxODIzIT09TnM/bj0xMCooMTA3Mzc0MTgyMS1OcyktcWEoKToxMDczNzQxODIzPT09RHM/bj0wOihuPTEwKigxMDczNzQxODIxLURzKS01ZTMsMD4obj0oYT1xYSgpKS1uKSYmKG49MCksKHI9MTAqKDEwNzM3NDE4MjEtciktYSk8KG49KDEyMD5uPzEyMDo0ODA+bj80ODA6MTA4MD5uPzEwODA6MTkyMD5uPzE5MjA6M2UzPm4/M2UzOjQzMjA+bj80MzIwOjE5NjAqQ3Mobi8xOTYwKSktbikmJihuPXIpKSwxMDxuKXtlLnRpbWVvdXRIYW5kbGU9JHIoeWwuYmluZChudWxsLGUpLG4pO2JyZWFrfXlsKGUpO2JyZWFrO2Nhc2UgNTppZigxMDczNzQxODIzIT09RHMmJm51bGwhPT1Ncyl7aT1Eczt2YXIgcz1NcztpZigwPj0obj0wfHMuYnVzeU1pbkR1cmF0aW9uTXMpP249MDooYT0wfHMuYnVzeURlbGF5TXMsbj0oaT1xYSgpLSgxMCooMTA3Mzc0MTgyMS1pKS0oMHxzLnRpbWVvdXRNc3x8NWUzKSkpPD1hPzA6YStuLWkpLDEwPG4pe0JsKGUsciksZS50aW1lb3V0SGFuZGxlPSRyKHlsLmJpbmQobnVsbCxlKSxuKTticmVha319eWwoZSk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBFcnJvcihvKDMyOSkpfWlmKG5sKGUpLGUuY2FsbGJhY2tOb2RlPT09dClyZXR1cm4gYWwuYmluZChudWxsLGUpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBpbChlKXt2YXIgdD1lLmxhc3RFeHBpcmVkVGltZTtpZih0PTAhPT10P3Q6MTA3Mzc0MTgyMyxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9PT10KXlsKGUpO2Vsc2V7aWYoMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO2lmKGtsKCksZT09PVJzJiZ0PT09SXN8fGxsKGUsdCksbnVsbCE9PU9zKXt2YXIgcj1UcztUc3w9MTY7Zm9yKHZhciBuPXVsKCk7Oyl0cnl7ZGwoKTticmVha31jYXRjaCh0KXtjbChlLHQpfWlmKHJpKCksVHM9cixQcy5jdXJyZW50PW4sMT09PUZzKXRocm93IHI9THMsbGwoZSx0KSxCbChlLHQpLG5sKGUpLHI7aWYobnVsbCE9PU9zKXRocm93IEVycm9yKG8oMjYxKSk7ZS5maW5pc2hlZFdvcms9ZS5jdXJyZW50LmFsdGVybmF0ZSxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9dCxScz1udWxsLHlsKGUpLG5sKGUpfX1yZXR1cm4gbnVsbH1mdW5jdGlvbiBvbChlLHQpe3ZhciByPVRzO1RzfD0xO3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5ezA9PT0oVHM9cikmJlhhKCl9fWZ1bmN0aW9uIHNsKGUsdCl7dmFyIHI9VHM7VHMmPS0yLFRzfD04O3RyeXtyZXR1cm4gZSh0KX1maW5hbGx5ezA9PT0oVHM9cikmJlhhKCl9fWZ1bmN0aW9uIGxsKGUsdCl7ZS5maW5pc2hlZFdvcms9bnVsbCxlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9MDt2YXIgcj1lLnRpbWVvdXRIYW5kbGU7aWYoLTEhPT1yJiYoZS50aW1lb3V0SGFuZGxlPS0xLGVuKHIpKSxudWxsIT09T3MpZm9yKHI9T3MucmV0dXJuO251bGwhPT1yOyl7dmFyIG49cjtzd2l0Y2gobi50YWcpe2Nhc2UgMTp2YXIgYT1uLnR5cGUuY2hpbGRDb250ZXh0VHlwZXM7bnVsbCE9YSYmdmEoKTticmVhaztjYXNlIDM6VWkoKSx5YSgpO2JyZWFrO2Nhc2UgNTp6aShuKTticmVhaztjYXNlIDQ6VWkoKTticmVhaztjYXNlIDEzOmNhc2UgMTk6Y2EoV2kpO2JyZWFrO2Nhc2UgMTA6YWkobil9cj1yLnJldHVybn1Scz1lLE9zPUlsKGUuY3VycmVudCxudWxsKSxJcz10LEZzPTAsTHM9bnVsbCxOcz1Ecz0xMDczNzQxODIzLE1zPW51bGwsanM9MCxCcz0hMX1mdW5jdGlvbiBjbChlLHQpe2Zvcig7Oyl7dHJ5e2lmKHJpKCksdW8oKSxudWxsPT09T3N8fG51bGw9PT1Pcy5yZXR1cm4pcmV0dXJuIEZzPTEsTHM9dCxudWxsO2U6e3ZhciByPWUsbj1Pcy5yZXR1cm4sYT1PcyxpPXQ7aWYodD1JcyxhLmVmZmVjdFRhZ3w9MjA0OCxhLmZpcnN0RWZmZWN0PWEubGFzdEVmZmVjdD1udWxsLG51bGwhPT1pJiYib2JqZWN0Ij09dHlwZW9mIGkmJiJmdW5jdGlvbiI9PXR5cGVvZiBpLnRoZW4pe3ZhciBvPWkscz0wIT0oMSZXaS5jdXJyZW50KSxsPW47ZG97dmFyIGM7aWYoYz0xMz09PWwudGFnKXt2YXIgdT1sLm1lbW9pemVkU3RhdGU7aWYobnVsbCE9PXUpYz1udWxsIT09dS5kZWh5ZHJhdGVkO2Vsc2V7dmFyIGY9bC5tZW1vaXplZFByb3BzO2M9dm9pZCAwIT09Zi5mYWxsYmFjayYmKCEwIT09Zi51bnN0YWJsZV9hdm9pZFRoaXNGYWxsYmFja3x8IXMpfX1pZihjKXt2YXIgaD1sLnVwZGF0ZVF1ZXVlO2lmKG51bGw9PT1oKXt2YXIgZD1uZXcgU2V0O2QuYWRkKG8pLGwudXBkYXRlUXVldWU9ZH1lbHNlIGguYWRkKG8pO2lmKDA9PSgyJmwubW9kZSkpe2lmKGwuZWZmZWN0VGFnfD02NCxhLmVmZmVjdFRhZyY9LTI5ODEsMT09PWEudGFnKWlmKG51bGw9PT1hLmFsdGVybmF0ZSlhLnRhZz0xNztlbHNle3ZhciBwPWZpKDEwNzM3NDE4MjMsbnVsbCk7cC50YWc9MixkaShhLHApfWEuZXhwaXJhdGlvblRpbWU9MTA3Mzc0MTgyMzticmVhayBlfWk9dm9pZCAwLGE9dDt2YXIgbT1yLnBpbmdDYWNoZTtpZihudWxsPT09bT8obT1yLnBpbmdDYWNoZT1uZXcgU3MsaT1uZXcgU2V0LG0uc2V0KG8saSkpOnZvaWQgMD09PShpPW0uZ2V0KG8pKSYmKGk9bmV3IFNldCxtLnNldChvLGkpKSwhaS5oYXMoYSkpe2kuYWRkKGEpO3ZhciBnPUFsLmJpbmQobnVsbCxyLG8sYSk7by50aGVuKGcsZyl9bC5lZmZlY3RUYWd8PTQwOTYsbC5leHBpcmF0aW9uVGltZT10O2JyZWFrIGV9bD1sLnJldHVybn13aGlsZShudWxsIT09bCk7aT1FcnJvcigoUShhLnR5cGUpfHwiQSBSZWFjdCBjb21wb25lbnQiKSsiIHN1c3BlbmRlZCB3aGlsZSByZW5kZXJpbmcsIGJ1dCBubyBmYWxsYmFjayBVSSB3YXMgc3BlY2lmaWVkLlxuXG5BZGQgYSA8U3VzcGVuc2UgZmFsbGJhY2s9Li4uPiBjb21wb25lbnQgaGlnaGVyIGluIHRoZSB0cmVlIHRvIHByb3ZpZGUgYSBsb2FkaW5nIGluZGljYXRvciBvciBwbGFjZWhvbGRlciB0byBkaXNwbGF5LiIrWihhKSl9NSE9PUZzJiYoRnM9MiksaT1jcyhpLGEpLGw9bjtkb3tzd2l0Y2gobC50YWcpe2Nhc2UgMzpvPWksbC5lZmZlY3RUYWd8PTQwOTYsbC5leHBpcmF0aW9uVGltZT10LHBpKGwsX3MobCxvLHQpKTticmVhayBlO2Nhc2UgMTpvPWk7dmFyIHY9bC50eXBlLHk9bC5zdGF0ZU5vZGU7aWYoMD09KDY0JmwuZWZmZWN0VGFnKSYmKCJmdW5jdGlvbiI9PXR5cGVvZiB2LmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8bnVsbCE9PXkmJiJmdW5jdGlvbiI9PXR5cGVvZiB5LmNvbXBvbmVudERpZENhdGNoJiYobnVsbD09PUhzfHwhSHMuaGFzKHkpKSkpe2wuZWZmZWN0VGFnfD00MDk2LGwuZXhwaXJhdGlvblRpbWU9dCxwaShsLHhzKGwsbyx0KSk7YnJlYWsgZX19bD1sLnJldHVybn13aGlsZShudWxsIT09bCl9T3M9Z2woT3MpfWNhdGNoKGUpe3Q9ZTtjb250aW51ZX1icmVha319ZnVuY3Rpb24gdWwoKXt2YXIgZT1Qcy5jdXJyZW50O3JldHVybiBQcy5jdXJyZW50PUVvLG51bGw9PT1lP0VvOmV9ZnVuY3Rpb24gZmwoZSx0KXtlPERzJiYyPGUmJihEcz1lKSxudWxsIT09dCYmZTxOcyYmMjxlJiYoTnM9ZSxNcz10KX1mdW5jdGlvbiBobChlKXtlPmpzJiYoanM9ZSl9ZnVuY3Rpb24gZGwoKXtmb3IoO251bGwhPT1PczspT3M9bWwoT3MpfWZ1bmN0aW9uIHBsKCl7Zm9yKDtudWxsIT09T3MmJiFDYSgpOylPcz1tbChPcyl9ZnVuY3Rpb24gbWwoZSl7dmFyIHQ9QXMoZS5hbHRlcm5hdGUsZSxJcyk7cmV0dXJuIGUubWVtb2l6ZWRQcm9wcz1lLnBlbmRpbmdQcm9wcyxudWxsPT09dCYmKHQ9Z2woZSkpLEVzLmN1cnJlbnQ9bnVsbCx0fWZ1bmN0aW9uIGdsKGUpe09zPWU7ZG97dmFyIHQ9T3MuYWx0ZXJuYXRlO2lmKGU9T3MucmV0dXJuLDA9PSgyMDQ4Jk9zLmVmZmVjdFRhZykpe2U6e3ZhciByPXQsbj1JcyxpPSh0PU9zKS5wZW5kaW5nUHJvcHM7c3dpdGNoKHQudGFnKXtjYXNlIDI6Y2FzZSAxNjpicmVhaztjYXNlIDE1OmNhc2UgMDpicmVhaztjYXNlIDE6Z2EodC50eXBlKSYmdmEoKTticmVhaztjYXNlIDM6VWkoKSx5YSgpLChpPXQuc3RhdGVOb2RlKS5wZW5kaW5nQ29udGV4dCYmKGkuY29udGV4dD1pLnBlbmRpbmdDb250ZXh0LGkucGVuZGluZ0NvbnRleHQ9bnVsbCksKG51bGw9PT1yfHxudWxsPT09ci5jaGlsZCkmJmpvKHQpJiZvcyh0KTticmVhaztjYXNlIDU6emkodCksbj1qaShNaS5jdXJyZW50KTt2YXIgcz10LnR5cGU7aWYobnVsbCE9PXImJm51bGwhPXQuc3RhdGVOb2RlKVpvKHIsdCxzLGksbiksci5yZWYhPT10LnJlZiYmKHQuZWZmZWN0VGFnfD0xMjgpO2Vsc2UgaWYoaSl7dmFyIGw9amkoRGkuY3VycmVudCk7aWYoam8odCkpe3ZhciBjPShpPXQpLnN0YXRlTm9kZTtyPWkudHlwZTt2YXIgdT1pLm1lbW9pemVkUHJvcHMsZj1uO3N3aXRjaChjW2FuXT1pLGNbb25dPXUscz12b2lkIDAsbj1jLHIpe2Nhc2UiaWZyYW1lIjpjYXNlIm9iamVjdCI6Y2FzZSJlbWJlZCI6eHIoImxvYWQiLG4pO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihjPTA7YzxldC5sZW5ndGg7YysrKXhyKGV0W2NdLG4pO2JyZWFrO2Nhc2Uic291cmNlIjp4cigiZXJyb3IiLG4pO2JyZWFrO2Nhc2UiaW1nIjpjYXNlImltYWdlIjpjYXNlImxpbmsiOnhyKCJlcnJvciIsbikseHIoImxvYWQiLG4pO2JyZWFrO2Nhc2UiZm9ybSI6eHIoInJlc2V0IixuKSx4cigic3VibWl0IixuKTticmVhaztjYXNlImRldGFpbHMiOnhyKCJ0b2dnbGUiLG4pO2JyZWFrO2Nhc2UiaW5wdXQiOlBlKG4sdSkseHIoImludmFsaWQiLG4pLHpyKGYsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJzZWxlY3QiOm4uX3dyYXBwZXJTdGF0ZT17d2FzTXVsdGlwbGU6ISF1Lm11bHRpcGxlfSx4cigiaW52YWxpZCIsbiksenIoZiwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpEZShuLHUpLHhyKCJpbnZhbGlkIixuKSx6cihmLCJvbkNoYW5nZSIpfWZvcihzIGluIFVyKHIsdSksYz1udWxsLHUpdS5oYXNPd25Qcm9wZXJ0eShzKSYmKGw9dVtzXSwiY2hpbGRyZW4iPT09cz8ic3RyaW5nIj09dHlwZW9mIGw/bi50ZXh0Q29udGVudCE9PWwmJihjPVsiY2hpbGRyZW4iLGxdKToibnVtYmVyIj09dHlwZW9mIGwmJm4udGV4dENvbnRlbnQhPT0iIitsJiYoYz1bImNoaWxkcmVuIiwiIitsXSk6ZC5oYXNPd25Qcm9wZXJ0eShzKSYmbnVsbCE9bCYmenIoZixzKSk7c3dpdGNoKHIpe2Nhc2UiaW5wdXQiOnhlKG4pLFJlKG4sdSwhMCk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6eGUobiksTWUobik7YnJlYWs7Y2FzZSJzZWxlY3QiOmNhc2Uib3B0aW9uIjpicmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiB1Lm9uQ2xpY2smJihuLm9uY2xpY2s9V3IpfXM9YyxpLnVwZGF0ZVF1ZXVlPXMsKGk9bnVsbCE9PXMpJiZvcyh0KX1lbHNle3I9dCxmPXMsdT1pLGM9OT09PW4ubm9kZVR5cGU/bjpuLm93bmVyRG9jdW1lbnQsbD09PWplJiYobD1VZShmKSksbD09PWplPyJzY3JpcHQiPT09Zj8oKHU9Yy5jcmVhdGVFbGVtZW50KCJkaXYiKSkuaW5uZXJIVE1MPSI8c2NyaXB0PjxcL3NjcmlwdD4iLGM9dS5yZW1vdmVDaGlsZCh1LmZpcnN0Q2hpbGQpKToic3RyaW5nIj09dHlwZW9mIHUuaXM/Yz1jLmNyZWF0ZUVsZW1lbnQoZix7aXM6dS5pc30pOihjPWMuY3JlYXRlRWxlbWVudChmKSwic2VsZWN0Ij09PWYmJihmPWMsdS5tdWx0aXBsZT9mLm11bHRpcGxlPSEwOnUuc2l6ZSYmKGYuc2l6ZT11LnNpemUpKSk6Yz1jLmNyZWF0ZUVsZW1lbnROUyhsLGYpLCh1PWMpW2FuXT1yLHVbb25dPWksUW8odSx0KSx0LnN0YXRlTm9kZT11O3ZhciBoPW4scD1xcihmPXMscj1pKTtzd2l0Y2goZil7Y2FzZSJpZnJhbWUiOmNhc2Uib2JqZWN0IjpjYXNlImVtYmVkIjp4cigibG9hZCIsdSksbj1yO2JyZWFrO2Nhc2UidmlkZW8iOmNhc2UiYXVkaW8iOmZvcihuPTA7bjxldC5sZW5ndGg7bisrKXhyKGV0W25dLHUpO249cjticmVhaztjYXNlInNvdXJjZSI6eHIoImVycm9yIix1KSxuPXI7YnJlYWs7Y2FzZSJpbWciOmNhc2UiaW1hZ2UiOmNhc2UibGluayI6eHIoImVycm9yIix1KSx4cigibG9hZCIsdSksbj1yO2JyZWFrO2Nhc2UiZm9ybSI6eHIoInJlc2V0Iix1KSx4cigic3VibWl0Iix1KSxuPXI7YnJlYWs7Y2FzZSJkZXRhaWxzIjp4cigidG9nZ2xlIix1KSxuPXI7YnJlYWs7Y2FzZSJpbnB1dCI6UGUodSxyKSxuPUNlKHUscikseHIoImludmFsaWQiLHUpLHpyKGgsIm9uQ2hhbmdlIik7YnJlYWs7Y2FzZSJvcHRpb24iOm49SWUodSxyKTticmVhaztjYXNlInNlbGVjdCI6dS5fd3JhcHBlclN0YXRlPXt3YXNNdWx0aXBsZTohIXIubXVsdGlwbGV9LG49YSh7fSxyLHt2YWx1ZTp2b2lkIDB9KSx4cigiaW52YWxpZCIsdSksenIoaCwib25DaGFuZ2UiKTticmVhaztjYXNlInRleHRhcmVhIjpEZSh1LHIpLG49TGUodSxyKSx4cigiaW52YWxpZCIsdSksenIoaCwib25DaGFuZ2UiKTticmVhaztkZWZhdWx0Om49cn1VcihmLG4pLGM9dm9pZCAwLGw9Zjt2YXIgbT11LGc9bjtmb3IoYyBpbiBnKWlmKGcuaGFzT3duUHJvcGVydHkoYykpe3ZhciB2PWdbY107InN0eWxlIj09PWM/anIobSx2KToiZGFuZ2Vyb3VzbHlTZXRJbm5lckhUTUwiPT09Yz9udWxsIT0odj12P3YuX19odG1sOnZvaWQgMCkmJldlKG0sdik6ImNoaWxkcmVuIj09PWM/InN0cmluZyI9PXR5cGVvZiB2PygidGV4dGFyZWEiIT09bHx8IiIhPT12KSYmSGUobSx2KToibnVtYmVyIj09dHlwZW9mIHYmJkhlKG0sIiIrdik6InN1cHByZXNzQ29udGVudEVkaXRhYmxlV2FybmluZyIhPT1jJiYic3VwcHJlc3NIeWRyYXRpb25XYXJuaW5nIiE9PWMmJiJhdXRvRm9jdXMiIT09YyYmKGQuaGFzT3duUHJvcGVydHkoYyk/bnVsbCE9diYmenIoaCxjKTpudWxsIT12JiZTZShtLGMsdixwKSl9c3dpdGNoKGYpe2Nhc2UiaW5wdXQiOnhlKHUpLFJlKHUsciwhMSk7YnJlYWs7Y2FzZSJ0ZXh0YXJlYSI6eGUodSksTWUodSk7YnJlYWs7Y2FzZSJvcHRpb24iOm51bGwhPXIudmFsdWUmJnUuc2V0QXR0cmlidXRlKCJ2YWx1ZSIsIiIra2Uoci52YWx1ZSkpO2JyZWFrO2Nhc2Uic2VsZWN0Ijoobj11KS5tdWx0aXBsZT0hIXIubXVsdGlwbGUsbnVsbCE9KHU9ci52YWx1ZSk/RmUobiwhIXIubXVsdGlwbGUsdSwhMSk6bnVsbCE9ci5kZWZhdWx0VmFsdWUmJkZlKG4sISFyLm11bHRpcGxlLHIuZGVmYXVsdFZhbHVlLCEwKTticmVhaztkZWZhdWx0OiJmdW5jdGlvbiI9PXR5cGVvZiBuLm9uQ2xpY2smJih1Lm9uY2xpY2s9V3IpfShpPVFyKHMsaSkpJiZvcyh0KX1udWxsIT09dC5yZWYmJih0LmVmZmVjdFRhZ3w9MTI4KX1lbHNlIGlmKG51bGw9PT10LnN0YXRlTm9kZSl0aHJvdyBFcnJvcihvKDE2NikpO2JyZWFrO2Nhc2UgNjppZihyJiZudWxsIT10LnN0YXRlTm9kZSkkbygwLHQsci5tZW1vaXplZFByb3BzLGkpO2Vsc2V7aWYoInN0cmluZyIhPXR5cGVvZiBpJiZudWxsPT09dC5zdGF0ZU5vZGUpdGhyb3cgRXJyb3IobygxNjYpKTtuPWppKE1pLmN1cnJlbnQpLGppKERpLmN1cnJlbnQpLGpvKHQpPyhzPShpPXQpLnN0YXRlTm9kZSxuPWkubWVtb2l6ZWRQcm9wcyxzW2FuXT1pLChpPXMubm9kZVZhbHVlIT09bikmJm9zKHQpKToocz10LChpPSg5PT09bi5ub2RlVHlwZT9uOm4ub3duZXJEb2N1bWVudCkuY3JlYXRlVGV4dE5vZGUoaSkpW2FuXT1zLHQuc3RhdGVOb2RlPWkpfWJyZWFrO2Nhc2UgMTE6YnJlYWs7Y2FzZSAxMzppZihjYShXaSksaT10Lm1lbW9pemVkU3RhdGUsMCE9KDY0JnQuZWZmZWN0VGFnKSl7dC5leHBpcmF0aW9uVGltZT1uO2JyZWFrIGV9aT1udWxsIT09aSxzPSExLG51bGw9PT1yP3ZvaWQgMCE9PXQubWVtb2l6ZWRQcm9wcy5mYWxsYmFjayYmam8odCk6KHM9bnVsbCE9PShuPXIubWVtb2l6ZWRTdGF0ZSksaXx8bnVsbD09PW58fG51bGwhPT0obj1yLmNoaWxkLnNpYmxpbmcpJiYobnVsbCE9PSh1PXQuZmlyc3RFZmZlY3QpPyh0LmZpcnN0RWZmZWN0PW4sbi5uZXh0RWZmZWN0PXUpOih0LmZpcnN0RWZmZWN0PXQubGFzdEVmZmVjdD1uLG4ubmV4dEVmZmVjdD1udWxsKSxuLmVmZmVjdFRhZz04KSksaSYmIXMmJjAhPSgyJnQubW9kZSkmJihudWxsPT09ciYmITAhPT10Lm1lbW9pemVkUHJvcHMudW5zdGFibGVfYXZvaWRUaGlzRmFsbGJhY2t8fDAhPSgxJldpLmN1cnJlbnQpPzA9PT1GcyYmKEZzPTMpOigwIT09RnMmJjMhPT1Gc3x8KEZzPTQpLDAhPT1qcyYmbnVsbCE9PVJzJiYoQmwoUnMsSXMpLFVsKFJzLGpzKSkpKSwoaXx8cykmJih0LmVmZmVjdFRhZ3w9NCk7YnJlYWs7Y2FzZSA3OmNhc2UgODpjYXNlIDEyOmJyZWFrO2Nhc2UgNDpVaSgpO2JyZWFrO2Nhc2UgMTA6YWkodCk7YnJlYWs7Y2FzZSA5OmNhc2UgMTQ6YnJlYWs7Y2FzZSAxNzpnYSh0LnR5cGUpJiZ2YSgpO2JyZWFrO2Nhc2UgMTk6aWYoY2EoV2kpLG51bGw9PT0oaT10Lm1lbW9pemVkU3RhdGUpKWJyZWFrO2lmKHM9MCE9KDY0JnQuZWZmZWN0VGFnKSxudWxsPT09KHU9aS5yZW5kZXJpbmcpKXtpZihzKXNzKGksITEpO2Vsc2UgaWYoMCE9PUZzfHxudWxsIT09ciYmMCE9KDY0JnIuZWZmZWN0VGFnKSlmb3Iocj10LmNoaWxkO251bGwhPT1yOyl7aWYobnVsbCE9PSh1PUhpKHIpKSl7Zm9yKHQuZWZmZWN0VGFnfD02NCxzcyhpLCExKSxudWxsIT09KHM9dS51cGRhdGVRdWV1ZSkmJih0LnVwZGF0ZVF1ZXVlPXMsdC5lZmZlY3RUYWd8PTQpLG51bGw9PT1pLmxhc3RFZmZlY3QmJih0LmZpcnN0RWZmZWN0PW51bGwpLHQubGFzdEVmZmVjdD1pLmxhc3RFZmZlY3QsaT1uLHM9dC5jaGlsZDtudWxsIT09czspcj1pLChuPXMpLmVmZmVjdFRhZyY9MixuLm5leHRFZmZlY3Q9bnVsbCxuLmZpcnN0RWZmZWN0PW51bGwsbi5sYXN0RWZmZWN0PW51bGwsbnVsbD09PSh1PW4uYWx0ZXJuYXRlKT8obi5jaGlsZEV4cGlyYXRpb25UaW1lPTAsbi5leHBpcmF0aW9uVGltZT1yLG4uY2hpbGQ9bnVsbCxuLm1lbW9pemVkUHJvcHM9bnVsbCxuLm1lbW9pemVkU3RhdGU9bnVsbCxuLnVwZGF0ZVF1ZXVlPW51bGwsbi5kZXBlbmRlbmNpZXM9bnVsbCk6KG4uY2hpbGRFeHBpcmF0aW9uVGltZT11LmNoaWxkRXhwaXJhdGlvblRpbWUsbi5leHBpcmF0aW9uVGltZT11LmV4cGlyYXRpb25UaW1lLG4uY2hpbGQ9dS5jaGlsZCxuLm1lbW9pemVkUHJvcHM9dS5tZW1vaXplZFByb3BzLG4ubWVtb2l6ZWRTdGF0ZT11Lm1lbW9pemVkU3RhdGUsbi51cGRhdGVRdWV1ZT11LnVwZGF0ZVF1ZXVlLHI9dS5kZXBlbmRlbmNpZXMsbi5kZXBlbmRlbmNpZXM9bnVsbD09PXI/bnVsbDp7ZXhwaXJhdGlvblRpbWU6ci5leHBpcmF0aW9uVGltZSxmaXJzdENvbnRleHQ6ci5maXJzdENvbnRleHQscmVzcG9uZGVyczpyLnJlc3BvbmRlcnN9KSxzPXMuc2libGluZzt1YShXaSwxJldpLmN1cnJlbnR8MiksdD10LmNoaWxkO2JyZWFrIGV9cj1yLnNpYmxpbmd9fWVsc2V7aWYoIXMpaWYobnVsbCE9PShyPUhpKHUpKSl7aWYodC5lZmZlY3RUYWd8PTY0LHM9ITAsbnVsbCE9PShuPXIudXBkYXRlUXVldWUpJiYodC51cGRhdGVRdWV1ZT1uLHQuZWZmZWN0VGFnfD00KSxzcyhpLCEwKSxudWxsPT09aS50YWlsJiYiaGlkZGVuIj09PWkudGFpbE1vZGUmJiF1LmFsdGVybmF0ZSl7bnVsbCE9PSh0PXQubGFzdEVmZmVjdD1pLmxhc3RFZmZlY3QpJiYodC5uZXh0RWZmZWN0PW51bGwpO2JyZWFrfX1lbHNlIHFhKCk+aS50YWlsRXhwaXJhdGlvbiYmMTxuJiYodC5lZmZlY3RUYWd8PTY0LHM9ITAsc3MoaSwhMSksdC5leHBpcmF0aW9uVGltZT10LmNoaWxkRXhwaXJhdGlvblRpbWU9bi0xKTtpLmlzQmFja3dhcmRzPyh1LnNpYmxpbmc9dC5jaGlsZCx0LmNoaWxkPXUpOihudWxsIT09KG49aS5sYXN0KT9uLnNpYmxpbmc9dTp0LmNoaWxkPXUsaS5sYXN0PXUpfWlmKG51bGwhPT1pLnRhaWwpezA9PT1pLnRhaWxFeHBpcmF0aW9uJiYoaS50YWlsRXhwaXJhdGlvbj1xYSgpKzUwMCksbj1pLnRhaWwsaS5yZW5kZXJpbmc9bixpLnRhaWw9bi5zaWJsaW5nLGkubGFzdEVmZmVjdD10Lmxhc3RFZmZlY3Qsbi5zaWJsaW5nPW51bGwsaT1XaS5jdXJyZW50LHVhKFdpLGk9cz8xJml8MjoxJmkpLHQ9bjticmVhayBlfWJyZWFrO2Nhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTU2LHQudGFnKSl9dD1udWxsfWlmKGk9T3MsMT09PUlzfHwxIT09aS5jaGlsZEV4cGlyYXRpb25UaW1lKXtmb3Iocz0wLG49aS5jaGlsZDtudWxsIT09bjspKHI9bi5leHBpcmF0aW9uVGltZSk+cyYmKHM9ciksKHU9bi5jaGlsZEV4cGlyYXRpb25UaW1lKT5zJiYocz11KSxuPW4uc2libGluZztpLmNoaWxkRXhwaXJhdGlvblRpbWU9c31pZihudWxsIT09dClyZXR1cm4gdDtudWxsIT09ZSYmMD09KDIwNDgmZS5lZmZlY3RUYWcpJiYobnVsbD09PWUuZmlyc3RFZmZlY3QmJihlLmZpcnN0RWZmZWN0PU9zLmZpcnN0RWZmZWN0KSxudWxsIT09T3MubGFzdEVmZmVjdCYmKG51bGwhPT1lLmxhc3RFZmZlY3QmJihlLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1Pcy5maXJzdEVmZmVjdCksZS5sYXN0RWZmZWN0PU9zLmxhc3RFZmZlY3QpLDE8T3MuZWZmZWN0VGFnJiYobnVsbCE9PWUubGFzdEVmZmVjdD9lLmxhc3RFZmZlY3QubmV4dEVmZmVjdD1PczplLmZpcnN0RWZmZWN0PU9zLGUubGFzdEVmZmVjdD1PcykpfWVsc2V7aWYobnVsbCE9PSh0PWxzKE9zKSkpcmV0dXJuIHQuZWZmZWN0VGFnJj0yMDQ3LHQ7bnVsbCE9PWUmJihlLmZpcnN0RWZmZWN0PWUubGFzdEVmZmVjdD1udWxsLGUuZWZmZWN0VGFnfD0yMDQ4KX1pZihudWxsIT09KHQ9T3Muc2libGluZykpcmV0dXJuIHQ7T3M9ZX13aGlsZShudWxsIT09T3MpO3JldHVybiAwPT09RnMmJihGcz01KSxudWxsfWZ1bmN0aW9uIHZsKGUpe3ZhciB0PWUuZXhwaXJhdGlvblRpbWU7cmV0dXJuIHQ+KGU9ZS5jaGlsZEV4cGlyYXRpb25UaW1lKT90OmV9ZnVuY3Rpb24geWwoZSl7dmFyIHQ9emEoKTtyZXR1cm4gSGEoOTksYmwuYmluZChudWxsLGUsdCkpLG51bGx9ZnVuY3Rpb24gYmwoZSx0KXtkb3trbCgpfXdoaWxlKG51bGwhPT1Wcyk7aWYoMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMyNykpO3ZhciByPWUuZmluaXNoZWRXb3JrLG49ZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lO2lmKG51bGw9PT1yKXJldHVybiBudWxsO2lmKGUuZmluaXNoZWRXb3JrPW51bGwsZS5maW5pc2hlZEV4cGlyYXRpb25UaW1lPTAscj09PWUuY3VycmVudCl0aHJvdyBFcnJvcihvKDE3NykpO2UuY2FsbGJhY2tOb2RlPW51bGwsZS5jYWxsYmFja0V4cGlyYXRpb25UaW1lPTAsZS5jYWxsYmFja1ByaW9yaXR5PTkwLGUubmV4dEtub3duUGVuZGluZ0xldmVsPTA7dmFyIGE9dmwocik7aWYoZS5maXJzdFBlbmRpbmdUaW1lPWEsbjw9ZS5sYXN0U3VzcGVuZGVkVGltZT9lLmZpcnN0U3VzcGVuZGVkVGltZT1lLmxhc3RTdXNwZW5kZWRUaW1lPWUubmV4dEtub3duUGVuZGluZ0xldmVsPTA6bjw9ZS5maXJzdFN1c3BlbmRlZFRpbWUmJihlLmZpcnN0U3VzcGVuZGVkVGltZT1uLTEpLG48PWUubGFzdFBpbmdlZFRpbWUmJihlLmxhc3RQaW5nZWRUaW1lPTApLG48PWUubGFzdEV4cGlyZWRUaW1lJiYoZS5sYXN0RXhwaXJlZFRpbWU9MCksZT09PVJzJiYoT3M9UnM9bnVsbCxJcz0wKSwxPHIuZWZmZWN0VGFnP251bGwhPT1yLmxhc3RFZmZlY3Q/KHIubGFzdEVmZmVjdC5uZXh0RWZmZWN0PXIsYT1yLmZpcnN0RWZmZWN0KTphPXI6YT1yLmZpcnN0RWZmZWN0LG51bGwhPT1hKXt2YXIgaT1UcztUc3w9MzIsRXMuY3VycmVudD1udWxsLEtyPV9yO3ZhciBzPVhyKCk7aWYoWXIocykpe2lmKCJzZWxlY3Rpb25TdGFydCJpbiBzKXZhciBsPXtzdGFydDpzLnNlbGVjdGlvblN0YXJ0LGVuZDpzLnNlbGVjdGlvbkVuZH07ZWxzZSBlOnt2YXIgYz0obD0obD1zLm93bmVyRG9jdW1lbnQpJiZsLmRlZmF1bHRWaWV3fHx3aW5kb3cpLmdldFNlbGVjdGlvbiYmbC5nZXRTZWxlY3Rpb24oKTtpZihjJiYwIT09Yy5yYW5nZUNvdW50KXtsPWMuYW5jaG9yTm9kZTt2YXIgdT1jLmFuY2hvck9mZnNldCxmPWMuZm9jdXNOb2RlO2M9Yy5mb2N1c09mZnNldDt0cnl7bC5ub2RlVHlwZSxmLm5vZGVUeXBlfWNhdGNoKGUpe2w9bnVsbDticmVhayBlfXZhciBoPTAsZD0tMSxwPS0xLG09MCxnPTAsdj1zLHk9bnVsbDt0OmZvcig7Oyl7Zm9yKHZhciBiO3YhPT1sfHwwIT09dSYmMyE9PXYubm9kZVR5cGV8fChkPWgrdSksdiE9PWZ8fDAhPT1jJiYzIT09di5ub2RlVHlwZXx8KHA9aCtjKSwzPT09di5ub2RlVHlwZSYmKGgrPXYubm9kZVZhbHVlLmxlbmd0aCksbnVsbCE9PShiPXYuZmlyc3RDaGlsZCk7KXk9dix2PWI7Zm9yKDs7KXtpZih2PT09cylicmVhayB0O2lmKHk9PT1sJiYrK209PT11JiYoZD1oKSx5PT09ZiYmKytnPT09YyYmKHA9aCksbnVsbCE9PShiPXYubmV4dFNpYmxpbmcpKWJyZWFrO3k9KHY9eSkucGFyZW50Tm9kZX12PWJ9bD0tMT09PWR8fC0xPT09cD9udWxsOntzdGFydDpkLGVuZDpwfX1lbHNlIGw9bnVsbH1sPWx8fHtzdGFydDowLGVuZDowfX1lbHNlIGw9bnVsbDtKcj17Zm9jdXNlZEVsZW06cyxzZWxlY3Rpb25SYW5nZTpsfSxfcj0hMSxxcz1hO2Rve3RyeXt3bCgpfWNhdGNoKGUpe2lmKG51bGw9PT1xcyl0aHJvdyBFcnJvcihvKDMzMCkpO3hsKHFzLGUpLHFzPXFzLm5leHRFZmZlY3R9fXdoaWxlKG51bGwhPT1xcyk7cXM9YTtkb3t0cnl7Zm9yKHM9ZSxsPXQ7bnVsbCE9PXFzOyl7dmFyIHc9cXMuZWZmZWN0VGFnO2lmKDE2JncmJkhlKHFzLnN0YXRlTm9kZSwiIiksMTI4Jncpe3ZhciBrPXFzLmFsdGVybmF0ZTtpZihudWxsIT09ayl7dmFyIFM9ay5yZWY7bnVsbCE9PVMmJigiZnVuY3Rpb24iPT10eXBlb2YgUz9TKG51bGwpOlMuY3VycmVudD1udWxsKX19c3dpdGNoKDEwMzgmdyl7Y2FzZSAyOnlzKHFzKSxxcy5lZmZlY3RUYWcmPS0zO2JyZWFrO2Nhc2UgNjp5cyhxcykscXMuZWZmZWN0VGFnJj0tMyx3cyhxcy5hbHRlcm5hdGUscXMpO2JyZWFrO2Nhc2UgMTAyNDpxcy5lZmZlY3RUYWcmPS0xMDI1O2JyZWFrO2Nhc2UgMTAyODpxcy5lZmZlY3RUYWcmPS0xMDI1LHdzKHFzLmFsdGVybmF0ZSxxcyk7YnJlYWs7Y2FzZSA0OndzKHFzLmFsdGVybmF0ZSxxcyk7YnJlYWs7Y2FzZSA4OmJzKHMsdT1xcyxsKSxncyh1KX1xcz1xcy5uZXh0RWZmZWN0fX1jYXRjaChlKXtpZihudWxsPT09cXMpdGhyb3cgRXJyb3IobygzMzApKTt4bChxcyxlKSxxcz1xcy5uZXh0RWZmZWN0fX13aGlsZShudWxsIT09cXMpO2lmKFM9SnIsaz1YcigpLHc9Uy5mb2N1c2VkRWxlbSxsPVMuc2VsZWN0aW9uUmFuZ2UsayE9PXcmJncmJncub3duZXJEb2N1bWVudCYmZnVuY3Rpb24gZSh0LHIpe3JldHVybiEoIXR8fCFyKSYmKHQ9PT1yfHwoIXR8fDMhPT10Lm5vZGVUeXBlKSYmKHImJjM9PT1yLm5vZGVUeXBlP2UodCxyLnBhcmVudE5vZGUpOiJjb250YWlucyJpbiB0P3QuY29udGFpbnMocik6ISF0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uJiYhISgxNiZ0LmNvbXBhcmVEb2N1bWVudFBvc2l0aW9uKHIpKSkpfSh3Lm93bmVyRG9jdW1lbnQuZG9jdW1lbnRFbGVtZW50LHcpKXtudWxsIT09bCYmWXIodykmJihrPWwuc3RhcnQsdm9pZCAwPT09KFM9bC5lbmQpJiYoUz1rKSwic2VsZWN0aW9uU3RhcnQiaW4gdz8ody5zZWxlY3Rpb25TdGFydD1rLHcuc2VsZWN0aW9uRW5kPU1hdGgubWluKFMsdy52YWx1ZS5sZW5ndGgpKTooUz0oaz13Lm93bmVyRG9jdW1lbnR8fGRvY3VtZW50KSYmay5kZWZhdWx0Vmlld3x8d2luZG93KS5nZXRTZWxlY3Rpb24mJihTPVMuZ2V0U2VsZWN0aW9uKCksdT13LnRleHRDb250ZW50Lmxlbmd0aCxzPU1hdGgubWluKGwuc3RhcnQsdSksbD12b2lkIDA9PT1sLmVuZD9zOk1hdGgubWluKGwuZW5kLHUpLCFTLmV4dGVuZCYmcz5sJiYodT1sLGw9cyxzPXUpLHU9VnIodyxzKSxmPVZyKHcsbCksdSYmZiYmKDEhPT1TLnJhbmdlQ291bnR8fFMuYW5jaG9yTm9kZSE9PXUubm9kZXx8Uy5hbmNob3JPZmZzZXQhPT11Lm9mZnNldHx8Uy5mb2N1c05vZGUhPT1mLm5vZGV8fFMuZm9jdXNPZmZzZXQhPT1mLm9mZnNldCkmJigoaz1rLmNyZWF0ZVJhbmdlKCkpLnNldFN0YXJ0KHUubm9kZSx1Lm9mZnNldCksUy5yZW1vdmVBbGxSYW5nZXMoKSxzPmw/KFMuYWRkUmFuZ2UoayksUy5leHRlbmQoZi5ub2RlLGYub2Zmc2V0KSk6KGsuc2V0RW5kKGYubm9kZSxmLm9mZnNldCksUy5hZGRSYW5nZShrKSkpKSksaz1bXTtmb3IoUz13O1M9Uy5wYXJlbnROb2RlOykxPT09Uy5ub2RlVHlwZSYmay5wdXNoKHtlbGVtZW50OlMsbGVmdDpTLnNjcm9sbExlZnQsdG9wOlMuc2Nyb2xsVG9wfSk7Zm9yKCJmdW5jdGlvbiI9PXR5cGVvZiB3LmZvY3VzJiZ3LmZvY3VzKCksdz0wO3c8ay5sZW5ndGg7dysrKShTPWtbd10pLmVsZW1lbnQuc2Nyb2xsTGVmdD1TLmxlZnQsUy5lbGVtZW50LnNjcm9sbFRvcD1TLnRvcH1Kcj1udWxsLF9yPSEhS3IsS3I9bnVsbCxlLmN1cnJlbnQ9cixxcz1hO2Rve3RyeXtmb3Iodz1uO251bGwhPT1xczspe3ZhciBfPXFzLmVmZmVjdFRhZztpZigzNiZfKXt2YXIgeD1xcy5hbHRlcm5hdGU7c3dpdGNoKFM9dywoaz1xcykudGFnKXtjYXNlIDA6Y2FzZSAxMTpjYXNlIDE1OnBzKDE2LDMyLGspO2JyZWFrO2Nhc2UgMTp2YXIgQT1rLnN0YXRlTm9kZTtpZig0JmsuZWZmZWN0VGFnKWlmKG51bGw9PT14KUEuY29tcG9uZW50RGlkTW91bnQoKTtlbHNle3ZhciBDPWsuZWxlbWVudFR5cGU9PT1rLnR5cGU/eC5tZW1vaXplZFByb3BzOlFhKGsudHlwZSx4Lm1lbW9pemVkUHJvcHMpO0EuY29tcG9uZW50RGlkVXBkYXRlKEMseC5tZW1vaXplZFN0YXRlLEEuX19yZWFjdEludGVybmFsU25hcHNob3RCZWZvcmVVcGRhdGUpfXZhciBQPWsudXBkYXRlUXVldWU7bnVsbCE9PVAmJnlpKDAsUCxBKTticmVhaztjYXNlIDM6dmFyIEU9ay51cGRhdGVRdWV1ZTtpZihudWxsIT09RSl7aWYocz1udWxsLG51bGwhPT1rLmNoaWxkKXN3aXRjaChrLmNoaWxkLnRhZyl7Y2FzZSA1OnM9ay5jaGlsZC5zdGF0ZU5vZGU7YnJlYWs7Y2FzZSAxOnM9ay5jaGlsZC5zdGF0ZU5vZGV9eWkoMCxFLHMpfWJyZWFrO2Nhc2UgNTp2YXIgVD1rLnN0YXRlTm9kZTtudWxsPT09eCYmNCZrLmVmZmVjdFRhZyYmUXIoay50eXBlLGsubWVtb2l6ZWRQcm9wcykmJlQuZm9jdXMoKTticmVhaztjYXNlIDY6Y2FzZSA0OmNhc2UgMTI6YnJlYWs7Y2FzZSAxMzppZihudWxsPT09ay5tZW1vaXplZFN0YXRlKXt2YXIgUj1rLmFsdGVybmF0ZTtpZihudWxsIT09Uil7dmFyIE89Ui5tZW1vaXplZFN0YXRlO2lmKG51bGwhPT1PKXt2YXIgST1PLmRlaHlkcmF0ZWQ7bnVsbCE9PUkmJkN0KEkpfX19YnJlYWs7Y2FzZSAxOTpjYXNlIDE3OmNhc2UgMjA6Y2FzZSAyMTpicmVhaztkZWZhdWx0OnRocm93IEVycm9yKG8oMTYzKSl9fWlmKDEyOCZfKXtrPXZvaWQgMDt2YXIgRj1xcy5yZWY7aWYobnVsbCE9PUYpe3ZhciBMPXFzLnN0YXRlTm9kZTtzd2l0Y2gocXMudGFnKXtjYXNlIDU6az1MO2JyZWFrO2RlZmF1bHQ6az1MfSJmdW5jdGlvbiI9PXR5cGVvZiBGP0Yoayk6Ri5jdXJyZW50PWt9fXFzPXFzLm5leHRFZmZlY3R9fWNhdGNoKGUpe2lmKG51bGw9PT1xcyl0aHJvdyBFcnJvcihvKDMzMCkpO3hsKHFzLGUpLHFzPXFzLm5leHRFZmZlY3R9fXdoaWxlKG51bGwhPT1xcyk7cXM9bnVsbCxOYSgpLFRzPWl9ZWxzZSBlLmN1cnJlbnQ9cjtpZihHcylHcz0hMSxWcz1lLFhzPXQ7ZWxzZSBmb3IocXM9YTtudWxsIT09cXM7KXQ9cXMubmV4dEVmZmVjdCxxcy5uZXh0RWZmZWN0PW51bGwscXM9dDtpZigwPT09KHQ9ZS5maXJzdFBlbmRpbmdUaW1lKSYmKEhzPW51bGwpLDEwNzM3NDE4MjM9PT10P2U9PT1Kcz9LcysrOihLcz0wLEpzPWUpOktzPTAsImZ1bmN0aW9uIj09dHlwZW9mIFBsJiZQbChyLnN0YXRlTm9kZSxuKSxubChlKSx6cyl0aHJvdyB6cz0hMSxlPVdzLFdzPW51bGwsZTtyZXR1cm4gMCE9KDgmVHMpP251bGw6KFhhKCksbnVsbCl9ZnVuY3Rpb24gd2woKXtmb3IoO251bGwhPT1xczspe3ZhciBlPXFzLmVmZmVjdFRhZzswIT0oMjU2JmUpJiZkcyhxcy5hbHRlcm5hdGUscXMpLDA9PSg1MTImZSl8fEdzfHwoR3M9ITAsR2EoOTcsKGZ1bmN0aW9uKCl7cmV0dXJuIGtsKCksbnVsbH0pKSkscXM9cXMubmV4dEVmZmVjdH19ZnVuY3Rpb24ga2woKXtpZig5MCE9PVhzKXt2YXIgZT05NzxYcz85NzpYcztyZXR1cm4gWHM9OTAsSGEoZSxTbCl9fWZ1bmN0aW9uIFNsKCl7aWYobnVsbD09PVZzKXJldHVybiExO3ZhciBlPVZzO2lmKFZzPW51bGwsMCE9KDQ4JlRzKSl0aHJvdyBFcnJvcihvKDMzMSkpO3ZhciB0PVRzO2ZvcihUc3w9MzIsZT1lLmN1cnJlbnQuZmlyc3RFZmZlY3Q7bnVsbCE9PWU7KXt0cnl7dmFyIHI9ZTtpZigwIT0oNTEyJnIuZWZmZWN0VGFnKSlzd2l0Y2goci50YWcpe2Nhc2UgMDpjYXNlIDExOmNhc2UgMTU6cHMoMTI4LDAscikscHMoMCw2NCxyKX19Y2F0Y2godCl7aWYobnVsbD09PWUpdGhyb3cgRXJyb3IobygzMzApKTt4bChlLHQpfXI9ZS5uZXh0RWZmZWN0LGUubmV4dEVmZmVjdD1udWxsLGU9cn1yZXR1cm4gVHM9dCxYYSgpLCEwfWZ1bmN0aW9uIF9sKGUsdCxyKXtkaShlLHQ9X3MoZSx0PWNzKHIsdCksMTA3Mzc0MTgyMykpLG51bGwhPT0oZT10bChlLDEwNzM3NDE4MjMpKSYmbmwoZSl9ZnVuY3Rpb24geGwoZSx0KXtpZigzPT09ZS50YWcpX2woZSxlLHQpO2Vsc2UgZm9yKHZhciByPWUucmV0dXJuO251bGwhPT1yOyl7aWYoMz09PXIudGFnKXtfbChyLGUsdCk7YnJlYWt9aWYoMT09PXIudGFnKXt2YXIgbj1yLnN0YXRlTm9kZTtpZigiZnVuY3Rpb24iPT10eXBlb2Ygci50eXBlLmdldERlcml2ZWRTdGF0ZUZyb21FcnJvcnx8ImZ1bmN0aW9uIj09dHlwZW9mIG4uY29tcG9uZW50RGlkQ2F0Y2gmJihudWxsPT09SHN8fCFIcy5oYXMobikpKXtkaShyLGU9eHMocixlPWNzKHQsZSksMTA3Mzc0MTgyMykpLG51bGwhPT0ocj10bChyLDEwNzM3NDE4MjMpKSYmbmwocik7YnJlYWt9fXI9ci5yZXR1cm59fWZ1bmN0aW9uIEFsKGUsdCxyKXt2YXIgbj1lLnBpbmdDYWNoZTtudWxsIT09biYmbi5kZWxldGUodCksUnM9PT1lJiZJcz09PXI/ND09PUZzfHwzPT09RnMmJjEwNzM3NDE4MjM9PT1EcyYmcWEoKS1Vczw1MDA/bGwoZSxJcyk6QnM9ITA6amwoZSxyKSYmKDAhPT0odD1lLmxhc3RQaW5nZWRUaW1lKSYmdDxyfHwoZS5sYXN0UGluZ2VkVGltZT1yLGUuZmluaXNoZWRFeHBpcmF0aW9uVGltZT09PXImJihlLmZpbmlzaGVkRXhwaXJhdGlvblRpbWU9MCxlLmZpbmlzaGVkV29yaz1udWxsKSxubChlKSkpfWZ1bmN0aW9uIENsKGUsdCl7dmFyIHI9ZS5zdGF0ZU5vZGU7bnVsbCE9PXImJnIuZGVsZXRlKHQpLDA9PT0odD0wKSYmKHQ9JHModD1acygpLGUsbnVsbCkpLG51bGwhPT0oZT10bChlLHQpKSYmbmwoZSl9QXM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQuZXhwaXJhdGlvblRpbWU7aWYobnVsbCE9PWUpe3ZhciBhPXQucGVuZGluZ1Byb3BzO2lmKGUubWVtb2l6ZWRQcm9wcyE9PWF8fGRhLmN1cnJlbnQpcW89ITA7ZWxzZXtpZihuPHIpe3N3aXRjaChxbz0hMSx0LnRhZyl7Y2FzZSAzOkpvKHQpLEJvKCk7YnJlYWs7Y2FzZSA1OmlmKHFpKHQpLDQmdC5tb2RlJiYxIT09ciYmYS5oaWRkZW4pcmV0dXJuIHQuZXhwaXJhdGlvblRpbWU9dC5jaGlsZEV4cGlyYXRpb25UaW1lPTEsbnVsbDticmVhaztjYXNlIDE6Z2EodC50eXBlKSYma2EodCk7YnJlYWs7Y2FzZSA0OkJpKHQsdC5zdGF0ZU5vZGUuY29udGFpbmVySW5mbyk7YnJlYWs7Y2FzZSAxMDpuaSh0LHQubWVtb2l6ZWRQcm9wcy52YWx1ZSk7YnJlYWs7Y2FzZSAxMzppZihudWxsIT09dC5tZW1vaXplZFN0YXRlKXJldHVybiAwIT09KG49dC5jaGlsZC5jaGlsZEV4cGlyYXRpb25UaW1lKSYmbj49cj90cyhlLHQscik6KHVhKFdpLDEmV2kuY3VycmVudCksbnVsbCE9PSh0PWlzKGUsdCxyKSk/dC5zaWJsaW5nOm51bGwpO3VhKFdpLDEmV2kuY3VycmVudCk7YnJlYWs7Y2FzZSAxOTppZihuPXQuY2hpbGRFeHBpcmF0aW9uVGltZT49ciwwIT0oNjQmZS5lZmZlY3RUYWcpKXtpZihuKXJldHVybiBhcyhlLHQscik7dC5lZmZlY3RUYWd8PTY0fWlmKG51bGwhPT0oYT10Lm1lbW9pemVkU3RhdGUpJiYoYS5yZW5kZXJpbmc9bnVsbCxhLnRhaWw9bnVsbCksdWEoV2ksV2kuY3VycmVudCksIW4pcmV0dXJuIG51bGx9cmV0dXJuIGlzKGUsdCxyKX1xbz0hMX19ZWxzZSBxbz0hMTtzd2l0Y2godC5leHBpcmF0aW9uVGltZT0wLHQudGFnKXtjYXNlIDI6aWYobj10LnR5cGUsbnVsbCE9PWUmJihlLmFsdGVybmF0ZT1udWxsLHQuYWx0ZXJuYXRlPW51bGwsdC5lZmZlY3RUYWd8PTIpLGU9dC5wZW5kaW5nUHJvcHMsYT1tYSh0LGhhLmN1cnJlbnQpLG9pKHQsciksYT1jbyhudWxsLHQsbixlLGEsciksdC5lZmZlY3RUYWd8PTEsIm9iamVjdCI9PXR5cGVvZiBhJiZudWxsIT09YSYmImZ1bmN0aW9uIj09dHlwZW9mIGEucmVuZGVyJiZ2b2lkIDA9PT1hLiQkdHlwZW9mKXtpZih0LnRhZz0xLHVvKCksZ2Eobikpe3ZhciBpPSEwO2thKHQpfWVsc2UgaT0hMTt0Lm1lbW9pemVkU3RhdGU9bnVsbCE9PWEuc3RhdGUmJnZvaWQgMCE9PWEuc3RhdGU/YS5zdGF0ZTpudWxsO3ZhciBzPW4uZ2V0RGVyaXZlZFN0YXRlRnJvbVByb3BzOyJmdW5jdGlvbiI9PXR5cGVvZiBzJiZTaSh0LG4scyxlKSxhLnVwZGF0ZXI9X2ksdC5zdGF0ZU5vZGU9YSxhLl9yZWFjdEludGVybmFsRmliZXI9dCxQaSh0LG4sZSxyKSx0PUtvKG51bGwsdCxuLCEwLGkscil9ZWxzZSB0LnRhZz0wLHpvKG51bGwsdCxhLHIpLHQ9dC5jaGlsZDtyZXR1cm4gdDtjYXNlIDE2OmlmKGE9dC5lbGVtZW50VHlwZSxudWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksZT10LnBlbmRpbmdQcm9wcyxmdW5jdGlvbihlKXtpZigtMT09PWUuX3N0YXR1cyl7ZS5fc3RhdHVzPTA7dmFyIHQ9ZS5fY3Rvcjt0PXQoKSxlLl9yZXN1bHQ9dCx0LnRoZW4oKGZ1bmN0aW9uKHQpezA9PT1lLl9zdGF0dXMmJih0PXQuZGVmYXVsdCxlLl9zdGF0dXM9MSxlLl9yZXN1bHQ9dCl9KSwoZnVuY3Rpb24odCl7MD09PWUuX3N0YXR1cyYmKGUuX3N0YXR1cz0yLGUuX3Jlc3VsdD10KX0pKX19KGEpLDEhPT1hLl9zdGF0dXMpdGhyb3cgYS5fcmVzdWx0O3N3aXRjaChhPWEuX3Jlc3VsdCx0LnR5cGU9YSxpPXQudGFnPWZ1bmN0aW9uKGUpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlKXJldHVybiBPbChlKT8xOjA7aWYobnVsbCE9ZSl7aWYoKGU9ZS4kJHR5cGVvZik9PT1IKXJldHVybiAxMTtpZihlPT09WClyZXR1cm4gMTR9cmV0dXJuIDJ9KGEpLGU9UWEoYSxlKSxpKXtjYXNlIDA6dD1YbyhudWxsLHQsYSxlLHIpO2JyZWFrO2Nhc2UgMTp0PVlvKG51bGwsdCxhLGUscik7YnJlYWs7Y2FzZSAxMTp0PVdvKG51bGwsdCxhLGUscik7YnJlYWs7Y2FzZSAxNDp0PUhvKG51bGwsdCxhLFFhKGEudHlwZSxlKSxuLHIpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgRXJyb3IobygzMDYsYSwiIikpfXJldHVybiB0O2Nhc2UgMDpyZXR1cm4gbj10LnR5cGUsYT10LnBlbmRpbmdQcm9wcyxYbyhlLHQsbixhPXQuZWxlbWVudFR5cGU9PT1uP2E6UWEobixhKSxyKTtjYXNlIDE6cmV0dXJuIG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsWW8oZSx0LG4sYT10LmVsZW1lbnRUeXBlPT09bj9hOlFhKG4sYSkscik7Y2FzZSAzOmlmKEpvKHQpLG51bGw9PT0obj10LnVwZGF0ZVF1ZXVlKSl0aHJvdyBFcnJvcihvKDI4MikpO2lmKGE9bnVsbCE9PShhPXQubWVtb2l6ZWRTdGF0ZSk/YS5lbGVtZW50Om51bGwsdmkodCxuLHQucGVuZGluZ1Byb3BzLG51bGwsciksKG49dC5tZW1vaXplZFN0YXRlLmVsZW1lbnQpPT09YSlCbygpLHQ9aXMoZSx0LHIpO2Vsc2V7aWYoKGE9dC5zdGF0ZU5vZGUuaHlkcmF0ZSkmJihJbz10bih0LnN0YXRlTm9kZS5jb250YWluZXJJbmZvLmZpcnN0Q2hpbGQpLE9vPXQsYT1Gbz0hMCksYSlmb3Iocj1GaSh0LG51bGwsbixyKSx0LmNoaWxkPXI7cjspci5lZmZlY3RUYWc9LTMmci5lZmZlY3RUYWd8MTAyNCxyPXIuc2libGluZztlbHNlIHpvKGUsdCxuLHIpLEJvKCk7dD10LmNoaWxkfXJldHVybiB0O2Nhc2UgNTpyZXR1cm4gcWkodCksbnVsbD09PWUmJk5vKHQpLG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsaT1udWxsIT09ZT9lLm1lbW9pemVkUHJvcHM6bnVsbCxzPWEuY2hpbGRyZW4sWnIobixhKT9zPW51bGw6bnVsbCE9PWkmJlpyKG4saSkmJih0LmVmZmVjdFRhZ3w9MTYpLFZvKGUsdCksNCZ0Lm1vZGUmJjEhPT1yJiZhLmhpZGRlbj8odC5leHBpcmF0aW9uVGltZT10LmNoaWxkRXhwaXJhdGlvblRpbWU9MSx0PW51bGwpOih6byhlLHQscyxyKSx0PXQuY2hpbGQpLHQ7Y2FzZSA2OnJldHVybiBudWxsPT09ZSYmTm8odCksbnVsbDtjYXNlIDEzOnJldHVybiB0cyhlLHQscik7Y2FzZSA0OnJldHVybiBCaSh0LHQuc3RhdGVOb2RlLmNvbnRhaW5lckluZm8pLG49dC5wZW5kaW5nUHJvcHMsbnVsbD09PWU/dC5jaGlsZD1JaSh0LG51bGwsbixyKTp6byhlLHQsbixyKSx0LmNoaWxkO2Nhc2UgMTE6cmV0dXJuIG49dC50eXBlLGE9dC5wZW5kaW5nUHJvcHMsV28oZSx0LG4sYT10LmVsZW1lbnRUeXBlPT09bj9hOlFhKG4sYSkscik7Y2FzZSA3OnJldHVybiB6byhlLHQsdC5wZW5kaW5nUHJvcHMsciksdC5jaGlsZDtjYXNlIDg6Y2FzZSAxMjpyZXR1cm4gem8oZSx0LHQucGVuZGluZ1Byb3BzLmNoaWxkcmVuLHIpLHQuY2hpbGQ7Y2FzZSAxMDplOntpZihuPXQudHlwZS5fY29udGV4dCxhPXQucGVuZGluZ1Byb3BzLHM9dC5tZW1vaXplZFByb3BzLG5pKHQsaT1hLnZhbHVlKSxudWxsIT09cyl7dmFyIGw9cy52YWx1ZTtpZigwPT09KGk9Sm4obCxpKT8wOjB8KCJmdW5jdGlvbiI9PXR5cGVvZiBuLl9jYWxjdWxhdGVDaGFuZ2VkQml0cz9uLl9jYWxjdWxhdGVDaGFuZ2VkQml0cyhsLGkpOjEwNzM3NDE4MjMpKSl7aWYocy5jaGlsZHJlbj09PWEuY2hpbGRyZW4mJiFkYS5jdXJyZW50KXt0PWlzKGUsdCxyKTticmVhayBlfX1lbHNlIGZvcihudWxsIT09KGw9dC5jaGlsZCkmJihsLnJldHVybj10KTtudWxsIT09bDspe3ZhciBjPWwuZGVwZW5kZW5jaWVzO2lmKG51bGwhPT1jKXtzPWwuY2hpbGQ7Zm9yKHZhciB1PWMuZmlyc3RDb250ZXh0O251bGwhPT11Oyl7aWYodS5jb250ZXh0PT09biYmMCE9KHUub2JzZXJ2ZWRCaXRzJmkpKXsxPT09bC50YWcmJigodT1maShyLG51bGwpKS50YWc9MixkaShsLHUpKSxsLmV4cGlyYXRpb25UaW1lPHImJihsLmV4cGlyYXRpb25UaW1lPXIpLG51bGwhPT0odT1sLmFsdGVybmF0ZSkmJnUuZXhwaXJhdGlvblRpbWU8ciYmKHUuZXhwaXJhdGlvblRpbWU9ciksaWkobC5yZXR1cm4sciksYy5leHBpcmF0aW9uVGltZTxyJiYoYy5leHBpcmF0aW9uVGltZT1yKTticmVha311PXUubmV4dH19ZWxzZSBzPTEwPT09bC50YWcmJmwudHlwZT09PXQudHlwZT9udWxsOmwuY2hpbGQ7aWYobnVsbCE9PXMpcy5yZXR1cm49bDtlbHNlIGZvcihzPWw7bnVsbCE9PXM7KXtpZihzPT09dCl7cz1udWxsO2JyZWFrfWlmKG51bGwhPT0obD1zLnNpYmxpbmcpKXtsLnJldHVybj1zLnJldHVybixzPWw7YnJlYWt9cz1zLnJldHVybn1sPXN9fXpvKGUsdCxhLmNoaWxkcmVuLHIpLHQ9dC5jaGlsZH1yZXR1cm4gdDtjYXNlIDk6cmV0dXJuIGE9dC50eXBlLG49KGk9dC5wZW5kaW5nUHJvcHMpLmNoaWxkcmVuLG9pKHQsciksbj1uKGE9c2koYSxpLnVuc3RhYmxlX29ic2VydmVkQml0cykpLHQuZWZmZWN0VGFnfD0xLHpvKGUsdCxuLHIpLHQuY2hpbGQ7Y2FzZSAxNDpyZXR1cm4gaT1RYShhPXQudHlwZSx0LnBlbmRpbmdQcm9wcyksSG8oZSx0LGEsaT1RYShhLnR5cGUsaSksbixyKTtjYXNlIDE1OnJldHVybiBHbyhlLHQsdC50eXBlLHQucGVuZGluZ1Byb3BzLG4scik7Y2FzZSAxNzpyZXR1cm4gbj10LnR5cGUsYT10LnBlbmRpbmdQcm9wcyxhPXQuZWxlbWVudFR5cGU9PT1uP2E6UWEobixhKSxudWxsIT09ZSYmKGUuYWx0ZXJuYXRlPW51bGwsdC5hbHRlcm5hdGU9bnVsbCx0LmVmZmVjdFRhZ3w9MiksdC50YWc9MSxnYShuKT8oZT0hMCxrYSh0KSk6ZT0hMSxvaSh0LHIpLEFpKHQsbixhKSxQaSh0LG4sYSxyKSxLbyhudWxsLHQsbiwhMCxlLHIpO2Nhc2UgMTk6cmV0dXJuIGFzKGUsdCxyKX10aHJvdyBFcnJvcihvKDE1Nix0LnRhZykpfTt2YXIgUGw9bnVsbCxFbD1udWxsO2Z1bmN0aW9uIFRsKGUsdCxyLG4pe3RoaXMudGFnPWUsdGhpcy5rZXk9cix0aGlzLnNpYmxpbmc9dGhpcy5jaGlsZD10aGlzLnJldHVybj10aGlzLnN0YXRlTm9kZT10aGlzLnR5cGU9dGhpcy5lbGVtZW50VHlwZT1udWxsLHRoaXMuaW5kZXg9MCx0aGlzLnJlZj1udWxsLHRoaXMucGVuZGluZ1Byb3BzPXQsdGhpcy5kZXBlbmRlbmNpZXM9dGhpcy5tZW1vaXplZFN0YXRlPXRoaXMudXBkYXRlUXVldWU9dGhpcy5tZW1vaXplZFByb3BzPW51bGwsdGhpcy5tb2RlPW4sdGhpcy5lZmZlY3RUYWc9MCx0aGlzLmxhc3RFZmZlY3Q9dGhpcy5maXJzdEVmZmVjdD10aGlzLm5leHRFZmZlY3Q9bnVsbCx0aGlzLmNoaWxkRXhwaXJhdGlvblRpbWU9dGhpcy5leHBpcmF0aW9uVGltZT0wLHRoaXMuYWx0ZXJuYXRlPW51bGx9ZnVuY3Rpb24gUmwoZSx0LHIsbil7cmV0dXJuIG5ldyBUbChlLHQscixuKX1mdW5jdGlvbiBPbChlKXtyZXR1cm4hKCEoZT1lLnByb3RvdHlwZSl8fCFlLmlzUmVhY3RDb21wb25lbnQpfWZ1bmN0aW9uIElsKGUsdCl7dmFyIHI9ZS5hbHRlcm5hdGU7cmV0dXJuIG51bGw9PT1yPygocj1SbChlLnRhZyx0LGUua2V5LGUubW9kZSkpLmVsZW1lbnRUeXBlPWUuZWxlbWVudFR5cGUsci50eXBlPWUudHlwZSxyLnN0YXRlTm9kZT1lLnN0YXRlTm9kZSxyLmFsdGVybmF0ZT1lLGUuYWx0ZXJuYXRlPXIpOihyLnBlbmRpbmdQcm9wcz10LHIuZWZmZWN0VGFnPTAsci5uZXh0RWZmZWN0PW51bGwsci5maXJzdEVmZmVjdD1udWxsLHIubGFzdEVmZmVjdD1udWxsKSxyLmNoaWxkRXhwaXJhdGlvblRpbWU9ZS5jaGlsZEV4cGlyYXRpb25UaW1lLHIuZXhwaXJhdGlvblRpbWU9ZS5leHBpcmF0aW9uVGltZSxyLmNoaWxkPWUuY2hpbGQsci5tZW1vaXplZFByb3BzPWUubWVtb2l6ZWRQcm9wcyxyLm1lbW9pemVkU3RhdGU9ZS5tZW1vaXplZFN0YXRlLHIudXBkYXRlUXVldWU9ZS51cGRhdGVRdWV1ZSx0PWUuZGVwZW5kZW5jaWVzLHIuZGVwZW5kZW5jaWVzPW51bGw9PT10P251bGw6e2V4cGlyYXRpb25UaW1lOnQuZXhwaXJhdGlvblRpbWUsZmlyc3RDb250ZXh0OnQuZmlyc3RDb250ZXh0LHJlc3BvbmRlcnM6dC5yZXNwb25kZXJzfSxyLnNpYmxpbmc9ZS5zaWJsaW5nLHIuaW5kZXg9ZS5pbmRleCxyLnJlZj1lLnJlZixyfWZ1bmN0aW9uIEZsKGUsdCxyLG4sYSxpKXt2YXIgcz0yO2lmKG49ZSwiZnVuY3Rpb24iPT10eXBlb2YgZSlPbChlKSYmKHM9MSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIGUpcz01O2Vsc2UgZTpzd2l0Y2goZSl7Y2FzZSBqOnJldHVybiBMbChyLmNoaWxkcmVuLGEsaSx0KTtjYXNlIFc6cz04LGF8PTc7YnJlYWs7Y2FzZSBCOnM9OCxhfD0xO2JyZWFrO2Nhc2UgVTpyZXR1cm4oZT1SbCgxMixyLHQsOHxhKSkuZWxlbWVudFR5cGU9VSxlLnR5cGU9VSxlLmV4cGlyYXRpb25UaW1lPWksZTtjYXNlIEc6cmV0dXJuKGU9UmwoMTMscix0LGEpKS50eXBlPUcsZS5lbGVtZW50VHlwZT1HLGUuZXhwaXJhdGlvblRpbWU9aSxlO2Nhc2UgVjpyZXR1cm4oZT1SbCgxOSxyLHQsYSkpLmVsZW1lbnRUeXBlPVYsZS5leHBpcmF0aW9uVGltZT1pLGU7ZGVmYXVsdDppZigib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lKXN3aXRjaChlLiQkdHlwZW9mKXtjYXNlIHE6cz0xMDticmVhayBlO2Nhc2UgejpzPTk7YnJlYWsgZTtjYXNlIEg6cz0xMTticmVhayBlO2Nhc2UgWDpzPTE0O2JyZWFrIGU7Y2FzZSBZOnM9MTYsbj1udWxsO2JyZWFrIGV9dGhyb3cgRXJyb3IobygxMzAsbnVsbD09ZT9lOnR5cGVvZiBlLCIiKSl9cmV0dXJuKHQ9UmwocyxyLHQsYSkpLmVsZW1lbnRUeXBlPWUsdC50eXBlPW4sdC5leHBpcmF0aW9uVGltZT1pLHR9ZnVuY3Rpb24gTGwoZSx0LHIsbil7cmV0dXJuKGU9UmwoNyxlLG4sdCkpLmV4cGlyYXRpb25UaW1lPXIsZX1mdW5jdGlvbiBEbChlLHQscil7cmV0dXJuKGU9UmwoNixlLG51bGwsdCkpLmV4cGlyYXRpb25UaW1lPXIsZX1mdW5jdGlvbiBObChlLHQscil7cmV0dXJuKHQ9UmwoNCxudWxsIT09ZS5jaGlsZHJlbj9lLmNoaWxkcmVuOltdLGUua2V5LHQpKS5leHBpcmF0aW9uVGltZT1yLHQuc3RhdGVOb2RlPXtjb250YWluZXJJbmZvOmUuY29udGFpbmVySW5mbyxwZW5kaW5nQ2hpbGRyZW46bnVsbCxpbXBsZW1lbnRhdGlvbjplLmltcGxlbWVudGF0aW9ufSx0fWZ1bmN0aW9uIE1sKGUsdCxyKXt0aGlzLnRhZz10LHRoaXMuY3VycmVudD1udWxsLHRoaXMuY29udGFpbmVySW5mbz1lLHRoaXMucGluZ0NhY2hlPXRoaXMucGVuZGluZ0NoaWxkcmVuPW51bGwsdGhpcy5maW5pc2hlZEV4cGlyYXRpb25UaW1lPTAsdGhpcy5maW5pc2hlZFdvcms9bnVsbCx0aGlzLnRpbWVvdXRIYW5kbGU9LTEsdGhpcy5wZW5kaW5nQ29udGV4dD10aGlzLmNvbnRleHQ9bnVsbCx0aGlzLmh5ZHJhdGU9cix0aGlzLmNhbGxiYWNrTm9kZT1udWxsLHRoaXMuY2FsbGJhY2tQcmlvcml0eT05MCx0aGlzLmxhc3RFeHBpcmVkVGltZT10aGlzLmxhc3RQaW5nZWRUaW1lPXRoaXMubmV4dEtub3duUGVuZGluZ0xldmVsPXRoaXMubGFzdFN1c3BlbmRlZFRpbWU9dGhpcy5maXJzdFN1c3BlbmRlZFRpbWU9dGhpcy5maXJzdFBlbmRpbmdUaW1lPTB9ZnVuY3Rpb24gamwoZSx0KXt2YXIgcj1lLmZpcnN0U3VzcGVuZGVkVGltZTtyZXR1cm4gZT1lLmxhc3RTdXNwZW5kZWRUaW1lLDAhPT1yJiZyPj10JiZlPD10fWZ1bmN0aW9uIEJsKGUsdCl7dmFyIHI9ZS5maXJzdFN1c3BlbmRlZFRpbWUsbj1lLmxhc3RTdXNwZW5kZWRUaW1lO3I8dCYmKGUuZmlyc3RTdXNwZW5kZWRUaW1lPXQpLChuPnR8fDA9PT1yKSYmKGUubGFzdFN1c3BlbmRlZFRpbWU9dCksdDw9ZS5sYXN0UGluZ2VkVGltZSYmKGUubGFzdFBpbmdlZFRpbWU9MCksdDw9ZS5sYXN0RXhwaXJlZFRpbWUmJihlLmxhc3RFeHBpcmVkVGltZT0wKX1mdW5jdGlvbiBVbChlLHQpe3Q+ZS5maXJzdFBlbmRpbmdUaW1lJiYoZS5maXJzdFBlbmRpbmdUaW1lPXQpO3ZhciByPWUuZmlyc3RTdXNwZW5kZWRUaW1lOzAhPT1yJiYodD49cj9lLmZpcnN0U3VzcGVuZGVkVGltZT1lLmxhc3RTdXNwZW5kZWRUaW1lPWUubmV4dEtub3duUGVuZGluZ0xldmVsPTA6dD49ZS5sYXN0U3VzcGVuZGVkVGltZSYmKGUubGFzdFN1c3BlbmRlZFRpbWU9dCsxKSx0PmUubmV4dEtub3duUGVuZGluZ0xldmVsJiYoZS5uZXh0S25vd25QZW5kaW5nTGV2ZWw9dCkpfWZ1bmN0aW9uIHFsKGUsdCl7dmFyIHI9ZS5sYXN0RXhwaXJlZFRpbWU7KDA9PT1yfHxyPnQpJiYoZS5sYXN0RXhwaXJlZFRpbWU9dCl9ZnVuY3Rpb24gemwoZSx0LHIsbil7dmFyIGE9dC5jdXJyZW50LGk9WnMoKSxzPXdpLnN1c3BlbnNlO2k9JHMoaSxhLHMpO2U6aWYocil7dDp7aWYodHQocj1yLl9yZWFjdEludGVybmFsRmliZXIpIT09cnx8MSE9PXIudGFnKXRocm93IEVycm9yKG8oMTcwKSk7dmFyIGw9cjtkb3tzd2l0Y2gobC50YWcpe2Nhc2UgMzpsPWwuc3RhdGVOb2RlLmNvbnRleHQ7YnJlYWsgdDtjYXNlIDE6aWYoZ2EobC50eXBlKSl7bD1sLnN0YXRlTm9kZS5fX3JlYWN0SW50ZXJuYWxNZW1vaXplZE1lcmdlZENoaWxkQ29udGV4dDticmVhayB0fX1sPWwucmV0dXJufXdoaWxlKG51bGwhPT1sKTt0aHJvdyBFcnJvcihvKDE3MSkpfWlmKDE9PT1yLnRhZyl7dmFyIGM9ci50eXBlO2lmKGdhKGMpKXtyPXdhKHIsYyxsKTticmVhayBlfX1yPWx9ZWxzZSByPWZhO3JldHVybiBudWxsPT09dC5jb250ZXh0P3QuY29udGV4dD1yOnQucGVuZGluZ0NvbnRleHQ9ciwodD1maShpLHMpKS5wYXlsb2FkPXtlbGVtZW50OmV9LG51bGwhPT0obj12b2lkIDA9PT1uP251bGw6bikmJih0LmNhbGxiYWNrPW4pLGRpKGEsdCksZWwoYSxpKSxpfWZ1bmN0aW9uIFdsKGUpe2lmKCEoZT1lLmN1cnJlbnQpLmNoaWxkKXJldHVybiBudWxsO3N3aXRjaChlLmNoaWxkLnRhZyl7Y2FzZSA1OmRlZmF1bHQ6cmV0dXJuIGUuY2hpbGQuc3RhdGVOb2RlfX1mdW5jdGlvbiBIbChlLHQpe251bGwhPT0oZT1lLm1lbW9pemVkU3RhdGUpJiZudWxsIT09ZS5kZWh5ZHJhdGVkJiZlLnJldHJ5VGltZTx0JiYoZS5yZXRyeVRpbWU9dCl9ZnVuY3Rpb24gR2woZSx0KXtIbChlLHQpLChlPWUuYWx0ZXJuYXRlKSYmSGwoZSx0KX1mdW5jdGlvbiBWbChlLHQscil7dmFyIG49bmV3IE1sKGUsdCxyPW51bGwhPXImJiEwPT09ci5oeWRyYXRlKSxhPVJsKDMsbnVsbCxudWxsLDI9PT10Pzc6MT09PXQ/MzowKTtuLmN1cnJlbnQ9YSxhLnN0YXRlTm9kZT1uLGVbc25dPW4uY3VycmVudCxyJiYwIT09dCYmZnVuY3Rpb24oZSl7dmFyIHQ9RnIoZSk7Z3QuZm9yRWFjaCgoZnVuY3Rpb24ocil7THIocixlLHQpfSkpLHZ0LmZvckVhY2goKGZ1bmN0aW9uKHIpe0xyKHIsZSx0KX0pKX0oOT09PWUubm9kZVR5cGU/ZTplLm93bmVyRG9jdW1lbnQpLHRoaXMuX2ludGVybmFsUm9vdD1ufWZ1bmN0aW9uIFhsKGUpe3JldHVybiEoIWV8fDEhPT1lLm5vZGVUeXBlJiY5IT09ZS5ub2RlVHlwZSYmMTEhPT1lLm5vZGVUeXBlJiYoOCE9PWUubm9kZVR5cGV8fCIgcmVhY3QtbW91bnQtcG9pbnQtdW5zdGFibGUgIiE9PWUubm9kZVZhbHVlKSl9ZnVuY3Rpb24gWWwoZSx0LHIsbixhKXt2YXIgaT1yLl9yZWFjdFJvb3RDb250YWluZXI7aWYoaSl7dmFyIG89aS5faW50ZXJuYWxSb290O2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBhKXt2YXIgcz1hO2E9ZnVuY3Rpb24oKXt2YXIgZT1XbChvKTtzLmNhbGwoZSl9fXpsKHQsbyxlLGEpfWVsc2V7aWYoaT1yLl9yZWFjdFJvb3RDb250YWluZXI9ZnVuY3Rpb24oZSx0KXtpZih0fHwodD0hKCEodD1lPzk9PT1lLm5vZGVUeXBlP2UuZG9jdW1lbnRFbGVtZW50OmUuZmlyc3RDaGlsZDpudWxsKXx8MSE9PXQubm9kZVR5cGV8fCF0Lmhhc0F0dHJpYnV0ZSgiZGF0YS1yZWFjdHJvb3QiKSkpLCF0KWZvcih2YXIgcjtyPWUubGFzdENoaWxkOyllLnJlbW92ZUNoaWxkKHIpO3JldHVybiBuZXcgVmwoZSwwLHQ/e2h5ZHJhdGU6ITB9OnZvaWQgMCl9KHIsbiksbz1pLl9pbnRlcm5hbFJvb3QsImZ1bmN0aW9uIj09dHlwZW9mIGEpe3ZhciBsPWE7YT1mdW5jdGlvbigpe3ZhciBlPVdsKG8pO2wuY2FsbChlKX19c2woKGZ1bmN0aW9uKCl7emwodCxvLGUsYSl9KSl9cmV0dXJuIFdsKG8pfWZ1bmN0aW9uIEtsKGUsdCxyKXt2YXIgbj0zPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1szXT9hcmd1bWVudHNbM106bnVsbDtyZXR1cm57JCR0eXBlb2Y6TSxrZXk6bnVsbD09bj9udWxsOiIiK24sY2hpbGRyZW46ZSxjb250YWluZXJJbmZvOnQsaW1wbGVtZW50YXRpb246cn19ZnVuY3Rpb24gSmwoZSx0KXt2YXIgcj0yPGFyZ3VtZW50cy5sZW5ndGgmJnZvaWQgMCE9PWFyZ3VtZW50c1syXT9hcmd1bWVudHNbMl06bnVsbDtpZighWGwodCkpdGhyb3cgRXJyb3IobygyMDApKTtyZXR1cm4gS2woZSx0LG51bGwscil9VmwucHJvdG90eXBlLnJlbmRlcj1mdW5jdGlvbihlLHQpe3psKGUsdGhpcy5faW50ZXJuYWxSb290LG51bGwsdm9pZCAwPT09dD9udWxsOnQpfSxWbC5wcm90b3R5cGUudW5tb3VudD1mdW5jdGlvbihlKXt2YXIgdD10aGlzLl9pbnRlcm5hbFJvb3Qscj12b2lkIDA9PT1lP251bGw6ZSxuPXQuY29udGFpbmVySW5mbzt6bChudWxsLHQsbnVsbCwoZnVuY3Rpb24oKXtuW3NuXT1udWxsLG51bGwhPT1yJiZyKCl9KSl9LGl0PWZ1bmN0aW9uKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PUphKFpzKCksMTUwLDEwMCk7ZWwoZSx0KSxHbChlLHQpfX0sb3Q9ZnVuY3Rpb24oZSl7aWYoMTM9PT1lLnRhZyl7WnMoKTt2YXIgdD1LYSsrO2VsKGUsdCksR2woZSx0KX19LHN0PWZ1bmN0aW9uKGUpe2lmKDEzPT09ZS50YWcpe3ZhciB0PVpzKCk7ZWwoZSx0PSRzKHQsZSxudWxsKSksR2woZSx0KX19LGVlPWZ1bmN0aW9uKGUsdCxyKXtzd2l0Y2godCl7Y2FzZSJpbnB1dCI6aWYoVGUoZSxyKSx0PXIubmFtZSwicmFkaW8iPT09ci50eXBlJiZudWxsIT10KXtmb3Iocj1lO3IucGFyZW50Tm9kZTspcj1yLnBhcmVudE5vZGU7Zm9yKHI9ci5xdWVyeVNlbGVjdG9yQWxsKCJpbnB1dFtuYW1lPSIrSlNPTi5zdHJpbmdpZnkoIiIrdCkrJ11bdHlwZT0icmFkaW8iXScpLHQ9MDt0PHIubGVuZ3RoO3QrKyl7dmFyIG49clt0XTtpZihuIT09ZSYmbi5mb3JtPT09ZS5mb3JtKXt2YXIgYT1mbihuKTtpZighYSl0aHJvdyBFcnJvcihvKDkwKSk7QWUobiksVGUobixhKX19fWJyZWFrO2Nhc2UidGV4dGFyZWEiOk5lKGUscik7YnJlYWs7Y2FzZSJzZWxlY3QiOm51bGwhPSh0PXIudmFsdWUpJiZGZShlLCEhci5tdWx0aXBsZSx0LCExKX19LG9lPW9sLHNlPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPVRzO1RzfD00O3RyeXtyZXR1cm4gSGEoOTgsZS5iaW5kKG51bGwsdCxyLG4pKX1maW5hbGx5ezA9PT0oVHM9YSkmJlhhKCl9fSxsZT1mdW5jdGlvbigpezA9PSg0OSZUcykmJihmdW5jdGlvbigpe2lmKG51bGwhPT1Zcyl7dmFyIGU9WXM7WXM9bnVsbCxlLmZvckVhY2goKGZ1bmN0aW9uKGUsdCl7cWwodCxlKSxubCh0KX0pKSxYYSgpfX0oKSxrbCgpKX0sY2U9ZnVuY3Rpb24oZSx0KXt2YXIgcj1UcztUc3w9Mjt0cnl7cmV0dXJuIGUodCl9ZmluYWxseXswPT09KFRzPXIpJiZYYSgpfX07dmFyIFFsLFpsLCRsPXtjcmVhdGVQb3J0YWw6SmwsZmluZERPTU5vZGU6ZnVuY3Rpb24oZSl7aWYobnVsbD09ZSlyZXR1cm4gbnVsbDtpZigxPT09ZS5ub2RlVHlwZSlyZXR1cm4gZTt2YXIgdD1lLl9yZWFjdEludGVybmFsRmliZXI7aWYodm9pZCAwPT09dCl7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUucmVuZGVyKXRocm93IEVycm9yKG8oMTg4KSk7dGhyb3cgRXJyb3IobygyNjgsT2JqZWN0LmtleXMoZSkpKX1yZXR1cm4gZT1udWxsPT09KGU9YXQodCkpP251bGw6ZS5zdGF0ZU5vZGV9LGh5ZHJhdGU6ZnVuY3Rpb24oZSx0LHIpe2lmKCFYbCh0KSl0aHJvdyBFcnJvcihvKDIwMCkpO3JldHVybiBZbChudWxsLGUsdCwhMCxyKX0scmVuZGVyOmZ1bmN0aW9uKGUsdCxyKXtpZighWGwodCkpdGhyb3cgRXJyb3IobygyMDApKTtyZXR1cm4gWWwobnVsbCxlLHQsITEscil9LHVuc3RhYmxlX3JlbmRlclN1YnRyZWVJbnRvQ29udGFpbmVyOmZ1bmN0aW9uKGUsdCxyLG4pe2lmKCFYbChyKSl0aHJvdyBFcnJvcihvKDIwMCkpO2lmKG51bGw9PWV8fHZvaWQgMD09PWUuX3JlYWN0SW50ZXJuYWxGaWJlcil0aHJvdyBFcnJvcihvKDM4KSk7cmV0dXJuIFlsKGUsdCxyLCExLG4pfSx1bm1vdW50Q29tcG9uZW50QXROb2RlOmZ1bmN0aW9uKGUpe2lmKCFYbChlKSl0aHJvdyBFcnJvcihvKDQwKSk7cmV0dXJuISFlLl9yZWFjdFJvb3RDb250YWluZXImJihzbCgoZnVuY3Rpb24oKXtZbChudWxsLG51bGwsZSwhMSwoZnVuY3Rpb24oKXtlLl9yZWFjdFJvb3RDb250YWluZXI9bnVsbCxlW3NuXT1udWxsfSkpfSkpLCEwKX0sdW5zdGFibGVfY3JlYXRlUG9ydGFsOmZ1bmN0aW9uKCl7cmV0dXJuIEpsLmFwcGx5KHZvaWQgMCxhcmd1bWVudHMpfSx1bnN0YWJsZV9iYXRjaGVkVXBkYXRlczpvbCxmbHVzaFN5bmM6ZnVuY3Rpb24oZSx0KXtpZigwIT0oNDgmVHMpKXRocm93IEVycm9yKG8oMTg3KSk7dmFyIHI9VHM7VHN8PTE7dHJ5e3JldHVybiBIYSg5OSxlLmJpbmQobnVsbCx0KSl9ZmluYWxseXtUcz1yLFhhKCl9fSxfX1NFQ1JFVF9JTlRFUk5BTFNfRE9fTk9UX1VTRV9PUl9ZT1VfV0lMTF9CRV9GSVJFRDp7RXZlbnRzOltjbix1bixmbixPLmluamVjdEV2ZW50UGx1Z2luc0J5TmFtZSxoLEZ0LGZ1bmN0aW9uKGUpe1AoZSxJdCl9LGFlLGllLFRyLFIsa2wse2N1cnJlbnQ6ITF9XX19O1psPShRbD17ZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6bG4sYnVuZGxlVHlwZTowLHZlcnNpb246IjE2LjEyLjAiLHJlbmRlcmVyUGFja2FnZU5hbWU6InJlYWN0LWRvbSJ9KS5maW5kRmliZXJCeUhvc3RJbnN0YW5jZSxmdW5jdGlvbihlKXtpZigidW5kZWZpbmVkIj09dHlwZW9mIF9fUkVBQ1RfREVWVE9PTFNfR0xPQkFMX0hPT0tfXylyZXR1cm4hMTt2YXIgdD1fX1JFQUNUX0RFVlRPT0xTX0dMT0JBTF9IT09LX187aWYodC5pc0Rpc2FibGVkfHwhdC5zdXBwb3J0c0ZpYmVyKXJldHVybiEwO3RyeXt2YXIgcj10LmluamVjdChlKTtQbD1mdW5jdGlvbihlKXt0cnl7dC5vbkNvbW1pdEZpYmVyUm9vdChyLGUsdm9pZCAwLDY0PT0oNjQmZS5jdXJyZW50LmVmZmVjdFRhZykpfWNhdGNoKGUpe319LEVsPWZ1bmN0aW9uKGUpe3RyeXt0Lm9uQ29tbWl0RmliZXJVbm1vdW50KHIsZSl9Y2F0Y2goZSl7fX19Y2F0Y2goZSl7fX0oYSh7fSxRbCx7b3ZlcnJpZGVIb29rU3RhdGU6bnVsbCxvdmVycmlkZVByb3BzOm51bGwsc2V0U3VzcGVuc2VIYW5kbGVyOm51bGwsc2NoZWR1bGVVcGRhdGU6bnVsbCxjdXJyZW50RGlzcGF0Y2hlclJlZjpGLlJlYWN0Q3VycmVudERpc3BhdGNoZXIsZmluZEhvc3RJbnN0YW5jZUJ5RmliZXI6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT0oZT1hdChlKSk/bnVsbDplLnN0YXRlTm9kZX0sZmluZEZpYmVyQnlIb3N0SW5zdGFuY2U6ZnVuY3Rpb24oZSl7cmV0dXJuIFpsP1psKGUpOm51bGx9LGZpbmRIb3N0SW5zdGFuY2VzRm9yUmVmcmVzaDpudWxsLHNjaGVkdWxlUmVmcmVzaDpudWxsLHNjaGVkdWxlUm9vdDpudWxsLHNldFJlZnJlc2hIYW5kbGVyOm51bGwsZ2V0Q3VycmVudEZpYmVyOm51bGx9KSk7dmFyIGVjPXtkZWZhdWx0OiRsfSx0Yz1lYyYmJGx8fGVjO2UuZXhwb3J0cz10Yy5kZWZhdWx0fHx0Y30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cig0MCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Ci8qKiBAbGljZW5zZSBSZWFjdCB2MC4xOC4wCiAqIHNjaGVkdWxlci5wcm9kdWN0aW9uLm1pbi5qcwogKgogKiBDb3B5cmlnaHQgKGMpIEZhY2Vib29rLCBJbmMuIGFuZCBpdHMgYWZmaWxpYXRlcy4KICoKICogVGhpcyBzb3VyY2UgY29kZSBpcyBsaWNlbnNlZCB1bmRlciB0aGUgTUlUIGxpY2Vuc2UgZm91bmQgaW4gdGhlCiAqIExJQ0VOU0UgZmlsZSBpbiB0aGUgcm9vdCBkaXJlY3Rvcnkgb2YgdGhpcyBzb3VyY2UgdHJlZS4KICovdmFyIG4sYSxpLG8scztpZihPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3d8fCJmdW5jdGlvbiIhPXR5cGVvZiBNZXNzYWdlQ2hhbm5lbCl7dmFyIGw9bnVsbCxjPW51bGwsdT1mdW5jdGlvbigpe2lmKG51bGwhPT1sKXRyeXt2YXIgZT10LnVuc3RhYmxlX25vdygpO2woITAsZSksbD1udWxsfWNhdGNoKGUpe3Rocm93IHNldFRpbWVvdXQodSwwKSxlfX0sZj1EYXRlLm5vdygpO3QudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktZn0sbj1mdW5jdGlvbihlKXtudWxsIT09bD9zZXRUaW1lb3V0KG4sMCxlKToobD1lLHNldFRpbWVvdXQodSwwKSl9LGE9ZnVuY3Rpb24oZSx0KXtjPXNldFRpbWVvdXQoZSx0KX0saT1mdW5jdGlvbigpe2NsZWFyVGltZW91dChjKX0sbz1mdW5jdGlvbigpe3JldHVybiExfSxzPXQudW5zdGFibGVfZm9yY2VGcmFtZVJhdGU9ZnVuY3Rpb24oKXt9fWVsc2V7dmFyIGg9d2luZG93LnBlcmZvcm1hbmNlLGQ9d2luZG93LkRhdGUscD13aW5kb3cuc2V0VGltZW91dCxtPXdpbmRvdy5jbGVhclRpbWVvdXQ7aWYoInVuZGVmaW5lZCIhPXR5cGVvZiBjb25zb2xlKXt2YXIgZz13aW5kb3cuY2FuY2VsQW5pbWF0aW9uRnJhbWU7ImZ1bmN0aW9uIiE9dHlwZW9mIHdpbmRvdy5yZXF1ZXN0QW5pbWF0aW9uRnJhbWUmJmNvbnNvbGUuZXJyb3IoIlRoaXMgYnJvd3NlciBkb2Vzbid0IHN1cHBvcnQgcmVxdWVzdEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL2ZiLm1lL3JlYWN0LXBvbHlmaWxscyIpLCJmdW5jdGlvbiIhPXR5cGVvZiBnJiZjb25zb2xlLmVycm9yKCJUaGlzIGJyb3dzZXIgZG9lc24ndCBzdXBwb3J0IGNhbmNlbEFuaW1hdGlvbkZyYW1lLiBNYWtlIHN1cmUgdGhhdCB5b3UgbG9hZCBhIHBvbHlmaWxsIGluIG9sZGVyIGJyb3dzZXJzLiBodHRwczovL2ZiLm1lL3JlYWN0LXBvbHlmaWxscyIpfWlmKCJvYmplY3QiPT10eXBlb2YgaCYmImZ1bmN0aW9uIj09dHlwZW9mIGgubm93KXQudW5zdGFibGVfbm93PWZ1bmN0aW9uKCl7cmV0dXJuIGgubm93KCl9O2Vsc2V7dmFyIHY9ZC5ub3coKTt0LnVuc3RhYmxlX25vdz1mdW5jdGlvbigpe3JldHVybiBkLm5vdygpLXZ9fXZhciB5PSExLGI9bnVsbCx3PS0xLGs9NSxTPTA7bz1mdW5jdGlvbigpe3JldHVybiB0LnVuc3RhYmxlX25vdygpPj1TfSxzPWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX2ZvcmNlRnJhbWVSYXRlPWZ1bmN0aW9uKGUpezA+ZXx8MTI1PGU/Y29uc29sZS5lcnJvcigiZm9yY2VGcmFtZVJhdGUgdGFrZXMgYSBwb3NpdGl2ZSBpbnQgYmV0d2VlbiAwIGFuZCAxMjUsIGZvcmNpbmcgZnJhbWVyYXRlcyBoaWdoZXIgdGhhbiAxMjUgZnBzIGlzIG5vdCB1bnN1cHBvcnRlZCIpOms9MDxlP01hdGguZmxvb3IoMWUzL2UpOjV9O3ZhciBfPW5ldyBNZXNzYWdlQ2hhbm5lbCx4PV8ucG9ydDI7Xy5wb3J0MS5vbm1lc3NhZ2U9ZnVuY3Rpb24oKXtpZihudWxsIT09Yil7dmFyIGU9dC51bnN0YWJsZV9ub3coKTtTPWUrazt0cnl7YighMCxlKT94LnBvc3RNZXNzYWdlKG51bGwpOih5PSExLGI9bnVsbCl9Y2F0Y2goZSl7dGhyb3cgeC5wb3N0TWVzc2FnZShudWxsKSxlfX1lbHNlIHk9ITF9LG49ZnVuY3Rpb24oZSl7Yj1lLHl8fCh5PSEwLHgucG9zdE1lc3NhZ2UobnVsbCkpfSxhPWZ1bmN0aW9uKGUscil7dz1wKChmdW5jdGlvbigpe2UodC51bnN0YWJsZV9ub3coKSl9KSxyKX0saT1mdW5jdGlvbigpe20odyksdz0tMX19ZnVuY3Rpb24gQShlLHQpe3ZhciByPWUubGVuZ3RoO2UucHVzaCh0KTtlOmZvcig7Oyl7dmFyIG49TWF0aC5mbG9vcigoci0xKS8yKSxhPWVbbl07aWYoISh2b2lkIDAhPT1hJiYwPEUoYSx0KSkpYnJlYWsgZTtlW25dPXQsZVtyXT1hLHI9bn19ZnVuY3Rpb24gQyhlKXtyZXR1cm4gdm9pZCAwPT09KGU9ZVswXSk/bnVsbDplfWZ1bmN0aW9uIFAoZSl7dmFyIHQ9ZVswXTtpZih2b2lkIDAhPT10KXt2YXIgcj1lLnBvcCgpO2lmKHIhPT10KXtlWzBdPXI7ZTpmb3IodmFyIG49MCxhPWUubGVuZ3RoO248YTspe3ZhciBpPTIqKG4rMSktMSxvPWVbaV0scz1pKzEsbD1lW3NdO2lmKHZvaWQgMCE9PW8mJjA+RShvLHIpKXZvaWQgMCE9PWwmJjA+RShsLG8pPyhlW25dPWwsZVtzXT1yLG49cyk6KGVbbl09byxlW2ldPXIsbj1pKTtlbHNle2lmKCEodm9pZCAwIT09bCYmMD5FKGwscikpKWJyZWFrIGU7ZVtuXT1sLGVbc109cixuPXN9fX1yZXR1cm4gdH1yZXR1cm4gbnVsbH1mdW5jdGlvbiBFKGUsdCl7dmFyIHI9ZS5zb3J0SW5kZXgtdC5zb3J0SW5kZXg7cmV0dXJuIDAhPT1yP3I6ZS5pZC10LmlkfXZhciBUPVtdLFI9W10sTz0xLEk9bnVsbCxGPTMsTD0hMSxEPSExLE49ITE7ZnVuY3Rpb24gTShlKXtmb3IodmFyIHQ9QyhSKTtudWxsIT09dDspe2lmKG51bGw9PT10LmNhbGxiYWNrKVAoUik7ZWxzZXtpZighKHQuc3RhcnRUaW1lPD1lKSlicmVhaztQKFIpLHQuc29ydEluZGV4PXQuZXhwaXJhdGlvblRpbWUsQShULHQpfXQ9QyhSKX19ZnVuY3Rpb24gaihlKXtpZihOPSExLE0oZSksIUQpaWYobnVsbCE9PUMoVCkpRD0hMCxuKEIpO2Vsc2V7dmFyIHQ9QyhSKTtudWxsIT09dCYmYShqLHQuc3RhcnRUaW1lLWUpfX1mdW5jdGlvbiBCKGUscil7RD0hMSxOJiYoTj0hMSxpKCkpLEw9ITA7dmFyIG49Rjt0cnl7Zm9yKE0ociksST1DKFQpO251bGwhPT1JJiYoIShJLmV4cGlyYXRpb25UaW1lPnIpfHxlJiYhbygpKTspe3ZhciBzPUkuY2FsbGJhY2s7aWYobnVsbCE9PXMpe0kuY2FsbGJhY2s9bnVsbCxGPUkucHJpb3JpdHlMZXZlbDt2YXIgbD1zKEkuZXhwaXJhdGlvblRpbWU8PXIpO3I9dC51bnN0YWJsZV9ub3coKSwiZnVuY3Rpb24iPT10eXBlb2YgbD9JLmNhbGxiYWNrPWw6ST09PUMoVCkmJlAoVCksTShyKX1lbHNlIFAoVCk7ST1DKFQpfWlmKG51bGwhPT1JKXZhciBjPSEwO2Vsc2V7dmFyIHU9QyhSKTtudWxsIT09dSYmYShqLHUuc3RhcnRUaW1lLXIpLGM9ITF9cmV0dXJuIGN9ZmluYWxseXtJPW51bGwsRj1uLEw9ITF9fWZ1bmN0aW9uIFUoZSl7c3dpdGNoKGUpe2Nhc2UgMTpyZXR1cm4tMTtjYXNlIDI6cmV0dXJuIDI1MDtjYXNlIDU6cmV0dXJuIDEwNzM3NDE4MjM7Y2FzZSA0OnJldHVybiAxZTQ7ZGVmYXVsdDpyZXR1cm4gNWUzfX12YXIgcT1zO3QudW5zdGFibGVfSW1tZWRpYXRlUHJpb3JpdHk9MSx0LnVuc3RhYmxlX1VzZXJCbG9ja2luZ1ByaW9yaXR5PTIsdC51bnN0YWJsZV9Ob3JtYWxQcmlvcml0eT0zLHQudW5zdGFibGVfSWRsZVByaW9yaXR5PTUsdC51bnN0YWJsZV9Mb3dQcmlvcml0eT00LHQudW5zdGFibGVfcnVuV2l0aFByaW9yaXR5PWZ1bmN0aW9uKGUsdCl7c3dpdGNoKGUpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOmNhc2UgNDpjYXNlIDU6YnJlYWs7ZGVmYXVsdDplPTN9dmFyIHI9RjtGPWU7dHJ5e3JldHVybiB0KCl9ZmluYWxseXtGPXJ9fSx0LnVuc3RhYmxlX25leHQ9ZnVuY3Rpb24oZSl7c3dpdGNoKEYpe2Nhc2UgMTpjYXNlIDI6Y2FzZSAzOnZhciB0PTM7YnJlYWs7ZGVmYXVsdDp0PUZ9dmFyIHI9RjtGPXQ7dHJ5e3JldHVybiBlKCl9ZmluYWxseXtGPXJ9fSx0LnVuc3RhYmxlX3NjaGVkdWxlQ2FsbGJhY2s9ZnVuY3Rpb24oZSxyLG8pe3ZhciBzPXQudW5zdGFibGVfbm93KCk7aWYoIm9iamVjdCI9PXR5cGVvZiBvJiZudWxsIT09byl7dmFyIGw9by5kZWxheTtsPSJudW1iZXIiPT10eXBlb2YgbCYmMDxsP3MrbDpzLG89Im51bWJlciI9PXR5cGVvZiBvLnRpbWVvdXQ/by50aW1lb3V0OlUoZSl9ZWxzZSBvPVUoZSksbD1zO3JldHVybiBlPXtpZDpPKyssY2FsbGJhY2s6cixwcmlvcml0eUxldmVsOmUsc3RhcnRUaW1lOmwsZXhwaXJhdGlvblRpbWU6bz1sK28sc29ydEluZGV4Oi0xfSxsPnM/KGUuc29ydEluZGV4PWwsQShSLGUpLG51bGw9PT1DKFQpJiZlPT09QyhSKSYmKE4/aSgpOk49ITAsYShqLGwtcykpKTooZS5zb3J0SW5kZXg9byxBKFQsZSksRHx8THx8KEQ9ITAsbihCKSkpLGV9LHQudW5zdGFibGVfY2FuY2VsQ2FsbGJhY2s9ZnVuY3Rpb24oZSl7ZS5jYWxsYmFjaz1udWxsfSx0LnVuc3RhYmxlX3dyYXBDYWxsYmFjaz1mdW5jdGlvbihlKXt2YXIgdD1GO3JldHVybiBmdW5jdGlvbigpe3ZhciByPUY7Rj10O3RyeXtyZXR1cm4gZS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZmluYWxseXtGPXJ9fX0sdC51bnN0YWJsZV9nZXRDdXJyZW50UHJpb3JpdHlMZXZlbD1mdW5jdGlvbigpe3JldHVybiBGfSx0LnVuc3RhYmxlX3Nob3VsZFlpZWxkPWZ1bmN0aW9uKCl7dmFyIGU9dC51bnN0YWJsZV9ub3coKTtNKGUpO3ZhciByPUMoVCk7cmV0dXJuIHIhPT1JJiZudWxsIT09SSYmbnVsbCE9PXImJm51bGwhPT1yLmNhbGxiYWNrJiZyLnN0YXJ0VGltZTw9ZSYmci5leHBpcmF0aW9uVGltZTxJLmV4cGlyYXRpb25UaW1lfHxvKCl9LHQudW5zdGFibGVfcmVxdWVzdFBhaW50PXEsdC51bnN0YWJsZV9jb250aW51ZUV4ZWN1dGlvbj1mdW5jdGlvbigpe0R8fEx8fChEPSEwLG4oQikpfSx0LnVuc3RhYmxlX3BhdXNlRXhlY3V0aW9uPWZ1bmN0aW9uKCl7fSx0LnVuc3RhYmxlX2dldEZpcnN0Q2FsbGJhY2tOb2RlPWZ1bmN0aW9uKCl7cmV0dXJuIEMoVCl9LHQudW5zdGFibGVfUHJvZmlsaW5nPW51bGx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5ieXRlTGVuZ3RoPWZ1bmN0aW9uKGUpe3ZhciB0PWMoZSkscj10WzBdLG49dFsxXTtyZXR1cm4gMyoocituKS80LW59LHQudG9CeXRlQXJyYXk9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9YyhlKSxuPXJbMF0sbz1yWzFdLHM9bmV3IGkoZnVuY3Rpb24oZSx0LHIpe3JldHVybiAzKih0K3IpLzQtcn0oMCxuLG8pKSxsPTAsdT1vPjA/bi00Om4sZj0wO2Y8dTtmKz00KXQ9YVtlLmNoYXJDb2RlQXQoZildPDwxOHxhW2UuY2hhckNvZGVBdChmKzEpXTw8MTJ8YVtlLmNoYXJDb2RlQXQoZisyKV08PDZ8YVtlLmNoYXJDb2RlQXQoZiszKV0sc1tsKytdPXQ+PjE2JjI1NSxzW2wrK109dD4+OCYyNTUsc1tsKytdPTI1NSZ0OzI9PT1vJiYodD1hW2UuY2hhckNvZGVBdChmKV08PDJ8YVtlLmNoYXJDb2RlQXQoZisxKV0+PjQsc1tsKytdPTI1NSZ0KTsxPT09byYmKHQ9YVtlLmNoYXJDb2RlQXQoZildPDwxMHxhW2UuY2hhckNvZGVBdChmKzEpXTw8NHxhW2UuY2hhckNvZGVBdChmKzIpXT4+MixzW2wrK109dD4+OCYyNTUsc1tsKytdPTI1NSZ0KTtyZXR1cm4gc30sdC5mcm9tQnl0ZUFycmF5PWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPWUubGVuZ3RoLGE9ciUzLGk9W10sbz0wLHM9ci1hO288cztvKz0xNjM4MylpLnB1c2godShlLG8sbysxNjM4Mz5zP3M6bysxNjM4MykpOzE9PT1hPyh0PWVbci0xXSxpLnB1c2goblt0Pj4yXStuW3Q8PDQmNjNdKyI9PSIpKToyPT09YSYmKHQ9KGVbci0yXTw8OCkrZVtyLTFdLGkucHVzaChuW3Q+PjEwXStuW3Q+PjQmNjNdK25bdDw8MiY2M10rIj0iKSk7cmV0dXJuIGkuam9pbigiIil9O2Zvcih2YXIgbj1bXSxhPVtdLGk9InVuZGVmaW5lZCIhPXR5cGVvZiBVaW50OEFycmF5P1VpbnQ4QXJyYXk6QXJyYXksbz0iQUJDREVGR0hJSktMTU5PUFFSU1RVVldYWVphYmNkZWZnaGlqa2xtbm9wcXJzdHV2d3h5ejAxMjM0NTY3ODkrLyIscz0wLGw9by5sZW5ndGg7czxsOysrcyluW3NdPW9bc10sYVtvLmNoYXJDb2RlQXQocyldPXM7ZnVuY3Rpb24gYyhlKXt2YXIgdD1lLmxlbmd0aDtpZih0JTQ+MCl0aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgc3RyaW5nLiBMZW5ndGggbXVzdCBiZSBhIG11bHRpcGxlIG9mIDQiKTt2YXIgcj1lLmluZGV4T2YoIj0iKTtyZXR1cm4tMT09PXImJihyPXQpLFtyLHI9PT10PzA6NC1yJTRdfWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgYSxpLG89W10scz10O3M8cjtzKz0zKWE9KGVbc108PDE2JjE2NzExNjgwKSsoZVtzKzFdPDw4JjY1MjgwKSsoMjU1JmVbcysyXSksby5wdXNoKG5bKGk9YSk+PjE4JjYzXStuW2k+PjEyJjYzXStuW2k+PjYmNjNdK25bNjMmaV0pO3JldHVybiBvLmpvaW4oIiIpfWFbIi0iLmNoYXJDb2RlQXQoMCldPTYyLGFbIl8iLmNoYXJDb2RlQXQoMCldPTYzfSxmdW5jdGlvbihlLHQpe3QucmVhZD1mdW5jdGlvbihlLHQscixuLGEpe3ZhciBpLG8scz04KmEtbi0xLGw9KDE8PHMpLTEsYz1sPj4xLHU9LTcsZj1yP2EtMTowLGg9cj8tMToxLGQ9ZVt0K2ZdO2ZvcihmKz1oLGk9ZCYoMTw8LXUpLTEsZD4+PS11LHUrPXM7dT4wO2k9MjU2KmkrZVt0K2ZdLGYrPWgsdS09OCk7Zm9yKG89aSYoMTw8LXUpLTEsaT4+PS11LHUrPW47dT4wO289MjU2Km8rZVt0K2ZdLGYrPWgsdS09OCk7aWYoMD09PWkpaT0xLWM7ZWxzZXtpZihpPT09bClyZXR1cm4gbz9OYU46MS8wKihkPy0xOjEpO28rPU1hdGgucG93KDIsbiksaS09Y31yZXR1cm4oZD8tMToxKSpvKk1hdGgucG93KDIsaS1uKX0sdC53cml0ZT1mdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG8scyxsLGM9OCppLWEtMSx1PSgxPDxjKS0xLGY9dT4+MSxoPTIzPT09YT9NYXRoLnBvdygyLC0yNCktTWF0aC5wb3coMiwtNzcpOjAsZD1uPzA6aS0xLHA9bj8xOi0xLG09dDwwfHwwPT09dCYmMS90PDA/MTowO2Zvcih0PU1hdGguYWJzKHQpLGlzTmFOKHQpfHx0PT09MS8wPyhzPWlzTmFOKHQpPzE6MCxvPXUpOihvPU1hdGguZmxvb3IoTWF0aC5sb2codCkvTWF0aC5MTjIpLHQqKGw9TWF0aC5wb3coMiwtbykpPDEmJihvLS0sbCo9MiksKHQrPW8rZj49MT9oL2w6aCpNYXRoLnBvdygyLDEtZikpKmw+PTImJihvKyssbC89MiksbytmPj11PyhzPTAsbz11KTpvK2Y+PTE/KHM9KHQqbC0xKSpNYXRoLnBvdygyLGEpLG8rPWYpOihzPXQqTWF0aC5wb3coMixmLTEpKk1hdGgucG93KDIsYSksbz0wKSk7YT49ODtlW3IrZF09MjU1JnMsZCs9cCxzLz0yNTYsYS09OCk7Zm9yKG89bzw8YXxzLGMrPWE7Yz4wO2VbcitkXT0yNTUmbyxkKz1wLG8vPTI1NixjLT04KTtlW3IrZC1wXXw9MTI4Km19fSxmdW5jdGlvbihlLHQpe3ZhciByPXt9LnRvU3RyaW5nO2UuZXhwb3J0cz1BcnJheS5pc0FycmF5fHxmdW5jdGlvbihlKXtyZXR1cm4iW29iamVjdCBBcnJheV0iPT1yLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0KXt9LGZ1bmN0aW9uKGUsdCl7fSxmdW5jdGlvbihlLHQpe30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDQ5KSxhPXIoNTEpO2Z1bmN0aW9uIGkoKXt0aGlzLnByb3RvY29sPW51bGwsdGhpcy5zbGFzaGVzPW51bGwsdGhpcy5hdXRoPW51bGwsdGhpcy5ob3N0PW51bGwsdGhpcy5wb3J0PW51bGwsdGhpcy5ob3N0bmFtZT1udWxsLHRoaXMuaGFzaD1udWxsLHRoaXMuc2VhcmNoPW51bGwsdGhpcy5xdWVyeT1udWxsLHRoaXMucGF0aG5hbWU9bnVsbCx0aGlzLnBhdGg9bnVsbCx0aGlzLmhyZWY9bnVsbH10LnBhcnNlPWIsdC5yZXNvbHZlPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGIoZSwhMSwhMCkucmVzb2x2ZSh0KX0sdC5yZXNvbHZlT2JqZWN0PWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGU/YihlLCExLCEwKS5yZXNvbHZlT2JqZWN0KHQpOnR9LHQuZm9ybWF0PWZ1bmN0aW9uKGUpe2EuaXNTdHJpbmcoZSkmJihlPWIoZSkpO3JldHVybiBlIGluc3RhbmNlb2YgaT9lLmZvcm1hdCgpOmkucHJvdG90eXBlLmZvcm1hdC5jYWxsKGUpfSx0LlVybD1pO3ZhciBvPS9eKFthLXowLTkuKy1dKzopL2kscz0vOlswLTldKiQvLGw9L14oXC9cLz8oPyFcLylbXlw/XHNdKikoXD9bXlxzXSopPyQvLGM9WyJ7IiwifSIsInwiLCJcXCIsIl4iLCJgIl0uY29uY2F0KFsiPCIsIj4iLCciJywiYCIsIiAiLCJcciIsIlxuIiwiXHQiXSksdT1bIiciXS5jb25jYXQoYyksZj1bIiUiLCIvIiwiPyIsIjsiLCIjIl0uY29uY2F0KHUpLGg9WyIvIiwiPyIsIiMiXSxkPS9eWythLXowLTlBLVpfLV17MCw2M30kLyxwPS9eKFsrYS16MC05QS1aXy1dezAsNjN9KSguKikkLyxtPXtqYXZhc2NyaXB0OiEwLCJqYXZhc2NyaXB0OiI6ITB9LGc9e2phdmFzY3JpcHQ6ITAsImphdmFzY3JpcHQ6IjohMH0sdj17aHR0cDohMCxodHRwczohMCxmdHA6ITAsZ29waGVyOiEwLGZpbGU6ITAsImh0dHA6IjohMCwiaHR0cHM6IjohMCwiZnRwOiI6ITAsImdvcGhlcjoiOiEwLCJmaWxlOiI6ITB9LHk9cig1Mik7ZnVuY3Rpb24gYihlLHQscil7aWYoZSYmYS5pc09iamVjdChlKSYmZSBpbnN0YW5jZW9mIGkpcmV0dXJuIGU7dmFyIG49bmV3IGk7cmV0dXJuIG4ucGFyc2UoZSx0LHIpLG59aS5wcm90b3R5cGUucGFyc2U9ZnVuY3Rpb24oZSx0LHIpe2lmKCFhLmlzU3RyaW5nKGUpKXRocm93IG5ldyBUeXBlRXJyb3IoIlBhcmFtZXRlciAndXJsJyBtdXN0IGJlIGEgc3RyaW5nLCBub3QgIit0eXBlb2YgZSk7dmFyIGk9ZS5pbmRleE9mKCI/Iikscz0tMSE9PWkmJmk8ZS5pbmRleE9mKCIjIik/Ij8iOiIjIixjPWUuc3BsaXQocyk7Y1swXT1jWzBdLnJlcGxhY2UoL1xcL2csIi8iKTt2YXIgYj1lPWMuam9pbihzKTtpZihiPWIudHJpbSgpLCFyJiYxPT09ZS5zcGxpdCgiIyIpLmxlbmd0aCl7dmFyIHc9bC5leGVjKGIpO2lmKHcpcmV0dXJuIHRoaXMucGF0aD1iLHRoaXMuaHJlZj1iLHRoaXMucGF0aG5hbWU9d1sxXSx3WzJdPyh0aGlzLnNlYXJjaD13WzJdLHRoaXMucXVlcnk9dD95LnBhcnNlKHRoaXMuc2VhcmNoLnN1YnN0cigxKSk6dGhpcy5zZWFyY2guc3Vic3RyKDEpKTp0JiYodGhpcy5zZWFyY2g9IiIsdGhpcy5xdWVyeT17fSksdGhpc312YXIgaz1vLmV4ZWMoYik7aWYoayl7dmFyIFM9KGs9a1swXSkudG9Mb3dlckNhc2UoKTt0aGlzLnByb3RvY29sPVMsYj1iLnN1YnN0cihrLmxlbmd0aCl9aWYocnx8a3x8Yi5tYXRjaCgvXlwvXC9bXkBcL10rQFteQFwvXSsvKSl7dmFyIF89Ii8vIj09PWIuc3Vic3RyKDAsMik7IV98fGsmJmdba118fChiPWIuc3Vic3RyKDIpLHRoaXMuc2xhc2hlcz0hMCl9aWYoIWdba10mJihffHxrJiYhdltrXSkpe2Zvcih2YXIgeCxBLEM9LTEsUD0wO1A8aC5sZW5ndGg7UCsrKXstMSE9PShFPWIuaW5kZXhPZihoW1BdKSkmJigtMT09PUN8fEU8QykmJihDPUUpfS0xIT09KEE9LTE9PT1DP2IubGFzdEluZGV4T2YoIkAiKTpiLmxhc3RJbmRleE9mKCJAIixDKSkmJih4PWIuc2xpY2UoMCxBKSxiPWIuc2xpY2UoQSsxKSx0aGlzLmF1dGg9ZGVjb2RlVVJJQ29tcG9uZW50KHgpKSxDPS0xO2ZvcihQPTA7UDxmLmxlbmd0aDtQKyspe3ZhciBFOy0xIT09KEU9Yi5pbmRleE9mKGZbUF0pKSYmKC0xPT09Q3x8RTxDKSYmKEM9RSl9LTE9PT1DJiYoQz1iLmxlbmd0aCksdGhpcy5ob3N0PWIuc2xpY2UoMCxDKSxiPWIuc2xpY2UoQyksdGhpcy5wYXJzZUhvc3QoKSx0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWV8fCIiO3ZhciBUPSJbIj09PXRoaXMuaG9zdG5hbWVbMF0mJiJdIj09PXRoaXMuaG9zdG5hbWVbdGhpcy5ob3N0bmFtZS5sZW5ndGgtMV07aWYoIVQpZm9yKHZhciBSPXRoaXMuaG9zdG5hbWUuc3BsaXQoL1wuLyksTz0oUD0wLFIubGVuZ3RoKTtQPE87UCsrKXt2YXIgST1SW1BdO2lmKEkmJiFJLm1hdGNoKGQpKXtmb3IodmFyIEY9IiIsTD0wLEQ9SS5sZW5ndGg7TDxEO0wrKylJLmNoYXJDb2RlQXQoTCk+MTI3P0YrPSJ4IjpGKz1JW0xdO2lmKCFGLm1hdGNoKGQpKXt2YXIgTj1SLnNsaWNlKDAsUCksTT1SLnNsaWNlKFArMSksaj1JLm1hdGNoKHApO2omJihOLnB1c2goalsxXSksTS51bnNoaWZ0KGpbMl0pKSxNLmxlbmd0aCYmKGI9Ii8iK00uam9pbigiLiIpK2IpLHRoaXMuaG9zdG5hbWU9Ti5qb2luKCIuIik7YnJlYWt9fX10aGlzLmhvc3RuYW1lLmxlbmd0aD4yNTU/dGhpcy5ob3N0bmFtZT0iIjp0aGlzLmhvc3RuYW1lPXRoaXMuaG9zdG5hbWUudG9Mb3dlckNhc2UoKSxUfHwodGhpcy5ob3N0bmFtZT1uLnRvQVNDSUkodGhpcy5ob3N0bmFtZSkpO3ZhciBCPXRoaXMucG9ydD8iOiIrdGhpcy5wb3J0OiIiLFU9dGhpcy5ob3N0bmFtZXx8IiI7dGhpcy5ob3N0PVUrQix0aGlzLmhyZWYrPXRoaXMuaG9zdCxUJiYodGhpcy5ob3N0bmFtZT10aGlzLmhvc3RuYW1lLnN1YnN0cigxLHRoaXMuaG9zdG5hbWUubGVuZ3RoLTIpLCIvIiE9PWJbMF0mJihiPSIvIitiKSl9aWYoIW1bU10pZm9yKFA9MCxPPXUubGVuZ3RoO1A8TztQKyspe3ZhciBxPXVbUF07aWYoLTEhPT1iLmluZGV4T2YocSkpe3ZhciB6PWVuY29kZVVSSUNvbXBvbmVudChxKTt6PT09cSYmKHo9ZXNjYXBlKHEpKSxiPWIuc3BsaXQocSkuam9pbih6KX19dmFyIFc9Yi5pbmRleE9mKCIjIik7LTEhPT1XJiYodGhpcy5oYXNoPWIuc3Vic3RyKFcpLGI9Yi5zbGljZSgwLFcpKTt2YXIgSD1iLmluZGV4T2YoIj8iKTtpZigtMSE9PUg/KHRoaXMuc2VhcmNoPWIuc3Vic3RyKEgpLHRoaXMucXVlcnk9Yi5zdWJzdHIoSCsxKSx0JiYodGhpcy5xdWVyeT15LnBhcnNlKHRoaXMucXVlcnkpKSxiPWIuc2xpY2UoMCxIKSk6dCYmKHRoaXMuc2VhcmNoPSIiLHRoaXMucXVlcnk9e30pLGImJih0aGlzLnBhdGhuYW1lPWIpLHZbU10mJnRoaXMuaG9zdG5hbWUmJiF0aGlzLnBhdGhuYW1lJiYodGhpcy5wYXRobmFtZT0iLyIpLHRoaXMucGF0aG5hbWV8fHRoaXMuc2VhcmNoKXtCPXRoaXMucGF0aG5hbWV8fCIiO3ZhciBHPXRoaXMuc2VhcmNofHwiIjt0aGlzLnBhdGg9QitHfXJldHVybiB0aGlzLmhyZWY9dGhpcy5mb3JtYXQoKSx0aGlzfSxpLnByb3RvdHlwZS5mb3JtYXQ9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmF1dGh8fCIiO2UmJihlPShlPWVuY29kZVVSSUNvbXBvbmVudChlKSkucmVwbGFjZSgvJTNBL2ksIjoiKSxlKz0iQCIpO3ZhciB0PXRoaXMucHJvdG9jb2x8fCIiLHI9dGhpcy5wYXRobmFtZXx8IiIsbj10aGlzLmhhc2h8fCIiLGk9ITEsbz0iIjt0aGlzLmhvc3Q/aT1lK3RoaXMuaG9zdDp0aGlzLmhvc3RuYW1lJiYoaT1lKygtMT09PXRoaXMuaG9zdG5hbWUuaW5kZXhPZigiOiIpP3RoaXMuaG9zdG5hbWU6IlsiK3RoaXMuaG9zdG5hbWUrIl0iKSx0aGlzLnBvcnQmJihpKz0iOiIrdGhpcy5wb3J0KSksdGhpcy5xdWVyeSYmYS5pc09iamVjdCh0aGlzLnF1ZXJ5KSYmT2JqZWN0LmtleXModGhpcy5xdWVyeSkubGVuZ3RoJiYobz15LnN0cmluZ2lmeSh0aGlzLnF1ZXJ5KSk7dmFyIHM9dGhpcy5zZWFyY2h8fG8mJiI/IitvfHwiIjtyZXR1cm4gdCYmIjoiIT09dC5zdWJzdHIoLTEpJiYodCs9IjoiKSx0aGlzLnNsYXNoZXN8fCghdHx8dlt0XSkmJiExIT09aT8oaT0iLy8iKyhpfHwiIiksciYmIi8iIT09ci5jaGFyQXQoMCkmJihyPSIvIityKSk6aXx8KGk9IiIpLG4mJiIjIiE9PW4uY2hhckF0KDApJiYobj0iIyIrbikscyYmIj8iIT09cy5jaGFyQXQoMCkmJihzPSI/IitzKSx0K2krKHI9ci5yZXBsYWNlKC9bPyNdL2csKGZ1bmN0aW9uKGUpe3JldHVybiBlbmNvZGVVUklDb21wb25lbnQoZSl9KSkpKyhzPXMucmVwbGFjZSgiIyIsIiUyMyIpKStufSxpLnByb3RvdHlwZS5yZXNvbHZlPWZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJlc29sdmVPYmplY3QoYihlLCExLCEwKSkuZm9ybWF0KCl9LGkucHJvdG90eXBlLnJlc29sdmVPYmplY3Q9ZnVuY3Rpb24oZSl7aWYoYS5pc1N0cmluZyhlKSl7dmFyIHQ9bmV3IGk7dC5wYXJzZShlLCExLCEwKSxlPXR9Zm9yKHZhciByPW5ldyBpLG49T2JqZWN0LmtleXModGhpcyksbz0wO288bi5sZW5ndGg7bysrKXt2YXIgcz1uW29dO3Jbc109dGhpc1tzXX1pZihyLmhhc2g9ZS5oYXNoLCIiPT09ZS5ocmVmKXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyO2lmKGUuc2xhc2hlcyYmIWUucHJvdG9jb2wpe2Zvcih2YXIgbD1PYmplY3Qua2V5cyhlKSxjPTA7YzxsLmxlbmd0aDtjKyspe3ZhciB1PWxbY107InByb3RvY29sIiE9PXUmJihyW3VdPWVbdV0pfXJldHVybiB2W3IucHJvdG9jb2xdJiZyLmhvc3RuYW1lJiYhci5wYXRobmFtZSYmKHIucGF0aD1yLnBhdGhuYW1lPSIvIiksci5ocmVmPXIuZm9ybWF0KCkscn1pZihlLnByb3RvY29sJiZlLnByb3RvY29sIT09ci5wcm90b2NvbCl7aWYoIXZbZS5wcm90b2NvbF0pe2Zvcih2YXIgZj1PYmplY3Qua2V5cyhlKSxoPTA7aDxmLmxlbmd0aDtoKyspe3ZhciBkPWZbaF07cltkXT1lW2RdfXJldHVybiByLmhyZWY9ci5mb3JtYXQoKSxyfWlmKHIucHJvdG9jb2w9ZS5wcm90b2NvbCxlLmhvc3R8fGdbZS5wcm90b2NvbF0pci5wYXRobmFtZT1lLnBhdGhuYW1lO2Vsc2V7Zm9yKHZhciBwPShlLnBhdGhuYW1lfHwiIikuc3BsaXQoIi8iKTtwLmxlbmd0aCYmIShlLmhvc3Q9cC5zaGlmdCgpKTspO2UuaG9zdHx8KGUuaG9zdD0iIiksZS5ob3N0bmFtZXx8KGUuaG9zdG5hbWU9IiIpLCIiIT09cFswXSYmcC51bnNoaWZ0KCIiKSxwLmxlbmd0aDwyJiZwLnVuc2hpZnQoIiIpLHIucGF0aG5hbWU9cC5qb2luKCIvIil9aWYoci5zZWFyY2g9ZS5zZWFyY2gsci5xdWVyeT1lLnF1ZXJ5LHIuaG9zdD1lLmhvc3R8fCIiLHIuYXV0aD1lLmF1dGgsci5ob3N0bmFtZT1lLmhvc3RuYW1lfHxlLmhvc3Qsci5wb3J0PWUucG9ydCxyLnBhdGhuYW1lfHxyLnNlYXJjaCl7dmFyIG09ci5wYXRobmFtZXx8IiIseT1yLnNlYXJjaHx8IiI7ci5wYXRoPW0reX1yZXR1cm4gci5zbGFzaGVzPXIuc2xhc2hlc3x8ZS5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9dmFyIGI9ci5wYXRobmFtZSYmIi8iPT09ci5wYXRobmFtZS5jaGFyQXQoMCksdz1lLmhvc3R8fGUucGF0aG5hbWUmJiIvIj09PWUucGF0aG5hbWUuY2hhckF0KDApLGs9d3x8Ynx8ci5ob3N0JiZlLnBhdGhuYW1lLFM9ayxfPXIucGF0aG5hbWUmJnIucGF0aG5hbWUuc3BsaXQoIi8iKXx8W10seD0ocD1lLnBhdGhuYW1lJiZlLnBhdGhuYW1lLnNwbGl0KCIvIil8fFtdLHIucHJvdG9jb2wmJiF2W3IucHJvdG9jb2xdKTtpZih4JiYoci5ob3N0bmFtZT0iIixyLnBvcnQ9bnVsbCxyLmhvc3QmJigiIj09PV9bMF0/X1swXT1yLmhvc3Q6Xy51bnNoaWZ0KHIuaG9zdCkpLHIuaG9zdD0iIixlLnByb3RvY29sJiYoZS5ob3N0bmFtZT1udWxsLGUucG9ydD1udWxsLGUuaG9zdCYmKCIiPT09cFswXT9wWzBdPWUuaG9zdDpwLnVuc2hpZnQoZS5ob3N0KSksZS5ob3N0PW51bGwpLGs9ayYmKCIiPT09cFswXXx8IiI9PT1fWzBdKSksdylyLmhvc3Q9ZS5ob3N0fHwiIj09PWUuaG9zdD9lLmhvc3Q6ci5ob3N0LHIuaG9zdG5hbWU9ZS5ob3N0bmFtZXx8IiI9PT1lLmhvc3RuYW1lP2UuaG9zdG5hbWU6ci5ob3N0bmFtZSxyLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnksXz1wO2Vsc2UgaWYocC5sZW5ndGgpX3x8KF89W10pLF8ucG9wKCksXz1fLmNvbmNhdChwKSxyLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnk7ZWxzZSBpZighYS5pc051bGxPclVuZGVmaW5lZChlLnNlYXJjaCkpe2lmKHgpci5ob3N0bmFtZT1yLmhvc3Q9Xy5zaGlmdCgpLChUPSEhKHIuaG9zdCYmci5ob3N0LmluZGV4T2YoIkAiKT4wKSYmci5ob3N0LnNwbGl0KCJAIikpJiYoci5hdXRoPVQuc2hpZnQoKSxyLmhvc3Q9ci5ob3N0bmFtZT1ULnNoaWZ0KCkpO3JldHVybiByLnNlYXJjaD1lLnNlYXJjaCxyLnF1ZXJ5PWUucXVlcnksYS5pc051bGwoci5wYXRobmFtZSkmJmEuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmhyZWY9ci5mb3JtYXQoKSxyfWlmKCFfLmxlbmd0aClyZXR1cm4gci5wYXRobmFtZT1udWxsLHIuc2VhcmNoP3IucGF0aD0iLyIrci5zZWFyY2g6ci5wYXRoPW51bGwsci5ocmVmPXIuZm9ybWF0KCkscjtmb3IodmFyIEE9Xy5zbGljZSgtMSlbMF0sQz0oci5ob3N0fHxlLmhvc3R8fF8ubGVuZ3RoPjEpJiYoIi4iPT09QXx8Ii4uIj09PUEpfHwiIj09PUEsUD0wLEU9Xy5sZW5ndGg7RT49MDtFLS0pIi4iPT09KEE9X1tFXSk/Xy5zcGxpY2UoRSwxKToiLi4iPT09QT8oXy5zcGxpY2UoRSwxKSxQKyspOlAmJihfLnNwbGljZShFLDEpLFAtLSk7aWYoIWsmJiFTKWZvcig7UC0tO1ApXy51bnNoaWZ0KCIuLiIpOyFrfHwiIj09PV9bMF18fF9bMF0mJiIvIj09PV9bMF0uY2hhckF0KDApfHxfLnVuc2hpZnQoIiIpLEMmJiIvIiE9PV8uam9pbigiLyIpLnN1YnN0cigtMSkmJl8ucHVzaCgiIik7dmFyIFQsUj0iIj09PV9bMF18fF9bMF0mJiIvIj09PV9bMF0uY2hhckF0KDApO3gmJihyLmhvc3RuYW1lPXIuaG9zdD1SPyIiOl8ubGVuZ3RoP18uc2hpZnQoKToiIiwoVD0hIShyLmhvc3QmJnIuaG9zdC5pbmRleE9mKCJAIik+MCkmJnIuaG9zdC5zcGxpdCgiQCIpKSYmKHIuYXV0aD1ULnNoaWZ0KCksci5ob3N0PXIuaG9zdG5hbWU9VC5zaGlmdCgpKSk7cmV0dXJuKGs9a3x8ci5ob3N0JiZfLmxlbmd0aCkmJiFSJiZfLnVuc2hpZnQoIiIpLF8ubGVuZ3RoP3IucGF0aG5hbWU9Xy5qb2luKCIvIik6KHIucGF0aG5hbWU9bnVsbCxyLnBhdGg9bnVsbCksYS5pc051bGwoci5wYXRobmFtZSkmJmEuaXNOdWxsKHIuc2VhcmNoKXx8KHIucGF0aD0oci5wYXRobmFtZT9yLnBhdGhuYW1lOiIiKSsoci5zZWFyY2g/ci5zZWFyY2g6IiIpKSxyLmF1dGg9ZS5hdXRofHxyLmF1dGgsci5zbGFzaGVzPXIuc2xhc2hlc3x8ZS5zbGFzaGVzLHIuaHJlZj1yLmZvcm1hdCgpLHJ9LGkucHJvdG90eXBlLnBhcnNlSG9zdD1mdW5jdGlvbigpe3ZhciBlPXRoaXMuaG9zdCx0PXMuZXhlYyhlKTt0JiYoIjoiIT09KHQ9dFswXSkmJih0aGlzLnBvcnQ9dC5zdWJzdHIoMSkpLGU9ZS5zdWJzdHIoMCxlLmxlbmd0aC10Lmxlbmd0aCkpLGUmJih0aGlzLmhvc3RuYW1lPWUpfX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbihlLG4pe3ZhciBhOy8qISBodHRwczovL210aHMuYmUvcHVueWNvZGUgdjEuNC4xIGJ5IEBtYXRoaWFzICovIWZ1bmN0aW9uKGkpe3QmJnQubm9kZVR5cGUsZSYmZS5ub2RlVHlwZTt2YXIgbz0ib2JqZWN0Ij09dHlwZW9mIG4mJm47by5nbG9iYWwhPT1vJiZvLndpbmRvdyE9PW8mJm8uc2VsZjt2YXIgcyxsPTIxNDc0ODM2NDcsYz0vXnhuLS0vLHU9L1teXHgyMC1ceDdFXS8sZj0vW1x4MkVcdTMwMDJcdUZGMEVcdUZGNjFdL2csaD17b3ZlcmZsb3c6Ik92ZXJmbG93OiBpbnB1dCBuZWVkcyB3aWRlciBpbnRlZ2VycyB0byBwcm9jZXNzIiwibm90LWJhc2ljIjoiSWxsZWdhbCBpbnB1dCA+PSAweDgwIChub3QgYSBiYXNpYyBjb2RlIHBvaW50KSIsImludmFsaWQtaW5wdXQiOiJJbnZhbGlkIGlucHV0In0sZD1NYXRoLmZsb29yLHA9U3RyaW5nLmZyb21DaGFyQ29kZTtmdW5jdGlvbiBtKGUpe3Rocm93IG5ldyBSYW5nZUVycm9yKGhbZV0pfWZ1bmN0aW9uIGcoZSx0KXtmb3IodmFyIHI9ZS5sZW5ndGgsbj1bXTtyLS07KW5bcl09dChlW3JdKTtyZXR1cm4gbn1mdW5jdGlvbiB2KGUsdCl7dmFyIHI9ZS5zcGxpdCgiQCIpLG49IiI7cmV0dXJuIHIubGVuZ3RoPjEmJihuPXJbMF0rIkAiLGU9clsxXSksbitnKChlPWUucmVwbGFjZShmLCIuIikpLnNwbGl0KCIuIiksdCkuam9pbigiLiIpfWZ1bmN0aW9uIHkoZSl7Zm9yKHZhciB0LHIsbj1bXSxhPTAsaT1lLmxlbmd0aDthPGk7KSh0PWUuY2hhckNvZGVBdChhKyspKT49NTUyOTYmJnQ8PTU2MzE5JiZhPGk/NTYzMjA9PSg2NDUxMiYocj1lLmNoYXJDb2RlQXQoYSsrKSkpP24ucHVzaCgoKDEwMjMmdCk8PDEwKSsoMTAyMyZyKSs2NTUzNik6KG4ucHVzaCh0KSxhLS0pOm4ucHVzaCh0KTtyZXR1cm4gbn1mdW5jdGlvbiBiKGUpe3JldHVybiBnKGUsKGZ1bmN0aW9uKGUpe3ZhciB0PSIiO3JldHVybiBlPjY1NTM1JiYodCs9cCgoZS09NjU1MzYpPj4+MTAmMTAyM3w1NTI5NiksZT01NjMyMHwxMDIzJmUpLHQrPXAoZSl9KSkuam9pbigiIil9ZnVuY3Rpb24gdyhlLHQpe3JldHVybiBlKzIyKzc1KihlPDI2KS0oKDAhPXQpPDw1KX1mdW5jdGlvbiBrKGUsdCxyKXt2YXIgbj0wO2ZvcihlPXI/ZChlLzcwMCk6ZT4+MSxlKz1kKGUvdCk7ZT40NTU7bis9MzYpZT1kKGUvMzUpO3JldHVybiBkKG4rMzYqZS8oZSszOCkpfWZ1bmN0aW9uIFMoZSl7dmFyIHQscixuLGEsaSxvLHMsYyx1LGYsaCxwPVtdLGc9ZS5sZW5ndGgsdj0wLHk9MTI4LHc9NzI7Zm9yKChyPWUubGFzdEluZGV4T2YoIi0iKSk8MCYmKHI9MCksbj0wO248cjsrK24pZS5jaGFyQ29kZUF0KG4pPj0xMjgmJm0oIm5vdC1iYXNpYyIpLHAucHVzaChlLmNoYXJDb2RlQXQobikpO2ZvcihhPXI+MD9yKzE6MDthPGc7KXtmb3IoaT12LG89MSxzPTM2O2E+PWcmJm0oImludmFsaWQtaW5wdXQiKSwoKGM9KGg9ZS5jaGFyQ29kZUF0KGErKykpLTQ4PDEwP2gtMjI6aC02NTwyNj9oLTY1OmgtOTc8MjY/aC05NzozNik+PTM2fHxjPmQoKGwtdikvbykpJiZtKCJvdmVyZmxvdyIpLHYrPWMqbywhKGM8KHU9czw9dz8xOnM+PXcrMjY/MjY6cy13KSk7cys9MzYpbz5kKGwvKGY9MzYtdSkpJiZtKCJvdmVyZmxvdyIpLG8qPWY7dz1rKHYtaSx0PXAubGVuZ3RoKzEsMD09aSksZCh2L3QpPmwteSYmbSgib3ZlcmZsb3ciKSx5Kz1kKHYvdCksdiU9dCxwLnNwbGljZSh2KyssMCx5KX1yZXR1cm4gYihwKX1mdW5jdGlvbiBfKGUpe3ZhciB0LHIsbixhLGksbyxzLGMsdSxmLGgsZyx2LGIsUyxfPVtdO2ZvcihnPShlPXkoZSkpLmxlbmd0aCx0PTEyOCxyPTAsaT03MixvPTA7bzxnOysrbykoaD1lW29dKTwxMjgmJl8ucHVzaChwKGgpKTtmb3Iobj1hPV8ubGVuZ3RoLGEmJl8ucHVzaCgiLSIpO248Zzspe2ZvcihzPWwsbz0wO288ZzsrK28pKGg9ZVtvXSk+PXQmJmg8cyYmKHM9aCk7Zm9yKHMtdD5kKChsLXIpLyh2PW4rMSkpJiZtKCJvdmVyZmxvdyIpLHIrPShzLXQpKnYsdD1zLG89MDtvPGc7KytvKWlmKChoPWVbb10pPHQmJisrcj5sJiZtKCJvdmVyZmxvdyIpLGg9PXQpe2ZvcihjPXIsdT0zNjshKGM8KGY9dTw9aT8xOnU+PWkrMjY/MjY6dS1pKSk7dSs9MzYpUz1jLWYsYj0zNi1mLF8ucHVzaChwKHcoZitTJWIsMCkpKSxjPWQoUy9iKTtfLnB1c2gocCh3KGMsMCkpKSxpPWsocix2LG49PWEpLHI9MCwrK259KytyLCsrdH1yZXR1cm4gXy5qb2luKCIiKX1zPXt2ZXJzaW9uOiIxLjQuMSIsdWNzMjp7ZGVjb2RlOnksZW5jb2RlOmJ9LGRlY29kZTpTLGVuY29kZTpfLHRvQVNDSUk6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIHUudGVzdChlKT8ieG4tLSIrXyhlKTplfSkpfSx0b1VuaWNvZGU6ZnVuY3Rpb24oZSl7cmV0dXJuIHYoZSwoZnVuY3Rpb24oZSl7cmV0dXJuIGMudGVzdChlKT9TKGUuc2xpY2UoNCkudG9Mb3dlckNhc2UoKSk6ZX0pKX19LHZvaWQgMD09PShhPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LmNhbGwodCxyLHQsZSkpfHwoZS5leHBvcnRzPWEpfSgpfSkuY2FsbCh0aGlzLHIoNTApKGUpLHIoMTgpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGUud2VicGFja1BvbHlmaWxsfHwoZS5kZXByZWNhdGU9ZnVuY3Rpb24oKXt9LGUucGF0aHM9W10sZS5jaGlsZHJlbnx8KGUuY2hpbGRyZW49W10pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLCJsb2FkZWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLmx9fSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImlkIix7ZW51bWVyYWJsZTohMCxnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gZS5pfX0pLGUud2VicGFja1BvbHlmaWxsPTEpLGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17aXNTdHJpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuInN0cmluZyI9PXR5cGVvZiBlfSxpc09iamVjdDpmdW5jdGlvbihlKXtyZXR1cm4ib2JqZWN0Ij09dHlwZW9mIGUmJm51bGwhPT1lfSxpc051bGw6ZnVuY3Rpb24oZSl7cmV0dXJuIG51bGw9PT1lfSxpc051bGxPclVuZGVmaW5lZDpmdW5jdGlvbihlKXtyZXR1cm4gbnVsbD09ZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZGVjb2RlPXQucGFyc2U9cig1MyksdC5lbmNvZGU9dC5zdHJpbmdpZnk9cig1NCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsaSl7dD10fHwiJiIscj1yfHwiPSI7dmFyIG89e307aWYoInN0cmluZyIhPXR5cGVvZiBlfHwwPT09ZS5sZW5ndGgpcmV0dXJuIG87dmFyIHM9L1wrL2c7ZT1lLnNwbGl0KHQpO3ZhciBsPTFlMztpJiYibnVtYmVyIj09dHlwZW9mIGkubWF4S2V5cyYmKGw9aS5tYXhLZXlzKTt2YXIgYz1lLmxlbmd0aDtsPjAmJmM+bCYmKGM9bCk7Zm9yKHZhciB1PTA7dTxjOysrdSl7dmFyIGYsaCxkLHAsbT1lW3VdLnJlcGxhY2UocywiJTIwIiksZz1tLmluZGV4T2Yocik7Zz49MD8oZj1tLnN1YnN0cigwLGcpLGg9bS5zdWJzdHIoZysxKSk6KGY9bSxoPSIiKSxkPWRlY29kZVVSSUNvbXBvbmVudChmKSxwPWRlY29kZVVSSUNvbXBvbmVudChoKSxuKG8sZCk/YShvW2RdKT9vW2RdLnB1c2gocCk6b1tkXT1bb1tkXSxwXTpvW2RdPXB9cmV0dXJuIG99O3ZhciBhPUFycmF5LmlzQXJyYXl8fGZ1bmN0aW9uKGUpe3JldHVybiJbb2JqZWN0IEFycmF5XSI9PT1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nLmNhbGwoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWZ1bmN0aW9uKGUpe3N3aXRjaCh0eXBlb2YgZSl7Y2FzZSJzdHJpbmciOnJldHVybiBlO2Nhc2UiYm9vbGVhbiI6cmV0dXJuIGU/InRydWUiOiJmYWxzZSI7Y2FzZSJudW1iZXIiOnJldHVybiBpc0Zpbml0ZShlKT9lOiIiO2RlZmF1bHQ6cmV0dXJuIiJ9fTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7cmV0dXJuIHQ9dHx8IiYiLHI9cnx8Ij0iLG51bGw9PT1lJiYoZT12b2lkIDApLCJvYmplY3QiPT10eXBlb2YgZT9pKG8oZSksKGZ1bmN0aW9uKG8pe3ZhciBzPWVuY29kZVVSSUNvbXBvbmVudChuKG8pKStyO3JldHVybiBhKGVbb10pP2koZVtvXSwoZnVuY3Rpb24oZSl7cmV0dXJuIHMrZW5jb2RlVVJJQ29tcG9uZW50KG4oZSkpfSkpLmpvaW4odCk6cytlbmNvZGVVUklDb21wb25lbnQobihlW29dKSl9KSkuam9pbih0KTpzP2VuY29kZVVSSUNvbXBvbmVudChuKHMpKStyK2VuY29kZVVSSUNvbXBvbmVudChuKGUpKToiIn07dmFyIGE9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKX07ZnVuY3Rpb24gaShlLHQpe2lmKGUubWFwKXJldHVybiBlLm1hcCh0KTtmb3IodmFyIHI9W10sbj0wO248ZS5sZW5ndGg7bisrKXIucHVzaCh0KGVbbl0sbikpO3JldHVybiByfXZhciBvPU9iamVjdC5rZXlzfHxmdW5jdGlvbihlKXt2YXIgdD1bXTtmb3IodmFyIHIgaW4gZSlPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSxyKSYmdC5wdXNoKHIpO3JldHVybiB0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD12b2lkIDA7dmFyIGk9YShyKDEyKSksbz1hKHIoMzApKSxzPWEocigyMSkpLGw9YShyKDE0KSksYz1hKHIoMjUpKSx1PWEocigxNSkpLGY9YShyKDIpKSxoPWEocig2KSksZD1hKHIoNykpLHA9YShyKDMpKSxtPWEocig5KSksZz1hKHIoOCkpLHY9YShyKDUpKSx5PW4ocigwKSksYj1hKHIoNCkpLHc9YShyKDIyKSksaz1hKHIoMjcpKSxTPW4ocigyMCkpLF89YShyKDE5KSkseD1hKHIoMzEpKSxBPWEocigzMikpLEM9YShyKDYyKSksUD1yKDEwKSxFPXIoMTMpLFQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7KDAsZi5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKWFbaV09YXJndW1lbnRzW2ldO3JldHVybiByPSgwLGQuZGVmYXVsdCkodGhpcywoZT0oMCxwLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChhKSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwic3RhdGUiLHtwZGY6bnVsbH0pLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwidmlld2VyIix7c2Nyb2xsUGFnZUludG9WaWV3OmZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZU51bWJlcixuPXIucHJvcHMub25JdGVtQ2xpY2s7aWYobiluKHtwYWdlTnVtYmVyOnR9KTtlbHNle3ZhciBhPXIucGFnZXNbdC0xXTthP2Euc2Nyb2xsSW50b1ZpZXcoKTooMCxQLndhcm5PbkRldikoIldhcm5pbmc6IEFuIGludGVybmFsIGxpbmsgbGVhZGluZyB0byBwYWdlICIuY29uY2F0KHQsIiB3YXMgY2xpY2tlZCwgYnV0IG5laXRoZXIgPERvY3VtZW50PiB3YXMgcHJvdmlkZWQgd2l0aCBvbkl0ZW1DbGljayBub3IgaXQgd2FzIGFibGUgdG8gZmluZCB0aGUgcGFnZSB3aXRoaW4gaXRzZWxmLiBFaXRoZXIgcHJvdmlkZSBvbkl0ZW1DbGljayB0byA8RG9jdW1lbnQ+IGFuZCBoYW5kbGUgbmF2aWdhdGluZyBieSB5b3Vyc2VsZiBvciBlbnN1cmUgdGhhdCBhbGwgcGFnZXMgYXJlIHJlbmRlcmVkIHdpdGhpbiA8RG9jdW1lbnQ+LiIpKX19fSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJsaW5rU2VydmljZSIsbmV3IEEuZGVmYXVsdCksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJsb2FkRG9jdW1lbnQiLCgwLHUuZGVmYXVsdCkobC5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGEsaSxvLHMsdSxmO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIHQ9bnVsbCxlLnByZXY9MSxlLm5leHQ9NCxyLmZpbmREb2N1bWVudFNvdXJjZSgpO2Nhc2UgNDp0PWUuc2VudCxyLm9uU291cmNlU3VjY2VzcygpLGUubmV4dD0xMTticmVhaztjYXNlIDg6ZS5wcmV2PTgsZS50MD1lLmNhdGNoKDEpLHIub25Tb3VyY2VFcnJvcihlLnQwKTtjYXNlIDExOmlmKHQpe2UubmV4dD0xMzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIpO2Nhc2UgMTM6cmV0dXJuIHIuc2V0U3RhdGUoKGZ1bmN0aW9uKGUpe3JldHVybiBlLnBkZj97cGRmOm51bGx9Om51bGx9KSksbj1yLnByb3BzLGE9bi5vcHRpb25zLGk9bi5vbkxvYWRQcm9ncmVzcyxvPW4ub25QYXNzd29yZCxlLnByZXY9MTUsKDAsUC5jYW5jZWxSdW5uaW5nVGFzaykoci5ydW5uaW5nVGFzayksKHM9Uy5kZWZhdWx0LmdldERvY3VtZW50KCgwLGMuZGVmYXVsdCkoe30sdCxhKSkpLm9uUGFzc3dvcmQ9byxpJiYocy5vblByb2dyZXNzPWkpLHU9KDAsUC5tYWtlQ2FuY2VsbGFibGUpKHMucHJvbWlzZSksci5ydW5uaW5nVGFzaz11LGUubmV4dD0yNCx1LnByb21pc2U7Y2FzZSAyNDpmPWUuc2VudCxyLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wZGYmJmUucGRmLmZpbmdlcnByaW50PT09Zi5maW5nZXJwcmludD9udWxsOntwZGY6Zn19KSxyLm9uTG9hZFN1Y2Nlc3MpLGUubmV4dD0zMTticmVhaztjYXNlIDI4OmUucHJldj0yOCxlLnQxPWUuY2F0Y2goMTUpLHIub25Mb2FkRXJyb3IoZS50MSk7Y2FzZSAzMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzEsOF0sWzE1LDI4XV0pfSkpKSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJzZXR1cExpbmtTZXJ2aWNlIiwoZnVuY3Rpb24oKXtyLmxpbmtTZXJ2aWNlLnNldFZpZXdlcihyLnZpZXdlcik7dmFyIGU9KDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKTtPYmplY3QuZGVmaW5lUHJvcGVydHkoci5saW5rU2VydmljZSwiZXh0ZXJuYWxMaW5rVGFyZ2V0Iix7Z2V0OmZ1bmN0aW9uKCl7c3dpdGNoKGUucHJvcHMuZXh0ZXJuYWxMaW5rVGFyZ2V0KXtjYXNlIl9zZWxmIjpyZXR1cm4gMTtjYXNlIl9ibGFuayI6cmV0dXJuIDI7Y2FzZSJfcGFyZW50IjpyZXR1cm4gMztjYXNlIl90b3AiOnJldHVybiA0O2RlZmF1bHQ6cmV0dXJuIDB9fX0pfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Tb3VyY2VTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLm9uU291cmNlU3VjY2VzczsoMCxQLmNhbGxJZkRlZmluZWQpKGUpfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Tb3VyY2VFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCxQLmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsUC5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uU291cmNlRXJyb3I7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCx2LmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25Mb2FkU3VjY2Vzcyx0PXIuc3RhdGUucGRmOygwLFAuY2FsbElmRGVmaW5lZCkoZSx0KSxyLnBhZ2VzPW5ldyBBcnJheSh0Lm51bVBhZ2VzKSxyLmxpbmtTZXJ2aWNlLnNldERvY3VtZW50KHQpfSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwib25Mb2FkRXJyb3IiLChmdW5jdGlvbihlKXtpZighKDAsUC5pc0NhbmNlbEV4Y2VwdGlvbikoZSkpe3Iuc2V0U3RhdGUoe3BkZjohMX0pLCgwLFAuZXJyb3JPbkRldikoZSk7dmFyIHQ9ci5wcm9wcy5vbkxvYWRFcnJvcjsoMCxQLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwiZmluZERvY3VtZW50U291cmNlIiwoMCx1LmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhLGksdTtyZXR1cm4gbC5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKHQ9ci5wcm9wcy5maWxlKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsbnVsbCk7Y2FzZSAzOmlmKCJzdHJpbmciIT10eXBlb2YgdCl7ZS5uZXh0PTk7YnJlYWt9aWYoISgwLFAuaXNEYXRhVVJJKSh0KSl7ZS5uZXh0PTc7YnJlYWt9cmV0dXJuIG49KDAsUC5kYXRhVVJJdG9VaW50OEFycmF5KSh0KSxlLmFicnVwdCgicmV0dXJuIix7ZGF0YTpufSk7Y2FzZSA3OnJldHVybigwLFAuZGlzcGxheUNPUlNXYXJuaW5nKSgpLGUuYWJydXB0KCJyZXR1cm4iLHt1cmw6dH0pO2Nhc2UgOTppZighKHQgaW5zdGFuY2VvZiBTLlBERkRhdGFSYW5nZVRyYW5zcG9ydCkpe2UubmV4dD0xMTticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIse3JhbmdlOnR9KTtjYXNlIDExOmlmKCEoMCxQLmlzQXJyYXlCdWZmZXIpKHQpKXtlLm5leHQ9MTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHtkYXRhOnR9KTtjYXNlIDEzOmlmKCFQLmlzQnJvd3Nlcil7ZS5uZXh0PTE5O2JyZWFrfWlmKCEoMCxQLmlzQmxvYikodCkmJiEoMCxQLmlzRmlsZSkodCkpe2UubmV4dD0xOTticmVha31yZXR1cm4gZS5uZXh0PTE3LCgwLFAubG9hZEZyb21GaWxlKSh0KTtjYXNlIDE3OnJldHVybiBlLnQwPWUuc2VudCxlLmFicnVwdCgicmV0dXJuIix7ZGF0YTplLnQwfSk7Y2FzZSAxOTppZigib2JqZWN0Ij09PSgwLHMuZGVmYXVsdCkodCkpe2UubmV4dD0yMTticmVha310aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIGluIGZpbGUsIG5lZWQgZWl0aGVyIFVpbnQ4QXJyYXksIHN0cmluZyBvciBhIHBhcmFtZXRlciBvYmplY3QiKTtjYXNlIDIxOmlmKHQudXJsfHx0LmRhdGF8fHQucmFuZ2Upe2UubmV4dD0yMzticmVha310aHJvdyBuZXcgRXJyb3IoIkludmFsaWQgcGFyYW1ldGVyIG9iamVjdDogbmVlZCBlaXRoZXIgLmRhdGEsIC5yYW5nZSBvciAudXJsIik7Y2FzZSAyMzppZigic3RyaW5nIiE9dHlwZW9mIHQudXJsKXtlLm5leHQ9Mjk7YnJlYWt9aWYoISgwLFAuaXNEYXRhVVJJKSh0LnVybCkpe2UubmV4dD0yODticmVha31yZXR1cm4gYT10LnVybCxpPSgwLG8uZGVmYXVsdCkodCxbInVybCJdKSx1PSgwLFAuZGF0YVVSSXRvVWludDhBcnJheSkoYSksZS5hYnJ1cHQoInJldHVybiIsKDAsYy5kZWZhdWx0KSh7ZGF0YTp1fSxpKSk7Y2FzZSAyODooMCxQLmRpc3BsYXlDT1JTV2FybmluZykoKTtjYXNlIDI5OnJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDMwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSkpLCgwLHYuZGVmYXVsdCkoKDAsZy5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKHIpKSwicmVnaXN0ZXJQYWdlIiwoZnVuY3Rpb24oZSx0KXtyLnBhZ2VzW2VdPXR9KSksKDAsdi5kZWZhdWx0KSgoMCxnLmRlZmF1bHQpKCgwLGcuZGVmYXVsdCkocikpLCJ1bnJlZ2lzdGVyUGFnZSIsKGZ1bmN0aW9uKGUpe2RlbGV0ZSByLnBhZ2VzW2VdfSkpLHJ9cmV0dXJuKDAsbS5kZWZhdWx0KSh0LGUpLCgwLGguZGVmYXVsdCkodCxbe2tleToiY29tcG9uZW50RGlkTW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5sb2FkRG9jdW1lbnQoKSx0aGlzLnNldHVwTGlua1NlcnZpY2UoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5wcm9wcy5maWxlIT09ZS5maWxlJiZ0aGlzLmxvYWREb2N1bWVudCgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsUC5jYW5jZWxSdW5uaW5nVGFzaykodGhpcy5ydW5uaW5nVGFzayl9fSx7a2V5OiJyZW5kZXJDaGlsZHJlbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLmNoaWxkcmVuO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLmRlZmF1bHQuUHJvdmlkZXIse3ZhbHVlOnRoaXMuY2hpbGRDb250ZXh0fSxlKX19LHtrZXk6InJlbmRlckNvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5maWxlLHQ9dGhpcy5zdGF0ZS5wZGY7aWYoIWUpe3ZhciByPXRoaXMucHJvcHMubm9EYXRhO3JldHVybiB5LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LmRlZmF1bHQse3R5cGU6Im5vLWRhdGEifSwiZnVuY3Rpb24iPT10eXBlb2Ygcj9yKCk6cil9aWYobnVsbD09PXQpe3ZhciBuPXRoaXMucHJvcHMubG9hZGluZztyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHt0eXBlOiJsb2FkaW5nIn0sImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pfWlmKCExPT09dCl7dmFyIGE9dGhpcy5wcm9wcy5lcnJvcjtyZXR1cm4geS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHt0eXBlOiJlcnJvciJ9LCJmdW5jdGlvbiI9PXR5cGVvZiBhP2EoKTphKX1yZXR1cm4gdGhpcy5yZW5kZXJDaGlsZHJlbigpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLmNsYXNzTmFtZSxyPWUuaW5wdXRSZWY7cmV0dXJuIHkuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLCgwLGkuZGVmYXVsdCkoe2NsYXNzTmFtZTooMCxrLmRlZmF1bHQpKCJyZWFjdC1wZGZfX0RvY3VtZW50Iix0KSxyZWY6cn0sdGhpcy5ldmVudFByb3BzKSx0aGlzLnJlbmRlckNvbnRlbnQoKSl9fSx7a2V5OiJjaGlsZENvbnRleHQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGlua1NlcnZpY2UsdD10aGlzLnJlZ2lzdGVyUGFnZSxyPXRoaXMudW5yZWdpc3RlclBhZ2Usbj10aGlzLnByb3BzLGE9bi5yZW5kZXJNb2RlLGk9bi5yb3RhdGU7cmV0dXJue2xpbmtTZXJ2aWNlOmUscGRmOnRoaXMuc3RhdGUucGRmLHJlZ2lzdGVyUGFnZTp0LHJlbmRlck1vZGU6YSxyb3RhdGU6aSx1bnJlZ2lzdGVyUGFnZTpyfX19LHtrZXk6ImV2ZW50UHJvcHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuKDAsdy5kZWZhdWx0KSh0aGlzLnByb3BzLChmdW5jdGlvbigpe3JldHVybiBlLnN0YXRlLnBkZn0pKX19XSksdH0oeS5QdXJlQ29tcG9uZW50KTt0LmRlZmF1bHQ9VCxULmRlZmF1bHRQcm9wcz17ZXJyb3I6IkZhaWxlZCB0byBsb2FkIFBERiBmaWxlLiIsbG9hZGluZzoiTG9hZGluZyBQREbigKYiLG5vRGF0YToiTm8gUERGIGZpbGUgc3BlY2lmaWVkLiIsb25QYXNzd29yZDpmdW5jdGlvbihlLHQpe3N3aXRjaCh0KXtjYXNlIEMuZGVmYXVsdC5ORUVEX1BBU1NXT1JEOmUocHJvbXB0KCJFbnRlciB0aGUgcGFzc3dvcmQgdG8gb3BlbiB0aGlzIFBERiBmaWxlLiIpKTticmVhaztjYXNlIEMuZGVmYXVsdC5JTkNPUlJFQ1RfUEFTU1dPUkQ6ZShwcm9tcHQoIkludmFsaWQgcGFzc3dvcmQuIFBsZWFzZSB0cnkgYWdhaW4uIikpfX19LFQucHJvcFR5cGVzPSgwLGMuZGVmYXVsdCkoe2NoaWxkcmVuOmIuZGVmYXVsdC5ub2RlLGNsYXNzTmFtZTpFLmlzQ2xhc3NOYW1lLGVycm9yOmIuZGVmYXVsdC5ub2RlLGZpbGU6UC5pc0ZpbGUsaW5wdXRSZWY6Yi5kZWZhdWx0LmZ1bmMsbG9hZGluZzpiLmRlZmF1bHQubm9kZSxub0RhdGE6Yi5kZWZhdWx0Lm5vZGUsb25JdGVtQ2xpY2s6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkRXJyb3I6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkUHJvZ3Jlc3M6Yi5kZWZhdWx0LmZ1bmMsb25Mb2FkU3VjY2VzczpiLmRlZmF1bHQuZnVuYyxvblBhc3N3b3JkOmIuZGVmYXVsdC5mdW5jLG9uU291cmNlRXJyb3I6Yi5kZWZhdWx0LmZ1bmMsb25Tb3VyY2VTdWNjZXNzOmIuZGVmYXVsdC5mdW5jLHJvdGF0ZTpiLmRlZmF1bHQubnVtYmVyfSwoMCxFLmV2ZW50c1Byb3BzKSgpKX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihudWxsPT1lKXJldHVybnt9O3ZhciByLG4sYT17fSxpPU9iamVjdC5rZXlzKGUpO2ZvcihuPTA7bjxpLmxlbmd0aDtuKyspcj1pW25dLHQuaW5kZXhPZihyKT49MHx8KGFbcl09ZVtyXSk7cmV0dXJuIGF9fSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oZSl7InVzZSBzdHJpY3QiO3ZhciB0PU9iamVjdC5wcm90b3R5cGUscj10Lmhhc093blByb3BlcnR5LG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbD9TeW1ib2w6e30sYT1uLml0ZXJhdG9yfHwiQEBpdGVyYXRvciIsaT1uLmFzeW5jSXRlcmF0b3J8fCJAQGFzeW5jSXRlcmF0b3IiLG89bi50b1N0cmluZ1RhZ3x8IkBAdG9TdHJpbmdUYWciO2Z1bmN0aW9uIHMoZSx0LHIsbil7dmFyIGE9dCYmdC5wcm90b3R5cGUgaW5zdGFuY2VvZiB1P3Q6dSxpPU9iamVjdC5jcmVhdGUoYS5wcm90b3R5cGUpLG89bmV3IFMobnx8W10pO3JldHVybiBpLl9pbnZva2U9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPSJzdXNwZW5kZWRTdGFydCI7cmV0dXJuIGZ1bmN0aW9uKGEsaSl7aWYoImV4ZWN1dGluZyI9PT1uKXRocm93IG5ldyBFcnJvcigiR2VuZXJhdG9yIGlzIGFscmVhZHkgcnVubmluZyIpO2lmKCJjb21wbGV0ZWQiPT09bil7aWYoInRocm93Ij09PWEpdGhyb3cgaTtyZXR1cm4geCgpfWZvcihyLm1ldGhvZD1hLHIuYXJnPWk7Oyl7dmFyIG89ci5kZWxlZ2F0ZTtpZihvKXt2YXIgcz1iKG8scik7aWYocyl7aWYocz09PWMpY29udGludWU7cmV0dXJuIHN9fWlmKCJuZXh0Ij09PXIubWV0aG9kKXIuc2VudD1yLl9zZW50PXIuYXJnO2Vsc2UgaWYoInRocm93Ij09PXIubWV0aG9kKXtpZigic3VzcGVuZGVkU3RhcnQiPT09bil0aHJvdyBuPSJjb21wbGV0ZWQiLHIuYXJnO3IuZGlzcGF0Y2hFeGNlcHRpb24oci5hcmcpfWVsc2UicmV0dXJuIj09PXIubWV0aG9kJiZyLmFicnVwdCgicmV0dXJuIixyLmFyZyk7bj0iZXhlY3V0aW5nIjt2YXIgdT1sKGUsdCxyKTtpZigibm9ybWFsIj09PXUudHlwZSl7aWYobj1yLmRvbmU/ImNvbXBsZXRlZCI6InN1c3BlbmRlZFlpZWxkIix1LmFyZz09PWMpY29udGludWU7cmV0dXJue3ZhbHVlOnUuYXJnLGRvbmU6ci5kb25lfX0idGhyb3ciPT09dS50eXBlJiYobj0iY29tcGxldGVkIixyLm1ldGhvZD0idGhyb3ciLHIuYXJnPXUuYXJnKX19fShlLHIsbyksaX1mdW5jdGlvbiBsKGUsdCxyKXt0cnl7cmV0dXJue3R5cGU6Im5vcm1hbCIsYXJnOmUuY2FsbCh0LHIpfX1jYXRjaChlKXtyZXR1cm57dHlwZToidGhyb3ciLGFyZzplfX19ZS53cmFwPXM7dmFyIGM9e307ZnVuY3Rpb24gdSgpe31mdW5jdGlvbiBmKCl7fWZ1bmN0aW9uIGgoKXt9dmFyIGQ9e307ZFthXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfTt2YXIgcD1PYmplY3QuZ2V0UHJvdG90eXBlT2YsbT1wJiZwKHAoXyhbXSkpKTttJiZtIT09dCYmci5jYWxsKG0sYSkmJihkPW0pO3ZhciBnPWgucHJvdG90eXBlPXUucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZCk7ZnVuY3Rpb24gdihlKXtbIm5leHQiLCJ0aHJvdyIsInJldHVybiJdLmZvckVhY2goKGZ1bmN0aW9uKHQpe2VbdF09ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX2ludm9rZSh0LGUpfX0pKX1mdW5jdGlvbiB5KGUpe3ZhciB0O3RoaXMuX2ludm9rZT1mdW5jdGlvbihuLGEpe2Z1bmN0aW9uIGkoKXtyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQsaSl7IWZ1bmN0aW9uIHQobixhLGksbyl7dmFyIHM9bChlW25dLGUsYSk7aWYoInRocm93IiE9PXMudHlwZSl7dmFyIGM9cy5hcmcsdT1jLnZhbHVlO3JldHVybiB1JiYib2JqZWN0Ij09dHlwZW9mIHUmJnIuY2FsbCh1LCJfX2F3YWl0Iik/UHJvbWlzZS5yZXNvbHZlKHUuX19hd2FpdCkudGhlbigoZnVuY3Rpb24oZSl7dCgibmV4dCIsZSxpLG8pfSksKGZ1bmN0aW9uKGUpe3QoInRocm93IixlLGksbyl9KSk6UHJvbWlzZS5yZXNvbHZlKHUpLnRoZW4oKGZ1bmN0aW9uKGUpe2MudmFsdWU9ZSxpKGMpfSksKGZ1bmN0aW9uKGUpe3JldHVybiB0KCJ0aHJvdyIsZSxpLG8pfSkpfW8ocy5hcmcpfShuLGEsdCxpKX0pKX1yZXR1cm4gdD10P3QudGhlbihpLGkpOmkoKX19ZnVuY3Rpb24gYihlLHQpe3ZhciByPWUuaXRlcmF0b3JbdC5tZXRob2RdO2lmKHZvaWQgMD09PXIpe2lmKHQuZGVsZWdhdGU9bnVsbCwidGhyb3ciPT09dC5tZXRob2Qpe2lmKGUuaXRlcmF0b3IucmV0dXJuJiYodC5tZXRob2Q9InJldHVybiIsdC5hcmc9dm9pZCAwLGIoZSx0KSwidGhyb3ciPT09dC5tZXRob2QpKXJldHVybiBjO3QubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiVGhlIGl0ZXJhdG9yIGRvZXMgbm90IHByb3ZpZGUgYSAndGhyb3cnIG1ldGhvZCIpfXJldHVybiBjfXZhciBuPWwocixlLml0ZXJhdG9yLHQuYXJnKTtpZigidGhyb3ciPT09bi50eXBlKXJldHVybiB0Lm1ldGhvZD0idGhyb3ciLHQuYXJnPW4uYXJnLHQuZGVsZWdhdGU9bnVsbCxjO3ZhciBhPW4uYXJnO3JldHVybiBhP2EuZG9uZT8odFtlLnJlc3VsdE5hbWVdPWEudmFsdWUsdC5uZXh0PWUubmV4dExvYywicmV0dXJuIiE9PXQubWV0aG9kJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksdC5kZWxlZ2F0ZT1udWxsLGMpOmE6KHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bmV3IFR5cGVFcnJvcigiaXRlcmF0b3IgcmVzdWx0IGlzIG5vdCBhbiBvYmplY3QiKSx0LmRlbGVnYXRlPW51bGwsYyl9ZnVuY3Rpb24gdyhlKXt2YXIgdD17dHJ5TG9jOmVbMF19OzEgaW4gZSYmKHQuY2F0Y2hMb2M9ZVsxXSksMiBpbiBlJiYodC5maW5hbGx5TG9jPWVbMl0sdC5hZnRlckxvYz1lWzNdKSx0aGlzLnRyeUVudHJpZXMucHVzaCh0KX1mdW5jdGlvbiBrKGUpe3ZhciB0PWUuY29tcGxldGlvbnx8e307dC50eXBlPSJub3JtYWwiLGRlbGV0ZSB0LmFyZyxlLmNvbXBsZXRpb249dH1mdW5jdGlvbiBTKGUpe3RoaXMudHJ5RW50cmllcz1be3RyeUxvYzoicm9vdCJ9XSxlLmZvckVhY2godyx0aGlzKSx0aGlzLnJlc2V0KCEwKX1mdW5jdGlvbiBfKGUpe2lmKGUpe3ZhciB0PWVbYV07aWYodClyZXR1cm4gdC5jYWxsKGUpO2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBlLm5leHQpcmV0dXJuIGU7aWYoIWlzTmFOKGUubGVuZ3RoKSl7dmFyIG49LTEsaT1mdW5jdGlvbiB0KCl7Zm9yKDsrK248ZS5sZW5ndGg7KWlmKHIuY2FsbChlLG4pKXJldHVybiB0LnZhbHVlPWVbbl0sdC5kb25lPSExLHQ7cmV0dXJuIHQudmFsdWU9dm9pZCAwLHQuZG9uZT0hMCx0fTtyZXR1cm4gaS5uZXh0PWl9fXJldHVybntuZXh0Onh9fWZ1bmN0aW9uIHgoKXtyZXR1cm57dmFsdWU6dm9pZCAwLGRvbmU6ITB9fXJldHVybiBmLnByb3RvdHlwZT1nLmNvbnN0cnVjdG9yPWgsaC5jb25zdHJ1Y3Rvcj1mLGhbb109Zi5kaXNwbGF5TmFtZT0iR2VuZXJhdG9yRnVuY3Rpb24iLGUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Znx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sZS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsaCk6KGUuX19wcm90b19fPWgsbyBpbiBlfHwoZVtvXT0iR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShnKSxlfSxlLmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSx2KHkucHJvdG90eXBlKSx5LnByb3RvdHlwZVtpXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSxlLkFzeW5jSXRlcmF0b3I9eSxlLmFzeW5jPWZ1bmN0aW9uKHQscixuLGEpe3ZhciBpPW5ldyB5KHModCxyLG4sYSkpO3JldHVybiBlLmlzR2VuZXJhdG9yRnVuY3Rpb24ocik/aTppLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6aS5uZXh0KCl9KSl9LHYoZyksZ1tvXT0iR2VuZXJhdG9yIixnW2FdPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LGcudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0sZS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LGUudmFsdWVzPV8sUy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOlMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChrKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmci5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIG4ocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgYT10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7YT49MDstLWEpe3ZhciBpPXRoaXMudHJ5RW50cmllc1thXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gbigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9ci5jYWxsKGksImNhdGNoTG9jIiksbD1yLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiBuKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIG4oaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciBuPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtuPj0wOy0tbil7dmFyIGE9dGhpcy50cnlFbnRyaWVzW25dO2lmKGEudHJ5TG9jPD10aGlzLnByZXYmJnIuY2FsbChhLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxhLmZpbmFsbHlMb2Mpe3ZhciBpPWE7YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxjKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGN9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksayhyKSxjfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO2socil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpfKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxjfX0sZX0oZS5leHBvcnRzKTt0cnl7cmVnZW5lcmF0b3JSdW50aW1lPW59Y2F0Y2goZSl7RnVuY3Rpb24oInIiLCJyZWdlbmVyYXRvclJ1bnRpbWUgPSByIikobil9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTkpO2Z1bmN0aW9uIGEoKXt9ZnVuY3Rpb24gaSgpe31pLnJlc2V0V2FybmluZ0NhY2hlPWEsZS5leHBvcnRzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixhLGksbyl7aWYobyE9PW4pe3ZhciBzPW5ldyBFcnJvcigiQ2FsbGluZyBQcm9wVHlwZXMgdmFsaWRhdG9ycyBkaXJlY3RseSBpcyBub3Qgc3VwcG9ydGVkIGJ5IHRoZSBgcHJvcC10eXBlc2AgcGFja2FnZS4gVXNlIFByb3BUeXBlcy5jaGVja1Byb3BUeXBlcygpIHRvIGNhbGwgdGhlbS4gUmVhZCBtb3JlIGF0IGh0dHA6Ly9mYi5tZS91c2UtY2hlY2stcHJvcC10eXBlcyIpO3Rocm93IHMubmFtZT0iSW52YXJpYW50IFZpb2xhdGlvbiIsc319ZnVuY3Rpb24gdCgpe3JldHVybiBlfWUuaXNSZXF1aXJlZD1lO3ZhciByPXthcnJheTplLGJvb2w6ZSxmdW5jOmUsbnVtYmVyOmUsb2JqZWN0OmUsc3RyaW5nOmUsc3ltYm9sOmUsYW55OmUsYXJyYXlPZjp0LGVsZW1lbnQ6ZSxlbGVtZW50VHlwZTplLGluc3RhbmNlT2Y6dCxub2RlOmUsb2JqZWN0T2Y6dCxvbmVPZjp0LG9uZU9mVHlwZTp0LHNoYXBlOnQsZXhhY3Q6dCxjaGVja1Byb3BUeXBlczppLHJlc2V0V2FybmluZ0NhY2hlOmF9O3JldHVybiByLlByb3BUeXBlcz1yLHJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0iU0VDUkVUX0RPX05PVF9QQVNTX1RISVNfT1JfWU9VX1dJTExfQkVfRklSRUQifSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlNpbXBsZUxpbmtTZXJ2aWNlPXQuUERGTGlua1NlcnZpY2U9dm9pZCAwO3ZhciBuPXIoNjEpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuKGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBpKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHMoZSx0LHIpe3JldHVybiB0JiZvKGUucHJvdG90eXBlLHQpLHImJm8oZSxyKSxlfXZhciBsPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSxyPXQuZXZlbnRCdXMsYT10LmV4dGVybmFsTGlua1RhcmdldCxvPXZvaWQgMD09PWE/bnVsbDphLHM9dC5leHRlcm5hbExpbmtSZWwsbD12b2lkIDA9PT1zP251bGw6cztpKHRoaXMsZSksdGhpcy5ldmVudEJ1cz1yfHwoMCxuLmdldEdsb2JhbEV2ZW50QnVzKSgpLHRoaXMuZXh0ZXJuYWxMaW5rVGFyZ2V0PW8sdGhpcy5leHRlcm5hbExpbmtSZWw9bCx0aGlzLmJhc2VVcmw9bnVsbCx0aGlzLnBkZkRvY3VtZW50PW51bGwsdGhpcy5wZGZWaWV3ZXI9bnVsbCx0aGlzLnBkZkhpc3Rvcnk9bnVsbCx0aGlzLl9wYWdlc1JlZkNhY2hlPW51bGx9cmV0dXJuIHMoZSxbe2tleToic2V0RG9jdW1lbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXTpudWxsO3RoaXMuYmFzZVVybD10LHRoaXMucGRmRG9jdW1lbnQ9ZSx0aGlzLl9wYWdlc1JlZkNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCl9fSx7a2V5OiJzZXRWaWV3ZXIiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMucGRmVmlld2VyPWV9fSx7a2V5OiJzZXRIaXN0b3J5Iix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnBkZkhpc3Rvcnk9ZX19LHtrZXk6Im5hdmlnYXRlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7bmV3IFByb21pc2UoKGZ1bmN0aW9uKHIsbil7InN0cmluZyIhPXR5cGVvZiBlP3Ioe25hbWVkRGVzdDoiIixleHBsaWNpdERlc3Q6ZX0pOnQucGRmRG9jdW1lbnQuZ2V0RGVzdGluYXRpb24oZSkudGhlbigoZnVuY3Rpb24odCl7cih7bmFtZWREZXN0OmUsZXhwbGljaXREZXN0OnR9KX0pKX0pKS50aGVuKChmdW5jdGlvbihyKXtBcnJheS5pc0FycmF5KHIuZXhwbGljaXREZXN0KT9mdW5jdGlvbiByKG4pe3ZhciBhLGk9bi5uYW1lZERlc3Qsbz1uLmV4cGxpY2l0RGVzdCxzPW9bMF07aWYocyBpbnN0YW5jZW9mIE9iamVjdCl7aWYobnVsbD09PShhPXQuX2NhY2hlZFBhZ2VOdW1iZXIocykpKXJldHVybiB2b2lkIHQucGRmRG9jdW1lbnQuZ2V0UGFnZUluZGV4KHMpLnRoZW4oKGZ1bmN0aW9uKGUpe3QuY2FjaGVQYWdlUmVmKGUrMSxzKSxyKHtuYW1lZERlc3Q6aSxleHBsaWNpdERlc3Q6b30pfSkpLmNhdGNoKChmdW5jdGlvbigpe2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChzLCciIGlzIG5vdCAnKSsnYSB2YWxpZCBwYWdlIHJlZmVyZW5jZSwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpfSkpfWVsc2V7aWYoIU51bWJlci5pc0ludGVnZXIocykpcmV0dXJuIHZvaWQgY29uc29sZS5lcnJvcignUERGTGlua1NlcnZpY2UubmF2aWdhdGVUbzogIicuY29uY2F0KHMsJyIgaXMgbm90ICcpKydhIHZhbGlkIGRlc3RpbmF0aW9uIHJlZmVyZW5jZSwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpO2E9cysxfSFhfHxhPDF8fGE+dC5wYWdlc0NvdW50P2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChhLCciIGlzIG5vdCAnKSsnYSB2YWxpZCBwYWdlIG51bWJlciwgZm9yIGRlc3Q9IicuY29uY2F0KGUsJyIuJykpOih0LnBkZkhpc3RvcnkmJih0LnBkZkhpc3RvcnkucHVzaEN1cnJlbnRQb3NpdGlvbigpLHQucGRmSGlzdG9yeS5wdXNoKHtuYW1lZERlc3Q6aSxleHBsaWNpdERlc3Q6byxwYWdlTnVtYmVyOmF9KSksdC5wZGZWaWV3ZXIuc2Nyb2xsUGFnZUludG9WaWV3KHtwYWdlTnVtYmVyOmEsZGVzdEFycmF5Om99KSl9KHIpOmNvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLm5hdmlnYXRlVG86ICInLmNvbmNhdChyLmV4cGxpY2l0RGVzdCwnIiBpcycpKycgbm90IGEgdmFsaWQgZGVzdGluYXRpb24gYXJyYXksIGZvciBkZXN0PSInLmNvbmNhdChlLCciLicpKX0pKX19LHtrZXk6ImdldERlc3RpbmF0aW9uSGFzaCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoInN0cmluZyI9PXR5cGVvZiBlKXJldHVybiB0aGlzLmdldEFuY2hvclVybCgiIyIrZXNjYXBlKGUpKTtpZihBcnJheS5pc0FycmF5KGUpKXt2YXIgdD1KU09OLnN0cmluZ2lmeShlKTtyZXR1cm4gdGhpcy5nZXRBbmNob3JVcmwoIiMiK2VzY2FwZSh0KSl9cmV0dXJuIHRoaXMuZ2V0QW5jaG9yVXJsKCIiKX19LHtrZXk6ImdldEFuY2hvclVybCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuKHRoaXMuYmFzZVVybHx8IiIpK2V9fSx7a2V5OiJzZXRIYXNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdCxyO2lmKGUuaW5jbHVkZXMoIj0iKSl7dmFyIGk9KDAsbi5wYXJzZVF1ZXJ5U3RyaW5nKShlKTtpZigic2VhcmNoImluIGkmJnRoaXMuZXZlbnRCdXMuZGlzcGF0Y2goImZpbmRmcm9tdXJsaGFzaCIse3NvdXJjZTp0aGlzLHF1ZXJ5Omkuc2VhcmNoLnJlcGxhY2UoLyIvZywiIikscGhyYXNlU2VhcmNoOiJ0cnVlIj09PWkucGhyYXNlfSksIm5hbWVkZGVzdCJpbiBpKXJldHVybiB2b2lkIHRoaXMubmF2aWdhdGVUbyhpLm5hbWVkZGVzdCk7aWYoInBhZ2UiaW4gaSYmKHQ9MHxpLnBhZ2V8fDEpLCJ6b29tImluIGkpe3ZhciBvPWkuem9vbS5zcGxpdCgiLCIpLHM9b1swXSxsPXBhcnNlRmxvYXQocyk7cy5pbmNsdWRlcygiRml0Iik/IkZpdCI9PT1zfHwiRml0QiI9PT1zP3I9W251bGwse25hbWU6c31dOiJGaXRIIj09PXN8fCJGaXRCSCI9PT1zfHwiRml0ViI9PT1zfHwiRml0QlYiPT09cz9yPVtudWxsLHtuYW1lOnN9LG8ubGVuZ3RoPjE/MHxvWzFdOm51bGxdOiJGaXRSIj09PXM/NSE9PW8ubGVuZ3RoP2NvbnNvbGUuZXJyb3IoJ1BERkxpbmtTZXJ2aWNlLnNldEhhc2g6IE5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIkZpdFIiLicpOnI9W251bGwse25hbWU6c30sMHxvWzFdLDB8b1syXSwwfG9bM10sMHxvWzRdXTpjb25zb2xlLmVycm9yKCdQREZMaW5rU2VydmljZS5zZXRIYXNoOiAiJy5jb25jYXQocywnIiBpcyBub3QgJykrImEgdmFsaWQgem9vbSB2YWx1ZS4iKTpyPVtudWxsLHtuYW1lOiJYWVoifSxvLmxlbmd0aD4xPzB8b1sxXTpudWxsLG8ubGVuZ3RoPjI/MHxvWzJdOm51bGwsbD9sLzEwMDpzXX1yP3RoaXMucGRmVmlld2VyLnNjcm9sbFBhZ2VJbnRvVmlldyh7cGFnZU51bWJlcjp0fHx0aGlzLnBhZ2UsZGVzdEFycmF5OnIsYWxsb3dOZWdhdGl2ZU9mZnNldDohMH0pOnQmJih0aGlzLnBhZ2U9dCksInBhZ2Vtb2RlImluIGkmJnRoaXMuZXZlbnRCdXMuZGlzcGF0Y2goInBhZ2Vtb2RlIix7c291cmNlOnRoaXMsbW9kZTppLnBhZ2Vtb2RlfSl9ZWxzZXtyPXVuZXNjYXBlKGUpO3RyeXtyPUpTT04ucGFyc2UociksQXJyYXkuaXNBcnJheShyKXx8KHI9ci50b1N0cmluZygpKX1jYXRjaChlKXt9aWYoInN0cmluZyI9PXR5cGVvZiByfHxmdW5jdGlvbihlKXtpZighQXJyYXkuaXNBcnJheShlKSlyZXR1cm4hMTt2YXIgdD1lLmxlbmd0aCxyPSEwO2lmKHQ8MilyZXR1cm4hMTt2YXIgbj1lWzBdO2lmKCEoIm9iamVjdCI9PT1hKG4pJiZOdW1iZXIuaXNJbnRlZ2VyKG4ubnVtKSYmTnVtYmVyLmlzSW50ZWdlcihuLmdlbil8fE51bWJlci5pc0ludGVnZXIobikmJm4+PTApKXJldHVybiExO3ZhciBpPWVbMV07aWYoIm9iamVjdCIhPT1hKGkpfHwic3RyaW5nIiE9dHlwZW9mIGkubmFtZSlyZXR1cm4hMTtzd2l0Y2goaS5uYW1lKXtjYXNlIlhZWiI6aWYoNSE9PXQpcmV0dXJuITE7YnJlYWs7Y2FzZSJGaXQiOmNhc2UiRml0QiI6cmV0dXJuIDI9PT10O2Nhc2UiRml0SCI6Y2FzZSJGaXRCSCI6Y2FzZSJGaXRWIjpjYXNlIkZpdEJWIjppZigzIT09dClyZXR1cm4hMTticmVhaztjYXNlIkZpdFIiOmlmKDYhPT10KXJldHVybiExO3I9ITE7YnJlYWs7ZGVmYXVsdDpyZXR1cm4hMX1mb3IodmFyIG89MjtvPHQ7bysrKXt2YXIgcz1lW29dO2lmKCEoIm51bWJlciI9PXR5cGVvZiBzfHxyJiZudWxsPT09cykpcmV0dXJuITF9cmV0dXJuITB9KHIpKXJldHVybiB2b2lkIHRoaXMubmF2aWdhdGVUbyhyKTtjb25zb2xlLmVycm9yKCdQREZMaW5rU2VydmljZS5zZXRIYXNoOiAiJy5jb25jYXQodW5lc2NhcGUoZSksJyIgaXMgbm90ICcpKyJhIHZhbGlkIGRlc3RpbmF0aW9uLiIpfX19LHtrZXk6ImV4ZWN1dGVOYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiR29CYWNrIjp0aGlzLnBkZkhpc3RvcnkmJnRoaXMucGRmSGlzdG9yeS5iYWNrKCk7YnJlYWs7Y2FzZSJHb0ZvcndhcmQiOnRoaXMucGRmSGlzdG9yeSYmdGhpcy5wZGZIaXN0b3J5LmZvcndhcmQoKTticmVhaztjYXNlIk5leHRQYWdlIjp0aGlzLnBhZ2U8dGhpcy5wYWdlc0NvdW50JiZ0aGlzLnBhZ2UrKzticmVhaztjYXNlIlByZXZQYWdlIjp0aGlzLnBhZ2U+MSYmdGhpcy5wYWdlLS07YnJlYWs7Y2FzZSJMYXN0UGFnZSI6dGhpcy5wYWdlPXRoaXMucGFnZXNDb3VudDticmVhaztjYXNlIkZpcnN0UGFnZSI6dGhpcy5wYWdlPTF9dGhpcy5ldmVudEJ1cy5kaXNwYXRjaCgibmFtZWRhY3Rpb24iLHtzb3VyY2U6dGhpcyxhY3Rpb246ZX0pfX0se2tleToiY2FjaGVQYWdlUmVmIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKHQpe3ZhciByPXQubnVtKyIgIit0LmdlbisiIFIiO3RoaXMuX3BhZ2VzUmVmQ2FjaGVbcl09ZX19fSx7a2V5OiJfY2FjaGVkUGFnZU51bWJlciIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5udW0rIiAiK2UuZ2VuKyIgUiI7cmV0dXJuIHRoaXMuX3BhZ2VzUmVmQ2FjaGUmJnRoaXMuX3BhZ2VzUmVmQ2FjaGVbdF18fG51bGx9fSx7a2V5OiJpc1BhZ2VWaXNpYmxlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZGZWaWV3ZXIuaXNQYWdlVmlzaWJsZShlKX19LHtrZXk6InBhZ2VzQ291bnQiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50P3RoaXMucGRmRG9jdW1lbnQubnVtUGFnZXM6MH19LHtrZXk6InBhZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBkZlZpZXdlci5jdXJyZW50UGFnZU51bWJlcn0sc2V0OmZ1bmN0aW9uKGUpe3RoaXMucGRmVmlld2VyLmN1cnJlbnRQYWdlTnVtYmVyPWV9fSx7a2V5OiJyb3RhdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGRmVmlld2VyLnBhZ2VzUm90YXRpb259LHNldDpmdW5jdGlvbihlKXt0aGlzLnBkZlZpZXdlci5wYWdlc1JvdGF0aW9uPWV9fV0pLGV9KCk7dC5QREZMaW5rU2VydmljZT1sO3ZhciBjPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2kodGhpcyxlKSx0aGlzLmV4dGVybmFsTGlua1RhcmdldD1udWxsLHRoaXMuZXh0ZXJuYWxMaW5rUmVsPW51bGx9cmV0dXJuIHMoZSxbe2tleToibmF2aWdhdGVUbyIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToiZ2V0RGVzdGluYXRpb25IYXNoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4iIyJ9fSx7a2V5OiJnZXRBbmNob3JVcmwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiIjIn19LHtrZXk6InNldEhhc2giLHZhbHVlOmZ1bmN0aW9uKGUpe319LHtrZXk6ImV4ZWN1dGVOYW1lZEFjdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7fX0se2tleToiY2FjaGVQYWdlUmVmIix2YWx1ZTpmdW5jdGlvbihlLHQpe319LHtrZXk6ImlzUGFnZVZpc2libGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiEwfX0se2tleToicGFnZXNDb3VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDB9fSx7a2V5OiJwYWdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sc2V0OmZ1bmN0aW9uKGUpe319LHtrZXk6InJvdGF0aW9uIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMH0sc2V0OmZ1bmN0aW9uKGUpe319XSksZX0oKTt0LlNpbXBsZUxpbmtTZXJ2aWNlPWN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNWYWxpZFJvdGF0aW9uPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlJTkwPT0wfSx0LmlzVmFsaWRTY3JvbGxNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZPYmplY3QudmFsdWVzKGYpLmluY2x1ZGVzKGUpJiZlIT09Zi5VTktOT1dOfSx0LmlzVmFsaWRTcHJlYWRNb2RlPWZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZPYmplY3QudmFsdWVzKGgpLmluY2x1ZGVzKGUpJiZlIT09aC5VTktOT1dOfSx0LmlzUG9ydHJhaXRPcmllbnRhdGlvbj1mdW5jdGlvbihlKXtyZXR1cm4gZS53aWR0aDw9ZS5oZWlnaHR9LHQuZ2V0R2xvYmFsRXZlbnRCdXM9ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXSYmYXJndW1lbnRzWzBdO0F8fChBPW5ldyB4KHtkaXNwYXRjaFRvRE9NOmV9KSk7cmV0dXJuIEF9LHQuZ2V0UERGRmlsZU5hbWVGcm9tVVJMPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdP2FyZ3VtZW50c1sxXToiZG9jdW1lbnQucGRmIjtpZigic3RyaW5nIiE9dHlwZW9mIGUpcmV0dXJuIHQ7aWYoayhlKSlyZXR1cm4gY29uc29sZS53YXJuKCdnZXRQREZGaWxlTmFtZUZyb21VUkw6IGlnbm9yaW5nICJkYXRhOiIgVVJMIGZvciBwZXJmb3JtYW5jZSByZWFzb25zLicpLHQ7dmFyIHI9L14oPzooPzpbXjpdKzopP1wvXC9bXlwvXSspPyhbXj8jXSopKFw/W14jXSopPygjLiopPyQvLG49L1teXC8/Iz1dK1wucGRmXGIoPyEuKlwucGRmXGIpL2ksYT1yLmV4ZWMoZSksaT1uLmV4ZWMoYVsxXSl8fG4uZXhlYyhhWzJdKXx8bi5leGVjKGFbM10pO2lmKGkmJihpPWlbMF0pLmluY2x1ZGVzKCIlIikpdHJ5e2k9bi5leGVjKGRlY29kZVVSSUNvbXBvbmVudChpKSlbMF19Y2F0Y2goZSl7fXJldHVybiBpfHx0fSx0Lm5vQ29udGV4dE1lbnVIYW5kbGVyPWZ1bmN0aW9uKGUpe2UucHJldmVudERlZmF1bHQoKX0sdC5wYXJzZVF1ZXJ5U3RyaW5nPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLnNwbGl0KCImIikscj1PYmplY3QuY3JlYXRlKG51bGwpLG49MCxhPXQubGVuZ3RoO248YTsrK24pe3ZhciBpPXRbbl0uc3BsaXQoIj0iKSxvPWlbMF0udG9Mb3dlckNhc2UoKSxzPWkubGVuZ3RoPjE/aVsxXTpudWxsO3JbZGVjb2RlVVJJQ29tcG9uZW50KG8pXT1kZWNvZGVVUklDb21wb25lbnQocyl9cmV0dXJuIHJ9LHQuYmFja3RyYWNrQmVmb3JlQWxsVmlzaWJsZUVsZW1lbnRzPXcsdC5nZXRWaXNpYmxlRWxlbWVudHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdLG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXSxhPWUuc2Nyb2xsVG9wLGk9YStlLmNsaWVudEhlaWdodCxvPWUuc2Nyb2xsTGVmdCxzPW8rZS5jbGllbnRXaWR0aDtmdW5jdGlvbiBsKGUpe3ZhciB0PWUuZGl2O3JldHVybiB0Lm9mZnNldFRvcCt0LmNsaWVudFRvcCt0LmNsaWVudEhlaWdodD5hfWZ1bmN0aW9uIGMoZSl7dmFyIHQ9ZS5kaXY7cmV0dXJuIHQub2Zmc2V0TGVmdCt0LmNsaWVudExlZnQrdC5jbGllbnRXaWR0aD5vfXZhciB1PVtdLGY9dC5sZW5ndGgsaD0wPT09Zj8wOmIodCxuP2M6bCk7aD4wJiZoPGYmJiFuJiYoaD13KGgsdCxhKSk7Zm9yKHZhciBkPW4/czotMSxwPWg7cDxmO3ArKyl7dmFyIG09dFtwXSxnPW0uZGl2LHY9Zy5vZmZzZXRMZWZ0K2cuY2xpZW50TGVmdCx5PWcub2Zmc2V0VG9wK2cuY2xpZW50VG9wLGs9Zy5jbGllbnRXaWR0aCxTPWcuY2xpZW50SGVpZ2h0LF89ditrLHg9eStTO2lmKC0xPT09ZCl4Pj1pJiYoZD14KTtlbHNlIGlmKChuP3Y6eSk+ZClicmVhaztpZighKHg8PWF8fHk+PWl8fF88PW98fHY+PXMpKXt2YXIgQT1NYXRoLm1heCgwLGEteSkrTWF0aC5tYXgoMCx4LWkpLEM9TWF0aC5tYXgoMCxvLXYpK01hdGgubWF4KDAsXy1zKSxQPShTLUEpKihrLUMpKjEwMC9TL2t8MDt1LnB1c2goe2lkOm0uaWQseDp2LHk6eSx2aWV3Om0scGVyY2VudDpQfSl9fXZhciBFPXVbMF0sVD11W3UubGVuZ3RoLTFdO3ImJnUuc29ydCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLnBlcmNlbnQtdC5wZXJjZW50O3JldHVybiBNYXRoLmFicyhyKT4uMDAxPy1yOmUuaWQtdC5pZH0pKTtyZXR1cm57Zmlyc3Q6RSxsYXN0OlQsdmlld3M6dX19LHQucm91bmRUb0RpdmlkZT1mdW5jdGlvbihlLHQpe3ZhciByPWUldDtyZXR1cm4gMD09PXI/ZTpNYXRoLnJvdW5kKGUtcit0KX0sdC5nZXRQYWdlU2l6ZUluY2hlcz1mdW5jdGlvbihlKXt2YXIgdD1lLnZpZXcscj1lLnVzZXJVbml0LG49ZS5yb3RhdGUsYT0oaD10LGQ9NCxmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShoKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oaCxkKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCkpLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9YVszXSxjPW4lMTgwIT0wLHU9KHMtaSkvNzIqcixmPShsLW8pLzcyKnI7dmFyIGgsZDtyZXR1cm57d2lkdGg6Yz9mOnUsaGVpZ2h0OmM/dTpmfX0sdC5hcHByb3hpbWF0ZUZyYWN0aW9uPWZ1bmN0aW9uKGUpe2lmKE1hdGguZmxvb3IoZSk9PT1lKXJldHVybltlLDFdO3ZhciB0PTEvZTtpZih0PjgpcmV0dXJuWzEsOF07aWYoTWF0aC5mbG9vcih0KT09PXQpcmV0dXJuWzEsdF07dmFyIHIsbj1lPjE/dDplLGE9MCxpPTEsbz0xLHM9MTtmb3IoOzspe3ZhciBsPWErbyxjPWkrcztpZihjPjgpYnJlYWs7bjw9bC9jPyhvPWwscz1jKTooYT1sLGk9Yyl9cj1uLWEvaTxvL3Mtbj9uPT09ZT9bYSxpXTpbaSxhXTpuPT09ZT9bbyxzXTpbcyxvXTtyZXR1cm4gcn0sdC5nZXRPdXRwdXRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD13aW5kb3cuZGV2aWNlUGl4ZWxSYXRpb3x8MSxyPWUud2Via2l0QmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5tb3pCYWNraW5nU3RvcmVQaXhlbFJhdGlvfHxlLm1zQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5vQmFja2luZ1N0b3JlUGl4ZWxSYXRpb3x8ZS5iYWNraW5nU3RvcmVQaXhlbFJhdGlvfHwxLG49dC9yO3JldHVybntzeDpuLHN5Om4sc2NhbGVkOjEhPT1ufX0sdC5zY3JvbGxJbnRvVmlldz1mdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdJiZhcmd1bWVudHNbMl0sbj1lLm9mZnNldFBhcmVudDtpZighbilyZXR1cm4gdm9pZCBjb25zb2xlLmVycm9yKCJvZmZzZXRQYXJlbnQgaXMgbm90IHNldCAtLSBjYW5ub3Qgc2Nyb2xsIik7dmFyIGE9ZS5vZmZzZXRUb3ArZS5jbGllbnRUb3AsaT1lLm9mZnNldExlZnQrZS5jbGllbnRMZWZ0O2Zvcig7bi5jbGllbnRIZWlnaHQ9PT1uLnNjcm9sbEhlaWdodCYmbi5jbGllbnRXaWR0aD09PW4uc2Nyb2xsV2lkdGh8fHImJiJoaWRkZW4iPT09Z2V0Q29tcHV0ZWRTdHlsZShuKS5vdmVyZmxvdzspaWYobi5kYXRhc2V0Ll9zY2FsZVkmJihhLz1uLmRhdGFzZXQuX3NjYWxlWSxpLz1uLmRhdGFzZXQuX3NjYWxlWCksYSs9bi5vZmZzZXRUb3AsaSs9bi5vZmZzZXRMZWZ0LCEobj1uLm9mZnNldFBhcmVudCkpcmV0dXJuO3QmJih2b2lkIDAhPT10LnRvcCYmKGErPXQudG9wKSx2b2lkIDAhPT10LmxlZnQmJihpKz10LmxlZnQsbi5zY3JvbGxMZWZ0PWkpKTtuLnNjcm9sbFRvcD1hfSx0LndhdGNoU2Nyb2xsPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZnVuY3Rpb24ocil7YXx8KGE9d2luZG93LnJlcXVlc3RBbmltYXRpb25GcmFtZSgoZnVuY3Rpb24oKXthPW51bGw7dmFyIHI9ZS5zY3JvbGxMZWZ0LGk9bi5sYXN0WDtyIT09aSYmKG4ucmlnaHQ9cj5pKSxuLmxhc3RYPXI7dmFyIG89ZS5zY3JvbGxUb3Ascz1uLmxhc3RZO28hPT1zJiYobi5kb3duPW8+cyksbi5sYXN0WT1vLHQobil9KSkpfSxuPXtyaWdodDohMCxkb3duOiEwLGxhc3RYOmUuc2Nyb2xsTGVmdCxsYXN0WTplLnNjcm9sbFRvcCxfZXZlbnRIYW5kbGVyOnJ9LGE9bnVsbDtyZXR1cm4gZS5hZGRFdmVudExpc3RlbmVyKCJzY3JvbGwiLHIsITApLG59LHQuYmluYXJ5U2VhcmNoRmlyc3RJdGVtPWIsdC5ub3JtYWxpemVXaGVlbEV2ZW50RGVsdGE9ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5zcXJ0KGUuZGVsdGFYKmUuZGVsdGFYK2UuZGVsdGFZKmUuZGVsdGFZKSxyPU1hdGguYXRhbjIoZS5kZWx0YVksZS5kZWx0YVgpOy0uMjUqTWF0aC5QSTxyJiZyPC43NSpNYXRoLlBJJiYodD0tdCk7MD09PWUuZGVsdGFNb2RlP3QvPTkwMDoxPT09ZS5kZWx0YU1vZGUmJih0Lz0zMCk7cmV0dXJuIHR9LHQud2FpdE9uRXZlbnRPclRpbWVvdXQ9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50YXJnZXQscj1lLm5hbWUsbj1lLmRlbGF5LGE9dm9pZCAwPT09bj8wOm47cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihlLG4pe2lmKCJvYmplY3QiIT09bCh0KXx8IXJ8fCJzdHJpbmciIT10eXBlb2Ygcnx8IShOdW1iZXIuaXNJbnRlZ2VyKGEpJiZhPj0wKSl0aHJvdyBuZXcgRXJyb3IoIndhaXRPbkV2ZW50T3JUaW1lb3V0IC0gaW52YWxpZCBwYXJhbWV0ZXJzLiIpO2Z1bmN0aW9uIGkobil7dCBpbnN0YW5jZW9mIHg/dC5vZmYocixvKTp0LnJlbW92ZUV2ZW50TGlzdGVuZXIocixvKSxjJiZjbGVhclRpbWVvdXQoYyksZShuKX12YXIgbz1pLmJpbmQobnVsbCxTLkVWRU5UKTt0IGluc3RhbmNlb2YgeD90Lm9uKHIsbyk6dC5hZGRFdmVudExpc3RlbmVyKHIsbyk7dmFyIHM9aS5iaW5kKG51bGwsUy5USU1FT1VUKSxjPXNldFRpbWVvdXQocyxhKX0pKX0sdC5tb3ZlVG9FbmRPZkFycmF5PWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPVtdLG49ZS5sZW5ndGgsYT0wLGk9MDtpPG47KytpKXQoZVtpXSk/ci5wdXNoKGVbaV0pOihlW2FdPWVbaV0sKythKTtmb3IodmFyIG89MDthPG47KytvLCsrYSllW2FdPXJbb119LHQuV2FpdE9uVHlwZT10LmFuaW1hdGlvblN0YXJ0ZWQ9dC5Qcm9ncmVzc0Jhcj10LkV2ZW50QnVzPXQuTnVsbEwxMG49dC5TcHJlYWRNb2RlPXQuU2Nyb2xsTW9kZT10LlRleHRMYXllck1vZGU9dC5SZW5kZXJlclR5cGU9dC5QcmVzZW50YXRpb25Nb2RlU3RhdGU9dC5WRVJUSUNBTF9QQURESU5HPXQuU0NST0xMQkFSX1BBRERJTkc9dC5NQVhfQVVUT19TQ0FMRT10LlVOS05PV05fU0NBTEU9dC5NQVhfU0NBTEU9dC5NSU5fU0NBTEU9dC5ERUZBVUxUX1NDQUxFPXQuREVGQVVMVF9TQ0FMRV9WQUxVRT10LkNTU19VTklUUz12b2lkIDA7dmFyIG4sYT0obj1yKDE0KSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59O2Z1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksciYmbyhlLHIpLGV9ZnVuY3Rpb24gbChlKXtyZXR1cm4obD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIGMoZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiB1KGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe2MoaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe2MoaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX10LkNTU19VTklUUz05Ni83Mjt0LkRFRkFVTFRfU0NBTEVfVkFMVUU9ImF1dG8iO3QuREVGQVVMVF9TQ0FMRT0xO3QuTUlOX1NDQUxFPS4xO3QuTUFYX1NDQUxFPTEwO3QuVU5LTk9XTl9TQ0FMRT0wO3QuTUFYX0FVVE9fU0NBTEU9MS4yNTt0LlNDUk9MTEJBUl9QQURESU5HPTQwO3QuVkVSVElDQUxfUEFERElORz01O3QuUHJlc2VudGF0aW9uTW9kZVN0YXRlPXtVTktOT1dOOjAsTk9STUFMOjEsQ0hBTkdJTkc6MixGVUxMU0NSRUVOOjN9O3QuUmVuZGVyZXJUeXBlPXtDQU5WQVM6ImNhbnZhcyIsU1ZHOiJzdmcifTt0LlRleHRMYXllck1vZGU9e0RJU0FCTEU6MCxFTkFCTEU6MSxFTkFCTEVfRU5IQU5DRToyfTt2YXIgZj17VU5LTk9XTjotMSxWRVJUSUNBTDowLEhPUklaT05UQUw6MSxXUkFQUEVEOjJ9O3QuU2Nyb2xsTW9kZT1mO3ZhciBoPXtVTktOT1dOOi0xLE5PTkU6MCxPREQ6MSxFVkVOOjJ9O2Z1bmN0aW9uIGQoZSx0KXtyZXR1cm4gdD9lLnJlcGxhY2UoL1x7XHtccyooXHcrKVxzKlx9XH0vZywoZnVuY3Rpb24oZSxyKXtyZXR1cm4gciBpbiB0P3Rbcl06Int7IityKyJ9fSJ9KSk6ZX10LlNwcmVhZE1vZGU9aDt2YXIgcCxtLGcsdix5PXtnZXRMYW5ndWFnZToodj11KGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGEuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsImVuLXVzIik7Y2FzZSAxOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oKXtyZXR1cm4gdi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSxnZXREaXJlY3Rpb246KGc9dShhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLCJsdHIiKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbigpe3JldHVybiBnLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGdldDoobT11KGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQscixuKXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiBlLmFicnVwdCgicmV0dXJuIixkKG4scikpO2Nhc2UgMTpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gbS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KSx0cmFuc2xhdGU6KHA9dShhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIHAuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9O2Z1bmN0aW9uIGIoZSx0KXt2YXIgcj0wLG49ZS5sZW5ndGgtMTtpZigwPT09ZS5sZW5ndGh8fCF0KGVbbl0pKXJldHVybiBlLmxlbmd0aDtpZih0KGVbcl0pKXJldHVybiByO2Zvcig7cjxuOyl7dmFyIGE9cituPj4xO3QoZVthXSk/bj1hOnI9YSsxfXJldHVybiByfWZ1bmN0aW9uIHcoZSx0LHIpe2lmKGU8MilyZXR1cm4gZTt2YXIgbj10W2VdLmRpdixhPW4ub2Zmc2V0VG9wK24uY2xpZW50VG9wO2E+PXImJihhPShuPXRbZS0xXS5kaXYpLm9mZnNldFRvcCtuLmNsaWVudFRvcCk7Zm9yKHZhciBpPWUtMjtpPj0wJiYhKChuPXRbaV0uZGl2KS5vZmZzZXRUb3Arbi5jbGllbnRUb3Arbi5jbGllbnRIZWlnaHQ8PWEpOy0taSllPWk7cmV0dXJuIGV9ZnVuY3Rpb24gayhlKXtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8ciYmIiI9PT1lW3RdLnRyaW0oKTspdCsrO3JldHVybiJkYXRhOiI9PT1lLnN1YnN0cmluZyh0LHQrNSkudG9Mb3dlckNhc2UoKX10Lk51bGxMMTBuPXk7dmFyIFM9e0VWRU5UOiJldmVudCIsVElNRU9VVDoidGltZW91dCJ9O3QuV2FpdE9uVHlwZT1TO3ZhciBfPW5ldyBQcm9taXNlKChmdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdz93aW5kb3cucmVxdWVzdEFuaW1hdGlvbkZyYW1lKGUpOnNldFRpbWVvdXQoZSwyMCl9KSk7dC5hbmltYXRpb25TdGFydGVkPV87dmFyIHg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9dC5kaXNwYXRjaFRvRE9NLG49dm9pZCAwIT09ciYmcjtpKHRoaXMsZSksdGhpcy5fbGlzdGVuZXJzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fZGlzcGF0Y2hUb0RPTT0hMD09PW59cmV0dXJuIHMoZSxbe2tleToib24iLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5fbGlzdGVuZXJzW2VdO3J8fChyPVtdLHRoaXMuX2xpc3RlbmVyc1tlXT1yKSxyLnB1c2godCl9fSx7a2V5OiJvZmYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbj10aGlzLl9saXN0ZW5lcnNbZV07IW58fChyPW4uaW5kZXhPZih0KSk8MHx8bi5zcGxpY2UociwxKX19LHtrZXk6ImRpc3BhdGNoIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9saXN0ZW5lcnNbZV07aWYodCYmMCE9PXQubGVuZ3RoKXt2YXIgcj1BcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChhcmd1bWVudHMsMSk7dC5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbihlKXtlLmFwcGx5KG51bGwscil9KSksdGhpcy5fZGlzcGF0Y2hUb0RPTSYmdGhpcy5fZGlzcGF0Y2hET01FdmVudChlLHIpfWVsc2UgaWYodGhpcy5fZGlzcGF0Y2hUb0RPTSl7dmFyIG49QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoYXJndW1lbnRzLDEpO3RoaXMuX2Rpc3BhdGNoRE9NRXZlbnQoZSxuKX19fSx7a2V5OiJfZGlzcGF0Y2hET01FdmVudCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOm51bGwscj1PYmplY3QuY3JlYXRlKG51bGwpO2lmKHQmJnQubGVuZ3RoPjApe3ZhciBuPXRbMF07Zm9yKHZhciBhIGluIG4pe3ZhciBpPW5bYV07aWYoInNvdXJjZSIhPT1hKXJbYV09aTtlbHNlIGlmKGk9PT13aW5kb3d8fGk9PT1kb2N1bWVudClyZXR1cm59fXZhciBvPWRvY3VtZW50LmNyZWF0ZUV2ZW50KCJDdXN0b21FdmVudCIpO28uaW5pdEN1c3RvbUV2ZW50KGUsITAsITAsciksZG9jdW1lbnQuZGlzcGF0Y2hFdmVudChvKX19XSksZX0oKTt0LkV2ZW50QnVzPXg7dmFyIEE9bnVsbDt2YXIgQz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5oZWlnaHQsYT1yLndpZHRoLG89ci51bml0cztpKHRoaXMsZSksdGhpcy52aXNpYmxlPSEwLHRoaXMuZGl2PWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCsiIC5wcm9ncmVzcyIpLHRoaXMuYmFyPXRoaXMuZGl2LnBhcmVudE5vZGUsdGhpcy5oZWlnaHQ9bnx8MTAwLHRoaXMud2lkdGg9YXx8MTAwLHRoaXMudW5pdHM9b3x8IiUiLHRoaXMuZGl2LnN0eWxlLmhlaWdodD10aGlzLmhlaWdodCt0aGlzLnVuaXRzLHRoaXMucGVyY2VudD0wfXJldHVybiBzKGUsW3trZXk6Il91cGRhdGVCYXIiLHZhbHVlOmZ1bmN0aW9uKCl7aWYodGhpcy5faW5kZXRlcm1pbmF0ZSlyZXR1cm4gdGhpcy5kaXYuY2xhc3NMaXN0LmFkZCgiaW5kZXRlcm1pbmF0ZSIpLHZvaWQodGhpcy5kaXYuc3R5bGUud2lkdGg9dGhpcy53aWR0aCt0aGlzLnVuaXRzKTt0aGlzLmRpdi5jbGFzc0xpc3QucmVtb3ZlKCJpbmRldGVybWluYXRlIik7dmFyIGU9dGhpcy53aWR0aCp0aGlzLl9wZXJjZW50LzEwMDt0aGlzLmRpdi5zdHlsZS53aWR0aD1lK3RoaXMudW5pdHN9fSx7a2V5OiJzZXRXaWR0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoZSl7dmFyIHQ9ZS5wYXJlbnROb2RlLm9mZnNldFdpZHRoLWUub2Zmc2V0V2lkdGg7dD4wJiZ0aGlzLmJhci5zZXRBdHRyaWJ1dGUoInN0eWxlIiwid2lkdGg6IGNhbGMoMTAwJSAtICIrdCsicHgpOyIpfX19LHtrZXk6ImhpZGUiLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy52aXNpYmxlJiYodGhpcy52aXNpYmxlPSExLHRoaXMuYmFyLmNsYXNzTGlzdC5hZGQoImhpZGRlbiIpLGRvY3VtZW50LmJvZHkuY2xhc3NMaXN0LnJlbW92ZSgibG9hZGluZ0luUHJvZ3Jlc3MiKSl9fSx7a2V5OiJzaG93Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMudmlzaWJsZXx8KHRoaXMudmlzaWJsZT0hMCxkb2N1bWVudC5ib2R5LmNsYXNzTGlzdC5hZGQoImxvYWRpbmdJblByb2dyZXNzIiksdGhpcy5iYXIuY2xhc3NMaXN0LnJlbW92ZSgiaGlkZGVuIikpfX0se2tleToicGVyY2VudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3BlcmNlbnR9LHNldDpmdW5jdGlvbihlKXt2YXIgdCxyLG47dGhpcy5faW5kZXRlcm1pbmF0ZT1pc05hTihlKSx0aGlzLl9wZXJjZW50PSh0PWUscj0wLG49MTAwLE1hdGgubWluKE1hdGgubWF4KHQsciksbikpLHRoaXMuX3VwZGF0ZUJhcigpfX1dKSxlfSgpO3QuUHJvZ3Jlc3NCYXI9Q30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgbj17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt0LmRlZmF1bHQ9bn0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoMyksYT1yKDI2KSxpPXIoNjQpLG89cig2NSk7ZnVuY3Rpb24gcyh0KXt2YXIgcj0iZnVuY3Rpb24iPT10eXBlb2YgTWFwP25ldyBNYXA6dm9pZCAwO3JldHVybiBlLmV4cG9ydHM9cz1mdW5jdGlvbihlKXtpZihudWxsPT09ZXx8IWkoZSkpcmV0dXJuIGU7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtpZih2b2lkIDAhPT1yKXtpZihyLmhhcyhlKSlyZXR1cm4gci5nZXQoZSk7ci5zZXQoZSx0KX1mdW5jdGlvbiB0KCl7cmV0dXJuIG8oZSxhcmd1bWVudHMsbih0aGlzKS5jb25zdHJ1Y3Rvcil9cmV0dXJuIHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTp0LGVudW1lcmFibGU6ITEsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLGEodCxlKX0scyh0KX1lLmV4cG9ydHM9c30sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuLTEhPT1GdW5jdGlvbi50b1N0cmluZy5jYWxsKGUpLmluZGV4T2YoIltuYXRpdmUgY29kZV0iKX19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDI2KTtmdW5jdGlvbiBhKCl7aWYoInVuZGVmaW5lZCI9PXR5cGVvZiBSZWZsZWN0fHwhUmVmbGVjdC5jb25zdHJ1Y3QpcmV0dXJuITE7aWYoUmVmbGVjdC5jb25zdHJ1Y3Quc2hhbSlyZXR1cm4hMTtpZigiZnVuY3Rpb24iPT10eXBlb2YgUHJveHkpcmV0dXJuITA7dHJ5e3JldHVybiBEYXRlLnByb3RvdHlwZS50b1N0cmluZy5jYWxsKFJlZmxlY3QuY29uc3RydWN0KERhdGUsW10sKGZ1bmN0aW9uKCl7fSkpKSwhMH1jYXRjaChlKXtyZXR1cm4hMX19ZnVuY3Rpb24gaSh0LHIsbyl7cmV0dXJuIGEoKT9lLmV4cG9ydHM9aT1SZWZsZWN0LmNvbnN0cnVjdDplLmV4cG9ydHM9aT1mdW5jdGlvbihlLHQscil7dmFyIGE9W251bGxdO2EucHVzaC5hcHBseShhLHQpO3ZhciBpPW5ldyhGdW5jdGlvbi5iaW5kLmFwcGx5KGUsYSkpO3JldHVybiByJiZuKGksci5wcm90b3R5cGUpLGl9LGkuYXBwbHkobnVsbCxhcmd1bWVudHMpfWUuZXhwb3J0cz1pfSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2NyksYT1yKDY4KSxpPXIoNjkpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gbihlKXx8YShlKXx8aSgpfX0sZnVuY3Rpb24oZSx0KXtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSl7Zm9yKHZhciB0PTAscj1uZXcgQXJyYXkoZS5sZW5ndGgpO3Q8ZS5sZW5ndGg7dCsrKXJbdF09ZVt0XTtyZXR1cm4gcn19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihTeW1ib2wuaXRlcmF0b3IgaW4gT2JqZWN0KGUpfHwiW29iamVjdCBBcmd1bWVudHNdIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbChlKSlyZXR1cm4gQXJyYXkuZnJvbShlKX19LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIHNwcmVhZCBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LGZ1bmN0aW9uKGUsdCl7dmFyIHI9L15ccyt8XHMrJC9nLG49L15bLStdMHhbMC05YS1mXSskL2ksYT0vXjBiWzAxXSskL2ksaT0vXjBvWzAtN10rJC9pLG89cGFyc2VJbnQscz1PYmplY3QucHJvdG90eXBlLnRvU3RyaW5nO2Z1bmN0aW9uIGwoZSx0KXt2YXIgbDtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCl0aHJvdyBuZXcgVHlwZUVycm9yKCJFeHBlY3RlZCBhIGZ1bmN0aW9uIik7cmV0dXJuIGU9ZnVuY3Rpb24oZSl7dmFyIHQ9ZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIDA9PT1lP2U6MDtpZigoZT1mdW5jdGlvbihlKXtpZigibnVtYmVyIj09dHlwZW9mIGUpcmV0dXJuIGU7aWYoZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PXR5cGVvZiBlfHxmdW5jdGlvbihlKXtyZXR1cm4hIWUmJiJvYmplY3QiPT10eXBlb2YgZX0oZSkmJiJbb2JqZWN0IFN5bWJvbF0iPT1zLmNhbGwoZSl9KGUpKXJldHVybiBOYU47aWYoYyhlKSl7dmFyIHQ9ImZ1bmN0aW9uIj09dHlwZW9mIGUudmFsdWVPZj9lLnZhbHVlT2YoKTplO2U9Yyh0KT90KyIiOnR9aWYoInN0cmluZyIhPXR5cGVvZiBlKXJldHVybiAwPT09ZT9lOitlO2U9ZS5yZXBsYWNlKHIsIiIpO3ZhciBsPWEudGVzdChlKTtyZXR1cm4gbHx8aS50ZXN0KGUpP28oZS5zbGljZSgyKSxsPzI6OCk6bi50ZXN0KGUpP05hTjorZX0oZSkpPT09MS8wfHxlPT09LTEvMCl7cmV0dXJuIDE3OTc2OTMxMzQ4NjIzMTU3ZTI5MiooZTwwPy0xOjEpfXJldHVybiBlPT1lP2U6MH0oZSksbD10JTE7cmV0dXJuIHQ9PXQ/bD90LWw6dDowfShlKSxmdW5jdGlvbigpe3JldHVybi0tZT4wJiYobD10LmFwcGx5KHRoaXMsYXJndW1lbnRzKSksZTw9MSYmKHQ9dm9pZCAwKSxsfX1mdW5jdGlvbiBjKGUpe3ZhciB0PXR5cGVvZiBlO3JldHVybiEhZSYmKCJvYmplY3QiPT10fHwiZnVuY3Rpb24iPT10KX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGwoMixlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5PdXRsaW5lSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigyNSkpLG89YShyKDEyKSkscz1hKHIoMTQpKSxsPWEocigxNSkpLGM9YShyKDIpKSx1PWEocig2KSksZj1hKHIoNykpLGg9YShyKDMpKSxkPWEocig5KSkscD1hKHIoOCkpLG09YShyKDUpKSxnPW4ocigwKSksdj1hKHIoNCkpLHk9YShyKDIyKSksYj1hKHIoMjcpKSx3PWEocigxOSkpLGs9YShyKDMzKSksUz1hKHIoNzIpKSxfPXIoMTApLHg9cigxMyksQT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPSgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJzdGF0ZSIse291dGxpbmU6bnVsbH0pLCgwLG0uZGVmYXVsdCkoKDAscC5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKHIpKSwibG9hZE91dGxpbmUiLCgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGE7cmV0dXJuIHMuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1yLnByb3BzLnBkZixyLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5vdXRsaW5lP3tvdXRsaW5lOm51bGx9Om51bGx9KSksZS5wcmV2PTIsbj0oMCxfLm1ha2VDYW5jZWxsYWJsZSkodC5nZXRPdXRsaW5lKCkpLHIucnVubmluZ1Rhc2s9bixlLm5leHQ9NyxuLnByb21pc2U7Y2FzZSA3OmE9ZS5zZW50LHIuc2V0U3RhdGUoe291dGxpbmU6YX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDIpLHIub25Mb2FkRXJyb3IoZS50MCk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzIsMTFdXSl9KSkpKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25Mb2FkU3VjY2Vzcyx0PXIuc3RhdGUub3V0bGluZTsoMCxfLmNhbGxJZkRlZmluZWQpKGUsdCl9KSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJvbkxvYWRFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCxfLmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7ci5zZXRTdGF0ZSh7b3V0bGluZTohMX0pLCgwLF8uZXJyb3JPbkRldikoZSk7dmFyIHQ9ci5wcm9wcy5vbkxvYWRFcnJvcjsoMCxfLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLG0uZGVmYXVsdCkoKDAscC5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKHIpKSwib25JdGVtQ2xpY2siLChmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VJbmRleCxuPWUucGFnZU51bWJlcixhPXIucHJvcHMub25JdGVtQ2xpY2s7KDAsXy5jYWxsSWZEZWZpbmVkKShhLHtwYWdlSW5kZXg6dCxwYWdlTnVtYmVyOm59KX0pKSxyfXJldHVybigwLGQuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBkZil0aHJvdyBuZXcgRXJyb3IoIkF0dGVtcHRlZCB0byBsb2FkIGFuIG91dGxpbmUsIGJ1dCBubyBkb2N1bWVudCB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZE91dGxpbmUoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wZGY7ZS5wZGYmJnQhPT1lLnBkZiYmdGhpcy5sb2FkT3V0bGluZSgpfX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsXy5jYW5jZWxSdW5uaW5nVGFzaykodGhpcy5ydW5uaW5nVGFzayl9fSx7a2V5OiJyZW5kZXJPdXRsaW5lIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RhdGUub3V0bGluZTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoInVsIixudWxsLGUubWFwKChmdW5jdGlvbihlLHQpe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLmRlZmF1bHQse2tleToic3RyaW5nIj09dHlwZW9mIGUuZGVzdGluYXRpb24/ZS5kZXN0aW5hdGlvbjp0LGl0ZW06ZX0pfSkpKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLnBkZix0PXRoaXMuc3RhdGUub3V0bGluZTtpZighZXx8IXQpcmV0dXJuIG51bGw7dmFyIHI9dGhpcy5wcm9wcyxuPXIuY2xhc3NOYW1lLGE9ci5pbnB1dFJlZjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImRpdiIsKDAsby5kZWZhdWx0KSh7Y2xhc3NOYW1lOigwLGIuZGVmYXVsdCkoInJlYWN0LXBkZl9fT3V0bGluZSIsbikscmVmOmF9LHRoaXMuZXZlbnRQcm9wcyksZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmNoaWxkQ29udGV4dH0sdGhpcy5yZW5kZXJPdXRsaW5lKCkpKX19LHtrZXk6ImNoaWxkQ29udGV4dCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJue29uQ2xpY2s6dGhpcy5vbkl0ZW1DbGlja319fSx7a2V5OiJldmVudFByb3BzIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybigwLHkuZGVmYXVsdCkodGhpcy5wcm9wcywoZnVuY3Rpb24oKXtyZXR1cm4gZS5zdGF0ZS5vdXRsaW5lfSkpfX1dKSx0fShnLlB1cmVDb21wb25lbnQpO3QuT3V0bGluZUludGVybmFsPUEsQS5wcm9wVHlwZXM9KDAsaS5kZWZhdWx0KSh7Y2xhc3NOYW1lOnguaXNDbGFzc05hbWUsaW5wdXRSZWY6di5kZWZhdWx0LmZ1bmMsb25JdGVtQ2xpY2s6di5kZWZhdWx0LmZ1bmMsb25Mb2FkRXJyb3I6di5kZWZhdWx0LmZ1bmMsb25Mb2FkU3VjY2Vzczp2LmRlZmF1bHQuZnVuYyxwZGY6eC5pc1BkZn0sKDAseC5ldmVudHNQcm9wcykoKSk7dmFyIEM9Zy5kZWZhdWx0LmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbihyKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQSwoMCxvLmRlZmF1bHQpKHtyZWY6dH0scixlKSl9KSl9KSk7dC5kZWZhdWx0PUN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5PdXRsaW5lSXRlbUludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigzMCkpLHM9YShyKDM0KSksbD1hKHIoMTQpKSxjPWEocigxNSkpLHU9YShyKDIpKSxmPWEocig2KSksaD1hKHIoNykpLGQ9YShyKDMpKSxwPWEocig5KSksbT1hKHIoOCkpLGc9YShyKDUpKSx2PW4ocigwKSkseT1hKHIoNCkpLGI9YShyKDE5KSksdz1hKHIoMzMpKSxrPWEocig3NikpLFM9cigxMCksXz1yKDEzKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLHUuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxoLmRlZmF1bHQpKHRoaXMsKGU9KDAsZC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksImdldERlc3RpbmF0aW9uIiwoMCxjLmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD1yLnByb3BzLG49dC5pdGVtLGE9dC5wZGYsKDAsUy5pc0RlZmluZWQpKHIuZGVzdGluYXRpb24pKXtlLm5leHQ9OTticmVha31pZigic3RyaW5nIiE9dHlwZW9mIG4uZGVzdCl7ZS5uZXh0PTg7YnJlYWt9cmV0dXJuIGUubmV4dD01LGEuZ2V0RGVzdGluYXRpb24obi5kZXN0KTtjYXNlIDU6ci5kZXN0aW5hdGlvbj1lLnNlbnQsZS5uZXh0PTk7YnJlYWs7Y2FzZSA4OnIuZGVzdGluYXRpb249bi5kZXN0O2Nhc2UgOTpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5kZXN0aW5hdGlvbik7Y2FzZSAxMDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksImdldFBhZ2VJbmRleCIsKDAsYy5kZWZhdWx0KShsLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSgpe3ZhciB0LG4sYSxpO3JldHVybiBsLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD1yLnByb3BzLnBkZiwoMCxTLmlzRGVmaW5lZCkoci5wYWdlSW5kZXgpKXtlLm5leHQ9MTA7YnJlYWt9cmV0dXJuIGUubmV4dD00LHIuZ2V0RGVzdGluYXRpb24oKTtjYXNlIDQ6aWYoIShuPWUuc2VudCkpe2UubmV4dD0xMDticmVha31yZXR1cm4gYT0oMCxzLmRlZmF1bHQpKG4sMSksaT1hWzBdLGUubmV4dD05LHQuZ2V0UGFnZUluZGV4KG5ldyBrLmRlZmF1bHQoaSkpO2Nhc2UgOTpyLnBhZ2VJbmRleD1lLnNlbnQ7Y2FzZSAxMDpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5wYWdlSW5kZXgpO2Nhc2UgMTE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSksKDAsZy5kZWZhdWx0KSgoMCxtLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkocikpLCJnZXRQYWdlTnVtYmVyIiwoMCxjLmRlZmF1bHQpKGwuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7cmV0dXJuIGwuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZigoMCxTLmlzRGVmaW5lZCkoci5wYWdlTnVtYmVyKSl7ZS5uZXh0PTU7YnJlYWt9cmV0dXJuIGUubmV4dD0zLHIuZ2V0UGFnZUluZGV4KCk7Y2FzZSAzOmUudDA9ZS5zZW50LHIucGFnZU51bWJlcj1lLnQwKzE7Y2FzZSA1OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixyLnBhZ2VOdW1iZXIpO2Nhc2UgNjpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpKSwoMCxnLmRlZmF1bHQpKCgwLG0uZGVmYXVsdCkoKDAsbS5kZWZhdWx0KShyKSksIm9uQ2xpY2siLGZ1bmN0aW9uKCl7dmFyIGU9KDAsYy5kZWZhdWx0KShsLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgbixhLGk7cmV0dXJuIGwuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gbj1yLnByb3BzLm9uQ2xpY2ssdC5wcmV2ZW50RGVmYXVsdCgpLGUubmV4dD00LHIuZ2V0UGFnZUluZGV4KCk7Y2FzZSA0OnJldHVybiBhPWUuc2VudCxlLm5leHQ9NyxyLmdldFBhZ2VOdW1iZXIoKTtjYXNlIDc6aT1lLnNlbnQsKDAsUy5jYWxsSWZEZWZpbmVkKShuLHtwYWdlSW5kZXg6YSxwYWdlTnVtYmVyOml9KTtjYXNlIDk6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKTtyZXR1cm4gZnVuY3Rpb24odCl7cmV0dXJuIGUuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKSkscn1yZXR1cm4oMCxwLmRlZmF1bHQpKHQsZSksKDAsZi5kZWZhdWx0KSh0LFt7a2V5OiJyZW5kZXJTdWJpdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHI9ZS5pdGVtLG49KDAsby5kZWZhdWx0KShlLFsiaXRlbSJdKTtpZighci5pdGVtc3x8IXIuaXRlbXMubGVuZ3RoKXJldHVybiBudWxsO3ZhciBhPXIuaXRlbXM7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJ1bCIsbnVsbCxhLm1hcCgoZnVuY3Rpb24oZSxyKXtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQodCwoMCxpLmRlZmF1bHQpKHtrZXk6InN0cmluZyI9PXR5cGVvZiBlLmRlc3RpbmF0aW9uP2UuZGVzdGluYXRpb246cixpdGVtOmV9LG4pKX0pKSl9fSx7a2V5OiJyZW5kZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5pdGVtO3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCgibGkiLG51bGwsdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoImEiLHtocmVmOiIjIixvbkNsaWNrOnRoaXMub25DbGlja30sZS50aXRsZSksdGhpcy5yZW5kZXJTdWJpdGVtcygpKX19XSksdH0odi5QdXJlQ29tcG9uZW50KTt0Lk91dGxpbmVJdGVtSW50ZXJuYWw9eDt2YXIgQT15LmRlZmF1bHQub25lT2ZUeXBlKFt5LmRlZmF1bHQuc3RyaW5nLHkuZGVmYXVsdC5hcnJheU9mKHkuZGVmYXVsdC5hbnkpXSk7eC5wcm9wVHlwZXM9e2l0ZW06eS5kZWZhdWx0LnNoYXBlKHt0aXRsZTp5LmRlZmF1bHQuc3RyaW5nLGRlc3RpbmF0aW9uOkEsaXRlbXM6eS5kZWZhdWx0LmFycmF5T2YoeS5kZWZhdWx0LnNoYXBlKHt0aXRsZTp5LmRlZmF1bHQuc3RyaW5nLGRlc3RpbmF0aW9uOkF9KSl9KS5pc1JlcXVpcmVkLG9uQ2xpY2s6eS5kZWZhdWx0LmZ1bmMscGRmOl8uaXNQZGYuaXNSZXF1aXJlZH07dmFyIEM9ZnVuY3Rpb24oZSl7cmV0dXJuIHYuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbih0KXtyZXR1cm4gdi5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQody5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHIpe3JldHVybiB2LmRlZmF1bHQuY3JlYXRlRWxlbWVudCh4LCgwLGkuZGVmYXVsdCkoe30sdCxyLGUpKX0pKX0pKX07dC5kZWZhdWx0PUN9LGZ1bmN0aW9uKGUsdCl7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn19fSxmdW5jdGlvbihlLHQpe2UuZXhwb3J0cz1mdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PXZvaWQgMDt2YXIgYT1uKHIoMikpLGk9bihyKDYpKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0KXt2YXIgcj10Lm51bSxuPXQuZ2VuOygwLGEuZGVmYXVsdCkodGhpcyxlKSx0aGlzLm51bT1yLHRoaXMuZ2VuPW59cmV0dXJuKDAsaS5kZWZhdWx0KShlLFt7a2V5OiJ0b1N0cmluZyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT0iIi5jb25jYXQodGhpcy5udW0sIlIiKTtyZXR1cm4gMCE9PXRoaXMuZ2VuJiYoZSs9dGhpcy5nZW4pLGV9fV0pLGV9KCk7dC5kZWZhdWx0PW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9dC5QYWdlSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigyNSkpLG89YShyKDEyKSkscz1hKHIoMTQpKSxsPWEocigxNSkpLGM9YShyKDIpKSx1PWEocig2KSksZj1hKHIoNykpLGg9YShyKDMpKSxkPWEocig5KSkscD1hKHIoOCkpLG09YShyKDUpKSxnPW4ocigwKSksdj1hKHIoNCkpLHk9YShyKDIyKSksYj1hKHIoMjcpKSx3PWEocigxOSkpLGs9YShyKDE3KSksUz1hKHIoMzEpKSxfPWEocig3OCkpLHg9YShyKDc5KSksQT1hKHIoODApKSxDPWEocig4MikpLFA9cigxMCksRT1yKDEzKSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLGMuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxmLmRlZmF1bHQpKHRoaXMsKGU9KDAsaC5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksInN0YXRlIix7cGFnZTpudWxsfSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJvbkxvYWRTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLHQ9ZS5vbkxvYWRTdWNjZXNzLG49ZS5yZWdpc3RlclBhZ2UsYT1yLnN0YXRlLnBhZ2U7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LCgwLFAubWFrZVBhZ2VDYWxsYmFjaykoYSxyLnNjYWxlKSksKDAsUC5jYWxsSWZEZWZpbmVkKShuLHIucGFnZUluZGV4LHIucmVmKX0pKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksIm9uTG9hZEVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLFAuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXsoMCxQLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25Mb2FkRXJyb3I7KDAsUC5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCxtLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkoKDAscC5kZWZhdWx0KShyKSksImxvYWRQYWdlIiwoMCxsLmRlZmF1bHQpKHMuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKCl7dmFyIHQsbixhLGk7cmV0dXJuIHMuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZih0PXIucHJvcHMucGRmLG49ci5nZXRQYWdlTnVtYmVyKCkpe2UubmV4dD00O2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSA0OnJldHVybiByLnNldFN0YXRlKChmdW5jdGlvbihlKXtyZXR1cm4gZS5wYWdlP3twYWdlOm51bGx9Om51bGx9KSksZS5wcmV2PTUsYT0oMCxQLm1ha2VDYW5jZWxsYWJsZSkodC5nZXRQYWdlKG4pKSxyLnJ1bm5pbmdUYXNrPWEsZS5uZXh0PTEwLGEucHJvbWlzZTtjYXNlIDEwOmk9ZS5zZW50LHIuc2V0U3RhdGUoe3BhZ2U6aX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTg7YnJlYWs7Y2FzZSAxNDplLnByZXY9MTQsZS50MD1lLmNhdGNoKDUpLHIuc2V0U3RhdGUoe3BhZ2U6ITF9KSxyLm9uTG9hZEVycm9yKGUudDApO2Nhc2UgMTg6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMsW1s1LDE0XV0pfSkpKSkscn1yZXR1cm4oMCxkLmRlZmF1bHQpKHQsZSksKDAsdS5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXtpZighdGhpcy5wcm9wcy5wZGYpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBhIHBhZ2UsIGJ1dCBubyBkb2N1bWVudCB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZFBhZ2UoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wZGY7aWYoZS5wZGYmJnQhPT1lLnBkZnx8dGhpcy5nZXRQYWdlTnVtYmVyKCkhPT10aGlzLmdldFBhZ2VOdW1iZXIoZSkpe3ZhciByPXRoaXMucHJvcHMudW5yZWdpc3RlclBhZ2U7KDAsUC5jYWxsSWZEZWZpbmVkKShyLHRoaXMuZ2V0UGFnZUluZGV4KGUpKSx0aGlzLmxvYWRQYWdlKCl9fX0se2tleToiY29tcG9uZW50V2lsbFVubW91bnQiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy51bnJlZ2lzdGVyUGFnZTsoMCxQLmNhbGxJZkRlZmluZWQpKGUsdGhpcy5wYWdlSW5kZXgpLCgwLFAuY2FuY2VsUnVubmluZ1Rhc2spKHRoaXMucnVubmluZ1Rhc2spfX0se2tleToiZ2V0UGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp0aGlzLnByb3BzO3JldHVybigwLFAuaXNQcm92aWRlZCkoZS5wYWdlTnVtYmVyKT9lLnBhZ2VOdW1iZXItMTooMCxQLmlzUHJvdmlkZWQpKGUucGFnZUluZGV4KT9lLnBhZ2VJbmRleDpudWxsfX0se2tleToiZ2V0UGFnZU51bWJlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06dGhpcy5wcm9wcztyZXR1cm4oMCxQLmlzUHJvdmlkZWQpKGUucGFnZU51bWJlcik/ZS5wYWdlTnVtYmVyOigwLFAuaXNQcm92aWRlZCkoZS5wYWdlSW5kZXgpP2UucGFnZUluZGV4KzE6bnVsbH19LHtrZXk6InJlbmRlck1haW5MYXllciIsdmFsdWU6ZnVuY3Rpb24oKXtzd2l0Y2godGhpcy5wcm9wcy5yZW5kZXJNb2RlKXtjYXNlIm5vbmUiOnJldHVybiBudWxsO2Nhc2Uic3ZnIjpyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeC5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleU5vU2NhbGUsIl9zdmciKX0pO2Nhc2UiY2FudmFzIjpkZWZhdWx0OnJldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChfLmRlZmF1bHQse2tleToiIi5jb25jYXQodGhpcy5wYWdlS2V5LCJfY2FudmFzIil9KX19fSx7a2V5OiJyZW5kZXJUZXh0TGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5yZW5kZXJUZXh0TGF5ZXI7cmV0dXJuIGU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQS5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleSwiX3RleHQiKX0pOm51bGx9fSx7a2V5OiJyZW5kZXJBbm5vdGF0aW9uTGF5ZXIiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI7cmV0dXJuIGU/Zy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoQy5kZWZhdWx0LHtrZXk6IiIuY29uY2F0KHRoaXMucGFnZUtleSwiX2Fubm90YXRpb25zIil9KTpudWxsfX0se2tleToicmVuZGVyQ2hpbGRyZW4iLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy5jaGlsZHJlbjtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoay5kZWZhdWx0LlByb3ZpZGVyLHt2YWx1ZTp0aGlzLmNoaWxkQ29udGV4dH0sdGhpcy5yZW5kZXJNYWluTGF5ZXIoKSx0aGlzLnJlbmRlclRleHRMYXllcigpLHRoaXMucmVuZGVyQW5ub3RhdGlvbkxheWVyKCksZSl9fSx7a2V5OiJyZW5kZXJDb250ZW50Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucGFnZU51bWJlcix0PXRoaXMucHJvcHMucGRmLHI9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXt2YXIgbj10aGlzLnByb3BzLm5vRGF0YTtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoUy5kZWZhdWx0LHt0eXBlOiJuby1kYXRhIn0sImZ1bmN0aW9uIj09dHlwZW9mIG4/bigpOm4pfWlmKG51bGw9PT10fHxudWxsPT09cil7dmFyIGE9dGhpcy5wcm9wcy5sb2FkaW5nO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudChTLmRlZmF1bHQse3R5cGU6ImxvYWRpbmcifSwiZnVuY3Rpb24iPT10eXBlb2YgYT9hKCk6YSl9aWYoITE9PT10fHwhMT09PXIpe3ZhciBpPXRoaXMucHJvcHMuZXJyb3I7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMuZGVmYXVsdCx7dHlwZToiZXJyb3IifSwiZnVuY3Rpb24iPT10eXBlb2YgaT9pKCk6aSl9cmV0dXJuIHRoaXMucmVuZGVyQ2hpbGRyZW4oKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5wYWdlTnVtYmVyLHI9dGhpcy5wcm9wcy5jbGFzc05hbWU7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLCgwLG8uZGVmYXVsdCkoe2NsYXNzTmFtZTooMCxiLmRlZmF1bHQpKCJyZWFjdC1wZGZfX1BhZ2UiLHIpLHJlZjpmdW5jdGlvbih0KXt2YXIgcj1lLnByb3BzLmlucHV0UmVmO3ImJnIodCksZS5yZWY9dH0sc3R5bGU6e3Bvc2l0aW9uOiJyZWxhdGl2ZSJ9LCJkYXRhLXBhZ2UtbnVtYmVyIjp0fSx0aGlzLmV2ZW50UHJvcHMpLHRoaXMucmVuZGVyQ29udGVudCgpKX19LHtrZXk6ImNoaWxkQ29udGV4dCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXJldHVybnt9O3ZhciB0PXRoaXMucHJvcHM7cmV0dXJue2N1c3RvbVRleHRSZW5kZXJlcjp0LmN1c3RvbVRleHRSZW5kZXJlcixvbkdldEFubm90YXRpb25zRXJyb3I6dC5vbkdldEFubm90YXRpb25zRXJyb3Isb25HZXRBbm5vdGF0aW9uc1N1Y2Nlc3M6dC5vbkdldEFubm90YXRpb25zU3VjY2VzcyxvbkdldFRleHRFcnJvcjp0Lm9uR2V0VGV4dEVycm9yLG9uR2V0VGV4dFN1Y2Nlc3M6dC5vbkdldFRleHRTdWNjZXNzLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I6dC5vblJlbmRlckFubm90YXRpb25MYXllckVycm9yLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2Vzczp0Lm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2VzcyxvblJlbmRlckVycm9yOnQub25SZW5kZXJFcnJvcixvblJlbmRlclN1Y2Nlc3M6dC5vblJlbmRlclN1Y2Nlc3MscGFnZTplLHJlbmRlckludGVyYWN0aXZlRm9ybXM6dC5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zLHJvdGF0ZTp0aGlzLnJvdGF0ZSxzY2FsZTp0aGlzLnNjYWxlfX19LHtrZXk6InBhZ2VJbmRleCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuZ2V0UGFnZUluZGV4KCl9fSx7a2V5OiJwYWdlTnVtYmVyIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5nZXRQYWdlTnVtYmVyKCl9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMucm90YXRlO2lmKCgwLFAuaXNQcm92aWRlZCkoZSkpcmV0dXJuIGU7dmFyIHQ9dGhpcy5zdGF0ZS5wYWdlO3JldHVybiB0P3Qucm90YXRlOm51bGx9fSx7a2V5OiJzY2FsZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO2lmKCFlKXJldHVybiBudWxsO3ZhciB0PXRoaXMucHJvcHMscj10LnNjYWxlLG49dC53aWR0aCxhPXQuaGVpZ2h0LGk9dGhpcy5yb3RhdGUsbz0xLHM9bnVsbD09PXI/MTpyO2lmKG58fGEpe3ZhciBsPWUuZ2V0Vmlld3BvcnQoe3NjYWxlOjEscm90YXRpb246aX0pO289bj9uL2wud2lkdGg6YS9sLmhlaWdodH1yZXR1cm4gcypvfX0se2tleToiZXZlbnRQcm9wcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcztyZXR1cm4oMCx5LmRlZmF1bHQpKHRoaXMucHJvcHMsKGZ1bmN0aW9uKCl7dmFyIHQ9ZS5zdGF0ZS5wYWdlO3JldHVybiB0PygwLFAubWFrZVBhZ2VDYWxsYmFjaykodCxlLnNjYWxlKTp0fSkpfX0se2tleToicGFnZUtleSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZS5wYWdlO3JldHVybiIiLmNvbmNhdChlLnBhZ2VJbmRleCwiQCIpLmNvbmNhdCh0aGlzLnNjYWxlLCIvIikuY29uY2F0KHRoaXMucm90YXRlKX19LHtrZXk6InBhZ2VLZXlOb1NjYWxlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLnBhZ2U7cmV0dXJuIiIuY29uY2F0KGUucGFnZUluZGV4LCIvIikuY29uY2F0KHRoaXMucm90YXRlKX19XSksdH0oZy5QdXJlQ29tcG9uZW50KTt0LlBhZ2VJbnRlcm5hbD1ULFQuZGVmYXVsdFByb3BzPXtlcnJvcjoiRmFpbGVkIHRvIGxvYWQgdGhlIHBhZ2UuIixsb2FkaW5nOiJMb2FkaW5nIHBhZ2XigKYiLG5vRGF0YToiTm8gcGFnZSBzcGVjaWZpZWQuIixyZW5kZXJBbm5vdGF0aW9uTGF5ZXI6ITAscmVuZGVySW50ZXJhY3RpdmVGb3JtczohMSxyZW5kZXJNb2RlOiJjYW52YXMiLHJlbmRlclRleHRMYXllcjohMCxzY2FsZToxfSxULnByb3BUeXBlcz0oMCxpLmRlZmF1bHQpKHtjaGlsZHJlbjp2LmRlZmF1bHQubm9kZSxjbGFzc05hbWU6RS5pc0NsYXNzTmFtZSxjdXN0b21UZXh0UmVuZGVyZXI6di5kZWZhdWx0LmZ1bmMsZXJyb3I6di5kZWZhdWx0Lm5vZGUsaGVpZ2h0OnYuZGVmYXVsdC5udW1iZXIsaW5wdXRSZWY6di5kZWZhdWx0LmZ1bmMsbG9hZGluZzp2LmRlZmF1bHQubm9kZSxub0RhdGE6di5kZWZhdWx0Lm5vZGUsb25HZXRUZXh0RXJyb3I6di5kZWZhdWx0LmZ1bmMsb25HZXRUZXh0U3VjY2Vzczp2LmRlZmF1bHQuZnVuYyxvbkxvYWRFcnJvcjp2LmRlZmF1bHQuZnVuYyxvbkxvYWRTdWNjZXNzOnYuZGVmYXVsdC5mdW5jLG9uUmVuZGVyRXJyb3I6di5kZWZhdWx0LmZ1bmMsb25SZW5kZXJTdWNjZXNzOnYuZGVmYXVsdC5mdW5jLHBhZ2VJbmRleDpFLmlzUGFnZUluZGV4LHBhZ2VOdW1iZXI6RS5pc1BhZ2VOdW1iZXIscGRmOkUuaXNQZGYscmVnaXN0ZXJQYWdlOnYuZGVmYXVsdC5mdW5jLHJlbmRlckFubm90YXRpb25MYXllcjp2LmRlZmF1bHQuYm9vbCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOnYuZGVmYXVsdC5ib29sLHJlbmRlck1vZGU6RS5pc1JlbmRlck1vZGUscmVuZGVyVGV4dExheWVyOnYuZGVmYXVsdC5ib29sLHJvdGF0ZTpFLmlzUm90YXRlLHNjYWxlOnYuZGVmYXVsdC5udW1iZXIsdW5yZWdpc3RlclBhZ2U6di5kZWZhdWx0LmZ1bmMsd2lkdGg6di5kZWZhdWx0Lm51bWJlcn0sKDAsRS5ldmVudHNQcm9wcykoKSk7dmFyIFI9Zy5kZWZhdWx0LmZvcndhcmRSZWYoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGcuZGVmYXVsdC5jcmVhdGVFbGVtZW50KHcuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbihyKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoVCwoMCxvLmRlZmF1bHQpKHtyZWY6dH0scixlLHtyZW5kZXJBbm5vdGF0aW9uTGF5ZXI6dm9pZCAwIT09ZS5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI/ZS5yZW5kZXJBbm5vdGF0aW9uTGF5ZXI6ZS5yZW5kZXJBbm5vdGF0aW9uc30pKX0pKX0pKTt0LmRlZmF1bHQ9Un0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZC5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQobS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh5LCgwLGkuZGVmYXVsdCkoe30sdCxlKSl9KSl9LHQuUGFnZUNhbnZhc0ludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigyKSkscz1hKHIoNikpLGw9YShyKDcpKSxjPWEocigzKSksdT1hKHIoOSkpLGY9YShyKDgpKSxoPWEocig1KSksZD1uKHIoMCkpLHA9YShyKDQpKSxtPWEocigxNykpLGc9cigxMCksdj1yKDEzKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLG8uZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCxsLmRlZmF1bHQpKHRoaXMsKGU9KDAsYy5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksIm9uUmVuZGVyU3VjY2VzcyIsKGZ1bmN0aW9uKCl7ci5yZW5kZXJlcj1udWxsO3ZhciBlPXIucHJvcHMsdD1lLm9uUmVuZGVyU3VjY2VzcyxuPWUucGFnZSxhPWUuc2NhbGU7KDAsZy5jYWxsSWZEZWZpbmVkKSh0LCgwLGcubWFrZVBhZ2VDYWxsYmFjaykobixhKSl9KSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJvblJlbmRlckVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLGcuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXsoMCxnLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25SZW5kZXJFcnJvcjsoMCxnLmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLGguZGVmYXVsdCkoKDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKSwiZHJhd1BhZ2VPbkNhbnZhcyIsKGZ1bmN0aW9uKCl7dmFyIGU9KDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKS5jYW52YXNMYXllcjtpZighZSlyZXR1cm4gbnVsbDt2YXIgdD0oMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLG49dC5yZW5kZXJWaWV3cG9ydCxhPXQudmlld3BvcnQsaT1yLnByb3BzLG89aS5wYWdlLHM9aS5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zO2Uud2lkdGg9bi53aWR0aCxlLmhlaWdodD1uLmhlaWdodCxlLnN0eWxlLndpZHRoPSIiLmNvbmNhdChNYXRoLmZsb29yKGEud2lkdGgpLCJweCIpLGUuc3R5bGUuaGVpZ2h0PSIiLmNvbmNhdChNYXRoLmZsb29yKGEuaGVpZ2h0KSwicHgiKTt2YXIgbD17Z2V0IGNhbnZhc0NvbnRleHQoKXtyZXR1cm4gZS5nZXRDb250ZXh0KCIyZCIpfSx2aWV3cG9ydDpuLHJlbmRlckludGVyYWN0aXZlRm9ybXM6c307cmV0dXJuIHIuY2FuY2VsUmVuZGVyaW5nVGFzaygpLHIucmVuZGVyZXI9by5yZW5kZXIobCksci5yZW5kZXJlci5wcm9taXNlLnRoZW4oci5vblJlbmRlclN1Y2Nlc3MpLmNhdGNoKHIub25SZW5kZXJFcnJvcil9KSkscn1yZXR1cm4oMCx1LmRlZmF1bHQpKHQsZSksKDAscy5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmRyYXdQYWdlT25DYW52YXMoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcyxyPXQucGFnZTt0LnJlbmRlckludGVyYWN0aXZlRm9ybXMhPT1lLnJlbmRlckludGVyYWN0aXZlRm9ybXMmJihyLmNsZWFudXAoKSx0aGlzLmRyYXdQYWdlT25DYW52YXMoKSl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLmNhbmNlbFJlbmRlcmluZ1Rhc2soKSx0aGlzLmNhbnZhc0xheWVyJiYodGhpcy5jYW52YXNMYXllci53aWR0aD0wLHRoaXMuY2FudmFzTGF5ZXIuaGVpZ2h0PTAsdGhpcy5jYW52YXNMYXllcj1udWxsKX19LHtrZXk6ImNhbmNlbFJlbmRlcmluZ1Rhc2siLHZhbHVlOmZ1bmN0aW9uKCl7dGhpcy5yZW5kZXJlciYmdGhpcy5yZW5kZXJlci5faW50ZXJuYWxSZW5kZXJUYXNrLnJ1bm5pbmcmJnRoaXMucmVuZGVyZXIuX2ludGVybmFsUmVuZGVyVGFzay5jYW5jZWwoKX19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiY2FudmFzIix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX1BhZ2VfX2NhbnZhcyIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIix1c2VyU2VsZWN0OiJub25lIn0scmVmOmZ1bmN0aW9uKHQpe2UuY2FudmFzTGF5ZXI9dH19KX19LHtrZXk6InJlbmRlclZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5yb3RhdGUsbj1lLnNjYWxlLGE9KDAsZy5nZXRQaXhlbFJhdGlvKSgpO3JldHVybiB0LmdldFZpZXdwb3J0KHtzY2FsZTpuKmEscm90YXRpb246cn0pfX0se2tleToidmlld3BvcnQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBhZ2Uscj1lLnJvdGF0ZSxuPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOm4scm90YXRpb246cn0pfX1dKSx0fShkLlB1cmVDb21wb25lbnQpO3QuUGFnZUNhbnZhc0ludGVybmFsPXkseS5wcm9wVHlwZXM9e29uUmVuZGVyRXJyb3I6cC5kZWZhdWx0LmZ1bmMsb25SZW5kZXJTdWNjZXNzOnAuZGVmYXVsdC5mdW5jLHBhZ2U6di5pc1BhZ2UuaXNSZXF1aXJlZCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOnAuZGVmYXVsdC5ib29sLHJvdGF0ZTp2LmlzUm90YXRlLHNjYWxlOnAuZGVmYXVsdC5udW1iZXJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEpLGE9cigxKTtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5kZWZhdWx0PWZ1bmN0aW9uKGUpe3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudChnLmRlZmF1bHQuQ29uc3VtZXIsbnVsbCwoZnVuY3Rpb24odCl7cmV0dXJuIGQuZGVmYXVsdC5jcmVhdGVFbGVtZW50KGIsKDAsaS5kZWZhdWx0KSh7fSx0LGUpKX0pKX0sdC5QYWdlU1ZHSW50ZXJuYWw9dm9pZCAwO3ZhciBpPWEocigxMikpLG89YShyKDIpKSxzPWEocig2KSksbD1hKHIoNykpLGM9YShyKDMpKSx1PWEocig5KSksZj1hKHIoOCkpLGg9YShyKDUpKSxkPW4ocigwKSkscD1hKHIoNCkpLG09YShyKDIwKSksZz1hKHIoMTcpKSx2PXIoMTApLHk9cigxMyksYj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxvLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsbC5kZWZhdWx0KSh0aGlzLChlPSgwLGMuZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJzdGF0ZSIse3N2ZzpudWxsfSksKDAsaC5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkocikpLCJvblJlbmRlclN1Y2Nlc3MiLChmdW5jdGlvbigpe3IucmVuZGVyZXI9bnVsbDt2YXIgZT1yLnByb3BzLHQ9ZS5vblJlbmRlclN1Y2Nlc3Msbj1lLnBhZ2UsYT1lLnNjYWxlOygwLHYuY2FsbElmRGVmaW5lZCkodCwoMCx2Lm1ha2VQYWdlQ2FsbGJhY2spKG4sYSkpfSkpLCgwLGguZGVmYXVsdCkoKDAsZi5kZWZhdWx0KSgoMCxmLmRlZmF1bHQpKHIpKSwib25SZW5kZXJFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCx2LmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsdi5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uUmVuZGVyRXJyb3I7KDAsdi5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksInJlbmRlclNWRyIsKGZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcy5wYWdlO3JldHVybiByLnJlbmRlcmVyPWUuZ2V0T3BlcmF0b3JMaXN0KCksci5yZW5kZXJlci50aGVuKChmdW5jdGlvbih0KXt2YXIgbj1uZXcgbS5kZWZhdWx0LlNWR0dyYXBoaWNzKGUuY29tbW9uT2JqcyxlLm9ianMpO3IucmVuZGVyZXI9bi5nZXRTVkcodCxyLnZpZXdwb3J0KS50aGVuKChmdW5jdGlvbihlKXtyLnNldFN0YXRlKHtzdmc6ZX0sci5vblJlbmRlclN1Y2Nlc3MpfSkpLmNhdGNoKHIub25SZW5kZXJFcnJvcil9KSkuY2F0Y2goci5vblJlbmRlckVycm9yKX0pKSwoMCxoLmRlZmF1bHQpKCgwLGYuZGVmYXVsdCkoKDAsZi5kZWZhdWx0KShyKSksImRyYXdQYWdlT25Db250YWluZXIiLChmdW5jdGlvbihlKXt2YXIgdD1yLnN0YXRlLnN2ZztpZihlJiZ0KXtlLmZpcnN0RWxlbWVudENoaWxkfHxlLmFwcGVuZENoaWxkKHQpO3ZhciBuPXIudmlld3BvcnQsYT1uLndpZHRoLGk9bi5oZWlnaHQ7dC5zZXRBdHRyaWJ1dGUoIndpZHRoIixhKSx0LnNldEF0dHJpYnV0ZSgiaGVpZ2h0IixpKX19KSkscn1yZXR1cm4oMCx1LmRlZmF1bHQpKHQsZSksKDAscy5kZWZhdWx0KSh0LFt7a2V5OiJjb21wb25lbnREaWRNb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnJlbmRlclNWRygpfX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnZpZXdwb3J0LHI9dC53aWR0aCxuPXQuaGVpZ2h0O3JldHVybiBkLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJyZWFjdC1wZGZfX1BhZ2VfX3N2ZyIsc3R5bGU6e2Rpc3BsYXk6ImJsb2NrIixiYWNrZ3JvdW5kQ29sb3I6IndoaXRlIixvdmVyZmxvdzoiaGlkZGVuIix3aWR0aDpyLGhlaWdodDpuLHVzZXJTZWxlY3Q6Im5vbmUifSxyZWY6ZnVuY3Rpb24odCl7cmV0dXJuIGUuZHJhd1BhZ2VPbkNvbnRhaW5lcih0KX19KX19LHtrZXk6InZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5yb3RhdGUsbj1lLnNjYWxlO3JldHVybiB0LmdldFZpZXdwb3J0KHtzY2FsZTpuLHJvdGF0aW9uOnJ9KX19XSksdH0oZC5QdXJlQ29tcG9uZW50KTt0LlBhZ2VTVkdJbnRlcm5hbD1iLGIucHJvcFR5cGVzPXtvblJlbmRlckVycm9yOnAuZGVmYXVsdC5mdW5jLG9uUmVuZGVyU3VjY2VzczpwLmRlZmF1bHQuZnVuYyxwYWdlOnkuaXNQYWdlLmlzUmVxdWlyZWQscm90YXRlOnkuaXNSb3RhdGUsc2NhbGU6cC5kZWZhdWx0Lm51bWJlcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMSksYT1yKDEpO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmRlZmF1bHQ9ZnVuY3Rpb24oZSl7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KHYuZGVmYXVsdC5Db25zdW1lcixudWxsLChmdW5jdGlvbih0KXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoaywoMCxpLmRlZmF1bHQpKHt9LHQsZSkpfSkpfSx0LlRleHRMYXllckludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigxNCkpLHM9YShyKDE1KSksbD1hKHIoMikpLGM9YShyKDYpKSx1PWEocig3KSksZj1hKHIoMykpLGg9YShyKDkpKSxkPWEocig4KSkscD1hKHIoNSkpLG09bihyKDApKSxnPWEocig0KSksdj1hKHIoMTcpKSx5PWEocig4MSkpLGI9cigxMCksdz1yKDEzKSxrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoKXt2YXIgZSxyOygwLGwuZGVmYXVsdCkodGhpcyx0KTtmb3IodmFyIG49YXJndW1lbnRzLmxlbmd0aCxhPW5ldyBBcnJheShuKSxpPTA7aTxuO2krKylhW2ldPWFyZ3VtZW50c1tpXTtyZXR1cm4gcj0oMCx1LmRlZmF1bHQpKHRoaXMsKGU9KDAsZi5kZWZhdWx0KSh0KSkuY2FsbC5hcHBseShlLFt0aGlzXS5jb25jYXQoYSkpKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksInN0YXRlIix7dGV4dEl0ZW1zOm51bGx9KSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksImxvYWRUZXh0SXRlbXMiLCgwLHMuZGVmYXVsdCkoby5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGEsaTtyZXR1cm4gby5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiB0PXIucHJvcHMucGFnZSxlLnByZXY9MSxuPSgwLGIubWFrZUNhbmNlbGxhYmxlKSh0LmdldFRleHRDb250ZW50KCkpLHIucnVubmluZ1Rhc2s9bixlLm5leHQ9NixuLnByb21pc2U7Y2FzZSA2OmE9ZS5zZW50LGk9YS5pdGVtcyxyLnNldFN0YXRlKHt0ZXh0SXRlbXM6aX0sci5vbkxvYWRTdWNjZXNzKSxlLm5leHQ9MTQ7YnJlYWs7Y2FzZSAxMTplLnByZXY9MTEsZS50MD1lLmNhdGNoKDEpLHIub25Mb2FkRXJyb3IoZS50MCk7Y2FzZSAxNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyxbWzEsMTFdXSl9KSkpKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksIm9uTG9hZFN1Y2Nlc3MiLChmdW5jdGlvbigpe3ZhciBlPXIucHJvcHMub25HZXRUZXh0U3VjY2Vzcyx0PXIuc3RhdGUudGV4dEl0ZW1zOygwLGIuY2FsbElmRGVmaW5lZCkoZSx0KX0pKSwoMCxwLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KShyKSksIm9uTG9hZEVycm9yIiwoZnVuY3Rpb24oZSl7aWYoISgwLGIuaXNDYW5jZWxFeGNlcHRpb24pKGUpKXtyLnNldFN0YXRlKHt0ZXh0SXRlbXM6ITF9KSwoMCxiLmVycm9yT25EZXYpKGUpO3ZhciB0PXIucHJvcHMub25HZXRUZXh0RXJyb3I7KDAsYi5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSxyfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxjLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBhZ2UpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBwYWdlIHRleHQgY29udGVudCwgYnV0IG5vIHBhZ2Ugd2FzIHNwZWNpZmllZC4iKTt0aGlzLmxvYWRUZXh0SXRlbXMoKX19LHtrZXk6ImNvbXBvbmVudERpZFVwZGF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5wcm9wcy5wYWdlO2UucGFnZSYmdCE9PWUucGFnZSYmdGhpcy5sb2FkVGV4dEl0ZW1zKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxiLmNhbmNlbFJ1bm5pbmdUYXNrKSh0aGlzLnJ1bm5pbmdUYXNrKX19LHtrZXk6InJlbmRlclRleHRJdGVtcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLnRleHRJdGVtcztyZXR1cm4gZT9lLm1hcCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LCgwLGkuZGVmYXVsdCkoe2tleTp0LGl0ZW1JbmRleDp0fSxlKSl9KSk6bnVsbH19LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnVucm90YXRlZFZpZXdwb3J0LHQ9dGhpcy5yb3RhdGU7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LXBkZl9fUGFnZV9fdGV4dENvbnRlbnQiLHN0eWxlOntwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiNTAlIixsZWZ0OiI1MCUiLHdpZHRoOiIiLmNvbmNhdChlLndpZHRoLCJweCIpLGhlaWdodDoiIi5jb25jYXQoZS5oZWlnaHQsInB4IiksY29sb3I6InRyYW5zcGFyZW50Iix0cmFuc2Zvcm06InRyYW5zbGF0ZSgtNTAlLCAtNTAlKSByb3RhdGUoIi5jb25jYXQodCwiZGVnKSIpLHBvaW50ZXJFdmVudHM6Im5vbmUifX0sdGhpcy5yZW5kZXJUZXh0SXRlbXMoKSl9fSx7a2V5OiJ1bnJvdGF0ZWRWaWV3cG9ydCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGFnZSxyPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOnJ9KX19LHtrZXk6InJvdGF0ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcyx0PWUucGFnZTtyZXR1cm4gZS5yb3RhdGUtdC5yb3RhdGV9fV0pLHR9KG0uUHVyZUNvbXBvbmVudCk7dC5UZXh0TGF5ZXJJbnRlcm5hbD1rLGsucHJvcFR5cGVzPXtvbkdldFRleHRFcnJvcjpnLmRlZmF1bHQuZnVuYyxvbkdldFRleHRTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLHBhZ2U6dy5pc1BhZ2UuaXNSZXF1aXJlZCxyb3RhdGU6dy5pc1JvdGF0ZSxzY2FsZTpnLmRlZmF1bHQubnVtYmVyfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD1mdW5jdGlvbihlKXtyZXR1cm4gZy5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCh3LCgwLGkuZGVmYXVsdCkoe30sdCxlKSl9KSl9LHQuVGV4dExheWVySXRlbUludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigzNCkpLHM9YShyKDE0KSksbD1hKHIoMTUpKSxjPWEocigyKSksdT1hKHIoNikpLGY9YShyKDcpKSxoPWEocigzKSksZD1hKHIoOSkpLHA9YShyKDgpKSxtPWEocig1KSksZz1uKHIoMCkpLHY9YShyKDQpKSx5PWEocigxNykpLGI9cigxMyksdz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7dmFyIGUscjsoMCxjLmRlZmF1bHQpKHRoaXMsdCk7Zm9yKHZhciBuPWFyZ3VtZW50cy5sZW5ndGgsYT1uZXcgQXJyYXkobiksaT0wO2k8bjtpKyspYVtpXT1hcmd1bWVudHNbaV07cmV0dXJuIHI9KDAsZi5kZWZhdWx0KSh0aGlzLChlPSgwLGguZGVmYXVsdCkodCkpLmNhbGwuYXBwbHkoZSxbdGhpc10uY29uY2F0KGEpKSksKDAsbS5kZWZhdWx0KSgoMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLCJnZXRFbGVtZW50V2lkdGgiLChmdW5jdGlvbihlKXt2YXIgdD0oMCxwLmRlZmF1bHQpKCgwLHAuZGVmYXVsdCkocikpLnNpZGV3YXlzO3JldHVybiBlLmdldEJvdW5kaW5nQ2xpZW50UmVjdCgpW3Q/ImhlaWdodCI6IndpZHRoIl19KSkscn12YXIgcixuO3JldHVybigwLGQuZGVmYXVsdCkodCxlKSwoMCx1LmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWxpZ25UZXh0SXRlbSgpfX0se2tleToiY29tcG9uZW50RGlkVXBkYXRlIix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuYWxpZ25UZXh0SXRlbSgpfX0se2tleToiZ2V0Rm9udERhdGEiLHZhbHVlOihuPSgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIHIsbjtyZXR1cm4gcy5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOnJldHVybiByPXRoaXMucHJvcHMucGFnZSxlLm5leHQ9MyxuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7ci5jb21tb25PYmpzLmdldCh0LGUpfSkpO2Nhc2UgMzpyZXR1cm4gbj1lLnNlbnQsZS5hYnJ1cHQoInJldHVybiIsbik7Y2FzZSA1OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSksZnVuY3Rpb24oZSl7cmV0dXJuIG4uYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6ImFsaWduVGV4dEl0ZW0iLHZhbHVlOihyPSgwLGwuZGVmYXVsdCkocy5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxyLG4sYSxpLG8sbCxjLHUsZixoO3JldHVybiBzLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYodD10aGlzLml0ZW0pe2UubmV4dD0zO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIik7Y2FzZSAzOnJldHVybiB0LnN0eWxlLnRyYW5zZm9ybT0iIixyPXRoaXMucHJvcHMsbj1yLmZvbnROYW1lLGE9ci5zY2FsZSxpPXIud2lkdGgsdC5zdHlsZS5mb250RmFtaWx5PSIiLmNvbmNhdChuLCIsIHNhbnMtc2VyaWYiKSxlLm5leHQ9OCx0aGlzLmdldEZvbnREYXRhKG4pO2Nhc2UgODpvPWUuc2VudCxsPW8/by5mYWxsYmFja05hbWU6InNhbnMtc2VyaWYiLHQuc3R5bGUuZm9udEZhbWlseT0iIi5jb25jYXQobiwiLCAiKS5jb25jYXQobCksYz1pKmEsdT10aGlzLmdldEVsZW1lbnRXaWR0aCh0KSxmPSJzY2FsZVgoIi5jb25jYXQoYy91LCIpIiksKGg9bz9vLmFzY2VudDowKSYmKGYrPSIgdHJhbnNsYXRlWSgiLmNvbmNhdCgxMDAqKDEtaCksIiUpIikpLHQuc3R5bGUudHJhbnNmb3JtPWY7Y2FzZSAxNzpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKCl7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlbmRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLHQ9dGhpcy5mb250U2l6ZSxyPXRoaXMudG9wLG49dGhpcy5sZWZ0LGE9dGhpcy5wcm9wcyxpPWEuY3VzdG9tVGV4dFJlbmRlcmVyLG89YS5zY2FsZSxzPWEuc3RyO3JldHVybiBnLmRlZmF1bHQuY3JlYXRlRWxlbWVudCgic3BhbiIse3N0eWxlOntoZWlnaHQ6IjFlbSIsZm9udEZhbWlseToic2Fucy1zZXJpZiIsZm9udFNpemU6IiIuY29uY2F0KHQqbywicHgiKSxwb3NpdGlvbjoiYWJzb2x1dGUiLHRvcDoiIi5jb25jYXQocipvLCJweCIpLGxlZnQ6IiIuY29uY2F0KG4qbywicHgiKSx0cmFuc2Zvcm1PcmlnaW46ImxlZnQgYm90dG9tIix3aGl0ZVNwYWNlOiJwcmUiLHBvaW50ZXJFdmVudHM6ImFsbCJ9LHJlZjpmdW5jdGlvbih0KXtlLml0ZW09dH19LGk/aSh0aGlzLnByb3BzKTpzKX19LHtrZXk6InVucm90YXRlZFZpZXdwb3J0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlLHI9ZS5zY2FsZTtyZXR1cm4gdC5nZXRWaWV3cG9ydCh7c2NhbGU6cn0pfX0se2tleToicm90YXRlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnByb3BzLHQ9ZS5wYWdlO3JldHVybiBlLnJvdGF0ZS10LnJvdGF0ZX19LHtrZXk6InNpZGV3YXlzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb3RhdGUlMTgwIT0wfX0se2tleToiZGVmYXVsdFNpZGV3YXlzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy51bnJvdGF0ZWRWaWV3cG9ydC5yb3RhdGlvbiUxODAhPTB9fSx7a2V5OiJmb250U2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLmRlZmF1bHRTaWRld2F5cyxyPSgwLG8uZGVmYXVsdCkoZSwyKSxuPXJbMF0sYT1yWzFdO3JldHVybiB0P2E6bn19LHtrZXk6InRvcCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLnVucm90YXRlZFZpZXdwb3J0LHI9dGhpcy5kZWZhdWx0U2lkZXdheXMsbj0oMCxvLmRlZmF1bHQpKGUsNiksYT1uWzJdLGk9blszXSxzPW5bNF0sbD1uWzVdLGM9KDAsby5kZWZhdWx0KSh0LnZpZXdCb3gsNCksdT1jWzFdLGY9Y1szXTtyZXR1cm4gcj9zK2ErdTpmLShsK2kpfX0se2tleToibGVmdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wcm9wcy50cmFuc2Zvcm0sdD10aGlzLnVucm90YXRlZFZpZXdwb3J0LHI9dGhpcy5kZWZhdWx0U2lkZXdheXMsbj0oMCxvLmRlZmF1bHQpKGUsNiksYT1uWzRdLGk9bls1XSxzPSgwLG8uZGVmYXVsdCkodC52aWV3Qm94LDEpWzBdO3JldHVybiByP2ktczphLXN9fV0pLHR9KGcuUHVyZUNvbXBvbmVudCk7dC5UZXh0TGF5ZXJJdGVtSW50ZXJuYWw9dyx3LnByb3BUeXBlcz17Y3VzdG9tVGV4dFJlbmRlcmVyOnYuZGVmYXVsdC5mdW5jLGZvbnROYW1lOnYuZGVmYXVsdC5zdHJpbmcuaXNSZXF1aXJlZCxpdGVtSW5kZXg6di5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkLHBhZ2U6Yi5pc1BhZ2UuaXNSZXF1aXJlZCxyb3RhdGU6Yi5pc1JvdGF0ZSxzY2FsZTp2LmRlZmF1bHQubnVtYmVyLHN0cjp2LmRlZmF1bHQuc3RyaW5nLmlzUmVxdWlyZWQsdHJhbnNmb3JtOnYuZGVmYXVsdC5hcnJheU9mKHYuZGVmYXVsdC5udW1iZXIpLmlzUmVxdWlyZWQsd2lkdGg6di5kZWZhdWx0Lm51bWJlci5pc1JlcXVpcmVkfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDExKSxhPXIoMSk7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZGVmYXVsdD10LkFubm90YXRpb25MYXllckludGVybmFsPXZvaWQgMDt2YXIgaT1hKHIoMTIpKSxvPWEocigxNCkpLHM9YShyKDE1KSksbD1hKHIoMikpLGM9YShyKDYpKSx1PWEocig3KSksZj1hKHIoMykpLGg9YShyKDkpKSxkPWEocig4KSkscD1hKHIoNSkpLG09bihyKDApKSxnPWEocig0KSksdj1hKHIoMjApKSx5PWEocigxOSkpLGI9YShyKDE3KSksdz1yKDEwKSxrPXIoMTMpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdCgpe3ZhciBlLHI7KDAsbC5kZWZhdWx0KSh0aGlzLHQpO2Zvcih2YXIgbj1hcmd1bWVudHMubGVuZ3RoLGE9bmV3IEFycmF5KG4pLGk9MDtpPG47aSsrKWFbaV09YXJndW1lbnRzW2ldO3JldHVybiByPSgwLHUuZGVmYXVsdCkodGhpcywoZT0oMCxmLmRlZmF1bHQpKHQpKS5jYWxsLmFwcGx5KGUsW3RoaXNdLmNvbmNhdChhKSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwic3RhdGUiLHthbm5vdGF0aW9uczpudWxsfSksKDAscC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKCgwLGQuZGVmYXVsdCkocikpLCJsb2FkQW5ub3RhdGlvbnMiLCgwLHMuZGVmYXVsdCkoby5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUoKXt2YXIgdCxuLGE7cmV0dXJuIG8uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gdD1yLnByb3BzLnBhZ2UsZS5wcmV2PTEsbj0oMCx3Lm1ha2VDYW5jZWxsYWJsZSkodC5nZXRBbm5vdGF0aW9ucygpKSxyLnJ1bm5pbmdUYXNrPW4sZS5uZXh0PTYsbi5wcm9taXNlO2Nhc2UgNjphPWUuc2VudCxyLnNldFN0YXRlKHthbm5vdGF0aW9uczphfSxyLm9uTG9hZFN1Y2Nlc3MpLGUubmV4dD0xMzticmVhaztjYXNlIDEwOmUucHJldj0xMCxlLnQwPWUuY2F0Y2goMSksci5vbkxvYWRFcnJvcihlLnQwKTtjYXNlIDEzOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMSwxMF1dKX0pKSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25Mb2FkU3VjY2VzcyIsKGZ1bmN0aW9uKCl7dmFyIGU9ci5wcm9wcy5vbkdldEFubm90YXRpb25zU3VjY2Vzcyx0PXIuc3RhdGUuYW5ub3RhdGlvbnM7KDAsdy5jYWxsSWZEZWZpbmVkKShlLHQpfSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25Mb2FkRXJyb3IiLChmdW5jdGlvbihlKXtpZighKDAsdy5pc0NhbmNlbEV4Y2VwdGlvbikoZSkpe3Iuc2V0U3RhdGUoe2Fubm90YXRpb25zOiExfSksKDAsdy5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uR2V0QW5ub3RhdGlvbnNFcnJvcjsoMCx3LmNhbGxJZkRlZmluZWQpKHQsZSl9fSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25SZW5kZXJTdWNjZXNzIiwoZnVuY3Rpb24oKXt2YXIgZT1yLnByb3BzLm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyU3VjY2VzczsoMCx3LmNhbGxJZkRlZmluZWQpKGUpfSkpLCgwLHAuZGVmYXVsdCkoKDAsZC5kZWZhdWx0KSgoMCxkLmRlZmF1bHQpKHIpKSwib25SZW5kZXJFcnJvciIsKGZ1bmN0aW9uKGUpe2lmKCEoMCx3LmlzQ2FuY2VsRXhjZXB0aW9uKShlKSl7KDAsdy5lcnJvck9uRGV2KShlKTt2YXIgdD1yLnByb3BzLm9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I7KDAsdy5jYWxsSWZEZWZpbmVkKSh0LGUpfX0pKSxyfXJldHVybigwLGguZGVmYXVsdCkodCxlKSwoMCxjLmRlZmF1bHQpKHQsW3trZXk6ImNvbXBvbmVudERpZE1vdW50Iix2YWx1ZTpmdW5jdGlvbigpe2lmKCF0aGlzLnByb3BzLnBhZ2UpdGhyb3cgbmV3IEVycm9yKCJBdHRlbXB0ZWQgdG8gbG9hZCBwYWdlIGFubm90YXRpb25zLCBidXQgbm8gcGFnZSB3YXMgc3BlY2lmaWVkLiIpO3RoaXMubG9hZEFubm90YXRpb25zKCl9fSx7a2V5OiJjb21wb25lbnREaWRVcGRhdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LnBhZ2Usbj10LnJlbmRlckludGVyYWN0aXZlRm9ybXM7KGUucGFnZSYmciE9PWUucGFnZXx8biE9PWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcykmJnRoaXMubG9hZEFubm90YXRpb25zKCl9fSx7a2V5OiJjb21wb25lbnRXaWxsVW5tb3VudCIsdmFsdWU6ZnVuY3Rpb24oKXsoMCx3LmNhbmNlbFJ1bm5pbmdUYXNrKSh0aGlzLnJ1bm5pbmdUYXNrKX19LHtrZXk6InJlbmRlckFubm90YXRpb25MYXllciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlLmFubm90YXRpb25zO2lmKGUpe3ZhciB0PXRoaXMucHJvcHMscj10LmxpbmtTZXJ2aWNlLG49dC5wYWdlLGE9dC5yZW5kZXJJbnRlcmFjdGl2ZUZvcm1zLGk9dGhpcy52aWV3cG9ydC5jbG9uZSh7ZG9udEZsaXA6ITB9KSxvPXthbm5vdGF0aW9uczplLGRpdjp0aGlzLmFubm90YXRpb25MYXllcixsaW5rU2VydmljZTpyLHBhZ2U6bixyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOmEsdmlld3BvcnQ6aX07dGhpcy5hbm5vdGF0aW9uTGF5ZXIuaW5uZXJIVE1MPSIiO3RyeXt2LmRlZmF1bHQuQW5ub3RhdGlvbkxheWVyLnJlbmRlcihvKSx0aGlzLm9uUmVuZGVyU3VjY2VzcygpfWNhdGNoKGUpe3RoaXMub25SZW5kZXJFcnJvcihlKX19fX0se2tleToicmVuZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXM7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6InJlYWN0LXBkZl9fUGFnZV9fYW5ub3RhdGlvbnMgYW5ub3RhdGlvbkxheWVyIixyZWY6ZnVuY3Rpb24odCl7ZS5hbm5vdGF0aW9uTGF5ZXI9dH19LHRoaXMucmVuZGVyQW5ub3RhdGlvbkxheWVyKCkpfX0se2tleToidmlld3BvcnQiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcHMsdD1lLnBhZ2Uscj1lLnJvdGF0ZSxuPWUuc2NhbGU7cmV0dXJuIHQuZ2V0Vmlld3BvcnQoe3NjYWxlOm4scm90YXRpb246cn0pfX1dKSx0fShtLlB1cmVDb21wb25lbnQpO3QuQW5ub3RhdGlvbkxheWVySW50ZXJuYWw9UyxTLnByb3BUeXBlcz17bGlua1NlcnZpY2U6ay5pc0xpbmtTZXJ2aWNlLmlzUmVxdWlyZWQsb25HZXRBbm5vdGF0aW9uc0Vycm9yOmcuZGVmYXVsdC5mdW5jLG9uR2V0QW5ub3RhdGlvbnNTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLG9uUmVuZGVyQW5ub3RhdGlvbkxheWVyRXJyb3I6Zy5kZWZhdWx0LmZ1bmMsb25SZW5kZXJBbm5vdGF0aW9uTGF5ZXJTdWNjZXNzOmcuZGVmYXVsdC5mdW5jLHBhZ2U6ay5pc1BhZ2UscmVuZGVySW50ZXJhY3RpdmVGb3JtczpnLmRlZmF1bHQuYm9vbCxyb3RhdGU6ay5pc1JvdGF0ZSxzY2FsZTpnLmRlZmF1bHQubnVtYmVyfTt2YXIgXz1mdW5jdGlvbihlKXtyZXR1cm4gbS5kZWZhdWx0LmNyZWF0ZUVsZW1lbnQoeS5kZWZhdWx0LkNvbnN1bWVyLG51bGwsKGZ1bmN0aW9uKHQpe3JldHVybiBtLmRlZmF1bHQuY3JlYXRlRWxlbWVudChiLmRlZmF1bHQuQ29uc3VtZXIsbnVsbCwoZnVuY3Rpb24ocil7cmV0dXJuIG0uZGVmYXVsdC5jcmVhdGVFbGVtZW50KFMsKDAsaS5kZWZhdWx0KSh7fSx0LHIsZSkpfSkpfSkpfTt0LmRlZmF1bHQ9X30sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0KXsoZnVuY3Rpb24oKXt2YXIgcixuLGEsaSxvLHM7InVuZGVmaW5lZCIhPXR5cGVvZiBwZXJmb3JtYW5jZSYmbnVsbCE9PXBlcmZvcm1hbmNlJiZwZXJmb3JtYW5jZS5ub3c/ZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIHBlcmZvcm1hbmNlLm5vdygpfTpudWxsIT10JiZ0LmhydGltZT8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKHIoKS1vKS8xZTZ9LG49dC5ocnRpbWUsaT0ocj1mdW5jdGlvbigpe3ZhciBlO3JldHVybiAxZTkqKGU9bigpKVswXStlWzFdfSkoKSxzPTFlOSp0LnVwdGltZSgpLG89aS1zKTpEYXRlLm5vdz8oZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuIERhdGUubm93KCktYX0sYT1EYXRlLm5vdygpKTooZS5leHBvcnRzPWZ1bmN0aW9uKCl7cmV0dXJuKG5ldyBEYXRlKS5nZXRUaW1lKCktYX0sYT0obmV3IERhdGUpLmdldFRpbWUoKSl9KS5jYWxsKHRoaXMpfSkuY2FsbCh0aGlzLHIoMjQpKX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoODUpLGE9cig4Nik7InN0cmluZyI9PXR5cGVvZihhPWEuX19lc01vZHVsZT9hLmRlZmF1bHQ6YSkmJihhPVtbZS5pLGEsIiJdXSk7dmFyIGk9e2luc2VydDoiaGVhZCIsc2luZ2xldG9uOiExfSxvPShuKGUuaSxhLGkpLGEubG9jYWxzP2EubG9jYWxzOnt9KTtlLmV4cG9ydHM9b30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPWZ1bmN0aW9uKCl7cmV0dXJuIHZvaWQgMD09PW4mJihuPUJvb2xlYW4od2luZG93JiZkb2N1bWVudCYmZG9jdW1lbnQuYWxsJiYhd2luZG93LmF0b2IpKSxufSxpPWZ1bmN0aW9uKCl7dmFyIGU9e307cmV0dXJuIGZ1bmN0aW9uKHQpe2lmKHZvaWQgMD09PWVbdF0pe3ZhciByPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IodCk7aWYod2luZG93LkhUTUxJRnJhbWVFbGVtZW50JiZyIGluc3RhbmNlb2Ygd2luZG93LkhUTUxJRnJhbWVFbGVtZW50KXRyeXtyPXIuY29udGVudERvY3VtZW50LmhlYWR9Y2F0Y2goZSl7cj1udWxsfWVbdF09cn1yZXR1cm4gZVt0XX19KCksbz17fTtmdW5jdGlvbiBzKGUsdCxyKXtmb3IodmFyIG49MDtuPHQubGVuZ3RoO24rKyl7dmFyIGE9e2Nzczp0W25dWzFdLG1lZGlhOnRbbl1bMl0sc291cmNlTWFwOnRbbl1bM119O29bZV1bbl0/b1tlXVtuXShhKTpvW2VdLnB1c2gobShhLHIpKX19ZnVuY3Rpb24gbChlKXt2YXIgdD1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJzdHlsZSIpLG49ZS5hdHRyaWJ1dGVzfHx7fTtpZih2b2lkIDA9PT1uLm5vbmNlKXt2YXIgYT1yLm5jO2EmJihuLm5vbmNlPWEpfWlmKE9iamVjdC5rZXlzKG4pLmZvckVhY2goKGZ1bmN0aW9uKGUpe3Quc2V0QXR0cmlidXRlKGUsbltlXSl9KSksImZ1bmN0aW9uIj09dHlwZW9mIGUuaW5zZXJ0KWUuaW5zZXJ0KHQpO2Vsc2V7dmFyIG89aShlLmluc2VydHx8ImhlYWQiKTtpZighbyl0aHJvdyBuZXcgRXJyb3IoIkNvdWxkbid0IGZpbmQgYSBzdHlsZSB0YXJnZXQuIFRoaXMgcHJvYmFibHkgbWVhbnMgdGhhdCB0aGUgdmFsdWUgZm9yIHRoZSAnaW5zZXJ0JyBwYXJhbWV0ZXIgaXMgaW52YWxpZC4iKTtvLmFwcGVuZENoaWxkKHQpfXJldHVybiB0fXZhciBjLHU9KGM9W10sZnVuY3Rpb24oZSx0KXtyZXR1cm4gY1tlXT10LGMuZmlsdGVyKEJvb2xlYW4pLmpvaW4oIlxuIil9KTtmdW5jdGlvbiBmKGUsdCxyLG4pe3ZhciBhPXI/IiI6bi5jc3M7aWYoZS5zdHlsZVNoZWV0KWUuc3R5bGVTaGVldC5jc3NUZXh0PXUodCxhKTtlbHNle3ZhciBpPWRvY3VtZW50LmNyZWF0ZVRleHROb2RlKGEpLG89ZS5jaGlsZE5vZGVzO29bdF0mJmUucmVtb3ZlQ2hpbGQob1t0XSksby5sZW5ndGg/ZS5pbnNlcnRCZWZvcmUoaSxvW3RdKTplLmFwcGVuZENoaWxkKGkpfX1mdW5jdGlvbiBoKGUsdCxyKXt2YXIgbj1yLmNzcyxhPXIubWVkaWEsaT1yLnNvdXJjZU1hcDtpZihhP2Uuc2V0QXR0cmlidXRlKCJtZWRpYSIsYSk6ZS5yZW1vdmVBdHRyaWJ1dGUoIm1lZGlhIiksaSYmYnRvYSYmKG4rPSJcbi8qIyBzb3VyY2VNYXBwaW5nVVJMPWRhdGE6YXBwbGljYXRpb24vanNvbjtiYXNlNjQsIi5jb25jYXQoYnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkoaSkpKSksIiAqLyIpKSxlLnN0eWxlU2hlZXQpZS5zdHlsZVNoZWV0LmNzc1RleHQ9bjtlbHNle2Zvcig7ZS5maXJzdENoaWxkOyllLnJlbW92ZUNoaWxkKGUuZmlyc3RDaGlsZCk7ZS5hcHBlbmRDaGlsZChkb2N1bWVudC5jcmVhdGVUZXh0Tm9kZShuKSl9fXZhciBkPW51bGwscD0wO2Z1bmN0aW9uIG0oZSx0KXt2YXIgcixuLGE7aWYodC5zaW5nbGV0b24pe3ZhciBpPXArKztyPWR8fChkPWwodCkpLG49Zi5iaW5kKG51bGwscixpLCExKSxhPWYuYmluZChudWxsLHIsaSwhMCl9ZWxzZSByPWwodCksbj1oLmJpbmQobnVsbCxyLHQpLGE9ZnVuY3Rpb24oKXshZnVuY3Rpb24oZSl7aWYobnVsbD09PWUucGFyZW50Tm9kZSlyZXR1cm4hMTtlLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQoZSl9KHIpfTtyZXR1cm4gbihlKSxmdW5jdGlvbih0KXtpZih0KXtpZih0LmNzcz09PWUuY3NzJiZ0Lm1lZGlhPT09ZS5tZWRpYSYmdC5zb3VyY2VNYXA9PT1lLnNvdXJjZU1hcClyZXR1cm47bihlPXQpfWVsc2UgYSgpfX1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3JldHVybihyPXJ8fHt9KS5zaW5nbGV0b258fCJib29sZWFuIj09dHlwZW9mIHIuc2luZ2xldG9ufHwoci5zaW5nbGV0b249YSgpKSxlPXIuYmFzZT9lK3IuYmFzZTplLHQ9dHx8W10sb1tlXXx8KG9bZV09W10pLHMoZSx0LHIpLGZ1bmN0aW9uKHQpe2lmKHQ9dHx8W10sIltvYmplY3QgQXJyYXldIj09PU9iamVjdC5wcm90b3R5cGUudG9TdHJpbmcuY2FsbCh0KSl7b1tlXXx8KG9bZV09W10pLHMoZSx0LHIpO2Zvcih2YXIgbj10Lmxlbmd0aDtuPG9bZV0ubGVuZ3RoO24rKylvW2VdW25dKCk7b1tlXS5sZW5ndGg9dC5sZW5ndGgsMD09PW9bZV0ubGVuZ3RoJiZkZWxldGUgb1tlXX19fX0sZnVuY3Rpb24oZSx0LHIpeyh0PXIoODcpKCExKSkucHVzaChbZS5pLCJib2R5IHtcbiAgbWFyZ2luOiAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNTI1NjU5O1xuICBjb2xvcjogI2ZmZjtcbiAgZm9udC1mYW1pbHk6IEhlbHZldGljYSwgQXJpYWwsIHNhbnMtc2VyaWY7XG59XG4uUmVhZGVyIHtcbiAgaGVpZ2h0OiAxMDB2aDtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVycyB7XG4gIHBvc2l0aW9uOiBmaXhlZDtcbiAgdG9wOiAwcHg7XG4gIHdpZHRoOiAxMDAlO1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmc6IDVweDtcbiAgYmFja2dyb3VuZC1jb2xvcjogIzU2NTc1OTtcbiAgei1pbmRleDogMTAwO1xufVxuLlJlYWRlcl9fY29udGFpbmVyX19udW1iZXJzX19jb250ZW50IHtcbiAgZm9udC1zaXplOiAwLjY1cmVtO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG4gIHBhZGRpbmc6IDVweDtcbiAgYm9yZGVyLXJhZGl1czogNHB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDI1NSwgMjU1LCAyNTUsIDAuMTQ0KTtcbiAgd2lkdGg6IDUwcHg7XG4gIG1hcmdpbjogYXV0bztcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fbmF2aWdhdGUge1xuICBwb3NpdGlvbjogZml4ZWQ7XG4gIGJvdHRvbTogMHB4O1xuICB3aWR0aDogMTAwJTtcbiAgbWFyZ2luOiBhdXRvO1xuICBkaXNwbGF5OiBmbGV4O1xuICBqdXN0aWZ5LWNvbnRlbnQ6IHNwYWNlLWFyb3VuZDtcbiAgYWxpZ24taXRlbXM6IGNlbnRlcjtcbiAgei1pbmRleDogMTAwO1xuICBiYWNrZ3JvdW5kLWNvbG9yOiAjNDA1YTY1O1xufVxuLlJlYWRlcl9fY29udGFpbmVyX19uYXZpZ2F0ZV9fYXJyb3cge1xuICBmb250LXNpemU6IDIuNWVtO1xuICBtYXJnaW46IDEwcHg7XG4gIHdpZHRoOiAxMDBweDtcbiAgbWFyZ2luOiBhdXRvO1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyIHtcbiAgcG9zaXRpb246IGZpeGVkO1xuICBib3R0b206IDYwcHg7XG4gIHJpZ2h0OiAxNXB4O1xuICBiYWNrZ3JvdW5kLWNvbG9yOiByZ2JhKDAsIDAsIDAsIDAuOSk7XG4gIHotaW5kZXg6IDEwMTtcbiAgZmxleDogMTtcbiAganVzdGlmeS1jb250ZW50OiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyX19idXR0b24ge1xuICBmb250LXNpemU6IDIuNWVtO1xuICBtYXJnaW46IDU7XG4gIHdpZHRoOiA1MHB4O1xuICB0ZXh0LWFsaWduOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX2xvYWQge1xuICBtYXJnaW4tdG9wOiAxZW07XG4gIGNvbG9yOiB3aGl0ZTtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQge1xuICBtYXJnaW46IGF1dG87XG4gIHBhZGRpbmctdG9wOiA0MHB4O1xuICBwYWRkaW5nLWJvdHRvbTogNTBweDtcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQgLnJlYWN0LXBkZl9fRG9jdW1lbnQgc3BhbiB7XG4gIGRpc3BsYXk6IGZsZXg7XG4gIGZsZXgtZGlyZWN0aW9uOiBjb2x1bW47XG4gIGFsaWduLWl0ZW1zOiBjZW50ZXI7XG59XG4uUmVhZGVyX19jb250YWluZXJfX2RvY3VtZW50IC5yZWFjdC1wZGZfX1BhZ2Uge1xuICBkaXNwbGF5OiBibG9jaztcbn1cbi5SZWFkZXJfX2NvbnRhaW5lcl9fZG9jdW1lbnQgLnJlYWN0LXBkZl9fUGFnZSBjYW52YXMge1xuICBtYXJnaW46IGF1dG87XG59XG4uUmVhZGVyX19jb250YWluZXJfX2RvY3VtZW50IC5yZWFjdC1wZGZfX1BhZ2VfX2Fubm90YXRpb25zIHtcbiAgZGlzcGxheTogbm9uZTtcbn1cbiIsIiJdKSxlLmV4cG9ydHM9dH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9W107cmV0dXJuIHQudG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5tYXAoKGZ1bmN0aW9uKHQpe3ZhciByPWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZVsxXXx8IiIsbj1lWzNdO2lmKCFuKXJldHVybiByO2lmKHQmJiJmdW5jdGlvbiI9PXR5cGVvZiBidG9hKXt2YXIgYT0obz1uLHM9YnRvYSh1bmVzY2FwZShlbmNvZGVVUklDb21wb25lbnQoSlNPTi5zdHJpbmdpZnkobykpKSksbD0ic291cmNlTWFwcGluZ1VSTD1kYXRhOmFwcGxpY2F0aW9uL2pzb247Y2hhcnNldD11dGYtODtiYXNlNjQsIi5jb25jYXQocyksIi8qIyAiLmNvbmNhdChsLCIgKi8iKSksaT1uLnNvdXJjZXMubWFwKChmdW5jdGlvbihlKXtyZXR1cm4iLyojIHNvdXJjZVVSTD0iLmNvbmNhdChuLnNvdXJjZVJvb3R8fCIiKS5jb25jYXQoZSwiICovIil9KSk7cmV0dXJuW3JdLmNvbmNhdChpKS5jb25jYXQoW2FdKS5qb2luKCJcbiIpfXZhciBvLHMsbDtyZXR1cm5bcl0uam9pbigiXG4iKX0odCxlKTtyZXR1cm4gdFsyXT8iQG1lZGlhICIuY29uY2F0KHRbMl0sIiB7IikuY29uY2F0KHIsIn0iKTpyfSkpLmpvaW4oIiIpfSx0Lmk9ZnVuY3Rpb24oZSxyKXsic3RyaW5nIj09dHlwZW9mIGUmJihlPVtbbnVsbCxlLCIiXV0pO2Zvcih2YXIgbj0wO248ZS5sZW5ndGg7bisrKXt2YXIgYT1bXS5jb25jYXQoZVtuXSk7ciYmKGFbMl0/YVsyXT0iIi5jb25jYXQociwiIGFuZCAiKS5jb25jYXQoYVsyXSk6YVsyXT1yKSx0LnB1c2goYSl9fSx0fX0sZnVuY3Rpb24oZSx0LHIpeyhmdW5jdGlvbih0LHIsbil7dmFyIGE7YT1mdW5jdGlvbigpe3JldHVybiBmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmQ9ZnVuY3Rpb24oZSx0LG4pe3IubyhlLHQpfHxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSx0LHtlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIucj1mdW5jdGlvbihlKXsidW5kZWZpbmVkIiE9dHlwZW9mIFN5bWJvbCYmU3ltYm9sLnRvU3RyaW5nVGFnJiZPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxTeW1ib2wudG9TdHJpbmdUYWcse3ZhbHVlOiJNb2R1bGUifSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pfSxyLnQ9ZnVuY3Rpb24oZSx0KXtpZigxJnQmJihlPXIoZSkpLDgmdClyZXR1cm4gZTtpZig0JnQmJiJvYmplY3QiPT10eXBlb2YgZSYmZSYmZS5fX2VzTW9kdWxlKXJldHVybiBlO3ZhciBuPU9iamVjdC5jcmVhdGUobnVsbCk7aWYoci5yKG4pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShuLCJkZWZhdWx0Iix7ZW51bWVyYWJsZTohMCx2YWx1ZTplfSksMiZ0JiYic3RyaW5nIiE9dHlwZW9mIGUpZm9yKHZhciBhIGluIGUpci5kKG4sYSxmdW5jdGlvbih0KXtyZXR1cm4gZVt0XX0uYmluZChudWxsLGEpKTtyZXR1cm4gbn0sci5uPWZ1bmN0aW9uKGUpe3ZhciB0PWUmJmUuX19lc01vZHVsZT9mdW5jdGlvbigpe3JldHVybiBlLmRlZmF1bHR9OmZ1bmN0aW9uKCl7cmV0dXJuIGV9O3JldHVybiByLmQodCwiYSIsdCksdH0sci5vPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIE9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpfSxyLnA9IiIscihyLnM9MCl9KFtmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMSk7dC5Xb3JrZXJNZXNzYWdlSGFuZGxlcj1uLldvcmtlck1lc3NhZ2VIYW5kbGVyfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lldvcmtlck1lc3NhZ2VIYW5kbGVyPXQuV29ya2VyVGFzaz12b2lkIDA7dmFyIG49YyhyKDIpKSxhPXIoNiksaT1yKDE1MSksbz1jKHIoOSkpLHM9cigxODkpLGw9cigxNTUpO2Z1bmN0aW9uIGMoZSl7cmV0dXJuIGUmJmUuX19lc01vZHVsZT9lOntkZWZhdWx0OmV9fWZ1bmN0aW9uIHUoZSl7cmV0dXJuKHU9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBmKGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiBoKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZChlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXtoKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXtoKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubmFtZT1lLHRoaXMudGVybWluYXRlZD0hMSx0aGlzLl9jYXBhYmlsaXR5PSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQgZmluaXNoZWQoKXtyZXR1cm4gdGhpcy5fY2FwYWJpbGl0eS5wcm9taXNlfSxmaW5pc2g6ZnVuY3Rpb24oKXt0aGlzLl9jYXBhYmlsaXR5LnJlc29sdmUoKX0sdGVybWluYXRlOmZ1bmN0aW9uKCl7dGhpcy50ZXJtaW5hdGVkPSEwfSxlbnN1cmVOb3RUZXJtaW5hdGVkOmZ1bmN0aW9uKCl7aWYodGhpcy50ZXJtaW5hdGVkKXRocm93IG5ldyBFcnJvcigiV29ya2VyIHRhc2sgd2FzIHRlcm1pbmF0ZWQiKX19LGV9KCk7dC5Xb3JrZXJUYXNrPXA7dmFyIG0sZz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5fbXNnSGFuZGxlcj1lLHRoaXMuX2NvbnRlbnRMZW5ndGg9bnVsbCx0aGlzLl9mdWxsUmVxdWVzdFJlYWRlcj1udWxsLHRoaXMuX3JhbmdlUmVxdWVzdFJlYWRlcnM9W119ZnVuY3Rpb24gdChlKXt2YXIgdD10aGlzO3RoaXMuX21zZ0hhbmRsZXI9ZSx0aGlzLl9jb250ZW50TGVuZ3RoPW51bGwsdGhpcy5faXNSYW5nZVN1cHBvcnRlZD0hMSx0aGlzLl9pc1N0cmVhbWluZ1N1cHBvcnRlZD0hMTt2YXIgcj10aGlzLl9tc2dIYW5kbGVyLnNlbmRXaXRoU3RyZWFtKCJHZXRSZWFkZXIiKTt0aGlzLl9yZWFkZXI9ci5nZXRSZWFkZXIoKSx0aGlzLl9oZWFkZXJzUmVhZHk9dGhpcy5fbXNnSGFuZGxlci5zZW5kV2l0aFByb21pc2UoIlJlYWRlckhlYWRlcnNSZWFkeSIpLnRoZW4oKGZ1bmN0aW9uKGUpe3QuX2lzU3RyZWFtaW5nU3VwcG9ydGVkPWUuaXNTdHJlYW1pbmdTdXBwb3J0ZWQsdC5faXNSYW5nZVN1cHBvcnRlZD1lLmlzUmFuZ2VTdXBwb3J0ZWQsdC5fY29udGVudExlbmd0aD1lLmNvbnRlbnRMZW5ndGh9KSl9ZnVuY3Rpb24gcihlLHQscil7dGhpcy5fbXNnSGFuZGxlcj1yLHRoaXMub25Qcm9ncmVzcz1udWxsO3ZhciBuPXRoaXMuX21zZ0hhbmRsZXIuc2VuZFdpdGhTdHJlYW0oIkdldFJhbmdlUmVhZGVyIix7YmVnaW46ZSxlbmQ6dH0pO3RoaXMuX3JlYWRlcj1uLmdldFJlYWRlcigpfXJldHVybiBlLnByb3RvdHlwZT17Z2V0RnVsbFJlYWRlcjpmdW5jdGlvbigpe3JldHVybigwLGEuYXNzZXJ0KSghdGhpcy5fZnVsbFJlcXVlc3RSZWFkZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyPW5ldyB0KHRoaXMuX21zZ0hhbmRsZXIpLHRoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyfSxnZXRSYW5nZVJlYWRlcjpmdW5jdGlvbihlLHQpe3ZhciBuPW5ldyByKGUsdCx0aGlzLl9tc2dIYW5kbGVyKTtyZXR1cm4gdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5wdXNoKG4pLG59LGNhbmNlbEFsbFJlcXVlc3RzOmZ1bmN0aW9uKGUpe3RoaXMuX2Z1bGxSZXF1ZXN0UmVhZGVyJiZ0aGlzLl9mdWxsUmVxdWVzdFJlYWRlci5jYW5jZWwoZSksdGhpcy5fcmFuZ2VSZXF1ZXN0UmVhZGVycy5zbGljZSgwKS5mb3JFYWNoKChmdW5jdGlvbih0KXt0LmNhbmNlbChlKX0pKX19LHQucHJvdG90eXBlPXtnZXQgaGVhZGVyc1JlYWR5KCl7cmV0dXJuIHRoaXMuX2hlYWRlcnNSZWFkeX0sZ2V0IGNvbnRlbnRMZW5ndGgoKXtyZXR1cm4gdGhpcy5fY29udGVudExlbmd0aH0sZ2V0IGlzU3RyZWFtaW5nU3VwcG9ydGVkKCl7cmV0dXJuIHRoaXMuX2lzU3RyZWFtaW5nU3VwcG9ydGVkfSxnZXQgaXNSYW5nZVN1cHBvcnRlZCgpe3JldHVybiB0aGlzLl9pc1JhbmdlU3VwcG9ydGVkfSxyZWFkOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3JlYWRlci5yZWFkKCkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTtyZXR1cm4gZS5kb25lP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06e3ZhbHVlOnQuYnVmZmVyLGRvbmU6ITF9fSkpfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dGhpcy5fcmVhZGVyLmNhbmNlbChlKX19LHIucHJvdG90eXBlPXtnZXQgaXNTdHJlYW1pbmdTdXBwb3J0ZWQoKXtyZXR1cm4hMX0scmVhZDpmdW5jdGlvbigpe3JldHVybiB0aGlzLl9yZWFkZXIucmVhZCgpLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUudmFsdWU7cmV0dXJuIGUuZG9uZT97dmFsdWU6dm9pZCAwLGRvbmU6ITB9Ont2YWx1ZTp0LmJ1ZmZlcixkb25lOiExfX0pKX0sY2FuY2VsOmZ1bmN0aW9uKGUpe3RoaXMuX3JlYWRlci5jYW5jZWwoZSl9fSxlfSgpLHY9e3NldHVwOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ITE7ZS5vbigidGVzdCIsKGZ1bmN0aW9uKHQpe2lmKCFyKWlmKHI9ITAsdCBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpe3ZhciBuPTI1NT09PXRbMF07ZS5wb3N0TWVzc2FnZVRyYW5zZmVycz1uO3ZhciBhPW5ldyBYTUxIdHRwUmVxdWVzdCxpPSJyZXNwb25zZSJpbiBhO3RyeXthLnJlc3BvbnNlVHlwZX1jYXRjaChlKXtpPSExfWk/ZS5zZW5kKCJ0ZXN0Iix7c3VwcG9ydFR5cGVkQXJyYXk6ITAsc3VwcG9ydFRyYW5zZmVyczpufSk6ZS5zZW5kKCJ0ZXN0IiwhMSl9ZWxzZSBlLnNlbmQoInRlc3QiLCExKX0pKSxlLm9uKCJjb25maWd1cmUiLChmdW5jdGlvbihlKXsoMCxhLnNldFZlcmJvc2l0eUxldmVsKShlLnZlcmJvc2l0eSl9KSksZS5vbigiR2V0RG9jUmVxdWVzdCIsKGZ1bmN0aW9uKGUpe3JldHVybiB2LmNyZWF0ZURvY3VtZW50SGFuZGxlcihlLHQpfSkpfSxjcmVhdGVEb2N1bWVudEhhbmRsZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcixvPSExLGM9bnVsbCxoPVtdLG09ZS5hcGlWZXJzaW9uO2lmKCIyLjEuMjY2IiE9PW0pdGhyb3cgbmV3IEVycm9yKCdUaGUgQVBJIHZlcnNpb24gIicuY29uY2F0KG0sJyIgZG9lcyBub3QgbWF0Y2ggJykrJ3RoZSBXb3JrZXIgdmVyc2lvbiAiJy5jb25jYXQoIjIuMS4yNjYiLCciLicpKTt2YXIgdj1lLmRvY0lkLHk9ZS5kb2NCYXNlVXJsLGI9ZS5kb2NJZCsiX3dvcmtlciIsdz1uZXcgcy5NZXNzYWdlSGFuZGxlcihiLHYsdCk7ZnVuY3Rpb24gaygpe2lmKG8pdGhyb3cgbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKX1mdW5jdGlvbiBTKGUpe2gucHVzaChlKX1mdW5jdGlvbiBfKGUpe2UuZmluaXNoKCk7dmFyIHQ9aC5pbmRleE9mKGUpO2guc3BsaWNlKHQsMSl9ZnVuY3Rpb24geChlKXtyZXR1cm4gQS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gQSgpe3JldHVybihBPWQobi5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCl7dmFyIGEsaSxvLHM7cmV0dXJuIG4uZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDpyZXR1cm4gZS5uZXh0PTIsci5lbnN1cmVEb2MoImNoZWNrSGVhZGVyIik7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmVuc3VyZURvYygicGFyc2VTdGFydFhSZWYiKTtjYXNlIDQ6cmV0dXJuIGUubmV4dD02LHIuZW5zdXJlRG9jKCJwYXJzZSIsW3RdKTtjYXNlIDY6aWYodCl7ZS5uZXh0PTk7YnJlYWt9cmV0dXJuIGUubmV4dD05LHIuZW5zdXJlRG9jKCJjaGVja0ZpcnN0UGFnZSIpO2Nhc2UgOTpyZXR1cm4gZS5uZXh0PTExLFByb21pc2UuYWxsKFtyLmVuc3VyZURvYygibnVtUGFnZXMiKSxyLmVuc3VyZURvYygiZmluZ2VycHJpbnQiKV0pO2Nhc2UgMTE6cmV0dXJuIGE9ZS5zZW50LGk9ZihhLDIpLG89aVswXSxzPWlbMV0sZS5hYnJ1cHQoInJldHVybiIse251bVBhZ2VzOm8sZmluZ2VycHJpbnQ6c30pO2Nhc2UgMTY6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSkuYXBwbHkodGhpcyxhcmd1bWVudHMpfWZ1bmN0aW9uIEMoZSx0KXt2YXIgcixuPSgwLGEuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksbz1lLnNvdXJjZTtpZihvLmRhdGEpe3RyeXtyPW5ldyBpLkxvY2FsUGRmTWFuYWdlcih2LG8uZGF0YSxvLnBhc3N3b3JkLHQseSksbi5yZXNvbHZlKHIpfWNhdGNoKGUpe24ucmVqZWN0KGUpfXJldHVybiBuLnByb21pc2V9dmFyIHMsbD1bXTt0cnl7cz1uZXcgZyh3KX1jYXRjaChlKXtyZXR1cm4gbi5yZWplY3QoZSksbi5wcm9taXNlfXZhciB1PXMuZ2V0RnVsbFJlYWRlcigpO3UuaGVhZGVyc1JlYWR5LnRoZW4oKGZ1bmN0aW9uKCl7aWYodS5pc1JhbmdlU3VwcG9ydGVkKXt2YXIgZT1vLmRpc2FibGVBdXRvRmV0Y2h8fHUuaXNTdHJlYW1pbmdTdXBwb3J0ZWQ7cj1uZXcgaS5OZXR3b3JrUGRmTWFuYWdlcih2LHMse21zZ0hhbmRsZXI6dyxwYXNzd29yZDpvLnBhc3N3b3JkLGxlbmd0aDp1LmNvbnRlbnRMZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDplLHJhbmdlQ2h1bmtTaXplOm8ucmFuZ2VDaHVua1NpemV9LHQseSk7Zm9yKHZhciBhPTA7YTxsLmxlbmd0aDthKyspci5zZW5kUHJvZ3Jlc3NpdmVEYXRhKGxbYV0pO2w9W10sbi5yZXNvbHZlKHIpLGM9bnVsbH19KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe24ucmVqZWN0KGUpLGM9bnVsbH0pKTt2YXIgZj0wO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSxzKXt1LnJlYWQoKS50aGVuKChmdW5jdGlvbiBlKGgpe3RyeXtpZihrKCksaC5kb25lKXJldHVybiByfHxmdW5jdGlvbigpe3ZhciBlPSgwLGEuYXJyYXlzVG9CeXRlcykobCk7by5sZW5ndGgmJmUubGVuZ3RoIT09by5sZW5ndGgmJigwLGEud2FybikoInJlcG9ydGVkIEhUVFAgbGVuZ3RoIGlzIGRpZmZlcmVudCBmcm9tIGFjdHVhbCIpO3RyeXtyPW5ldyBpLkxvY2FsUGRmTWFuYWdlcih2LGUsby5wYXNzd29yZCx0LHkpLG4ucmVzb2x2ZShyKX1jYXRjaChlKXtuLnJlamVjdChlKX1sPVtdfSgpLHZvaWQoYz1udWxsKTt2YXIgZD1oLnZhbHVlO2YrPSgwLGEuYXJyYXlCeXRlTGVuZ3RoKShkKSx1LmlzU3RyZWFtaW5nU3VwcG9ydGVkfHx3LnNlbmQoIkRvY1Byb2dyZXNzIix7bG9hZGVkOmYsdG90YWw6TWF0aC5tYXgoZix1LmNvbnRlbnRMZW5ndGh8fDApfSkscj9yLnNlbmRQcm9ncmVzc2l2ZURhdGEoZCk6bC5wdXNoKGQpLHUucmVhZCgpLnRoZW4oZSxzKX1jYXRjaChlKXtzKGUpfX0pLHMpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtuLnJlamVjdChlKSxjPW51bGx9KSksYz1mdW5jdGlvbigpe3MuY2FuY2VsQWxsUmVxdWVzdHMoImFib3J0Iil9LG4ucHJvbWlzZX1yZXR1cm4gdy5wb3N0TWVzc2FnZVRyYW5zZmVycz1lLnBvc3RNZXNzYWdlVHJhbnNmZXJzLHcub24oIkdldFBhZ2UiLChmdW5jdGlvbihlKXtyZXR1cm4gci5nZXRQYWdlKGUucGFnZUluZGV4KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gUHJvbWlzZS5hbGwoW3IuZW5zdXJlKGUsInJvdGF0ZSIpLHIuZW5zdXJlKGUsInJlZiIpLHIuZW5zdXJlKGUsInVzZXJVbml0Iiksci5lbnN1cmUoZSwidmlldyIpXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZihlLDQpO3JldHVybntyb3RhdGU6dFswXSxyZWY6dFsxXSx1c2VyVW5pdDp0WzJdLHZpZXc6dFszXX19KSl9KSl9KSksdy5vbigiR2V0UGFnZUluZGV4IiwoZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IGwuUmVmKGUucmVmLm51bSxlLnJlZi5nZW4pO3JldHVybiByLnBkZkRvY3VtZW50LmNhdGFsb2cuZ2V0UGFnZUluZGV4KHQpfSkpLHcub24oIkdldERlc3RpbmF0aW9ucyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImRlc3RpbmF0aW9ucyIpfSkpLHcub24oIkdldERlc3RpbmF0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygiZ2V0RGVzdGluYXRpb24iLFtlLmlkXSl9KSksdy5vbigiR2V0UGFnZUxhYmVscyIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VMYWJlbHMiKX0pKSx3Lm9uKCJHZXRQYWdlTW9kZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coInBhZ2VNb2RlIil9KSksdy5vbigiZ2V0T3BlbkFjdGlvbkRlc3RpbmF0aW9uIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygib3BlbkFjdGlvbkRlc3RpbmF0aW9uIil9KSksdy5vbigiR2V0QXR0YWNobWVudHMiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJhdHRhY2htZW50cyIpfSkpLHcub24oIkdldEphdmFTY3JpcHQiLChmdW5jdGlvbihlKXtyZXR1cm4gci5lbnN1cmVDYXRhbG9nKCJqYXZhU2NyaXB0Iil9KSksdy5vbigiR2V0T3V0bGluZSIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmVuc3VyZUNhdGFsb2coImRvY3VtZW50T3V0bGluZSIpfSkpLHcub24oIkdldFBlcm1pc3Npb25zIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZW5zdXJlQ2F0YWxvZygicGVybWlzc2lvbnMiKX0pKSx3Lm9uKCJHZXRNZXRhZGF0YSIsKGZ1bmN0aW9uKGUpe3JldHVybiBQcm9taXNlLmFsbChbci5lbnN1cmVEb2MoImRvY3VtZW50SW5mbyIpLHIuZW5zdXJlQ2F0YWxvZygibWV0YWRhdGEiKV0pfSkpLHcub24oIkdldERhdGEiLChmdW5jdGlvbihlKXtyZXR1cm4gci5yZXF1ZXN0TG9hZGVkU3RyZWFtKCksci5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLmJ5dGVzfSkpfSkpLHcub24oIkdldFN0YXRzIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIucGRmRG9jdW1lbnQueHJlZi5zdGF0c30pKSx3Lm9uKCJHZXRBbm5vdGF0aW9ucyIsKGZ1bmN0aW9uKGUpe3ZhciB0PWUucGFnZUluZGV4LG49ZS5pbnRlbnQ7cmV0dXJuIHIuZ2V0UGFnZSh0KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5nZXRBbm5vdGF0aW9uc0RhdGEobil9KSl9KSksdy5vbigiUmVuZGVyUGFnZVJlcXVlc3QiLChmdW5jdGlvbihlKXt2YXIgdD1lLnBhZ2VJbmRleDtyLmdldFBhZ2UodCkudGhlbigoZnVuY3Rpb24ocil7dmFyIG49bmV3IHAoIlJlbmRlclBhZ2VSZXF1ZXN0OiBwYWdlICIrdCk7UyhuKTt2YXIgaT10KzEsbz1EYXRlLm5vdygpO3IuZ2V0T3BlcmF0b3JMaXN0KHtoYW5kbGVyOncsdGFzazpuLGludGVudDplLmludGVudCxyZW5kZXJJbnRlcmFjdGl2ZUZvcm1zOmUucmVuZGVySW50ZXJhY3RpdmVGb3Jtc30pLnRoZW4oKGZ1bmN0aW9uKGUpe18obiksKDAsYS5pbmZvKSgicGFnZT0iK2krIiAtIGdldE9wZXJhdG9yTGlzdDogdGltZT0iKyhEYXRlLm5vdygpLW8pKyJtcywgbGVuPSIrZS50b3RhbExlbmd0aCl9KSwoZnVuY3Rpb24odCl7aWYoXyhuKSwhbi50ZXJtaW5hdGVkKXt3LnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDphLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLnVua25vd259KTt2YXIgcixvPSJ3b3JrZXIuanM6IHdoaWxlIHRyeWluZyB0byBnZXRQYWdlKCkgYW5kIGdldE9wZXJhdG9yTGlzdCgpIjtyPSJzdHJpbmciPT10eXBlb2YgdD97bWVzc2FnZTp0LHN0YWNrOm99OiJvYmplY3QiPT09dSh0KT97bWVzc2FnZTp0Lm1lc3NhZ2V8fHQudG9TdHJpbmcoKSxzdGFjazp0LnN0YWNrfHxvfTp7bWVzc2FnZToiVW5rbm93biBleGNlcHRpb24gdHlwZTogIit1KHQpLHN0YWNrOm99LHcuc2VuZCgiUGFnZUVycm9yIix7cGFnZU51bTppLGVycm9yOnIsaW50ZW50OmUuaW50ZW50fSl9fSkpfSkpfSksdGhpcyksdy5vbigiR2V0VGV4dENvbnRlbnQiLChmdW5jdGlvbihlLHQpe3ZhciBuPWUucGFnZUluZGV4O3Qub25QdWxsPWZ1bmN0aW9uKGUpe30sdC5vbkNhbmNlbD1mdW5jdGlvbihlKXt9LHIuZ2V0UGFnZShuKS50aGVuKChmdW5jdGlvbihyKXt2YXIgaT1uZXcgcCgiR2V0VGV4dENvbnRlbnQ6IHBhZ2UgIituKTtTKGkpO3ZhciBvPW4rMSxzPURhdGUubm93KCk7ci5leHRyYWN0VGV4dENvbnRlbnQoe2hhbmRsZXI6dyx0YXNrOmksc2luazp0LG5vcm1hbGl6ZVdoaXRlc3BhY2U6ZS5ub3JtYWxpemVXaGl0ZXNwYWNlLGNvbWJpbmVUZXh0SXRlbXM6ZS5jb21iaW5lVGV4dEl0ZW1zfSkudGhlbigoZnVuY3Rpb24oKXtfKGkpLCgwLGEuaW5mbykoInRleHQgaW5kZXhpbmc6IHBhZ2U9IitvKyIgLSB0aW1lPSIrKERhdGUubm93KCktcykrIm1zIiksdC5jbG9zZSgpfSksKGZ1bmN0aW9uKGUpe2lmKF8oaSksIWkudGVybWluYXRlZCl0aHJvdyB0LmVycm9yKGUpLGV9KSl9KSl9KSksdy5vbigiRm9udEZhbGxiYWNrIiwoZnVuY3Rpb24oZSl7cmV0dXJuIHIuZm9udEZhbGxiYWNrKGUuaWQsdyl9KSksdy5vbigiQ2xlYW51cCIsKGZ1bmN0aW9uKGUpe3JldHVybiByLmNsZWFudXAoKX0pKSx3Lm9uKCJUZXJtaW5hdGUiLChmdW5jdGlvbihlKXtvPSEwLHImJihyLnRlcm1pbmF0ZSgpLHI9bnVsbCksYyYmYygpO3ZhciB0PVtdO3JldHVybiBoLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlLmZpbmlzaGVkKSxlLnRlcm1pbmF0ZSgpfSkpLFByb21pc2UuYWxsKHQpLnRoZW4oKGZ1bmN0aW9uKCl7dy5kZXN0cm95KCksdz1udWxsfSkpfSkpLHcub24oIlJlYWR5IiwoZnVuY3Rpb24odCl7IWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7aygpLHcuc2VuZCgiR2V0RG9jIix7cGRmSW5mbzplfSl9ZnVuY3Rpb24gbihlKXtpZihrKCksZSBpbnN0YW5jZW9mIGEuUGFzc3dvcmRFeGNlcHRpb24pe3ZhciB0PW5ldyBwKCJQYXNzd29yZEV4Y2VwdGlvbjogcmVzcG9uc2UgIitlLmNvZGUpO1ModCksdy5zZW5kV2l0aFByb21pc2UoIlBhc3N3b3JkUmVxdWVzdCIsZSkudGhlbigoZnVuY3Rpb24oZSl7Xyh0KSxyLnVwZGF0ZVBhc3N3b3JkKGUucGFzc3dvcmQpLGkoKX0pKS5jYXRjaChmdW5jdGlvbihlKXtfKHQpLHcuc2VuZCgiUGFzc3dvcmRFeGNlcHRpb24iLGUpfS5iaW5kKG51bGwsZSkpfWVsc2UgZSBpbnN0YW5jZW9mIGEuSW52YWxpZFBERkV4Y2VwdGlvbj93LnNlbmQoIkludmFsaWRQREYiLGUpOmUgaW5zdGFuY2VvZiBhLk1pc3NpbmdQREZFeGNlcHRpb24/dy5zZW5kKCJNaXNzaW5nUERGIixlKTplIGluc3RhbmNlb2YgYS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24/dy5zZW5kKCJVbmV4cGVjdGVkUmVzcG9uc2UiLGUpOncuc2VuZCgiVW5rbm93bkVycm9yIixuZXcgYS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSkpfWZ1bmN0aW9uIGkoKXtrKCkseCghMSkudGhlbih0LChmdW5jdGlvbihlKXtrKCksZSBpbnN0YW5jZW9mIGEuWFJlZlBhcnNlRXhjZXB0aW9uPyhyLnJlcXVlc3RMb2FkZWRTdHJlYW0oKSxyLm9uTG9hZGVkU3RyZWFtKCkudGhlbigoZnVuY3Rpb24oKXtrKCkseCghMCkudGhlbih0LG4pfSkpKTpuKGUpfSksbil9aygpLEMoZSx7Zm9yY2VEYXRhU2NoZW1hOmUuZGlzYWJsZUNyZWF0ZU9iamVjdFVSTCxtYXhJbWFnZVNpemU6ZS5tYXhJbWFnZVNpemUsZGlzYWJsZUZvbnRGYWNlOmUuZGlzYWJsZUZvbnRGYWNlLG5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQ6ZS5uYXRpdmVJbWFnZURlY29kZXJTdXBwb3J0LGlnbm9yZUVycm9yczplLmlnbm9yZUVycm9ycyxpc0V2YWxTdXBwb3J0ZWQ6ZS5pc0V2YWxTdXBwb3J0ZWR9KS50aGVuKChmdW5jdGlvbihlKXtpZihvKXRocm93IGUudGVybWluYXRlKCksbmV3IEVycm9yKCJXb3JrZXIgd2FzIHRlcm1pbmF0ZWQiKTsocj1lKS5vbkxvYWRlZFN0cmVhbSgpLnRoZW4oKGZ1bmN0aW9uKGUpe3cuc2VuZCgiRGF0YUxvYWRlZCIse2xlbmd0aDplLmJ5dGVzLmJ5dGVMZW5ndGh9KX0pKX0pKS50aGVuKGksbil9KGUpLGU9bnVsbH0pKSxifSxpbml0aWFsaXplRnJvbVBvcnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHMuTWVzc2FnZUhhbmRsZXIoIndvcmtlciIsIm1haW4iLGUpO3Yuc2V0dXAodCxlKSx0LnNlbmQoInJlYWR5IixudWxsKX19O3QuV29ya2VyTWVzc2FnZUhhbmRsZXI9diwidW5kZWZpbmVkIj09dHlwZW9mIHdpbmRvdyYmISgwLG8uZGVmYXVsdCkoKSYmInVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiYiZnVuY3Rpb24iPT10eXBlb2YobT1zZWxmKS5wb3N0TWVzc2FnZSYmIm9ubWVzc2FnZSJpbiBtJiZ2LmluaXRpYWxpemVGcm9tUG9ydChzZWxmKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9cigzKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc3x8Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBzZWxmPyJ1bmRlZmluZWQiOm4oc2VsZikpJiZzZWxmfSgpfHxGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpLGk9YS5yZWdlbmVyYXRvclJ1bnRpbWUmJk9iamVjdC5nZXRPd25Qcm9wZXJ0eU5hbWVzKGEpLmluZGV4T2YoInJlZ2VuZXJhdG9yUnVudGltZSIpPj0wLG89aSYmYS5yZWdlbmVyYXRvclJ1bnRpbWU7aWYoYS5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwLGUuZXhwb3J0cz1yKDQpLGkpYS5yZWdlbmVyYXRvclJ1bnRpbWU9bztlbHNlIHRyeXtkZWxldGUgYS5yZWdlbmVyYXRvclJ1bnRpbWV9Y2F0Y2goZSl7YS5yZWdlbmVyYXRvclJ1bnRpbWU9dm9pZCAwfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjsoZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXtyZXR1cm4odD0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihyKXt2YXIgbj1PYmplY3QucHJvdG90eXBlLGE9bi5oYXNPd25Qcm9wZXJ0eSxpPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2w/U3ltYm9sOnt9LG89aS5pdGVyYXRvcnx8IkBAaXRlcmF0b3IiLHM9aS5hc3luY0l0ZXJhdG9yfHwiQEBhc3luY0l0ZXJhdG9yIixsPWkudG9TdHJpbmdUYWd8fCJAQHRvU3RyaW5nVGFnIixjPSJvYmplY3QiPT09dChlKSx1PXIucmVnZW5lcmF0b3JSdW50aW1lO2lmKHUpYyYmKGUuZXhwb3J0cz11KTtlbHNleyh1PXIucmVnZW5lcmF0b3JSdW50aW1lPWM/ZS5leHBvcnRzOnt9KS53cmFwPWc7dmFyIGY9e30saD17fTtoW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9O3ZhciBkPU9iamVjdC5nZXRQcm90b3R5cGVPZixwPWQmJmQoZChQKFtdKSkpO3AmJnAhPT1uJiZhLmNhbGwocCxvKSYmKGg9cCk7dmFyIG09dy5wcm90b3R5cGU9eS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoKTtiLnByb3RvdHlwZT1tLmNvbnN0cnVjdG9yPXcsdy5jb25zdHJ1Y3Rvcj1iLHdbbF09Yi5kaXNwbGF5TmFtZT0iR2VuZXJhdG9yRnVuY3Rpb24iLHUuaXNHZW5lcmF0b3JGdW5jdGlvbj1mdW5jdGlvbihlKXt2YXIgdD0iZnVuY3Rpb24iPT10eXBlb2YgZSYmZS5jb25zdHJ1Y3RvcjtyZXR1cm4hIXQmJih0PT09Ynx8IkdlbmVyYXRvckZ1bmN0aW9uIj09PSh0LmRpc3BsYXlOYW1lfHx0Lm5hbWUpKX0sdS5tYXJrPWZ1bmN0aW9uKGUpe3JldHVybiBPYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LnNldFByb3RvdHlwZU9mKGUsdyk6KGUuX19wcm90b19fPXcsbCBpbiBlfHwoZVtsXT0iR2VuZXJhdG9yRnVuY3Rpb24iKSksZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShtKSxlfSx1LmF3cmFwPWZ1bmN0aW9uKGUpe3JldHVybntfX2F3YWl0OmV9fSxrKFMucHJvdG90eXBlKSxTLnByb3RvdHlwZVtzXT1mdW5jdGlvbigpe3JldHVybiB0aGlzfSx1LkFzeW5jSXRlcmF0b3I9Uyx1LmFzeW5jPWZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPW5ldyBTKGcoZSx0LHIsbikpO3JldHVybiB1LmlzR2VuZXJhdG9yRnVuY3Rpb24odCk/YTphLm5leHQoKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5kb25lP2UudmFsdWU6YS5uZXh0KCl9KSl9LGsobSksbVtsXT0iR2VuZXJhdG9yIixtW29dPWZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9LG0udG9TdHJpbmc9ZnVuY3Rpb24oKXtyZXR1cm4iW29iamVjdCBHZW5lcmF0b3JdIn0sdS5rZXlzPWZ1bmN0aW9uKGUpe3ZhciB0PVtdO2Zvcih2YXIgciBpbiBlKXQucHVzaChyKTtyZXR1cm4gdC5yZXZlcnNlKCksZnVuY3Rpb24gcigpe2Zvcig7dC5sZW5ndGg7KXt2YXIgbj10LnBvcCgpO2lmKG4gaW4gZSlyZXR1cm4gci52YWx1ZT1uLHIuZG9uZT0hMSxyfXJldHVybiByLmRvbmU9ITAscn19LHUudmFsdWVzPVAsQy5wcm90b3R5cGU9e2NvbnN0cnVjdG9yOkMscmVzZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5wcmV2PTAsdGhpcy5uZXh0PTAsdGhpcy5zZW50PXRoaXMuX3NlbnQ9dm9pZCAwLHRoaXMuZG9uZT0hMSx0aGlzLmRlbGVnYXRlPW51bGwsdGhpcy5tZXRob2Q9Im5leHQiLHRoaXMuYXJnPXZvaWQgMCx0aGlzLnRyeUVudHJpZXMuZm9yRWFjaChBKSwhZSlmb3IodmFyIHQgaW4gdGhpcykidCI9PT10LmNoYXJBdCgwKSYmYS5jYWxsKHRoaXMsdCkmJiFpc05hTigrdC5zbGljZSgxKSkmJih0aGlzW3RdPXZvaWQgMCl9LHN0b3A6ZnVuY3Rpb24oKXt0aGlzLmRvbmU9ITA7dmFyIGU9dGhpcy50cnlFbnRyaWVzWzBdLmNvbXBsZXRpb247aWYoInRocm93Ij09PWUudHlwZSl0aHJvdyBlLmFyZztyZXR1cm4gdGhpcy5ydmFsfSxkaXNwYXRjaEV4Y2VwdGlvbjpmdW5jdGlvbihlKXtpZih0aGlzLmRvbmUpdGhyb3cgZTt2YXIgdD10aGlzO2Z1bmN0aW9uIHIocixuKXtyZXR1cm4gby50eXBlPSJ0aHJvdyIsby5hcmc9ZSx0Lm5leHQ9cixuJiYodC5tZXRob2Q9Im5leHQiLHQuYXJnPXZvaWQgMCksISFufWZvcih2YXIgbj10aGlzLnRyeUVudHJpZXMubGVuZ3RoLTE7bj49MDstLW4pe3ZhciBpPXRoaXMudHJ5RW50cmllc1tuXSxvPWkuY29tcGxldGlvbjtpZigicm9vdCI9PT1pLnRyeUxvYylyZXR1cm4gcigiZW5kIik7aWYoaS50cnlMb2M8PXRoaXMucHJldil7dmFyIHM9YS5jYWxsKGksImNhdGNoTG9jIiksbD1hLmNhbGwoaSwiZmluYWxseUxvYyIpO2lmKHMmJmwpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX1lbHNlIGlmKHMpe2lmKHRoaXMucHJldjxpLmNhdGNoTG9jKXJldHVybiByKGkuY2F0Y2hMb2MsITApfWVsc2V7aWYoIWwpdGhyb3cgbmV3IEVycm9yKCJ0cnkgc3RhdGVtZW50IHdpdGhvdXQgY2F0Y2ggb3IgZmluYWxseSIpO2lmKHRoaXMucHJldjxpLmZpbmFsbHlMb2MpcmV0dXJuIHIoaS5maW5hbGx5TG9jKX19fX0sYWJydXB0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTtyPj0wOy0tcil7dmFyIG49dGhpcy50cnlFbnRyaWVzW3JdO2lmKG4udHJ5TG9jPD10aGlzLnByZXYmJmEuY2FsbChuLCJmaW5hbGx5TG9jIikmJnRoaXMucHJldjxuLmZpbmFsbHlMb2Mpe3ZhciBpPW47YnJlYWt9fWkmJigiYnJlYWsiPT09ZXx8ImNvbnRpbnVlIj09PWUpJiZpLnRyeUxvYzw9dCYmdDw9aS5maW5hbGx5TG9jJiYoaT1udWxsKTt2YXIgbz1pP2kuY29tcGxldGlvbjp7fTtyZXR1cm4gby50eXBlPWUsby5hcmc9dCxpPyh0aGlzLm1ldGhvZD0ibmV4dCIsdGhpcy5uZXh0PWkuZmluYWxseUxvYyxmKTp0aGlzLmNvbXBsZXRlKG8pfSxjb21wbGV0ZTpmdW5jdGlvbihlLHQpe2lmKCJ0aHJvdyI9PT1lLnR5cGUpdGhyb3cgZS5hcmc7cmV0dXJuImJyZWFrIj09PWUudHlwZXx8ImNvbnRpbnVlIj09PWUudHlwZT90aGlzLm5leHQ9ZS5hcmc6InJldHVybiI9PT1lLnR5cGU/KHRoaXMucnZhbD10aGlzLmFyZz1lLmFyZyx0aGlzLm1ldGhvZD0icmV0dXJuIix0aGlzLm5leHQ9ImVuZCIpOiJub3JtYWwiPT09ZS50eXBlJiZ0JiYodGhpcy5uZXh0PXQpLGZ9LGZpbmlzaDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy50cnlFbnRyaWVzLmxlbmd0aC0xO3Q+PTA7LS10KXt2YXIgcj10aGlzLnRyeUVudHJpZXNbdF07aWYoci5maW5hbGx5TG9jPT09ZSlyZXR1cm4gdGhpcy5jb21wbGV0ZShyLmNvbXBsZXRpb24sci5hZnRlckxvYyksQShyKSxmfX0sY2F0Y2g6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXRoaXMudHJ5RW50cmllcy5sZW5ndGgtMTt0Pj0wOy0tdCl7dmFyIHI9dGhpcy50cnlFbnRyaWVzW3RdO2lmKHIudHJ5TG9jPT09ZSl7dmFyIG49ci5jb21wbGV0aW9uO2lmKCJ0aHJvdyI9PT1uLnR5cGUpe3ZhciBhPW4uYXJnO0Eocil9cmV0dXJuIGF9fXRocm93IG5ldyBFcnJvcigiaWxsZWdhbCBjYXRjaCBhdHRlbXB0Iil9LGRlbGVnYXRlWWllbGQ6ZnVuY3Rpb24oZSx0LHIpe3JldHVybiB0aGlzLmRlbGVnYXRlPXtpdGVyYXRvcjpQKGUpLHJlc3VsdE5hbWU6dCxuZXh0TG9jOnJ9LCJuZXh0Ij09PXRoaXMubWV0aG9kJiYodGhpcy5hcmc9dm9pZCAwKSxmfX19ZnVuY3Rpb24gZyhlLHQscixuKXt2YXIgYT10JiZ0LnByb3RvdHlwZSBpbnN0YW5jZW9mIHk/dDp5LGk9T2JqZWN0LmNyZWF0ZShhLnByb3RvdHlwZSksbz1uZXcgQyhufHxbXSk7cmV0dXJuIGkuX2ludm9rZT1mdW5jdGlvbihlLHQscil7dmFyIG49InN1c3BlbmRlZFN0YXJ0IjtyZXR1cm4gZnVuY3Rpb24oYSxpKXtpZigiZXhlY3V0aW5nIj09PW4pdGhyb3cgbmV3IEVycm9yKCJHZW5lcmF0b3IgaXMgYWxyZWFkeSBydW5uaW5nIik7aWYoImNvbXBsZXRlZCI9PT1uKXtpZigidGhyb3ciPT09YSl0aHJvdyBpO3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19Zm9yKHIubWV0aG9kPWEsci5hcmc9aTs7KXt2YXIgbz1yLmRlbGVnYXRlO2lmKG8pe3ZhciBzPV8obyxyKTtpZihzKXtpZihzPT09Ziljb250aW51ZTtyZXR1cm4gc319aWYoIm5leHQiPT09ci5tZXRob2Qpci5zZW50PXIuX3NlbnQ9ci5hcmc7ZWxzZSBpZigidGhyb3ciPT09ci5tZXRob2Qpe2lmKCJzdXNwZW5kZWRTdGFydCI9PT1uKXRocm93IG49ImNvbXBsZXRlZCIsci5hcmc7ci5kaXNwYXRjaEV4Y2VwdGlvbihyLmFyZyl9ZWxzZSJyZXR1cm4iPT09ci5tZXRob2QmJnIuYWJydXB0KCJyZXR1cm4iLHIuYXJnKTtuPSJleGVjdXRpbmciO3ZhciBsPXYoZSx0LHIpO2lmKCJub3JtYWwiPT09bC50eXBlKXtpZihuPXIuZG9uZT8iY29tcGxldGVkIjoic3VzcGVuZGVkWWllbGQiLGwuYXJnPT09Ziljb250aW51ZTtyZXR1cm57dmFsdWU6bC5hcmcsZG9uZTpyLmRvbmV9fSJ0aHJvdyI9PT1sLnR5cGUmJihuPSJjb21wbGV0ZWQiLHIubWV0aG9kPSJ0aHJvdyIsci5hcmc9bC5hcmcpfX19KGUscixvKSxpfWZ1bmN0aW9uIHYoZSx0LHIpe3RyeXtyZXR1cm57dHlwZToibm9ybWFsIixhcmc6ZS5jYWxsKHQscil9fWNhdGNoKGUpe3JldHVybnt0eXBlOiJ0aHJvdyIsYXJnOmV9fX1mdW5jdGlvbiB5KCl7fWZ1bmN0aW9uIGIoKXt9ZnVuY3Rpb24gdygpe31mdW5jdGlvbiBrKGUpe1sibmV4dCIsInRocm93IiwicmV0dXJuIl0uZm9yRWFjaCgoZnVuY3Rpb24odCl7ZVt0XT1mdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faW52b2tlKHQsZSl9fSkpfWZ1bmN0aW9uIFMoZSl7dmFyIHI7dGhpcy5faW52b2tlPWZ1bmN0aW9uKG4saSl7ZnVuY3Rpb24gbygpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixvKXshZnVuY3Rpb24gcihuLGksbyxzKXt2YXIgbD12KGVbbl0sZSxpKTtpZigidGhyb3ciIT09bC50eXBlKXt2YXIgYz1sLmFyZyx1PWMudmFsdWU7cmV0dXJuIHUmJiJvYmplY3QiPT09dCh1KSYmYS5jYWxsKHUsIl9fYXdhaXQiKT9Qcm9taXNlLnJlc29sdmUodS5fX2F3YWl0KS50aGVuKChmdW5jdGlvbihlKXtyKCJuZXh0IixlLG8scyl9KSwoZnVuY3Rpb24oZSl7cigidGhyb3ciLGUsbyxzKX0pKTpQcm9taXNlLnJlc29sdmUodSkudGhlbigoZnVuY3Rpb24oZSl7Yy52YWx1ZT1lLG8oYyl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuIHIoInRocm93IixlLG8scyl9KSl9cyhsLmFyZyl9KG4saSxyLG8pfSkpfXJldHVybiByPXI/ci50aGVuKG8sbyk6bygpfX1mdW5jdGlvbiBfKGUsdCl7dmFyIHI9ZS5pdGVyYXRvclt0Lm1ldGhvZF07aWYodm9pZCAwPT09cil7aWYodC5kZWxlZ2F0ZT1udWxsLCJ0aHJvdyI9PT10Lm1ldGhvZCl7aWYoZS5pdGVyYXRvci5yZXR1cm4mJih0Lm1ldGhvZD0icmV0dXJuIix0LmFyZz12b2lkIDAsXyhlLHQpLCJ0aHJvdyI9PT10Lm1ldGhvZCkpcmV0dXJuIGY7dC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJUaGUgaXRlcmF0b3IgZG9lcyBub3QgcHJvdmlkZSBhICd0aHJvdycgbWV0aG9kIil9cmV0dXJuIGZ9dmFyIG49dihyLGUuaXRlcmF0b3IsdC5hcmcpO2lmKCJ0aHJvdyI9PT1uLnR5cGUpcmV0dXJuIHQubWV0aG9kPSJ0aHJvdyIsdC5hcmc9bi5hcmcsdC5kZWxlZ2F0ZT1udWxsLGY7dmFyIGE9bi5hcmc7cmV0dXJuIGE/YS5kb25lPyh0W2UucmVzdWx0TmFtZV09YS52YWx1ZSx0Lm5leHQ9ZS5uZXh0TG9jLCJyZXR1cm4iIT09dC5tZXRob2QmJih0Lm1ldGhvZD0ibmV4dCIsdC5hcmc9dm9pZCAwKSx0LmRlbGVnYXRlPW51bGwsZik6YToodC5tZXRob2Q9InRocm93Iix0LmFyZz1uZXcgVHlwZUVycm9yKCJpdGVyYXRvciByZXN1bHQgaXMgbm90IGFuIG9iamVjdCIpLHQuZGVsZWdhdGU9bnVsbCxmKX1mdW5jdGlvbiB4KGUpe3ZhciB0PXt0cnlMb2M6ZVswXX07MSBpbiBlJiYodC5jYXRjaExvYz1lWzFdKSwyIGluIGUmJih0LmZpbmFsbHlMb2M9ZVsyXSx0LmFmdGVyTG9jPWVbM10pLHRoaXMudHJ5RW50cmllcy5wdXNoKHQpfWZ1bmN0aW9uIEEoZSl7dmFyIHQ9ZS5jb21wbGV0aW9ufHx7fTt0LnR5cGU9Im5vcm1hbCIsZGVsZXRlIHQuYXJnLGUuY29tcGxldGlvbj10fWZ1bmN0aW9uIEMoZSl7dGhpcy50cnlFbnRyaWVzPVt7dHJ5TG9jOiJyb290In1dLGUuZm9yRWFjaCh4LHRoaXMpLHRoaXMucmVzZXQoITApfWZ1bmN0aW9uIFAoZSl7aWYoZSl7dmFyIHQ9ZVtvXTtpZih0KXJldHVybiB0LmNhbGwoZSk7aWYoImZ1bmN0aW9uIj09dHlwZW9mIGUubmV4dClyZXR1cm4gZTtpZighaXNOYU4oZS5sZW5ndGgpKXt2YXIgcj0tMSxuPWZ1bmN0aW9uIHQoKXtmb3IoOysrcjxlLmxlbmd0aDspaWYoYS5jYWxsKGUscikpcmV0dXJuIHQudmFsdWU9ZVtyXSx0LmRvbmU9ITEsdDtyZXR1cm4gdC52YWx1ZT12b2lkIDAsdC5kb25lPSEwLHR9O3JldHVybiBuLm5leHQ9bn19cmV0dXJue25leHQ6RX19ZnVuY3Rpb24gRSgpe3JldHVybnt2YWx1ZTp2b2lkIDAsZG9uZTohMH19fShmdW5jdGlvbigpe3JldHVybiB0aGlzfHwib2JqZWN0Ij09PSgidW5kZWZpbmVkIj09dHlwZW9mIHNlbGY/InVuZGVmaW5lZCI6dChzZWxmKSkmJnNlbGZ9KCl8fEZ1bmN0aW9uKCJyZXR1cm4gdGhpcyIpKCkpfSkuY2FsbCh0aGlzLHIoNSkoZSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZS53ZWJwYWNrUG9seWZpbGx8fChlLmRlcHJlY2F0ZT1mdW5jdGlvbigpe30sZS5wYXRocz1bXSxlLmNoaWxkcmVufHwoZS5jaGlsZHJlbj1bXSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsImxvYWRlZCIse2VudW1lcmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIGUubH19KSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwiaWQiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBlLml9fSksZS53ZWJwYWNrUG9seWZpbGw9MSksZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQudG9Sb21hbk51bWVyYWxzPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV07dShOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPjAsIlRoZSBudW1iZXIgc2hvdWxkIGJlIGEgcG9zaXRpdmUgaW50ZWdlci4iKTtmb3IodmFyIHIsbj1bXTtlPj0xZTM7KWUtPTFlMyxuLnB1c2goIk0iKTtyPWUvMTAwfDAsZSU9MTAwLG4ucHVzaChDW3JdKSxyPWUvMTB8MCxlJT0xMCxuLnB1c2goQ1sxMCtyXSksbi5wdXNoKENbMjArZV0pO3ZhciBhPW4uam9pbigiIik7cmV0dXJuIHQ/YS50b0xvd2VyQ2FzZSgpOmF9LHQuYXJyYXlCeXRlTGVuZ3RoPV8sdC5hcnJheXNUb0J5dGVzPWZ1bmN0aW9uKGUpe2lmKDE9PT1lLmxlbmd0aCYmZVswXWluc3RhbmNlb2YgVWludDhBcnJheSlyZXR1cm4gZVswXTt2YXIgdCxyLG4sYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PGk7dCsrKXI9ZVt0XSxuPV8ociksYSs9bjt2YXIgbz0wLHM9bmV3IFVpbnQ4QXJyYXkoYSk7Zm9yKHQ9MDt0PGk7dCsrKShyPWVbdF0paW5zdGFuY2VvZiBVaW50OEFycmF5fHwocj0ic3RyaW5nIj09dHlwZW9mIHI/UyhyKTpuZXcgVWludDhBcnJheShyKSksbj1yLmJ5dGVMZW5ndGgscy5zZXQocixvKSxvKz1uO3JldHVybiBzfSx0LmFzc2VydD11LHQuYnl0ZXNUb1N0cmluZz1mdW5jdGlvbihlKXt1KG51bGwhPT1lJiYib2JqZWN0Ij09PWkoZSkmJnZvaWQgMCE9PWUubGVuZ3RoLCJJbnZhbGlkIGFyZ3VtZW50IGZvciBieXRlc1RvU3RyaW5nIik7dmFyIHQ9ZS5sZW5ndGg7aWYodDw4MTkyKXJldHVybiBTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZSk7Zm9yKHZhciByPVtdLG49MDtuPHQ7bis9ODE5Mil7dmFyIGE9TWF0aC5taW4obis4MTkyLHQpLG89ZS5zdWJhcnJheShuLGEpO3IucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsbykpfXJldHVybiByLmpvaW4oIiIpfSx0LmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5PWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0PSExO3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkoZSwic2V0dGxlZCIse2dldDpmdW5jdGlvbigpe3JldHVybiB0fX0pLGUucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24ocixuKXtlLnJlc29sdmU9ZnVuY3Rpb24oZSl7dD0hMCxyKGUpfSxlLnJlamVjdD1mdW5jdGlvbihlKXt0PSEwLG4oZSl9fSkpLGV9LHQuZGVwcmVjYXRlZD1mdW5jdGlvbihlKXtjb25zb2xlLmxvZygiRGVwcmVjYXRlZCBBUEkgdXNhZ2U6ICIrZSl9LHQuZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eT1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lLmRpY3Qsbj1lLmtleSxhPWUuZ2V0QXJyYXksaT12b2lkIDAhPT1hJiZhLG89ZS5zdG9wV2hlbkZvdW5kLHM9dm9pZCAwPT09b3x8byxjPTA7cjspe3ZhciB1PWk/ci5nZXRBcnJheShuKTpyLmdldChuKTtpZih2b2lkIDAhPT11KXtpZihzKXJldHVybiB1O3R8fCh0PVtdKSx0LnB1c2godSl9aWYoKytjPjEwMCl7bCgnZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eTogbWF4aW11bSBsb29wIGNvdW50IGV4Y2VlZGVkIGZvciAiJy5jb25jYXQobiwnIicpKTticmVha31yPXIuZ2V0KCJQYXJlbnQiKX1yZXR1cm4gdH0sdC5nZXRMb29rdXBUYWJsZUZhY3Rvcnk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUmJih0PU9iamVjdC5jcmVhdGUobnVsbCksZSh0KSxlPW51bGwpLHR9fSx0LmdldFZlcmJvc2l0eUxldmVsPWZ1bmN0aW9uKCl7cmV0dXJuIHN9LHQuaW5mbz1mdW5jdGlvbihlKXtzPj1vLklORk9TJiZjb25zb2xlLmxvZygiSW5mbzogIitlKX0sdC5pc0FycmF5QnVmZmVyPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09aShlKSYmbnVsbCE9PWUmJnZvaWQgMCE9PWUuYnl0ZUxlbmd0aH0sdC5pc0Jvb2w9ZnVuY3Rpb24oZSl7cmV0dXJuImJvb2xlYW4iPT10eXBlb2YgZX0sdC5pc0VtcHR5T2JqPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiBlKXJldHVybiExO3JldHVybiEwfSx0LmlzTnVtPWZ1bmN0aW9uKGUpe3JldHVybiJudW1iZXIiPT10eXBlb2YgZX0sdC5pc1N0cmluZz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIj09dHlwZW9mIGV9LHQuaXNTcGFjZT1mdW5jdGlvbihlKXtyZXR1cm4gMzI9PT1lfHw5PT09ZXx8MTM9PT1lfHwxMD09PWV9LHQuaXNTYW1lT3JpZ2luPWZ1bmN0aW9uKGUsdCl7dHJ5e3ZhciByPW5ldyBhLlVSTChlKTtpZighci5vcmlnaW58fCJudWxsIj09PXIub3JpZ2luKXJldHVybiExfWNhdGNoKGUpe3JldHVybiExfXZhciBuPW5ldyBhLlVSTCh0LHIpO3JldHVybiByLm9yaWdpbj09PW4ub3JpZ2lufSx0LmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmw9ZnVuY3Rpb24oZSx0KXtpZighZSlyZXR1cm4gbnVsbDt0cnl7dmFyIHI9dD9uZXcgYS5VUkwoZSx0KTpuZXcgYS5VUkwoZSk7aWYoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuITE7c3dpdGNoKGUucHJvdG9jb2wpe2Nhc2UiaHR0cDoiOmNhc2UiaHR0cHM6IjpjYXNlImZ0cDoiOmNhc2UibWFpbHRvOiI6Y2FzZSJ0ZWw6IjpyZXR1cm4hMDtkZWZhdWx0OnJldHVybiExfX0ocikpcmV0dXJuIHJ9Y2F0Y2goZSl7fXJldHVybiBudWxsfSx0LmlzTGl0dGxlRW5kaWFuPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoNCk7cmV0dXJuIGVbMF09MSwxPT09bmV3IFVpbnQzMkFycmF5KGUuYnVmZmVyLDAsMSlbMF19LHQuaXNFdmFsU3VwcG9ydGVkPWZ1bmN0aW9uKCl7dHJ5e3JldHVybiBuZXcgRnVuY3Rpb24oIiIpLCEwfWNhdGNoKGUpe3JldHVybiExfX0sdC5sb2cyPWZ1bmN0aW9uKGUpe3JldHVybiBlPD0wPzA6TWF0aC5jZWlsKE1hdGgubG9nMihlKSl9LHQucmVhZEludDg9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjQ+PjI0fSx0LnJlYWRVaW50MTY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8OHxlW3QrMV19LHQucmVhZFVpbnQzMj1mdW5jdGlvbihlLHQpe3JldHVybihlW3RdPDwyNHxlW3QrMV08PDE2fGVbdCsyXTw8OHxlW3QrM10pPj4+MH0sdC5yZW1vdmVOdWxsQ2hhcmFjdGVycz1mdW5jdGlvbihlKXtyZXR1cm4ic3RyaW5nIiE9dHlwZW9mIGU/KGwoIlRoZSBhcmd1bWVudCBmb3IgcmVtb3ZlTnVsbENoYXJhY3RlcnMgbXVzdCBiZSBhIHN0cmluZy4iKSxlKTplLnJlcGxhY2UoaywiIil9LHQuc2V0VmVyYm9zaXR5TGV2ZWw9ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHM9ZSl9LHQuc2hhZG93PWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsdCx7dmFsdWU6cixlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMCx3cml0YWJsZTohMX0pLHJ9LHQuc3RyaW5nMzI9ZnVuY3Rpb24oZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZSl9LHQuc3RyaW5nVG9CeXRlcz1TLHQuc3RyaW5nVG9QREZTdHJpbmc9ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxlbmd0aCxuPVtdO2lmKCLDviI9PT1lWzBdJiYiw78iPT09ZVsxXSlmb3IodD0yO3Q8cjt0Kz0yKW4ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuY2hhckNvZGVBdCh0KTw8OHxlLmNoYXJDb2RlQXQodCsxKSkpO2Vsc2UgZm9yKHQ9MDt0PHI7Kyt0KXt2YXIgYT1QW2UuY2hhckNvZGVBdCh0KV07bi5wdXNoKGE/U3RyaW5nLmZyb21DaGFyQ29kZShhKTplLmNoYXJBdCh0KSl9cmV0dXJuIG4uam9pbigiIil9LHQuc3RyaW5nVG9VVEY4U3RyaW5nPWZ1bmN0aW9uKGUpe3JldHVybiBkZWNvZGVVUklDb21wb25lbnQoZXNjYXBlKGUpKX0sdC51dGY4U3RyaW5nVG9TdHJpbmc9ZnVuY3Rpb24oZSl7cmV0dXJuIHVuZXNjYXBlKGVuY29kZVVSSUNvbXBvbmVudChlKSl9LHQud2Fybj1sLHQudW5yZWFjaGFibGU9YyxPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiUmVhZGFibGVTdHJlYW0iLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBuLlJlYWRhYmxlU3RyZWFtfX0pLE9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJVUkwiLHtlbnVtZXJhYmxlOiEwLGdldDpmdW5jdGlvbigpe3JldHVybiBhLlVSTH19KSx0LmNyZWF0ZU9iamVjdFVSTD10LkZvcm1hdEVycm9yPXQuWFJlZlBhcnNlRXhjZXB0aW9uPXQuWFJlZkVudHJ5RXhjZXB0aW9uPXQuVXRpbD10LlVua25vd25FcnJvckV4Y2VwdGlvbj10LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj10LlRleHRSZW5kZXJpbmdNb2RlPXQuU3RyZWFtVHlwZT10LlBlcm1pc3Npb25GbGFnPXQuUGFzc3dvcmRSZXNwb25zZXM9dC5QYXNzd29yZEV4Y2VwdGlvbj10Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9dC5NaXNzaW5nUERGRXhjZXB0aW9uPXQuTWlzc2luZ0RhdGFFeGNlcHRpb249dC5JbnZhbGlkUERGRXhjZXB0aW9uPXQuQWJvcnRFeGNlcHRpb249dC5DTWFwQ29tcHJlc3Npb25UeXBlPXQuSW1hZ2VLaW5kPXQuRm9udFR5cGU9dC5Bbm5vdGF0aW9uVHlwZT10LkFubm90YXRpb25GbGFnPXQuQW5ub3RhdGlvbkZpZWxkRmxhZz10LkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGU9dC5VTlNVUFBPUlRFRF9GRUFUVVJFUz10LlZlcmJvc2l0eUxldmVsPXQuT1BTPXQuSURFTlRJVFlfTUFUUklYPXQuRk9OVF9JREVOVElUWV9NQVRSSVg9dm9pZCAwLHIoNyk7dmFyIG49cigxNDcpLGE9cigxNDkpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX10LklERU5USVRZX01BVFJJWD1bMSwwLDAsMSwwLDBdLHQuRk9OVF9JREVOVElUWV9NQVRSSVg9Wy4wMDEsMCwwLC4wMDEsMCwwXSx0Lk5hdGl2ZUltYWdlRGVjb2Rpbmc9e05PTkU6Im5vbmUiLERFQ09ERToiZGVjb2RlIixESVNQTEFZOiJkaXNwbGF5In0sdC5QZXJtaXNzaW9uRmxhZz17UFJJTlQ6NCxNT0RJRllfQ09OVEVOVFM6OCxDT1BZOjE2LE1PRElGWV9BTk5PVEFUSU9OUzozMixGSUxMX0lOVEVSQUNUSVZFX0ZPUk1TOjI1NixDT1BZX0ZPUl9BQ0NFU1NJQklMSVRZOjUxMixBU1NFTUJMRToxMDI0LFBSSU5UX0hJR0hfUVVBTElUWToyMDQ4fSx0LlRleHRSZW5kZXJpbmdNb2RlPXtGSUxMOjAsU1RST0tFOjEsRklMTF9TVFJPS0U6MixJTlZJU0lCTEU6MyxGSUxMX0FERF9UT19QQVRIOjQsU1RST0tFX0FERF9UT19QQVRIOjUsRklMTF9TVFJPS0VfQUREX1RPX1BBVEg6NixBRERfVE9fUEFUSDo3LEZJTExfU1RST0tFX01BU0s6MyxBRERfVE9fUEFUSF9GTEFHOjR9LHQuSW1hZ2VLaW5kPXtHUkFZU0NBTEVfMUJQUDoxLFJHQl8yNEJQUDoyLFJHQkFfMzJCUFA6M30sdC5Bbm5vdGF0aW9uVHlwZT17VEVYVDoxLExJTks6MixGUkVFVEVYVDozLExJTkU6NCxTUVVBUkU6NSxDSVJDTEU6NixQT0xZR09OOjcsUE9MWUxJTkU6OCxISUdITElHSFQ6OSxVTkRFUkxJTkU6MTAsU1FVSUdHTFk6MTEsU1RSSUtFT1VUOjEyLFNUQU1QOjEzLENBUkVUOjE0LElOSzoxNSxQT1BVUDoxNixGSUxFQVRUQUNITUVOVDoxNyxTT1VORDoxOCxNT1ZJRToxOSxXSURHRVQ6MjAsU0NSRUVOOjIxLFBSSU5URVJNQVJLOjIyLFRSQVBORVQ6MjMsV0FURVJNQVJLOjI0LFRIUkVFRDoyNSxSRURBQ1Q6MjZ9LHQuQW5ub3RhdGlvbkZsYWc9e0lOVklTSUJMRToxLEhJRERFTjoyLFBSSU5UOjQsTk9aT09NOjgsTk9ST1RBVEU6MTYsTk9WSUVXOjMyLFJFQURPTkxZOjY0LExPQ0tFRDoxMjgsVE9HR0xFTk9WSUVXOjI1NixMT0NLRURDT05URU5UUzo1MTJ9LHQuQW5ub3RhdGlvbkZpZWxkRmxhZz17UkVBRE9OTFk6MSxSRVFVSVJFRDoyLE5PRVhQT1JUOjQsTVVMVElMSU5FOjQwOTYsUEFTU1dPUkQ6ODE5MixOT1RPR0dMRVRPT0ZGOjE2Mzg0LFJBRElPOjMyNzY4LFBVU0hCVVRUT046NjU1MzYsQ09NQk86MTMxMDcyLEVESVQ6MjYyMTQ0LFNPUlQ6NTI0Mjg4LEZJTEVTRUxFQ1Q6MTA0ODU3NixNVUxUSVNFTEVDVDoyMDk3MTUyLERPTk9UU1BFTExDSEVDSzo0MTk0MzA0LERPTk9UU0NST0xMOjgzODg2MDgsQ09NQjoxNjc3NzIxNixSSUNIVEVYVDozMzU1NDQzMixSQURJT1NJTlVOSVNPTjozMzU1NDQzMixDT01NSVRPTlNFTENIQU5HRTo2NzEwODg2NH0sdC5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlPXtTT0xJRDoxLERBU0hFRDoyLEJFVkVMRUQ6MyxJTlNFVDo0LFVOREVSTElORTo1fSx0LlN0cmVhbVR5cGU9e1VOS05PV046MCxGTEFURToxLExaVzoyLERDVDozLEpQWDo0LEpCSUc6NSxBODU6NixBSFg6NyxDQ0Y6OCxSTDo5fSx0LkZvbnRUeXBlPXtVTktOT1dOOjAsVFlQRTE6MSxUWVBFMUM6MixDSURGT05UVFlQRTA6MyxDSURGT05UVFlQRTBDOjQsVFJVRVRZUEU6NSxDSURGT05UVFlQRTI6NixUWVBFMzo3LE9QRU5UWVBFOjgsVFlQRTA6OSxNTVRZUEUxOjEwfTt2YXIgbz17RVJST1JTOjAsV0FSTklOR1M6MSxJTkZPUzo1fTt0LlZlcmJvc2l0eUxldmVsPW8sdC5DTWFwQ29tcHJlc3Npb25UeXBlPXtOT05FOjAsQklOQVJZOjEsU1RSRUFNOjJ9LHQuT1BTPXtkZXBlbmRlbmN5OjEsc2V0TGluZVdpZHRoOjIsc2V0TGluZUNhcDozLHNldExpbmVKb2luOjQsc2V0TWl0ZXJMaW1pdDo1LHNldERhc2g6NixzZXRSZW5kZXJpbmdJbnRlbnQ6NyxzZXRGbGF0bmVzczo4LHNldEdTdGF0ZTo5LHNhdmU6MTAscmVzdG9yZToxMSx0cmFuc2Zvcm06MTIsbW92ZVRvOjEzLGxpbmVUbzoxNCxjdXJ2ZVRvOjE1LGN1cnZlVG8yOjE2LGN1cnZlVG8zOjE3LGNsb3NlUGF0aDoxOCxyZWN0YW5nbGU6MTksc3Ryb2tlOjIwLGNsb3NlU3Ryb2tlOjIxLGZpbGw6MjIsZW9GaWxsOjIzLGZpbGxTdHJva2U6MjQsZW9GaWxsU3Ryb2tlOjI1LGNsb3NlRmlsbFN0cm9rZToyNixjbG9zZUVPRmlsbFN0cm9rZToyNyxlbmRQYXRoOjI4LGNsaXA6MjksZW9DbGlwOjMwLGJlZ2luVGV4dDozMSxlbmRUZXh0OjMyLHNldENoYXJTcGFjaW5nOjMzLHNldFdvcmRTcGFjaW5nOjM0LHNldEhTY2FsZTozNSxzZXRMZWFkaW5nOjM2LHNldEZvbnQ6Mzcsc2V0VGV4dFJlbmRlcmluZ01vZGU6Mzgsc2V0VGV4dFJpc2U6MzksbW92ZVRleHQ6NDAsc2V0TGVhZGluZ01vdmVUZXh0OjQxLHNldFRleHRNYXRyaXg6NDIsbmV4dExpbmU6NDMsc2hvd1RleHQ6NDQsc2hvd1NwYWNlZFRleHQ6NDUsbmV4dExpbmVTaG93VGV4dDo0NixuZXh0TGluZVNldFNwYWNpbmdTaG93VGV4dDo0NyxzZXRDaGFyV2lkdGg6NDgsc2V0Q2hhcldpZHRoQW5kQm91bmRzOjQ5LHNldFN0cm9rZUNvbG9yU3BhY2U6NTAsc2V0RmlsbENvbG9yU3BhY2U6NTEsc2V0U3Ryb2tlQ29sb3I6NTIsc2V0U3Ryb2tlQ29sb3JOOjUzLHNldEZpbGxDb2xvcjo1NCxzZXRGaWxsQ29sb3JOOjU1LHNldFN0cm9rZUdyYXk6NTYsc2V0RmlsbEdyYXk6NTcsc2V0U3Ryb2tlUkdCQ29sb3I6NTgsc2V0RmlsbFJHQkNvbG9yOjU5LHNldFN0cm9rZUNNWUtDb2xvcjo2MCxzZXRGaWxsQ01ZS0NvbG9yOjYxLHNoYWRpbmdGaWxsOjYyLGJlZ2luSW5saW5lSW1hZ2U6NjMsYmVnaW5JbWFnZURhdGE6NjQsZW5kSW5saW5lSW1hZ2U6NjUscGFpbnRYT2JqZWN0OjY2LG1hcmtQb2ludDo2NyxtYXJrUG9pbnRQcm9wczo2OCxiZWdpbk1hcmtlZENvbnRlbnQ6NjksYmVnaW5NYXJrZWRDb250ZW50UHJvcHM6NzAsZW5kTWFya2VkQ29udGVudDo3MSxiZWdpbkNvbXBhdDo3MixlbmRDb21wYXQ6NzMscGFpbnRGb3JtWE9iamVjdEJlZ2luOjc0LHBhaW50Rm9ybVhPYmplY3RFbmQ6NzUsYmVnaW5Hcm91cDo3NixlbmRHcm91cDo3NyxiZWdpbkFubm90YXRpb25zOjc4LGVuZEFubm90YXRpb25zOjc5LGJlZ2luQW5ub3RhdGlvbjo4MCxlbmRBbm5vdGF0aW9uOjgxLHBhaW50SnBlZ1hPYmplY3Q6ODIscGFpbnRJbWFnZU1hc2tYT2JqZWN0OjgzLHBhaW50SW1hZ2VNYXNrWE9iamVjdEdyb3VwOjg0LHBhaW50SW1hZ2VYT2JqZWN0Ojg1LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0Ojg2LHBhaW50SW5saW5lSW1hZ2VYT2JqZWN0R3JvdXA6ODcscGFpbnRJbWFnZVhPYmplY3RSZXBlYXQ6ODgscGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0Ojg5LHBhaW50U29saWRDb2xvckltYWdlTWFzazo5MCxjb25zdHJ1Y3RQYXRoOjkxfSx0LlVOU1VQUE9SVEVEX0ZFQVRVUkVTPXt1bmtub3duOiJ1bmtub3duIixmb3JtczoiZm9ybXMiLGphdmFTY3JpcHQ6ImphdmFTY3JpcHQiLHNtYXNrOiJzbWFzayIsc2hhZGluZ1BhdHRlcm46InNoYWRpbmdQYXR0ZXJuIixmb250OiJmb250In0sdC5QYXNzd29yZFJlc3BvbnNlcz17TkVFRF9QQVNTV09SRDoxLElOQ09SUkVDVF9QQVNTV09SRDoyfTt2YXIgcz1vLldBUk5JTkdTO2Z1bmN0aW9uIGwoZSl7cz49by5XQVJOSU5HUyYmY29uc29sZS5sb2coIldhcm5pbmc6ICIrZSl9ZnVuY3Rpb24gYyhlKXt0aHJvdyBuZXcgRXJyb3IoZSl9ZnVuY3Rpb24gdShlLHQpe2V8fGModCl9dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJQYXNzd29yZEV4Y2VwdGlvbiIsdGhpcy5tZXNzYWdlPWUsdGhpcy5jb2RlPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlBhc3N3b3JkRXhjZXB0aW9uPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmtub3duRXJyb3JFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuZGV0YWlscz10fXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Vbmtub3duRXJyb3JFeGNlcHRpb249aDt2YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5uYW1lPSJJbnZhbGlkUERGRXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuSW52YWxpZFBERkV4Y2VwdGlvbj1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9Ik1pc3NpbmdQREZFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5NaXNzaW5nUERGRXhjZXB0aW9uPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5uYW1lPSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iLHRoaXMubWVzc2FnZT1lLHRoaXMuc3RhdHVzPXR9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlVuZXhwZWN0ZWRSZXNwb25zZUV4Y2VwdGlvbj1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuYmVnaW49ZSx0aGlzLmVuZD10LHRoaXMubWVzc2FnZT0iTWlzc2luZyBkYXRhIFsiK2UrIiwgIit0KyIpIn1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9Ik1pc3NpbmdEYXRhRXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0Lk1pc3NpbmdEYXRhRXhjZXB0aW9uPWc7dmFyIHY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMubWVzc2FnZT1lfXJldHVybiBlLnByb3RvdHlwZT1uZXcgRXJyb3IsZS5wcm90b3R5cGUubmFtZT0iWFJlZkVudHJ5RXhjZXB0aW9uIixlLmNvbnN0cnVjdG9yPWUsZX0oKTt0LlhSZWZFbnRyeUV4Y2VwdGlvbj12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IlhSZWZQYXJzZUV4Y2VwdGlvbiIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5YUmVmUGFyc2VFeGNlcHRpb249eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPWV9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJGb3JtYXRFcnJvciIsZS5jb25zdHJ1Y3Rvcj1lLGV9KCk7dC5Gb3JtYXRFcnJvcj1iO3ZhciB3PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9IkFib3J0RXhjZXB0aW9uIix0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUuY29uc3RydWN0b3I9ZSxlfSgpO3QuQWJvcnRFeGNlcHRpb249dzt2YXIgaz0vXHgwMC9nO2Z1bmN0aW9uIFMoZSl7dSgic3RyaW5nIj09dHlwZW9mIGUsIkludmFsaWQgYXJndW1lbnQgZm9yIHN0cmluZ1RvQnl0ZXMiKTtmb3IodmFyIHQ9ZS5sZW5ndGgscj1uZXcgVWludDhBcnJheSh0KSxuPTA7bjx0OysrbilyW25dPTI1NSZlLmNoYXJDb2RlQXQobik7cmV0dXJuIHJ9ZnVuY3Rpb24gXyhlKXtyZXR1cm4gdm9pZCAwIT09ZS5sZW5ndGg/ZS5sZW5ndGg6KHUodm9pZCAwIT09ZS5ieXRlTGVuZ3RoKSxlLmJ5dGVMZW5ndGgpfXZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe312YXIgdD1bInJnYigiLDAsIiwiLDAsIiwiLDAsIikiXTtyZXR1cm4gZS5tYWtlQ3NzUmdiPWZ1bmN0aW9uKGUscixuKXtyZXR1cm4gdFsxXT1lLHRbM109cix0WzVdPW4sdC5qb2luKCIiKX0sZS50cmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXtyZXR1cm5bZVswXSp0WzBdK2VbMl0qdFsxXSxlWzFdKnRbMF0rZVszXSp0WzFdLGVbMF0qdFsyXStlWzJdKnRbM10sZVsxXSp0WzJdK2VbM10qdFszXSxlWzBdKnRbNF0rZVsyXSp0WzVdK2VbNF0sZVsxXSp0WzRdK2VbM10qdFs1XStlWzVdXX0sZS5hcHBseVRyYW5zZm9ybT1mdW5jdGlvbihlLHQpe3JldHVybltlWzBdKnRbMF0rZVsxXSp0WzJdK3RbNF0sZVswXSp0WzFdK2VbMV0qdFszXSt0WzVdXX0sZS5hcHBseUludmVyc2VUcmFuc2Zvcm09ZnVuY3Rpb24oZSx0KXt2YXIgcj10WzBdKnRbM10tdFsxXSp0WzJdO3JldHVyblsoZVswXSp0WzNdLWVbMV0qdFsyXSt0WzJdKnRbNV0tdFs0XSp0WzNdKS9yLCgtZVswXSp0WzFdK2VbMV0qdFswXSt0WzRdKnRbMV0tdFs1XSp0WzBdKS9yXX0sZS5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveD1mdW5jdGlvbih0LHIpe3ZhciBuPWUuYXBwbHlUcmFuc2Zvcm0odCxyKSxhPWUuYXBwbHlUcmFuc2Zvcm0odC5zbGljZSgyLDQpLHIpLGk9ZS5hcHBseVRyYW5zZm9ybShbdFswXSx0WzNdXSxyKSxvPWUuYXBwbHlUcmFuc2Zvcm0oW3RbMl0sdFsxXV0scik7cmV0dXJuW01hdGgubWluKG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWluKG5bMV0sYVsxXSxpWzFdLG9bMV0pLE1hdGgubWF4KG5bMF0sYVswXSxpWzBdLG9bMF0pLE1hdGgubWF4KG5bMV0sYVsxXSxpWzFdLG9bMV0pXX0sZS5pbnZlcnNlVHJhbnNmb3JtPWZ1bmN0aW9uKGUpe3ZhciB0PWVbMF0qZVszXS1lWzFdKmVbMl07cmV0dXJuW2VbM10vdCwtZVsxXS90LC1lWzJdL3QsZVswXS90LChlWzJdKmVbNV0tZVs0XSplWzNdKS90LChlWzRdKmVbMV0tZVs1XSplWzBdKS90XX0sZS5hcHBseTNkVHJhbnNmb3JtPWZ1bmN0aW9uKGUsdCl7cmV0dXJuW2VbMF0qdFswXStlWzFdKnRbMV0rZVsyXSp0WzJdLGVbM10qdFswXStlWzRdKnRbMV0rZVs1XSp0WzJdLGVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdXX0sZS5zaW5ndWxhclZhbHVlRGVjb21wb3NlMmRTY2FsZT1mdW5jdGlvbihlKXt2YXIgdD1bZVswXSxlWzJdLGVbMV0sZVszXV0scj1lWzBdKnRbMF0rZVsxXSp0WzJdLG49ZVswXSp0WzFdK2VbMV0qdFszXSxhPWVbMl0qdFswXStlWzNdKnRbMl0saT1lWzJdKnRbMV0rZVszXSp0WzNdLG89KHIraSkvMixzPU1hdGguc3FydCgocitpKSoocitpKS00KihyKmktYSpuKSkvMixsPW8rc3x8MSxjPW8tc3x8MTtyZXR1cm5bTWF0aC5zcXJ0KGwpLE1hdGguc3FydChjKV19LGUubm9ybWFsaXplUmVjdD1mdW5jdGlvbihlKXt2YXIgdD1lLnNsaWNlKDApO3JldHVybiBlWzBdPmVbMl0mJih0WzBdPWVbMl0sdFsyXT1lWzBdKSxlWzFdPmVbM10mJih0WzFdPWVbM10sdFszXT1lWzFdKSx0fSxlLmludGVyc2VjdD1mdW5jdGlvbih0LHIpe2Z1bmN0aW9uIG4oZSx0KXtyZXR1cm4gZS10fXZhciBhPVt0WzBdLHRbMl0sclswXSxyWzJdXS5zb3J0KG4pLGk9W3RbMV0sdFszXSxyWzFdLHJbM11dLnNvcnQobiksbz1bXTtyZXR1cm4gdD1lLm5vcm1hbGl6ZVJlY3QodCkscj1lLm5vcm1hbGl6ZVJlY3QociksKGFbMF09PT10WzBdJiZhWzFdPT09clswXXx8YVswXT09PXJbMF0mJmFbMV09PT10WzBdKSYmKG9bMF09YVsxXSxvWzJdPWFbMl0sKGlbMF09PT10WzFdJiZpWzFdPT09clsxXXx8aVswXT09PXJbMV0mJmlbMV09PT10WzFdKSYmKG9bMV09aVsxXSxvWzNdPWlbMl0sbykpfSxlfSgpO3QuVXRpbD14O3ZhciBBLEM9WyIiLCJDIiwiQ0MiLCJDQ0MiLCJDRCIsIkQiLCJEQyIsIkRDQyIsIkRDQ0MiLCJDTSIsIiIsIlgiLCJYWCIsIlhYWCIsIlhMIiwiTCIsIkxYIiwiTFhYIiwiTFhYWCIsIlhDIiwiIiwiSSIsIklJIiwiSUlJIiwiSVYiLCJWIiwiVkkiLCJWSUkiLCJWSUlJIiwiSVgiXSxQPVswLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw3MjgsNzExLDcxMCw3MjksNzMzLDczMSw3MzAsNzMyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDgyMjYsODIyNCw4MjI1LDgyMzAsODIxMiw4MjExLDQwMiw4MjYwLDgyNDksODI1MCw4NzIyLDgyNDAsODIyMiw4MjIwLDgyMjEsODIxNiw4MjE3LDgyMTgsODQ4Miw2NDI1Nyw2NDI1OCwzMjEsMzM4LDM1MiwzNzYsMzgxLDMwNSwzMjIsMzM5LDM1MywzODIsMCw4MzY0XSxFPShBPSJBQkNERUZHSElKS0xNTk9QUVJTVFVWV1hZWmFiY2RlZmdoaWprbG1ub3BxcnN0dXZ3eHl6MDEyMzQ1Njc4OSsvPSIsZnVuY3Rpb24oZSx0KXt2YXIgcj1hcmd1bWVudHMubGVuZ3RoPjImJnZvaWQgMCE9PWFyZ3VtZW50c1syXSYmYXJndW1lbnRzWzJdO2lmKCFyJiZhLlVSTC5jcmVhdGVPYmplY3RVUkwpe3ZhciBuPW5ldyBCbG9iKFtlXSx7dHlwZTp0fSk7cmV0dXJuIGEuVVJMLmNyZWF0ZU9iamVjdFVSTChuKX1mb3IodmFyIGk9ImRhdGE6Iit0KyI7YmFzZTY0LCIsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTMpe3ZhciBsPTI1NSZlW29dLGM9MjU1JmVbbysxXSx1PTI1NSZlW28rMl0sZj1sPj4yLGg9KDMmbCk8PDR8Yz4+NCxkPW8rMTxzPygxNSZjKTw8Mnx1Pj42OjY0LHA9bysyPHM/NjMmdTo2NDtpKz1BW2ZdK0FbaF0rQVtkXStBW3BdfXJldHVybiBpfSk7dC5jcmVhdGVPYmplY3RVUkw9RX0sZnVuY3Rpb24oZSxyLG4peyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBhKGUpe3JldHVybihhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGk9big4KTtpZighaS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZCl7aS5fcGRmanNDb21wYXRpYmlsaXR5Q2hlY2tlZD0hMDt2YXIgbz1uKDkpLHM9Im9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiB3aW5kb3c/InVuZGVmaW5lZCI6YSh3aW5kb3cpKSYmIm9iamVjdCI9PT0oInVuZGVmaW5lZCI9PXR5cGVvZiBkb2N1bWVudD8idW5kZWZpbmVkIjphKGRvY3VtZW50KSk7IWkuYnRvYSYmbygpJiYoaS5idG9hPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmluYXJ5IikudG9TdHJpbmcoImJhc2U2NCIpfSksIWkuYXRvYiYmbygpJiYoaS5hdG9iPWZ1bmN0aW9uKGUpe3JldHVybiB0LmZyb20oZSwiYmFzZTY0IikudG9TdHJpbmcoImJpbmFyeSIpfSkscyYmdm9pZCAwPT09RWxlbWVudC5wcm90b3R5cGUucmVtb3ZlJiYoRWxlbWVudC5wcm90b3R5cGUucmVtb3ZlPWZ1bmN0aW9uKCl7dGhpcy5wYXJlbnROb2RlJiZ0aGlzLnBhcmVudE5vZGUucmVtb3ZlQ2hpbGQodGhpcyl9KSxmdW5jdGlvbigpe2lmKHMmJiFvKCkpe3ZhciBlPWRvY3VtZW50LmNyZWF0ZUVsZW1lbnQoImRpdiIpO2lmKGUuY2xhc3NMaXN0LmFkZCgidGVzdE9uZSIsInRlc3RUd28iKSwhMCE9PWUuY2xhc3NMaXN0LmNvbnRhaW5zKCJ0ZXN0T25lIil8fCEwIT09ZS5jbGFzc0xpc3QuY29udGFpbnMoInRlc3RUd28iKSl7dmFyIHQ9RE9NVG9rZW5MaXN0LnByb3RvdHlwZS5hZGQscj1ET01Ub2tlbkxpc3QucHJvdG90eXBlLnJlbW92ZTtET01Ub2tlbkxpc3QucHJvdG90eXBlLmFkZD1mdW5jdGlvbigpe2Zvcih2YXIgZT1hcmd1bWVudHMubGVuZ3RoLHI9bmV3IEFycmF5KGUpLG49MDtuPGU7bisrKXJbbl09YXJndW1lbnRzW25dO2Zvcih2YXIgYT0wO2E8ci5sZW5ndGg7YSsrKXt2YXIgaT1yW2FdO3QuY2FsbCh0aGlzLGkpfX0sRE9NVG9rZW5MaXN0LnByb3RvdHlwZS5yZW1vdmU9ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKSxuPTA7bjxlO24rKyl0W25dPWFyZ3VtZW50c1tuXTtmb3IodmFyIGE9MDthPHQubGVuZ3RoO2ErKyl7dmFyIGk9dFthXTtyLmNhbGwodGhpcyxpKX19fX19KCkscyYmIW8oKSYmITEhPT1kb2N1bWVudC5jcmVhdGVFbGVtZW50KCJkaXYiKS5jbGFzc0xpc3QudG9nZ2xlKCJ0ZXN0IiwwKSYmKERPTVRva2VuTGlzdC5wcm90b3R5cGUudG9nZ2xlPWZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MT8hIWFyZ3VtZW50c1sxXTohdGhpcy5jb250YWlucyhlKTtyZXR1cm4gdGhpc1t0PyJhZGQiOiJyZW1vdmUiXShlKSx0fSksU3RyaW5nLnByb3RvdHlwZS5zdGFydHNXaXRofHxuKDEwKSxTdHJpbmcucHJvdG90eXBlLmVuZHNXaXRofHxuKDQwKSxTdHJpbmcucHJvdG90eXBlLmluY2x1ZGVzfHxuKDQyKSxBcnJheS5wcm90b3R5cGUuaW5jbHVkZXN8fG4oNDQpLEFycmF5LmZyb218fG4oNTEpLE9iamVjdC5hc3NpZ258fG4oNzQpLE1hdGgubG9nMnx8KE1hdGgubG9nMj1uKDc5KSksTnVtYmVyLmlzTmFOfHwoTnVtYmVyLmlzTmFOPW4oODEpKSxOdW1iZXIuaXNJbnRlZ2VyfHwoTnVtYmVyLmlzSW50ZWdlcj1uKDgzKSksaS5Qcm9taXNlJiZpLlByb21pc2UucHJvdG90eXBlJiZpLlByb21pc2UucHJvdG90eXBlLmZpbmFsbHl8fChpLlByb21pc2U9big4NikpLGkuV2Vha01hcHx8KGkuV2Vha01hcD1uKDEwNikpLGkuV2Vha1NldHx8KGkuV2Vha1NldD1uKDEyMykpLFN0cmluZy5jb2RlUG9pbnRBdHx8KFN0cmluZy5jb2RlUG9pbnRBdD1uKDEyNykpLFN0cmluZy5mcm9tQ29kZVBvaW50fHwoU3RyaW5nLmZyb21Db2RlUG9pbnQ9bigxMjkpKSxpLlN5bWJvbHx8bigxMzEpLFN0cmluZy5wcm90b3R5cGUucGFkU3RhcnR8fG4oMTM4KSxTdHJpbmcucHJvdG90eXBlLnBhZEVuZHx8bigxNDIpLE9iamVjdC52YWx1ZXN8fChPYmplY3QudmFsdWVzPW4oMTQ0KSl9fSxmdW5jdGlvbihlLHQsbil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz0idW5kZWZpbmVkIiE9dHlwZW9mIHdpbmRvdyYmd2luZG93Lk1hdGg9PT1NYXRoP3dpbmRvdzp2b2lkIDAhPT1yJiZyLk1hdGg9PT1NYXRoP3I6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PT1NYXRoP3NlbGY6e319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gYShlKXtyZXR1cm4oYT0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWUuZXhwb3J0cz1mdW5jdGlvbigpe3JldHVybiJvYmplY3QiPT09KHZvaWQgMD09PW4/InVuZGVmaW5lZCI6YShuKSkmJm4rIiI9PSJbb2JqZWN0IHByb2Nlc3NdIiYmIW4udmVyc2lvbnMubnd9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTEpLGUuZXhwb3J0cz1yKDE0KS5TdHJpbmcuc3RhcnRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMzApLGk9cigzMiksbz0iIi5zdGFydHNXaXRoO24obi5QK24uRipyKDM5KSgic3RhcnRzV2l0aCIpLCJTdHJpbmciLHtzdGFydHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWkodGhpcyxlLCJzdGFydHNXaXRoIikscj1hKE1hdGgubWluKGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLHQubGVuZ3RoKSksbj1TdHJpbmcoZSk7cmV0dXJuIG8/by5jYWxsKHQsbixyKTp0LnNsaWNlKHIscituLmxlbmd0aCk9PT1ufX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLGE9cigxNCksaT1yKDE1KSxvPXIoMjUpLHM9cigyOCksbD1mdW5jdGlvbiBlKHQscixsKXt2YXIgYyx1LGYsaCxkPXQmZS5GLHA9dCZlLkcsbT10JmUuUCxnPXQmZS5CLHY9cD9uOnQmZS5TP25bcl18fChuW3JdPXt9KToobltyXXx8e30pLnByb3RvdHlwZSx5PXA/YTphW3JdfHwoYVtyXT17fSksYj15LnByb3RvdHlwZXx8KHkucHJvdG90eXBlPXt9KTtmb3IoYyBpbiBwJiYobD1yKSxsKWY9KCh1PSFkJiZ2JiZ2b2lkIDAhPT12W2NdKT92OmwpW2NdLGg9ZyYmdT9zKGYsbik6bSYmImZ1bmN0aW9uIj09dHlwZW9mIGY/cyhGdW5jdGlvbi5jYWxsLGYpOmYsdiYmbyh2LGMsZix0JmUuVSkseVtjXSE9ZiYmaSh5LGMsaCksbSYmYltjXSE9ZiYmKGJbY109Zil9O24uY29yZT1hLGwuRj0xLGwuRz0yLGwuUz00LGwuUD04LGwuQj0xNixsLlc9MzIsbC5VPTY0LGwuUj0xMjgsZS5leHBvcnRzPWx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49ZS5leHBvcnRzPSJ1bmRlZmluZWQiIT10eXBlb2Ygd2luZG93JiZ3aW5kb3cuTWF0aD09TWF0aD93aW5kb3c6InVuZGVmaW5lZCIhPXR5cGVvZiBzZWxmJiZzZWxmLk1hdGg9PU1hdGg/c2VsZjpGdW5jdGlvbigicmV0dXJuIHRoaXMiKSgpOyJudW1iZXIiPT10eXBlb2YgX19nJiYoX19nPW4pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPWUuZXhwb3J0cz17dmVyc2lvbjoiMi42LjIifTsibnVtYmVyIj09dHlwZW9mIF9fZSYmKF9fZT1uKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE2KSxhPXIoMjQpO2UuZXhwb3J0cz1yKDIwKT9mdW5jdGlvbihlLHQscil7cmV0dXJuIG4uZihlLHQsYSgxLHIpKX06ZnVuY3Rpb24oZSx0LHIpe3JldHVybiBlW3RdPXIsZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNyksYT1yKDE5KSxpPXIoMjMpLG89T2JqZWN0LmRlZmluZVByb3BlcnR5O3QuZj1yKDIwKT9PYmplY3QuZGVmaW5lUHJvcGVydHk6ZnVuY3Rpb24oZSx0LHIpe2lmKG4oZSksdD1pKHQsITApLG4ociksYSl0cnl7cmV0dXJuIG8oZSx0LHIpfWNhdGNoKGUpe31pZigiZ2V0ImluIHJ8fCJzZXQiaW4gcil0aHJvdyBUeXBlRXJyb3IoIkFjY2Vzc29ycyBub3Qgc3VwcG9ydGVkISIpO3JldHVybiJ2YWx1ZSJpbiByJiYoZVt0XT1yLnZhbHVlKSxlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7aWYoIW4oZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYW4gb2JqZWN0ISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiJvYmplY3QiPT09bihlKT9udWxsIT09ZToiZnVuY3Rpb24iPT10eXBlb2YgZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSFyKDIwKSYmIXIoMjEpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkocigyMikoImRpdiIpLCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDd9fSkuYX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9IXIoMjEpKChmdW5jdGlvbigpe3JldHVybiA3IT1PYmplY3QuZGVmaW5lUHJvcGVydHkoe30sImEiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gN319KS5hfSkpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt0cnl7cmV0dXJuISFlKCl9Y2F0Y2goZSl7cmV0dXJuITB9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KSxhPXIoMTMpLmRvY3VtZW50LGk9bihhKSYmbihhLmNyZWF0ZUVsZW1lbnQpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaT9hLmNyZWF0ZUVsZW1lbnQoZSk6e319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCFuKGUpKXJldHVybiBlO3ZhciByLGE7aWYodCYmImZ1bmN0aW9uIj09dHlwZW9mKHI9ZS50b1N0cmluZykmJiFuKGE9ci5jYWxsKGUpKSlyZXR1cm4gYTtpZigiZnVuY3Rpb24iPT10eXBlb2Yocj1lLnZhbHVlT2YpJiYhbihhPXIuY2FsbChlKSkpcmV0dXJuIGE7aWYoIXQmJiJmdW5jdGlvbiI9PXR5cGVvZihyPWUudG9TdHJpbmcpJiYhbihhPXIuY2FsbChlKSkpcmV0dXJuIGE7dGhyb3cgVHlwZUVycm9yKCJDYW4ndCBjb252ZXJ0IG9iamVjdCB0byBwcmltaXRpdmUgdmFsdWUiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue2VudW1lcmFibGU6ISgxJmUpLGNvbmZpZ3VyYWJsZTohKDImZSksd3JpdGFibGU6ISg0JmUpLHZhbHVlOnR9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTUpLGk9cigyNiksbz1yKDI3KSgic3JjIikscz1GdW5jdGlvbi50b1N0cmluZyxsPSgiIitzKS5zcGxpdCgidG9TdHJpbmciKTtyKDE0KS5pbnNwZWN0U291cmNlPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNhbGwoZSl9LChlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIscyl7dmFyIGM9ImZ1bmN0aW9uIj09dHlwZW9mIHI7YyYmKGkociwibmFtZSIpfHxhKHIsIm5hbWUiLHQpKSxlW3RdIT09ciYmKGMmJihpKHIsbyl8fGEocixvLGVbdF0/IiIrZVt0XTpsLmpvaW4oU3RyaW5nKHQpKSkpLGU9PT1uP2VbdF09cjpzP2VbdF0/ZVt0XT1yOmEoZSx0LHIpOihkZWxldGUgZVt0XSxhKGUsdCxyKSkpfSkoRnVuY3Rpb24ucHJvdG90eXBlLCJ0b1N0cmluZyIsKGZ1bmN0aW9uKCl7cmV0dXJuImZ1bmN0aW9uIj09dHlwZW9mIHRoaXMmJnRoaXNbb118fHMuY2FsbCh0aGlzKX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS5oYXNPd25Qcm9wZXJ0eTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbi5jYWxsKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPTAsYT1NYXRoLnJhbmRvbSgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4iU3ltYm9sKCIuY29uY2F0KHZvaWQgMD09PWU/IiI6ZSwiKV8iLCgrK24rYSkudG9TdHJpbmcoMzYpKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyOSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKGUpLHZvaWQgMD09PXQpcmV0dXJuIGU7c3dpdGNoKHIpe2Nhc2UgMTpyZXR1cm4gZnVuY3Rpb24ocil7cmV0dXJuIGUuY2FsbCh0LHIpfTtjYXNlIDI6cmV0dXJuIGZ1bmN0aW9uKHIsbil7cmV0dXJuIGUuY2FsbCh0LHIsbil9O2Nhc2UgMzpyZXR1cm4gZnVuY3Rpb24ocixuLGEpe3JldHVybiBlLmNhbGwodCxyLG4sYSl9fXJldHVybiBmdW5jdGlvbigpe3JldHVybiBlLmFwcGx5KHQsYXJndW1lbnRzKX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBUeXBlRXJyb3IoZSsiIGlzIG5vdCBhIGZ1bmN0aW9uISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPU1hdGgubWluO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZT4wP2EobihlKSw5MDA3MTk5MjU0NzQwOTkxKTowfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1NYXRoLmNlaWwsYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gaXNOYU4oZT0rZSk/MDooZT4wP2E6bikoZSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzMpLGE9cigzOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtpZihuKHQpKXRocm93IFR5cGVFcnJvcigiU3RyaW5nIyIrcisiIGRvZXNuJ3QgYWNjZXB0IHJlZ2V4ISIpO3JldHVybiBTdHJpbmcoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigzNCksaT1yKDM1KSgibWF0Y2giKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuIG4oZSkmJih2b2lkIDAhPT0odD1lW2ldKT8hIXQ6IlJlZ0V4cCI9PWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj17fS50b1N0cmluZztlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4uY2FsbChlKS5zbGljZSg4LC0xKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzNikoIndrcyIpLGE9cigyNyksaT1yKDEzKS5TeW1ib2wsbz0iZnVuY3Rpb24iPT10eXBlb2YgaTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBuW2VdfHwobltlXT1vJiZpW2VdfHwobz9pOmEpKCJTeW1ib2wuIitlKSl9KS5zdG9yZT1ufSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTQpLGE9cigxMyksaT1hWyJfX2NvcmUtanNfc2hhcmVkX18iXXx8KGFbIl9fY29yZS1qc19zaGFyZWRfXyJdPXt9KTsoZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGlbZV18fChpW2VdPXZvaWQgMCE9PXQ/dDp7fSl9KSgidmVyc2lvbnMiLFtdKS5wdXNoKHt2ZXJzaW9uOm4udmVyc2lvbixtb2RlOnIoMzcpPyJwdXJlIjoiZ2xvYmFsIixjb3B5cmlnaHQ6IsKpIDIwMTkgRGVuaXMgUHVzaGthcmV2ICh6bG9pcm9jay5ydSkifSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPSExfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtpZihudWxsPT1lKXRocm93IFR5cGVFcnJvcigiQ2FuJ3QgY2FsbCBtZXRob2Qgb24gICIrZSk7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJtYXRjaCIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD0vLi87dHJ5eyIvLi8iW2VdKHQpfWNhdGNoKHIpe3RyeXtyZXR1cm4gdFtuXT0hMSwhIi8uLyJbZV0odCl9Y2F0Y2goZSl7fX1yZXR1cm4hMH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cig0MSksZS5leHBvcnRzPXIoMTQpLlN0cmluZy5lbmRzV2l0aH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoMzApLGk9cigzMiksbz0iIi5lbmRzV2l0aDtuKG4uUCtuLkYqcigzOSkoImVuZHNXaXRoIiksIlN0cmluZyIse2VuZHNXaXRoOmZ1bmN0aW9uKGUpe3ZhciB0PWkodGhpcyxlLCJlbmRzV2l0aCIpLHI9YXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsbj1hKHQubGVuZ3RoKSxzPXZvaWQgMD09PXI/bjpNYXRoLm1pbihhKHIpLG4pLGw9U3RyaW5nKGUpO3JldHVybiBvP28uY2FsbCh0LGwscyk6dC5zbGljZShzLWwubGVuZ3RoLHMpPT09bH19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDQzKSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmluY2x1ZGVzfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigzMik7bihuLlArbi5GKnIoMzkpKCJpbmNsdWRlcyIpLCJTdHJpbmciLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4hIX5hKHRoaXMsZSwiaW5jbHVkZXMiKS5pbmRleE9mKGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNDUpLGUuZXhwb3J0cz1yKDE0KS5BcnJheS5pbmNsdWRlc30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKSxhPXIoNDYpKCEwKTtuKG4uUCwiQXJyYXkiLHtpbmNsdWRlczpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDApfX0pLHIoNTApKCJpbmNsdWRlcyIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNDcpLGE9cigzMCksaT1yKDQ5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKHQscixvKXt2YXIgcyxsPW4odCksYz1hKGwubGVuZ3RoKSx1PWkobyxjKTtpZihlJiZyIT1yKXtmb3IoO2M+dTspaWYoKHM9bFt1KytdKSE9cylyZXR1cm4hMH1lbHNlIGZvcig7Yz51O3UrKylpZigoZXx8dSBpbiBsKSYmbFt1XT09PXIpcmV0dXJuIGV8fHV8fDA7cmV0dXJuIWUmJi0xfX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig0OCksYT1yKDM4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG4oYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzQpO2UuZXhwb3J0cz1PYmplY3QoInoiKS5wcm9wZXJ0eUlzRW51bWVyYWJsZSgwKT9PYmplY3Q6ZnVuY3Rpb24oZSl7cmV0dXJuIlN0cmluZyI9PW4oZSk/ZS5zcGxpdCgiIik6T2JqZWN0KGUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPU1hdGgubWF4LGk9TWF0aC5taW47ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJuKGU9bihlKSk8MD9hKGUrdCwwKTppKGUsdCl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJ1bnNjb3BhYmxlcyIpLGE9QXJyYXkucHJvdG90eXBlO251bGw9PWFbbl0mJnIoMTUpKGEsbix7fSksZS5leHBvcnRzPWZ1bmN0aW9uKGUpe2Fbbl1bZV09ITB9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoNTIpLHIoNjcpLGUuZXhwb3J0cz1yKDE0KS5BcnJheS5mcm9tfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTMpKCEwKTtyKDU0KShTdHJpbmcsIlN0cmluZyIsKGZ1bmN0aW9uKGUpe3RoaXMuX3Q9U3RyaW5nKGUpLHRoaXMuX2k9MH0pLChmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5fdCxyPXRoaXMuX2k7cmV0dXJuIHI+PXQubGVuZ3RoP3t2YWx1ZTp2b2lkIDAsZG9uZTohMH06KGU9bih0LHIpLHRoaXMuX2krPWUubGVuZ3RoLHt2YWx1ZTplLGRvbmU6ITF9KX0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDMxKSxhPXIoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24odCxyKXt2YXIgaSxvLHM9U3RyaW5nKGEodCkpLGw9bihyKSxjPXMubGVuZ3RoO3JldHVybiBsPDB8fGw+PWM/ZT8iIjp2b2lkIDA6KGk9cy5jaGFyQ29kZUF0KGwpKTw1NTI5Nnx8aT41NjMxOXx8bCsxPT09Y3x8KG89cy5jaGFyQ29kZUF0KGwrMSkpPDU2MzIwfHxvPjU3MzQzP2U/cy5jaGFyQXQobCk6aTplP3Muc2xpY2UobCxsKzIpOm8tNTYzMjArKGktNTUyOTY8PDEwKSs2NTUzNn19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzcpLGE9cigxMiksaT1yKDI1KSxvPXIoMTUpLHM9cig1NSksbD1yKDU2KSxjPXIoNjQpLHU9cig2NSksZj1yKDM1KSgiaXRlcmF0b3IiKSxoPSEoW10ua2V5cyYmIm5leHQiaW5bXS5rZXlzKCkpLGQ9ZnVuY3Rpb24oKXtyZXR1cm4gdGhpc307ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLHAsbSxnLHYpe2wocix0LHApO3ZhciB5LGIsdyxrPWZ1bmN0aW9uKGUpe2lmKCFoJiZlIGluIEEpcmV0dXJuIEFbZV07c3dpdGNoKGUpe2Nhc2Uia2V5cyI6Y2FzZSJ2YWx1ZXMiOnJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgcih0aGlzLGUpfX1yZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHIodGhpcyxlKX19LFM9dCsiIEl0ZXJhdG9yIixfPSJ2YWx1ZXMiPT1tLHg9ITEsQT1lLnByb3RvdHlwZSxDPUFbZl18fEFbIkBAaXRlcmF0b3IiXXx8bSYmQVttXSxQPUN8fGsobSksRT1tP18/aygiZW50cmllcyIpOlA6dm9pZCAwLFQ9IkFycmF5Ij09dCYmQS5lbnRyaWVzfHxDO2lmKFQmJih3PXUoVC5jYWxsKG5ldyBlKSkpIT09T2JqZWN0LnByb3RvdHlwZSYmdy5uZXh0JiYoYyh3LFMsITApLG58fCJmdW5jdGlvbiI9PXR5cGVvZiB3W2ZdfHxvKHcsZixkKSksXyYmQyYmInZhbHVlcyIhPT1DLm5hbWUmJih4PSEwLFA9ZnVuY3Rpb24oKXtyZXR1cm4gQy5jYWxsKHRoaXMpfSksbiYmIXZ8fCFoJiYheCYmQVtmXXx8byhBLGYsUCksc1t0XT1QLHNbU109ZCxtKWlmKHk9e3ZhbHVlczpfP1A6aygidmFsdWVzIiksa2V5czpnP1A6aygia2V5cyIpLGVudHJpZXM6RX0sdilmb3IoYiBpbiB5KWIgaW4gQXx8aShBLGIseVtiXSk7ZWxzZSBhKGEuUCthLkYqKGh8fHgpLHQseSk7cmV0dXJuIHl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2UuZXhwb3J0cz17fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDU3KSxhPXIoMjQpLGk9cig2NCksbz17fTtyKDE1KShvLHIoMzUpKCJpdGVyYXRvciIpLChmdW5jdGlvbigpe3JldHVybiB0aGlzfSkpLGUuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7ZS5wcm90b3R5cGU9bihvLHtuZXh0OmEoMSxyKX0pLGkoZSx0KyIgSXRlcmF0b3IiKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNyksYT1yKDU4KSxpPXIoNjIpLG89cig2MSkoIklFX1BST1RPIikscz1mdW5jdGlvbigpe30sbD1mdW5jdGlvbigpe3ZhciBlLHQ9cigyMikoImlmcmFtZSIpLG49aS5sZW5ndGg7Zm9yKHQuc3R5bGUuZGlzcGxheT0ibm9uZSIscig2MykuYXBwZW5kQ2hpbGQodCksdC5zcmM9ImphdmFzY3JpcHQ6IiwoZT10LmNvbnRlbnRXaW5kb3cuZG9jdW1lbnQpLm9wZW4oKSxlLndyaXRlKCI8c2NyaXB0PmRvY3VtZW50LkY9T2JqZWN0PFwvc2NyaXB0PiIpLGUuY2xvc2UoKSxsPWUuRjtuLS07KWRlbGV0ZSBsLnByb3RvdHlwZVtpW25dXTtyZXR1cm4gbCgpfTtlLmV4cG9ydHM9T2JqZWN0LmNyZWF0ZXx8ZnVuY3Rpb24oZSx0KXt2YXIgcjtyZXR1cm4gbnVsbCE9PWU/KHMucHJvdG90eXBlPW4oZSkscj1uZXcgcyxzLnByb3RvdHlwZT1udWxsLHJbb109ZSk6cj1sKCksdm9pZCAwPT09dD9yOmEocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNiksYT1yKDE3KSxpPXIoNTkpO2UuZXhwb3J0cz1yKDIwKT9PYmplY3QuZGVmaW5lUHJvcGVydGllczpmdW5jdGlvbihlLHQpe2EoZSk7Zm9yKHZhciByLG89aSh0KSxzPW8ubGVuZ3RoLGw9MDtzPmw7KW4uZihlLHI9b1tsKytdLHRbcl0pO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDYwKSxhPXIoNjIpO2UuZXhwb3J0cz1PYmplY3Qua2V5c3x8ZnVuY3Rpb24oZSl7cmV0dXJuIG4oZSxhKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNiksYT1yKDQ3KSxpPXIoNDYpKCExKSxvPXIoNjEpKCJJRV9QUk9UTyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQpe3ZhciByLHM9YShlKSxsPTAsYz1bXTtmb3IociBpbiBzKXIhPW8mJm4ocyxyKSYmYy5wdXNoKHIpO2Zvcig7dC5sZW5ndGg+bDspbihzLHI9dFtsKytdKSYmKH5pKGMscil8fGMucHVzaChyKSk7cmV0dXJuIGN9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzYpKCJrZXlzIiksYT1yKDI3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIG5bZV18fChuW2VdPWEoZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtlLmV4cG9ydHM9ImNvbnN0cnVjdG9yLGhhc093blByb3BlcnR5LGlzUHJvdG90eXBlT2YscHJvcGVydHlJc0VudW1lcmFibGUsdG9Mb2NhbGVTdHJpbmcsdG9TdHJpbmcsdmFsdWVPZiIuc3BsaXQoIiwiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKS5kb2N1bWVudDtlLmV4cG9ydHM9biYmbi5kb2N1bWVudEVsZW1lbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxNikuZixhPXIoMjYpLGk9cigzNSkoInRvU3RyaW5nVGFnIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtlJiYhYShlPXI/ZTplLnByb3RvdHlwZSxpKSYmbihlLGkse2NvbmZpZ3VyYWJsZTohMCx2YWx1ZTp0fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjYpLGE9cig2NiksaT1yKDYxKSgiSUVfUFJPVE8iKSxvPU9iamVjdC5wcm90b3R5cGU7ZS5leHBvcnRzPU9iamVjdC5nZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSl7cmV0dXJuIGU9YShlKSxuKGUsaSk/ZVtpXToiZnVuY3Rpb24iPT10eXBlb2YgZS5jb25zdHJ1Y3RvciYmZSBpbnN0YW5jZW9mIGUuY29uc3RydWN0b3I/ZS5jb25zdHJ1Y3Rvci5wcm90b3R5cGU6ZSBpbnN0YW5jZW9mIE9iamVjdD9vOm51bGx9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4gT2JqZWN0KG4oZSkpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI4KSxhPXIoMTIpLGk9cig2Niksbz1yKDY4KSxzPXIoNjkpLGw9cigzMCksYz1yKDcwKSx1PXIoNzEpO2EoYS5TK2EuRiohcig3MykoKGZ1bmN0aW9uKGUpe0FycmF5LmZyb20oZSl9KSksIkFycmF5Iix7ZnJvbTpmdW5jdGlvbihlKXt2YXIgdCxyLGEsZixoPWkoZSksZD0iZnVuY3Rpb24iPT10eXBlb2YgdGhpcz90aGlzOkFycmF5LHA9YXJndW1lbnRzLmxlbmd0aCxtPXA+MT9hcmd1bWVudHNbMV06dm9pZCAwLGc9dm9pZCAwIT09bSx2PTAseT11KGgpO2lmKGcmJihtPW4obSxwPjI/YXJndW1lbnRzWzJdOnZvaWQgMCwyKSksbnVsbD09eXx8ZD09QXJyYXkmJnMoeSkpZm9yKHI9bmV3IGQodD1sKGgubGVuZ3RoKSk7dD52O3YrKyljKHIsdixnP20oaFt2XSx2KTpoW3ZdKTtlbHNlIGZvcihmPXkuY2FsbChoKSxyPW5ldyBkOyEoYT1mLm5leHQoKSkuZG9uZTt2KyspYyhyLHYsZz9vKGYsbSxbYS52YWx1ZSx2XSwhMCk6YS52YWx1ZSk7cmV0dXJuIHIubGVuZ3RoPXYscn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE3KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsYSl7dHJ5e3JldHVybiBhP3QobihyKVswXSxyWzFdKTp0KHIpfWNhdGNoKHQpe3ZhciBpPWUucmV0dXJuO3Rocm93IHZvaWQgMCE9PWkmJm4oaS5jYWxsKGUpKSx0fX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1NSksYT1yKDM1KSgiaXRlcmF0b3IiKSxpPUFycmF5LnByb3RvdHlwZTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7cmV0dXJuIHZvaWQgMCE9PWUmJihuLkFycmF5PT09ZXx8aVthXT09PWUpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE2KSxhPXIoMjQpO2UuZXhwb3J0cz1mdW5jdGlvbihlLHQscil7dCBpbiBlP24uZihlLHQsYSgwLHIpKTplW3RdPXJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNzIpLGE9cigzNSkoIml0ZXJhdG9yIiksaT1yKDU1KTtlLmV4cG9ydHM9cigxNCkuZ2V0SXRlcmF0b3JNZXRob2Q9ZnVuY3Rpb24oZSl7aWYobnVsbCE9ZSlyZXR1cm4gZVthXXx8ZVsiQEBpdGVyYXRvciJdfHxpW24oZSldfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDM0KSxhPXIoMzUpKCJ0b1N0cmluZ1RhZyIpLGk9IkFyZ3VtZW50cyI9PW4oZnVuY3Rpb24oKXtyZXR1cm4gYXJndW1lbnRzfSgpKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQscixvO3JldHVybiB2b2lkIDA9PT1lPyJVbmRlZmluZWQiOm51bGw9PT1lPyJOdWxsIjoic3RyaW5nIj09dHlwZW9mKHI9ZnVuY3Rpb24oZSx0KXt0cnl7cmV0dXJuIGVbdF19Y2F0Y2goZSl7fX0odD1PYmplY3QoZSksYSkpP3I6aT9uKHQpOiJPYmplY3QiPT0obz1uKHQpKSYmImZ1bmN0aW9uIj09dHlwZW9mIHQuY2FsbGVlPyJBcmd1bWVudHMiOm99fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzUpKCJpdGVyYXRvciIpLGE9ITE7dHJ5e3ZhciBpPVs3XVtuXSgpO2kucmV0dXJuPWZ1bmN0aW9uKCl7YT0hMH0sQXJyYXkuZnJvbShpLChmdW5jdGlvbigpe3Rocm93IDJ9KSl9Y2F0Y2goZSl7fWUuZXhwb3J0cz1mdW5jdGlvbihlLHQpe2lmKCF0JiYhYSlyZXR1cm4hMTt2YXIgcj0hMTt0cnl7dmFyIGk9WzddLG89aVtuXSgpO28ubmV4dD1mdW5jdGlvbigpe3JldHVybntkb25lOnI9ITB9fSxpW25dPWZ1bmN0aW9uKCl7cmV0dXJuIG99LGUoaSl9Y2F0Y2goZSl7fXJldHVybiByfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDc1KSxlLmV4cG9ydHM9cigxNCkuT2JqZWN0LmFzc2lnbn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtuKG4uUytuLkYsIk9iamVjdCIse2Fzc2lnbjpyKDc2KX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNTkpLGE9cig3NyksaT1yKDc4KSxvPXIoNjYpLHM9cig0OCksbD1PYmplY3QuYXNzaWduO2UuZXhwb3J0cz0hbHx8cigyMSkoKGZ1bmN0aW9uKCl7dmFyIGU9e30sdD17fSxyPVN5bWJvbCgpLG49ImFiY2RlZmdoaWprbG1ub3BxcnN0IjtyZXR1cm4gZVtyXT03LG4uc3BsaXQoIiIpLmZvckVhY2goKGZ1bmN0aW9uKGUpe3RbZV09ZX0pKSw3IT1sKHt9LGUpW3JdfHxPYmplY3Qua2V5cyhsKHt9LHQpKS5qb2luKCIiKSE9bn0pKT9mdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1vKGUpLGw9YXJndW1lbnRzLmxlbmd0aCxjPTEsdT1hLmYsZj1pLmY7bD5jOylmb3IodmFyIGgsZD1zKGFyZ3VtZW50c1tjKytdKSxwPXU/bihkKS5jb25jYXQodShkKSk6bihkKSxtPXAubGVuZ3RoLGc9MDttPmc7KWYuY2FsbChkLGg9cFtnKytdKSYmKHJbaF09ZFtoXSk7cmV0dXJuIHJ9Omx9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5mPU9iamVjdC5nZXRPd25Qcm9wZXJ0eVN5bWJvbHN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dC5mPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODApLGUuZXhwb3J0cz1yKDE0KS5NYXRoLmxvZzJ9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMik7bihuLlMsIk1hdGgiLHtsb2cyOmZ1bmN0aW9uKGUpe3JldHVybiBNYXRoLmxvZyhlKS9NYXRoLkxOMn19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDgyKSxlLmV4cG9ydHM9cigxNCkuTnVtYmVyLmlzTmFOfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpO24obi5TLCJOdW1iZXIiLHtpc05hTjpmdW5jdGlvbihlKXtyZXR1cm4gZSE9ZX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg0KSxlLmV4cG9ydHM9cigxNCkuTnVtYmVyLmlzSW50ZWdlcn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtuKG4uUywiTnVtYmVyIix7aXNJbnRlZ2VyOnIoODUpfSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxOCksYT1NYXRoLmZsb29yO2UuZXhwb3J0cz1mdW5jdGlvbihlKXtyZXR1cm4hbihlKSYmaXNGaW5pdGUoZSkmJmEoZSk9PT1lfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg3KSxyKDUyKSxyKDg4KSxyKDkxKSxyKDEwNCkscigxMDUpLGUuZXhwb3J0cz1yKDE0KS5Qcm9taXNlfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNzIpLGE9e307YVtyKDM1KSgidG9TdHJpbmdUYWciKV09InoiLGErIiIhPSJbb2JqZWN0IHpdIiYmcigyNSkoT2JqZWN0LnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiJbb2JqZWN0ICIrbih0aGlzKSsiXSJ9KSwhMCl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7Zm9yKHZhciBuPXIoODkpLGE9cig1OSksaT1yKDI1KSxvPXIoMTMpLHM9cigxNSksbD1yKDU1KSxjPXIoMzUpLHU9YygiaXRlcmF0b3IiKSxmPWMoInRvU3RyaW5nVGFnIiksaD1sLkFycmF5LGQ9e0NTU1J1bGVMaXN0OiEwLENTU1N0eWxlRGVjbGFyYXRpb246ITEsQ1NTVmFsdWVMaXN0OiExLENsaWVudFJlY3RMaXN0OiExLERPTVJlY3RMaXN0OiExLERPTVN0cmluZ0xpc3Q6ITEsRE9NVG9rZW5MaXN0OiEwLERhdGFUcmFuc2Zlckl0ZW1MaXN0OiExLEZpbGVMaXN0OiExLEhUTUxBbGxDb2xsZWN0aW9uOiExLEhUTUxDb2xsZWN0aW9uOiExLEhUTUxGb3JtRWxlbWVudDohMSxIVE1MU2VsZWN0RWxlbWVudDohMSxNZWRpYUxpc3Q6ITAsTWltZVR5cGVBcnJheTohMSxOYW1lZE5vZGVNYXA6ITEsTm9kZUxpc3Q6ITAsUGFpbnRSZXF1ZXN0TGlzdDohMSxQbHVnaW46ITEsUGx1Z2luQXJyYXk6ITEsU1ZHTGVuZ3RoTGlzdDohMSxTVkdOdW1iZXJMaXN0OiExLFNWR1BhdGhTZWdMaXN0OiExLFNWR1BvaW50TGlzdDohMSxTVkdTdHJpbmdMaXN0OiExLFNWR1RyYW5zZm9ybUxpc3Q6ITEsU291cmNlQnVmZmVyTGlzdDohMSxTdHlsZVNoZWV0TGlzdDohMCxUZXh0VHJhY2tDdWVMaXN0OiExLFRleHRUcmFja0xpc3Q6ITEsVG91Y2hMaXN0OiExfSxwPWEoZCksbT0wO208cC5sZW5ndGg7bSsrKXt2YXIgZyx2PXBbbV0seT1kW3ZdLGI9b1t2XSx3PWImJmIucHJvdG90eXBlO2lmKHcmJih3W3VdfHxzKHcsdSxoKSx3W2ZdfHxzKHcsZix2KSxsW3ZdPWgseSkpZm9yKGcgaW4gbil3W2ddfHxpKHcsZyxuW2ddLCEwKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1MCksYT1yKDkwKSxpPXIoNTUpLG89cig0Nyk7ZS5leHBvcnRzPXIoNTQpKEFycmF5LCJBcnJheSIsKGZ1bmN0aW9uKGUsdCl7dGhpcy5fdD1vKGUpLHRoaXMuX2k9MCx0aGlzLl9rPXR9KSwoZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90LHQ9dGhpcy5fayxyPXRoaXMuX2krKztyZXR1cm4hZXx8cj49ZS5sZW5ndGg/KHRoaXMuX3Q9dm9pZCAwLGEoMSkpOmEoMCwia2V5cyI9PXQ/cjoidmFsdWVzIj09dD9lW3JdOltyLGVbcl1dKX0pLCJ2YWx1ZXMiKSxpLkFyZ3VtZW50cz1pLkFycmF5LG4oImtleXMiKSxuKCJ2YWx1ZXMiKSxuKCJlbnRyaWVzIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCl7cmV0dXJue3ZhbHVlOnQsZG9uZTohIWV9fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhLGksbyxzPXIoMzcpLGw9cigxMyksYz1yKDI4KSx1PXIoNzIpLGY9cigxMiksaD1yKDE4KSxkPXIoMjkpLHA9cig5MiksbT1yKDkzKSxnPXIoOTQpLHY9cig5NSkuc2V0LHk9cig5NykoKSxiPXIoOTgpLHc9cig5OSksaz1yKDEwMCksUz1yKDEwMSksXz1sLlR5cGVFcnJvcix4PWwucHJvY2VzcyxBPXgmJngudmVyc2lvbnMsQz1BJiZBLnY4fHwiIixQPWwuUHJvbWlzZSxFPSJwcm9jZXNzIj09dSh4KSxUPWZ1bmN0aW9uKCl7fSxSPWE9Yi5mLE89ISFmdW5jdGlvbigpe3RyeXt2YXIgZT1QLnJlc29sdmUoMSksdD0oZS5jb25zdHJ1Y3Rvcj17fSlbcigzNSkoInNwZWNpZXMiKV09ZnVuY3Rpb24oZSl7ZShULFQpfTtyZXR1cm4oRXx8ImZ1bmN0aW9uIj09dHlwZW9mIFByb21pc2VSZWplY3Rpb25FdmVudCkmJmUudGhlbihUKWluc3RhbmNlb2YgdCYmMCE9PUMuaW5kZXhPZigiNi42IikmJi0xPT09ay5pbmRleE9mKCJDaHJvbWUvNjYiKX1jYXRjaChlKXt9fSgpLEk9ZnVuY3Rpb24oZSl7dmFyIHQ7cmV0dXJuISghaChlKXx8ImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS50aGVuKSkmJnR9LEY9ZnVuY3Rpb24oZSx0KXtpZighZS5fbil7ZS5fbj0hMDt2YXIgcj1lLl9jO3koKGZ1bmN0aW9uKCl7Zm9yKHZhciBuPWUuX3YsYT0xPT1lLl9zLGk9MCxvPWZ1bmN0aW9uKHQpe3ZhciByLGksbyxzPWE/dC5vazp0LmZhaWwsbD10LnJlc29sdmUsYz10LnJlamVjdCx1PXQuZG9tYWluO3RyeXtzPyhhfHwoMj09ZS5faCYmTihlKSxlLl9oPTEpLCEwPT09cz9yPW46KHUmJnUuZW50ZXIoKSxyPXMobiksdSYmKHUuZXhpdCgpLG89ITApKSxyPT09dC5wcm9taXNlP2MoXygiUHJvbWlzZS1jaGFpbiBjeWNsZSIpKTooaT1JKHIpKT9pLmNhbGwocixsLGMpOmwocikpOmMobil9Y2F0Y2goZSl7dSYmIW8mJnUuZXhpdCgpLGMoZSl9fTtyLmxlbmd0aD5pOylvKHJbaSsrXSk7ZS5fYz1bXSxlLl9uPSExLHQmJiFlLl9oJiZMKGUpfSkpfX0sTD1mdW5jdGlvbihlKXt2LmNhbGwobCwoZnVuY3Rpb24oKXt2YXIgdCxyLG4sYT1lLl92LGk9RChlKTtpZihpJiYodD13KChmdW5jdGlvbigpe0U/eC5lbWl0KCJ1bmhhbmRsZWRSZWplY3Rpb24iLGEsZSk6KHI9bC5vbnVuaGFuZGxlZHJlamVjdGlvbik/cih7cHJvbWlzZTplLHJlYXNvbjphfSk6KG49bC5jb25zb2xlKSYmbi5lcnJvciYmbi5lcnJvcigiVW5oYW5kbGVkIHByb21pc2UgcmVqZWN0aW9uIixhKX0pKSxlLl9oPUV8fEQoZSk/MjoxKSxlLl9hPXZvaWQgMCxpJiZ0LmUpdGhyb3cgdC52fSkpfSxEPWZ1bmN0aW9uKGUpe3JldHVybiAxIT09ZS5faCYmMD09PShlLl9hfHxlLl9jKS5sZW5ndGh9LE49ZnVuY3Rpb24oZSl7di5jYWxsKGwsKGZ1bmN0aW9uKCl7dmFyIHQ7RT94LmVtaXQoInJlamVjdGlvbkhhbmRsZWQiLGUpOih0PWwub25yZWplY3Rpb25oYW5kbGVkKSYmdCh7cHJvbWlzZTplLHJlYXNvbjplLl92fSl9KSl9LE09ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpczt0Ll9kfHwodC5fZD0hMCwodD10Ll93fHx0KS5fdj1lLHQuX3M9Mix0Ll9hfHwodC5fYT10Ll9jLnNsaWNlKCkpLEYodCwhMCkpfSxqPWZ1bmN0aW9uIGUodCl7dmFyIHIsbj10aGlzO2lmKCFuLl9kKXtuLl9kPSEwLG49bi5fd3x8bjt0cnl7aWYobj09PXQpdGhyb3cgXygiUHJvbWlzZSBjYW4ndCBiZSByZXNvbHZlZCBpdHNlbGYiKTsocj1JKHQpKT95KChmdW5jdGlvbigpe3ZhciBhPXtfdzpuLF9kOiExfTt0cnl7ci5jYWxsKHQsYyhlLGEsMSksYyhNLGEsMSkpfWNhdGNoKGUpe00uY2FsbChhLGUpfX0pKToobi5fdj10LG4uX3M9MSxGKG4sITEpKX1jYXRjaChlKXtNLmNhbGwoe193Om4sX2Q6ITF9LGUpfX19O098fChQPWZ1bmN0aW9uKGUpe3AodGhpcyxQLCJQcm9taXNlIiwiX2giKSxkKGUpLG4uY2FsbCh0aGlzKTt0cnl7ZShjKGosdGhpcywxKSxjKE0sdGhpcywxKSl9Y2F0Y2goZSl7TS5jYWxsKHRoaXMsZSl9fSwobj1mdW5jdGlvbihlKXt0aGlzLl9jPVtdLHRoaXMuX2E9dm9pZCAwLHRoaXMuX3M9MCx0aGlzLl9kPSExLHRoaXMuX3Y9dm9pZCAwLHRoaXMuX2g9MCx0aGlzLl9uPSExfSkucHJvdG90eXBlPXIoMTAyKShQLnByb3RvdHlwZSx7dGhlbjpmdW5jdGlvbihlLHQpe3ZhciByPVIoZyh0aGlzLFApKTtyZXR1cm4gci5vaz0iZnVuY3Rpb24iIT10eXBlb2YgZXx8ZSxyLmZhaWw9ImZ1bmN0aW9uIj09dHlwZW9mIHQmJnQsci5kb21haW49RT94LmRvbWFpbjp2b2lkIDAsdGhpcy5fYy5wdXNoKHIpLHRoaXMuX2EmJnRoaXMuX2EucHVzaChyKSx0aGlzLl9zJiZGKHRoaXMsITEpLHIucHJvbWlzZX0sY2F0Y2g6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudGhlbih2b2lkIDAsZSl9fSksaT1mdW5jdGlvbigpe3ZhciBlPW5ldyBuO3RoaXMucHJvbWlzZT1lLHRoaXMucmVzb2x2ZT1jKGosZSwxKSx0aGlzLnJlamVjdD1jKE0sZSwxKX0sYi5mPVI9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1QfHxlPT09bz9uZXcgaShlKTphKGUpfSksZihmLkcrZi5XK2YuRiohTyx7UHJvbWlzZTpQfSkscig2NCkoUCwiUHJvbWlzZSIpLHIoMTAzKSgiUHJvbWlzZSIpLG89cigxNCkuUHJvbWlzZSxmKGYuUytmLkYqIU8sIlByb21pc2UiLHtyZWplY3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9Uih0aGlzKTtyZXR1cm4oMCx0LnJlamVjdCkoZSksdC5wcm9taXNlfX0pLGYoZi5TK2YuRiooc3x8IU8pLCJQcm9taXNlIix7cmVzb2x2ZTpmdW5jdGlvbihlKXtyZXR1cm4gUyhzJiZ0aGlzPT09bz9QOnRoaXMsZSl9fSksZihmLlMrZi5GKiEoTyYmcig3MykoKGZ1bmN0aW9uKGUpe1AuYWxsKGUpLmNhdGNoKFQpfSkpKSwiUHJvbWlzZSIse2FsbDpmdW5jdGlvbihlKXt2YXIgdD10aGlzLHI9Uih0KSxuPXIucmVzb2x2ZSxhPXIucmVqZWN0LGk9dygoZnVuY3Rpb24oKXt2YXIgcj1bXSxpPTAsbz0xO20oZSwhMSwoZnVuY3Rpb24oZSl7dmFyIHM9aSsrLGw9ITE7ci5wdXNoKHZvaWQgMCksbysrLHQucmVzb2x2ZShlKS50aGVuKChmdW5jdGlvbihlKXtsfHwobD0hMCxyW3NdPWUsLS1vfHxuKHIpKX0pLGEpfSkpLC0tb3x8bihyKX0pKTtyZXR1cm4gaS5lJiZhKGkudiksci5wcm9taXNlfSxyYWNlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1SKHQpLG49ci5yZWplY3QsYT13KChmdW5jdGlvbigpe20oZSwhMSwoZnVuY3Rpb24oZSl7dC5yZXNvbHZlKGUpLnRoZW4oci5yZXNvbHZlLG4pfSkpfSkpO3JldHVybiBhLmUmJm4oYS52KSxyLnByb21pc2V9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG4pe2lmKCEoZSBpbnN0YW5jZW9mIHQpfHx2b2lkIDAhPT1uJiZuIGluIGUpdGhyb3cgVHlwZUVycm9yKHIrIjogaW5jb3JyZWN0IGludm9jYXRpb24hIik7cmV0dXJuIGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjgpLGE9cig2OCksaT1yKDY5KSxvPXIoMTcpLHM9cigzMCksbD1yKDcxKSxjPXt9LHU9e30sZj1lLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIsZixoKXt2YXIgZCxwLG0sZyx2PWg/ZnVuY3Rpb24oKXtyZXR1cm4gZX06bChlKSx5PW4ocixmLHQ/MjoxKSxiPTA7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHYpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgaXRlcmFibGUhIik7aWYoaSh2KSl7Zm9yKGQ9cyhlLmxlbmd0aCk7ZD5iO2IrKylpZigoZz10P3kobyhwPWVbYl0pWzBdLHBbMV0pOnkoZVtiXSkpPT09Y3x8Zz09PXUpcmV0dXJuIGd9ZWxzZSBmb3IobT12LmNhbGwoZSk7IShwPW0ubmV4dCgpKS5kb25lOylpZigoZz1hKG0seSxwLnZhbHVlLHQpKT09PWN8fGc9PT11KXJldHVybiBnfTtmLkJSRUFLPWMsZi5SRVRVUk49dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE3KSxhPXIoMjkpLGk9cigzNSkoInNwZWNpZXMiKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcixvPW4oZSkuY29uc3RydWN0b3I7cmV0dXJuIHZvaWQgMD09PW98fG51bGw9PShyPW4obylbaV0pP3Q6YShyKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG4sYSxpLG89cigyOCkscz1yKDk2KSxsPXIoNjMpLGM9cigyMiksdT1yKDEzKSxmPXUucHJvY2VzcyxoPXUuc2V0SW1tZWRpYXRlLGQ9dS5jbGVhckltbWVkaWF0ZSxwPXUuTWVzc2FnZUNoYW5uZWwsbT11LkRpc3BhdGNoLGc9MCx2PXt9LHk9ZnVuY3Rpb24oKXt2YXIgZT0rdGhpcztpZih2Lmhhc093blByb3BlcnR5KGUpKXt2YXIgdD12W2VdO2RlbGV0ZSB2W2VdLHQoKX19LGI9ZnVuY3Rpb24oZSl7eS5jYWxsKGUuZGF0YSl9O2gmJmR8fChoPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1bXSxyPTE7YXJndW1lbnRzLmxlbmd0aD5yOyl0LnB1c2goYXJndW1lbnRzW3IrK10pO3JldHVybiB2WysrZ109ZnVuY3Rpb24oKXtzKCJmdW5jdGlvbiI9PXR5cGVvZiBlP2U6RnVuY3Rpb24oZSksdCl9LG4oZyksZ30sZD1mdW5jdGlvbihlKXtkZWxldGUgdltlXX0sInByb2Nlc3MiPT1yKDM0KShmKT9uPWZ1bmN0aW9uKGUpe2YubmV4dFRpY2sobyh5LGUsMSkpfTptJiZtLm5vdz9uPWZ1bmN0aW9uKGUpe20ubm93KG8oeSxlLDEpKX06cD8oaT0oYT1uZXcgcCkucG9ydDIsYS5wb3J0MS5vbm1lc3NhZ2U9YixuPW8oaS5wb3N0TWVzc2FnZSxpLDEpKTp1LmFkZEV2ZW50TGlzdGVuZXImJiJmdW5jdGlvbiI9PXR5cGVvZiBwb3N0TWVzc2FnZSYmIXUuaW1wb3J0U2NyaXB0cz8obj1mdW5jdGlvbihlKXt1LnBvc3RNZXNzYWdlKGUrIiIsIioiKX0sdS5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIixiLCExKSk6bj0ib25yZWFkeXN0YXRlY2hhbmdlImluIGMoInNjcmlwdCIpP2Z1bmN0aW9uKGUpe2wuYXBwZW5kQ2hpbGQoYygic2NyaXB0IikpLm9ucmVhZHlzdGF0ZWNoYW5nZT1mdW5jdGlvbigpe2wucmVtb3ZlQ2hpbGQodGhpcykseS5jYWxsKGUpfX06ZnVuY3Rpb24oZSl7c2V0VGltZW91dChvKHksZSwxKSwwKX0pLGUuZXhwb3J0cz17c2V0OmgsY2xlYXI6ZH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXt2YXIgbj12b2lkIDA9PT1yO3N3aXRjaCh0Lmxlbmd0aCl7Y2FzZSAwOnJldHVybiBuP2UoKTplLmNhbGwocik7Y2FzZSAxOnJldHVybiBuP2UodFswXSk6ZS5jYWxsKHIsdFswXSk7Y2FzZSAyOnJldHVybiBuP2UodFswXSx0WzFdKTplLmNhbGwocix0WzBdLHRbMV0pO2Nhc2UgMzpyZXR1cm4gbj9lKHRbMF0sdFsxXSx0WzJdKTplLmNhbGwocix0WzBdLHRbMV0sdFsyXSk7Y2FzZSA0OnJldHVybiBuP2UodFswXSx0WzFdLHRbMl0sdFszXSk6ZS5jYWxsKHIsdFswXSx0WzFdLHRbMl0sdFszXSl9cmV0dXJuIGUuYXBwbHkocix0KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMyksYT1yKDk1KS5zZXQsaT1uLk11dGF0aW9uT2JzZXJ2ZXJ8fG4uV2ViS2l0TXV0YXRpb25PYnNlcnZlcixvPW4ucHJvY2VzcyxzPW4uUHJvbWlzZSxsPSJwcm9jZXNzIj09cigzNCkobyk7ZS5leHBvcnRzPWZ1bmN0aW9uKCl7dmFyIGUsdCxyLGM9ZnVuY3Rpb24oKXt2YXIgbixhO2ZvcihsJiYobj1vLmRvbWFpbikmJm4uZXhpdCgpO2U7KXthPWUuZm4sZT1lLm5leHQ7dHJ5e2EoKX1jYXRjaChuKXt0aHJvdyBlP3IoKTp0PXZvaWQgMCxufX10PXZvaWQgMCxuJiZuLmVudGVyKCl9O2lmKGwpcj1mdW5jdGlvbigpe28ubmV4dFRpY2soYyl9O2Vsc2UgaWYoIWl8fG4ubmF2aWdhdG9yJiZuLm5hdmlnYXRvci5zdGFuZGFsb25lKWlmKHMmJnMucmVzb2x2ZSl7dmFyIHU9cy5yZXNvbHZlKHZvaWQgMCk7cj1mdW5jdGlvbigpe3UudGhlbihjKX19ZWxzZSByPWZ1bmN0aW9uKCl7YS5jYWxsKG4sYyl9O2Vsc2V7dmFyIGY9ITAsaD1kb2N1bWVudC5jcmVhdGVUZXh0Tm9kZSgiIik7bmV3IGkoYykub2JzZXJ2ZShoLHtjaGFyYWN0ZXJEYXRhOiEwfSkscj1mdW5jdGlvbigpe2guZGF0YT1mPSFmfX1yZXR1cm4gZnVuY3Rpb24obil7dmFyIGE9e2ZuOm4sbmV4dDp2b2lkIDB9O3QmJih0Lm5leHQ9YSksZXx8KGU9YSxyKCkpLHQ9YX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMjkpO2Z1bmN0aW9uIGEoZSl7dmFyIHQscjt0aGlzLnByb21pc2U9bmV3IGUoKGZ1bmN0aW9uKGUsbil7aWYodm9pZCAwIT09dHx8dm9pZCAwIT09cil0aHJvdyBUeXBlRXJyb3IoIkJhZCBQcm9taXNlIGNvbnN0cnVjdG9yIik7dD1lLHI9bn0pKSx0aGlzLnJlc29sdmU9bih0KSx0aGlzLnJlamVjdD1uKHIpfWUuZXhwb3J0cy5mPWZ1bmN0aW9uKGUpe3JldHVybiBuZXcgYShlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3RyeXtyZXR1cm57ZTohMSx2OmUoKX19Y2F0Y2goZSl7cmV0dXJue2U6ITAsdjplfX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTMpLm5hdmlnYXRvcjtlLmV4cG9ydHM9biYmbi51c2VyQWdlbnR8fCIifSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTcpLGE9cigxOCksaT1yKDk4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZihuKGUpLGEodCkmJnQuY29uc3RydWN0b3I9PT1lKXJldHVybiB0O3ZhciByPWkuZihlKTtyZXR1cm4oMCxyLnJlc29sdmUpKHQpLHIucHJvbWlzZX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigyNSk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGEgaW4gdCluKGUsYSx0W2FdLHIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTYpLGk9cigyMCksbz1yKDM1KSgic3BlY2llcyIpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uW2VdO2kmJnQmJiF0W29dJiZhLmYodCxvLHtjb25maWd1cmFibGU6ITAsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXN9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNCksaT1yKDEzKSxvPXIoOTQpLHM9cigxMDEpO24obi5QK24uUiwiUHJvbWlzZSIse2ZpbmFsbHk6ZnVuY3Rpb24oZSl7dmFyIHQ9byh0aGlzLGEuUHJvbWlzZXx8aS5Qcm9taXNlKSxyPSJmdW5jdGlvbiI9PXR5cGVvZiBlO3JldHVybiB0aGlzLnRoZW4ocj9mdW5jdGlvbihyKXtyZXR1cm4gcyh0LGUoKSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gcn0pKX06ZSxyP2Z1bmN0aW9uKHIpe3JldHVybiBzKHQsZSgpKS50aGVuKChmdW5jdGlvbigpe3Rocm93IHJ9KSl9OmUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig5OCksaT1yKDk5KTtuKG4uUywiUHJvbWlzZSIse3RyeTpmdW5jdGlvbihlKXt2YXIgdD1hLmYodGhpcykscj1pKGUpO3JldHVybihyLmU/dC5yZWplY3Q6dC5yZXNvbHZlKShyLnYpLHQucHJvbWlzZX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDg3KSxyKDg4KSxyKDEwNykscigxMTkpLHIoMTIxKSxlLmV4cG9ydHM9cigxNCkuV2Vha01hcH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbixhPXIoMTA4KSgwKSxpPXIoMjUpLG89cigxMTIpLHM9cig3NiksbD1yKDExMyksYz1yKDE4KSx1PXIoMjEpLGY9cigxMTQpLGg9by5nZXRXZWFrLGQ9T2JqZWN0LmlzRXh0ZW5zaWJsZSxwPWwudWZzdG9yZSxtPXt9LGc9ZnVuY3Rpb24oZSl7cmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIGUodGhpcyxhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCl9fSx2PXtnZXQ6ZnVuY3Rpb24oZSl7aWYoYyhlKSl7dmFyIHQ9aChlKTtyZXR1cm4hMD09PXQ/cChmKHRoaXMsIldlYWtNYXAiKSkuZ2V0KGUpOnQ/dFt0aGlzLl9pXTp2b2lkIDB9fSxzZXQ6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbC5kZWYoZih0aGlzLCJXZWFrTWFwIiksZSx0KX19LHk9ZS5leHBvcnRzPXIoMTE1KSgiV2Vha01hcCIsZyx2LGwsITAsITApO3UoKGZ1bmN0aW9uKCl7cmV0dXJuIDchPShuZXcgeSkuc2V0KChPYmplY3QuZnJlZXplfHxPYmplY3QpKG0pLDcpLmdldChtKX0pKSYmKHMoKG49bC5nZXRDb25zdHJ1Y3RvcihnLCJXZWFrTWFwIikpLnByb3RvdHlwZSx2KSxvLk5FRUQ9ITAsYShbImRlbGV0ZSIsImhhcyIsImdldCIsInNldCJdLChmdW5jdGlvbihlKXt2YXIgdD15LnByb3RvdHlwZSxyPXRbZV07aSh0LGUsKGZ1bmN0aW9uKHQsYSl7aWYoYyh0KSYmIWQodCkpe3RoaXMuX2Z8fCh0aGlzLl9mPW5ldyBuKTt2YXIgaT10aGlzLl9mW2VdKHQsYSk7cmV0dXJuInNldCI9PWU/dGhpczppfXJldHVybiByLmNhbGwodGhpcyx0LGEpfSkpfSkpKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDI4KSxhPXIoNDgpLGk9cig2Niksbz1yKDMwKSxzPXIoMTA5KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj0xPT1lLGw9Mj09ZSxjPTM9PWUsdT00PT1lLGY9Nj09ZSxoPTU9PWV8fGYsZD10fHxzO3JldHVybiBmdW5jdGlvbih0LHMscCl7Zm9yKHZhciBtLGcsdj1pKHQpLHk9YSh2KSxiPW4ocyxwLDMpLHc9byh5Lmxlbmd0aCksaz0wLFM9cj9kKHQsdyk6bD9kKHQsMCk6dm9pZCAwO3c+aztrKyspaWYoKGh8fGsgaW4geSkmJihnPWIobT15W2tdLGssdiksZSkpaWYocilTW2tdPWc7ZWxzZSBpZihnKXN3aXRjaChlKXtjYXNlIDM6cmV0dXJuITA7Y2FzZSA1OnJldHVybiBtO2Nhc2UgNjpyZXR1cm4gaztjYXNlIDI6Uy5wdXNoKG0pfWVsc2UgaWYodSlyZXR1cm4hMTtyZXR1cm4gZj8tMTpjfHx1P3U6U319fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEwKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gbmV3KG4oZSkpKHQpfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KSxhPXIoMTExKSxpPXIoMzUpKCJzcGVjaWVzIik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3ZhciB0O3JldHVybiBhKGUpJiYoImZ1bmN0aW9uIiE9dHlwZW9mKHQ9ZS5jb25zdHJ1Y3Rvcil8fHQhPT1BcnJheSYmIWEodC5wcm90b3R5cGUpfHwodD12b2lkIDApLG4odCkmJm51bGw9PT0odD10W2ldKSYmKHQ9dm9pZCAwKSksdm9pZCAwPT09dD9BcnJheTp0fX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDM0KTtlLmV4cG9ydHM9QXJyYXkuaXNBcnJheXx8ZnVuY3Rpb24oZSl7cmV0dXJuIkFycmF5Ij09bihlKX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMjcpKCJtZXRhIiksaT1yKDE4KSxvPXIoMjYpLHM9cigxNikuZixsPTAsYz1PYmplY3QuaXNFeHRlbnNpYmxlfHxmdW5jdGlvbigpe3JldHVybiEwfSx1PSFyKDIxKSgoZnVuY3Rpb24oKXtyZXR1cm4gYyhPYmplY3QucHJldmVudEV4dGVuc2lvbnMoe30pKX0pKSxmPWZ1bmN0aW9uKGUpe3MoZSxhLHt2YWx1ZTp7aToiTyIrICsrbCx3Ont9fX0pfSxoPWUuZXhwb3J0cz17S0VZOmEsTkVFRDohMSxmYXN0S2V5OmZ1bmN0aW9uKGUsdCl7aWYoIWkoZSkpcmV0dXJuInN5bWJvbCI9PW4oZSk/ZTooInN0cmluZyI9PXR5cGVvZiBlPyJTIjoiUCIpK2U7aWYoIW8oZSxhKSl7aWYoIWMoZSkpcmV0dXJuIkYiO2lmKCF0KXJldHVybiJFIjtmKGUpfXJldHVybiBlW2FdLml9LGdldFdlYWs6ZnVuY3Rpb24oZSx0KXtpZighbyhlLGEpKXtpZighYyhlKSlyZXR1cm4hMDtpZighdClyZXR1cm4hMTtmKGUpfXJldHVybiBlW2FdLnd9LG9uRnJlZXplOmZ1bmN0aW9uKGUpe3JldHVybiB1JiZoLk5FRUQmJmMoZSkmJiFvKGUsYSkmJmYoZSksZX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTAyKSxhPXIoMTEyKS5nZXRXZWFrLGk9cigxNyksbz1yKDE4KSxzPXIoOTIpLGw9cig5MyksYz1yKDEwOCksdT1yKDI2KSxmPXIoMTE0KSxoPWMoNSksZD1jKDYpLHA9MCxtPWZ1bmN0aW9uKGUpe3JldHVybiBlLl9sfHwoZS5fbD1uZXcgZyl9LGc9ZnVuY3Rpb24oKXt0aGlzLmE9W119LHY9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gaChlLmEsKGZ1bmN0aW9uKGUpe3JldHVybiBlWzBdPT09dH0pKX07Zy5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXt2YXIgdD12KHRoaXMsZSk7aWYodClyZXR1cm4gdFsxXX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiEhdih0aGlzLGUpfSxzZXQ6ZnVuY3Rpb24oZSx0KXt2YXIgcj12KHRoaXMsZSk7cj9yWzFdPXQ6dGhpcy5hLnB1c2goW2UsdF0pfSxkZWxldGU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZCh0aGlzLmEsKGZ1bmN0aW9uKHQpe3JldHVybiB0WzBdPT09ZX0pKTtyZXR1cm5+dCYmdGhpcy5hLnNwbGljZSh0LDEpLCEhfnR9fSxlLmV4cG9ydHM9e2dldENvbnN0cnVjdG9yOmZ1bmN0aW9uKGUsdCxyLGkpe3ZhciBjPWUoKGZ1bmN0aW9uKGUsbil7cyhlLGMsdCwiX2kiKSxlLl90PXQsZS5faT1wKyssZS5fbD12b2lkIDAsbnVsbCE9biYmbChuLHIsZVtpXSxlKX0pKTtyZXR1cm4gbihjLnByb3RvdHlwZSx7ZGVsZXRlOmZ1bmN0aW9uKGUpe2lmKCFvKGUpKXJldHVybiExO3ZhciByPWEoZSk7cmV0dXJuITA9PT1yP20oZih0aGlzLHQpKS5kZWxldGUoZSk6ciYmdShyLHRoaXMuX2kpJiZkZWxldGUgclt0aGlzLl9pXX0saGFzOmZ1bmN0aW9uKGUpe2lmKCFvKGUpKXJldHVybiExO3ZhciByPWEoZSk7cmV0dXJuITA9PT1yP20oZih0aGlzLHQpKS5oYXMoZSk6ciYmdShyLHRoaXMuX2kpfX0pLGN9LGRlZjpmdW5jdGlvbihlLHQscil7dmFyIG49YShpKHQpLCEwKTtyZXR1cm4hMD09PW4/bShlKS5zZXQodCxyKTpuW2UuX2ldPXIsZX0sdWZzdG9yZTptfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDE4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0KXtpZighbihlKXx8ZS5fdCE9PXQpdGhyb3cgVHlwZUVycm9yKCJJbmNvbXBhdGlibGUgcmVjZWl2ZXIsICIrdCsiIHJlcXVpcmVkISIpO3JldHVybiBlfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTIpLGk9cigyNSksbz1yKDEwMikscz1yKDExMiksbD1yKDkzKSxjPXIoOTIpLHU9cigxOCksZj1yKDIxKSxoPXIoNzMpLGQ9cig2NCkscD1yKDExNik7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG0sZyx2KXt2YXIgeT1uW2VdLGI9eSx3PWc/InNldCI6ImFkZCIsaz1iJiZiLnByb3RvdHlwZSxTPXt9LF89ZnVuY3Rpb24oZSl7dmFyIHQ9a1tlXTtpKGssZSwiZGVsZXRlIj09ZT9mdW5jdGlvbihlKXtyZXR1cm4hKHYmJiF1KGUpKSYmdC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImhhcyI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuISh2JiYhdShlKSkmJnQuY2FsbCh0aGlzLDA9PT1lPzA6ZSl9OiJnZXQiPT1lP2Z1bmN0aW9uKGUpe3JldHVybiB2JiYhdShlKT92b2lkIDA6dC5jYWxsKHRoaXMsMD09PWU/MDplKX06ImFkZCI9PWU/ZnVuY3Rpb24oZSl7cmV0dXJuIHQuY2FsbCh0aGlzLDA9PT1lPzA6ZSksdGhpc306ZnVuY3Rpb24oZSxyKXtyZXR1cm4gdC5jYWxsKHRoaXMsMD09PWU/MDplLHIpLHRoaXN9KX07aWYoImZ1bmN0aW9uIj09dHlwZW9mIGImJih2fHxrLmZvckVhY2gmJiFmKChmdW5jdGlvbigpeyhuZXcgYikuZW50cmllcygpLm5leHQoKX0pKSkpe3ZhciB4PW5ldyBiLEE9eFt3XSh2P3t9Oi0wLDEpIT14LEM9ZigoZnVuY3Rpb24oKXt4LmhhcygxKX0pKSxQPWgoKGZ1bmN0aW9uKGUpe25ldyBiKGUpfSkpLEU9IXYmJmYoKGZ1bmN0aW9uKCl7Zm9yKHZhciBlPW5ldyBiLHQ9NTt0LS07KWVbd10odCx0KTtyZXR1cm4hZS5oYXMoLTApfSkpO1B8fCgoYj10KChmdW5jdGlvbih0LHIpe2ModCxiLGUpO3ZhciBuPXAobmV3IHksdCxiKTtyZXR1cm4gbnVsbCE9ciYmbChyLGcsblt3XSxuKSxufSkpKS5wcm90b3R5cGU9ayxrLmNvbnN0cnVjdG9yPWIpLChDfHxFKSYmKF8oImRlbGV0ZSIpLF8oImhhcyIpLGcmJl8oImdldCIpKSwoRXx8QSkmJl8odyksdiYmay5jbGVhciYmZGVsZXRlIGsuY2xlYXJ9ZWxzZSBiPW0uZ2V0Q29uc3RydWN0b3IodCxlLGcsdyksbyhiLnByb3RvdHlwZSxyKSxzLk5FRUQ9ITA7cmV0dXJuIGQoYixlKSxTW2VdPWIsYShhLkcrYS5XK2EuRiooYiE9eSksUyksdnx8bS5zZXRTdHJvbmcoYixlLGcpLGJ9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigxMTcpLnNldDtlLmV4cG9ydHM9ZnVuY3Rpb24oZSx0LHIpe3ZhciBpLG89dC5jb25zdHJ1Y3RvcjtyZXR1cm4gbyE9PXImJiJmdW5jdGlvbiI9PXR5cGVvZiBvJiYoaT1vLnByb3RvdHlwZSkhPT1yLnByb3RvdHlwZSYmbihpKSYmYSYmYShlLGkpLGV9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTgpLGE9cigxNyksaT1mdW5jdGlvbihlLHQpe2lmKGEoZSksIW4odCkmJm51bGwhPT10KXRocm93IFR5cGVFcnJvcih0KyI6IGNhbid0IHNldCBhcyBwcm90b3R5cGUhIil9O2UuZXhwb3J0cz17c2V0Ok9iamVjdC5zZXRQcm90b3R5cGVPZnx8KCJfX3Byb3RvX18iaW57fT9mdW5jdGlvbihlLHQsbil7dHJ5eyhuPXIoMjgpKEZ1bmN0aW9uLmNhbGwscigxMTgpLmYoT2JqZWN0LnByb3RvdHlwZSwiX19wcm90b19fIikuc2V0LDIpKShlLFtdKSx0PSEoZSBpbnN0YW5jZW9mIEFycmF5KX1jYXRjaChlKXt0PSEwfXJldHVybiBmdW5jdGlvbihlLHIpe3JldHVybiBpKGUsciksdD9lLl9fcHJvdG9fXz1yOm4oZSxyKSxlfX0oe30sITEpOnZvaWQgMCksY2hlY2s6aX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig3OCksYT1yKDI0KSxpPXIoNDcpLG89cigyMykscz1yKDI2KSxsPXIoMTkpLGM9T2JqZWN0LmdldE93blByb3BlcnR5RGVzY3JpcHRvcjt0LmY9cigyMCk/YzpmdW5jdGlvbihlLHQpe2lmKGU9aShlKSx0PW8odCwhMCksbCl0cnl7cmV0dXJuIGMoZSx0KX1jYXRjaChlKXt9aWYocyhlLHQpKXJldHVybiBhKCFuLmYuY2FsbChlLHQpLGVbdF0pfX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDEyMCkoIldlYWtNYXAiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEyKTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7bihuLlMsZSx7b2Y6ZnVuY3Rpb24oKXtmb3IodmFyIGU9YXJndW1lbnRzLmxlbmd0aCx0PW5ldyBBcnJheShlKTtlLS07KXRbZV09YXJndW1lbnRzW2VdO3JldHVybiBuZXcgdGhpcyh0KX19KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMjIpKCJXZWFrTWFwIil9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDI5KSxpPXIoMjgpLG89cig5Myk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe24obi5TLGUse2Zyb206ZnVuY3Rpb24oZSl7dmFyIHQscixuLHMsbD1hcmd1bWVudHNbMV07cmV0dXJuIGEodGhpcyksKHQ9dm9pZCAwIT09bCkmJmEobCksbnVsbD09ZT9uZXcgdGhpczoocj1bXSx0PyhuPTAscz1pKGwsYXJndW1lbnRzWzJdLDIpLG8oZSwhMSwoZnVuY3Rpb24oZSl7ci5wdXNoKHMoZSxuKyspKX0pKSk6byhlLCExLHIucHVzaCxyKSxuZXcgdGhpcyhyKSl9fSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoODcpLHIoODgpLHIoMTI0KSxyKDEyNSkscigxMjYpLGUuZXhwb3J0cz1yKDE0KS5XZWFrU2V0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTEzKSxhPXIoMTE0KTtyKDExNSkoIldlYWtTZXQiLChmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gZSh0aGlzLGFyZ3VtZW50cy5sZW5ndGg+MD9hcmd1bWVudHNbMF06dm9pZCAwKX19KSx7YWRkOmZ1bmN0aW9uKGUpe3JldHVybiBuLmRlZihhKHRoaXMsIldlYWtTZXQiKSxlLCEwKX19LG4sITEsITApfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTIwKSgiV2Vha1NldCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTIyKSgiV2Vha1NldCIpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTI4KSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmNvZGVQb2ludEF0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cig1MykoITEpO24obi5QLCJTdHJpbmciLHtjb2RlUG9pbnRBdDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUpfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTMwKSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLmZyb21Db2RlUG9pbnR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDQ5KSxpPVN0cmluZy5mcm9tQ2hhckNvZGUsbz1TdHJpbmcuZnJvbUNvZGVQb2ludDtuKG4uUytuLkYqKCEhbyYmMSE9by5sZW5ndGgpLCJTdHJpbmciLHtmcm9tQ29kZVBvaW50OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPVtdLG49YXJndW1lbnRzLmxlbmd0aCxvPTA7bj5vOyl7aWYodD0rYXJndW1lbnRzW28rK10sYSh0LDExMTQxMTEpIT09dCl0aHJvdyBSYW5nZUVycm9yKHQrIiBpcyBub3QgYSB2YWxpZCBjb2RlIHBvaW50Iik7ci5wdXNoKHQ8NjU1MzY/aSh0KTppKDU1Mjk2KygodC09NjU1MzYpPj4xMCksdCUxMDI0KzU2MzIwKSl9cmV0dXJuIHIuam9pbigiIil9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxMzIpLHIoODcpLGUuZXhwb3J0cz1yKDE0KS5TeW1ib2x9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfXZhciBhPXIoMTMpLGk9cigyNiksbz1yKDIwKSxzPXIoMTIpLGw9cigyNSksYz1yKDExMikuS0VZLHU9cigyMSksZj1yKDM2KSxoPXIoNjQpLGQ9cigyNykscD1yKDM1KSxtPXIoMTMzKSxnPXIoMTM0KSx2PXIoMTM1KSx5PXIoMTExKSxiPXIoMTcpLHc9cigxOCksaz1yKDQ3KSxTPXIoMjMpLF89cigyNCkseD1yKDU3KSxBPXIoMTM2KSxDPXIoMTE4KSxQPXIoMTYpLEU9cig1OSksVD1DLmYsUj1QLmYsTz1BLmYsST1hLlN5bWJvbCxGPWEuSlNPTixMPUYmJkYuc3RyaW5naWZ5LEQ9cCgiX2hpZGRlbiIpLE49cCgidG9QcmltaXRpdmUiKSxNPXt9LnByb3BlcnR5SXNFbnVtZXJhYmxlLGo9Zigic3ltYm9sLXJlZ2lzdHJ5IiksQj1mKCJzeW1ib2xzIiksVT1mKCJvcC1zeW1ib2xzIikscT1PYmplY3QucHJvdG90eXBlLHo9ImZ1bmN0aW9uIj09dHlwZW9mIEksVz1hLlFPYmplY3QsSD0hV3x8IVcucHJvdG90eXBlfHwhVy5wcm90b3R5cGUuZmluZENoaWxkLEc9byYmdSgoZnVuY3Rpb24oKXtyZXR1cm4gNyE9eChSKHt9LCJhIix7Z2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFIodGhpcywiYSIse3ZhbHVlOjd9KS5hfX0pKS5hfSkpP2Z1bmN0aW9uKGUsdCxyKXt2YXIgbj1UKHEsdCk7biYmZGVsZXRlIHFbdF0sUihlLHQsciksbiYmZSE9PXEmJlIocSx0LG4pfTpSLFY9ZnVuY3Rpb24oZSl7dmFyIHQ9QltlXT14KEkucHJvdG90eXBlKTtyZXR1cm4gdC5faz1lLHR9LFg9eiYmInN5bWJvbCI9PW4oSS5pdGVyYXRvcik/ZnVuY3Rpb24oZSl7cmV0dXJuInN5bWJvbCI9PW4oZSl9OmZ1bmN0aW9uKGUpe3JldHVybiBlIGluc3RhbmNlb2YgSX0sWT1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU9PT1xJiZZKFUsdCxyKSxiKGUpLHQ9Uyh0LCEwKSxiKHIpLGkoQix0KT8oci5lbnVtZXJhYmxlPyhpKGUsRCkmJmVbRF1bdF0mJihlW0RdW3RdPSExKSxyPXgocix7ZW51bWVyYWJsZTpfKDAsITEpfSkpOihpKGUsRCl8fFIoZSxELF8oMSx7fSkpLGVbRF1bdF09ITApLEcoZSx0LHIpKTpSKGUsdCxyKX0sSz1mdW5jdGlvbihlLHQpe2IoZSk7Zm9yKHZhciByLG49dih0PWsodCkpLGE9MCxpPW4ubGVuZ3RoO2k+YTspWShlLHI9blthKytdLHRbcl0pO3JldHVybiBlfSxKPWZ1bmN0aW9uKGUpe3ZhciB0PU0uY2FsbCh0aGlzLGU9UyhlLCEwKSk7cmV0dXJuISh0aGlzPT09cSYmaShCLGUpJiYhaShVLGUpKSYmKCEodHx8IWkodGhpcyxlKXx8IWkoQixlKXx8aSh0aGlzLEQpJiZ0aGlzW0RdW2VdKXx8dCl9LFE9ZnVuY3Rpb24oZSx0KXtpZihlPWsoZSksdD1TKHQsITApLGUhPT1xfHwhaShCLHQpfHxpKFUsdCkpe3ZhciByPVQoZSx0KTtyZXR1cm4hcnx8IWkoQix0KXx8aShlLEQpJiZlW0RdW3RdfHwoci5lbnVtZXJhYmxlPSEwKSxyfX0sWj1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1PKGsoZSkpLG49W10sYT0wO3IubGVuZ3RoPmE7KWkoQix0PXJbYSsrXSl8fHQ9PUR8fHQ9PWN8fG4ucHVzaCh0KTtyZXR1cm4gbn0sJD1mdW5jdGlvbihlKXtmb3IodmFyIHQscj1lPT09cSxuPU8ocj9VOmsoZSkpLGE9W10sbz0wO24ubGVuZ3RoPm87KSFpKEIsdD1uW28rK10pfHxyJiYhaShxLHQpfHxhLnB1c2goQlt0XSk7cmV0dXJuIGF9O3p8fChsKChJPWZ1bmN0aW9uKCl7aWYodGhpcyBpbnN0YW5jZW9mIEkpdGhyb3cgVHlwZUVycm9yKCJTeW1ib2wgaXMgbm90IGEgY29uc3RydWN0b3IhIik7dmFyIGU9ZChhcmd1bWVudHMubGVuZ3RoPjA/YXJndW1lbnRzWzBdOnZvaWQgMCksdD1mdW5jdGlvbiB0KHIpe3RoaXM9PT1xJiZ0LmNhbGwoVSxyKSxpKHRoaXMsRCkmJmkodGhpc1tEXSxlKSYmKHRoaXNbRF1bZV09ITEpLEcodGhpcyxlLF8oMSxyKSl9O3JldHVybiBvJiZIJiZHKHEsZSx7Y29uZmlndXJhYmxlOiEwLHNldDp0fSksVihlKX0pLnByb3RvdHlwZSwidG9TdHJpbmciLChmdW5jdGlvbigpe3JldHVybiB0aGlzLl9rfSkpLEMuZj1RLFAuZj1ZLHIoMTM3KS5mPUEuZj1aLHIoNzgpLmY9SixyKDc3KS5mPSQsbyYmIXIoMzcpJiZsKHEsInByb3BlcnR5SXNFbnVtZXJhYmxlIixKLCEwKSxtLmY9ZnVuY3Rpb24oZSl7cmV0dXJuIFYocChlKSl9KSxzKHMuRytzLlcrcy5GKiF6LHtTeW1ib2w6SX0pO2Zvcih2YXIgZWU9Imhhc0luc3RhbmNlLGlzQ29uY2F0U3ByZWFkYWJsZSxpdGVyYXRvcixtYXRjaCxyZXBsYWNlLHNlYXJjaCxzcGVjaWVzLHNwbGl0LHRvUHJpbWl0aXZlLHRvU3RyaW5nVGFnLHVuc2NvcGFibGVzIi5zcGxpdCgiLCIpLHRlPTA7ZWUubGVuZ3RoPnRlOylwKGVlW3RlKytdKTtmb3IodmFyIHJlPUUocC5zdG9yZSksbmU9MDtyZS5sZW5ndGg+bmU7KWcocmVbbmUrK10pO3Mocy5TK3MuRioheiwiU3ltYm9sIix7Zm9yOmZ1bmN0aW9uKGUpe3JldHVybiBpKGosZSs9IiIpP2pbZV06altlXT1JKGUpfSxrZXlGb3I6ZnVuY3Rpb24oZSl7aWYoIVgoZSkpdGhyb3cgVHlwZUVycm9yKGUrIiBpcyBub3QgYSBzeW1ib2whIik7Zm9yKHZhciB0IGluIGopaWYoalt0XT09PWUpcmV0dXJuIHR9LHVzZVNldHRlcjpmdW5jdGlvbigpe0g9ITB9LHVzZVNpbXBsZTpmdW5jdGlvbigpe0g9ITF9fSkscyhzLlMrcy5GKiF6LCJPYmplY3QiLHtjcmVhdGU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdm9pZCAwPT09dD94KGUpOksoeChlKSx0KX0sZGVmaW5lUHJvcGVydHk6WSxkZWZpbmVQcm9wZXJ0aWVzOkssZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yOlEsZ2V0T3duUHJvcGVydHlOYW1lczpaLGdldE93blByb3BlcnR5U3ltYm9sczokfSksRiYmcyhzLlMrcy5GKighenx8dSgoZnVuY3Rpb24oKXt2YXIgZT1JKCk7cmV0dXJuIltudWxsXSIhPUwoW2VdKXx8Int9IiE9TCh7YTplfSl8fCJ7fSIhPUwoT2JqZWN0KGUpKX0pKSksIkpTT04iLHtzdHJpbmdpZnk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsbj1bZV0sYT0xO2FyZ3VtZW50cy5sZW5ndGg+YTspbi5wdXNoKGFyZ3VtZW50c1thKytdKTtpZihyPXQ9blsxXSwodyh0KXx8dm9pZCAwIT09ZSkmJiFYKGUpKXJldHVybiB5KHQpfHwodD1mdW5jdGlvbihlLHQpe2lmKCJmdW5jdGlvbiI9PXR5cGVvZiByJiYodD1yLmNhbGwodGhpcyxlLHQpKSwhWCh0KSlyZXR1cm4gdH0pLG5bMV09dCxMLmFwcGx5KEYsbil9fSksSS5wcm90b3R5cGVbTl18fHIoMTUpKEkucHJvdG90eXBlLE4sSS5wcm90b3R5cGUudmFsdWVPZiksaChJLCJTeW1ib2wiKSxoKE1hdGgsIk1hdGgiLCEwKSxoKGEuSlNPTiwiSlNPTiIsITApfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3QuZj1yKDM1KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0Ijt2YXIgbj1yKDEzKSxhPXIoMTQpLGk9cigzNyksbz1yKDEzMykscz1yKDE2KS5mO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1hLlN5bWJvbHx8KGEuU3ltYm9sPWk/e306bi5TeW1ib2x8fHt9KTsiXyI9PWUuY2hhckF0KDApfHxlIGluIHR8fHModCxlLHt2YWx1ZTpvLmYoZSl9KX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1OSksYT1yKDc3KSxpPXIoNzgpO2UuZXhwb3J0cz1mdW5jdGlvbihlKXt2YXIgdD1uKGUpLHI9YS5mO2lmKHIpZm9yKHZhciBvLHM9cihlKSxsPWkuZixjPTA7cy5sZW5ndGg+YzspbC5jYWxsKGUsbz1zW2MrK10pJiZ0LnB1c2gobyk7cmV0dXJuIHR9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO2Z1bmN0aW9uIG4oZSl7cmV0dXJuKG49ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgYT1yKDQ3KSxpPXIoMTM3KS5mLG89e30udG9TdHJpbmcscz0ib2JqZWN0Ij09KCJ1bmRlZmluZWQiPT10eXBlb2Ygd2luZG93PyJ1bmRlZmluZWQiOm4od2luZG93KSkmJndpbmRvdyYmT2JqZWN0LmdldE93blByb3BlcnR5TmFtZXM/T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXMod2luZG93KTpbXTtlLmV4cG9ydHMuZj1mdW5jdGlvbihlKXtyZXR1cm4gcyYmIltvYmplY3QgV2luZG93XSI9PW8uY2FsbChlKT9mdW5jdGlvbihlKXt0cnl7cmV0dXJuIGkoZSl9Y2F0Y2goZSl7cmV0dXJuIHMuc2xpY2UoKX19KGUpOmkoYShlKSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoNjApLGE9cig2MikuY29uY2F0KCJsZW5ndGgiLCJwcm90b3R5cGUiKTt0LmY9T2JqZWN0LmdldE93blByb3BlcnR5TmFtZXN8fGZ1bmN0aW9uKGUpe3JldHVybiBuKGUsYSl9fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3IoMTM5KSxlLmV4cG9ydHM9cigxNCkuU3RyaW5nLnBhZFN0YXJ0fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNDApLGk9cigxMDApO24obi5QK24uRiovVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/IFNhZmFyaVwvLy50ZXN0KGkpLCJTdHJpbmciLHtwYWRTdGFydDpmdW5jdGlvbihlKXtyZXR1cm4gYSh0aGlzLGUsYXJndW1lbnRzLmxlbmd0aD4xP2FyZ3VtZW50c1sxXTp2b2lkIDAsITApfX0pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMzApLGE9cigxNDEpLGk9cigzOCk7ZS5leHBvcnRzPWZ1bmN0aW9uKGUsdCxyLG8pe3ZhciBzPVN0cmluZyhpKGUpKSxsPXMubGVuZ3RoLGM9dm9pZCAwPT09cj8iICI6U3RyaW5nKHIpLHU9bih0KTtpZih1PD1sfHwiIj09YylyZXR1cm4gczt2YXIgZj11LWwsaD1hLmNhbGwoYyxNYXRoLmNlaWwoZi9jLmxlbmd0aCkpO3JldHVybiBoLmxlbmd0aD5mJiYoaD1oLnNsaWNlKDAsZikpLG8/aCtzOnMraH19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigzMSksYT1yKDM4KTtlLmV4cG9ydHM9ZnVuY3Rpb24oZSl7dmFyIHQ9U3RyaW5nKGEodGhpcykpLHI9IiIsaT1uKGUpO2lmKGk8MHx8aT09MS8wKXRocm93IFJhbmdlRXJyb3IoIkNvdW50IGNhbid0IGJlIG5lZ2F0aXZlIik7Zm9yKDtpPjA7KGk+Pj49MSkmJih0Kz10KSkxJmkmJihyKz10KTtyZXR1cm4gcn19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7cigxNDMpLGUuZXhwb3J0cz1yKDE0KS5TdHJpbmcucGFkRW5kfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPXIoMTIpLGE9cigxNDApLGk9cigxMDApO24obi5QK24uRiovVmVyc2lvblwvMTBcLlxkKyhcLlxkKyk/IFNhZmFyaVwvLy50ZXN0KGkpLCJTdHJpbmciLHtwYWRFbmQ6ZnVuY3Rpb24oZSl7cmV0dXJuIGEodGhpcyxlLGFyZ3VtZW50cy5sZW5ndGg+MT9hcmd1bWVudHNbMV06dm9pZCAwLCExKX19KX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtyKDE0NSksZS5leHBvcnRzPXIoMTQpLk9iamVjdC52YWx1ZXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cigxMiksYT1yKDE0NikoITEpO24obi5TLCJPYmplY3QiLHt2YWx1ZXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGEoZSl9fSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7dmFyIG49cig1OSksYT1yKDQ3KSxpPXIoNzgpLmY7ZS5leHBvcnRzPWZ1bmN0aW9uKGUpe3JldHVybiBmdW5jdGlvbih0KXtmb3IodmFyIHIsbz1hKHQpLHM9bihvKSxsPXMubGVuZ3RoLGM9MCx1PVtdO2w+YzspaS5jYWxsKG8scj1zW2MrK10pJiZ1LnB1c2goZT9bcixvW3JdXTpvW3JdKTtyZXR1cm4gdX19fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO3ZhciBuPSExO2lmKCJ1bmRlZmluZWQiIT10eXBlb2YgUmVhZGFibGVTdHJlYW0pdHJ5e25ldyBSZWFkYWJsZVN0cmVhbSh7c3RhcnQ6ZnVuY3Rpb24oZSl7ZS5jbG9zZSgpfX0pLG49ITB9Y2F0Y2goZSl7fXQuUmVhZGFibGVTdHJlYW09bj9SZWFkYWJsZVN0cmVhbTpyKDE0OCkuUmVhZGFibGVTdHJlYW19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlKXtyZXR1cm4obj0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfSFmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0KWVbcl09dFtyXX0odCxmdW5jdGlvbihlKXt2YXIgdD17fTtmdW5jdGlvbiByKG4pe2lmKHRbbl0pcmV0dXJuIHRbbl0uZXhwb3J0czt2YXIgYT10W25dPXtpOm4sbDohMSxleHBvcnRzOnt9fTtyZXR1cm4gZVtuXS5jYWxsKGEuZXhwb3J0cyxhLGEuZXhwb3J0cyxyKSxhLmw9ITAsYS5leHBvcnRzfXJldHVybiByLm09ZSxyLmM9dCxyLmk9ZnVuY3Rpb24oZSl7cmV0dXJuIGV9LHIuZD1mdW5jdGlvbihlLHQsbil7ci5vKGUsdCl8fE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLHQse2NvbmZpZ3VyYWJsZTohMSxlbnVtZXJhYmxlOiEwLGdldDpufSl9LHIubj1mdW5jdGlvbihlKXt2YXIgdD1lJiZlLl9fZXNNb2R1bGU/ZnVuY3Rpb24oKXtyZXR1cm4gZS5kZWZhdWx0fTpmdW5jdGlvbigpe3JldHVybiBlfTtyZXR1cm4gci5kKHQsImEiLHQpLHR9LHIubz1mdW5jdGlvbihlLHQpe3JldHVybiBPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSx0KX0sci5wPSIiLHIoci5zPTcpfShbZnVuY3Rpb24oZSx0LHIpe3ZhciBhPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT09bihTeW1ib2wuaXRlcmF0b3IpP2Z1bmN0aW9uKGUpe3JldHVybiBuKGUpfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6bihlKX0saT1yKDEpLmFzc2VydDtmdW5jdGlvbiBvKGUpe3JldHVybiJzdHJpbmciPT10eXBlb2YgZXx8InN5bWJvbCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKX1mdW5jdGlvbiBzKGUsdCxyKXtpZigiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJBcmd1bWVudCBpcyBub3QgYSBmdW5jdGlvbiIpO3JldHVybiBGdW5jdGlvbi5wcm90b3R5cGUuYXBwbHkuY2FsbChlLHQscil9dC50eXBlSXNPYmplY3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT0odm9pZCAwPT09ZT8idW5kZWZpbmVkIjphKGUpKSYmbnVsbCE9PWV8fCJmdW5jdGlvbiI9PXR5cGVvZiBlfSx0LmNyZWF0ZURhdGFQcm9wZXJ0eT1mdW5jdGlvbihlLHIsbil7aSh0LnR5cGVJc09iamVjdChlKSksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUscix7dmFsdWU6bix3cml0YWJsZTohMCxlbnVtZXJhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH0pfSx0LmNyZWF0ZUFycmF5RnJvbUxpc3Q9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5BcnJheUJ1ZmZlckNvcHk9ZnVuY3Rpb24oZSx0LHIsbixhKXtuZXcgVWludDhBcnJheShlKS5zZXQobmV3IFVpbnQ4QXJyYXkocixuLGEpLHQpfSx0LkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3Q9ZnVuY3Rpb24oZSx0KXtpKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPXt9O3JldHVybiBPYmplY3QuZGVmaW5lUHJvcGVydHkociwidmFsdWUiLHt2YWx1ZTplLGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSksT2JqZWN0LmRlZmluZVByb3BlcnR5KHIsImRvbmUiLHt2YWx1ZTp0LGVudW1lcmFibGU6ITAsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfSkscn0sdC5Jc0Zpbml0ZU5vbk5lZ2F0aXZlTnVtYmVyPWZ1bmN0aW9uKGUpe3JldHVybiEoTnVtYmVyLmlzTmFOKGUpfHxlPT09MS8wfHxlPDApfSx0Lkludm9rZU9yTm9vcD1mdW5jdGlvbihlLHQscil7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSk7dmFyIG49ZVt0XTtpZih2b2lkIDAhPT1uKXJldHVybiBzKG4sZSxyKX0sdC5Qcm9taXNlSW52b2tlT3JOb29wPWZ1bmN0aW9uKGUscixuKXtpKHZvaWQgMCE9PWUpLGkobyhyKSksaShBcnJheS5pc0FycmF5KG4pKTt0cnl7cmV0dXJuIFByb21pc2UucmVzb2x2ZSh0Lkludm9rZU9yTm9vcChlLHIsbikpfWNhdGNoKGUpe3JldHVybiBQcm9taXNlLnJlamVjdChlKX19LHQuUHJvbWlzZUludm9rZU9yUGVyZm9ybUZhbGxiYWNrPWZ1bmN0aW9uKGUsdCxyLG4sYSl7aSh2b2lkIDAhPT1lKSxpKG8odCkpLGkoQXJyYXkuaXNBcnJheShyKSksaShBcnJheS5pc0FycmF5KGEpKTt2YXIgbD12b2lkIDA7dHJ5e2w9ZVt0XX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9aWYodm9pZCAwPT09bClyZXR1cm4gbi5hcHBseShudWxsLGEpO3RyeXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobCxlLHIpKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9fSx0LlRyYW5zZmVyQXJyYXlCdWZmZXI9ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc2xpY2UoKX0sdC5WYWxpZGF0ZUFuZE5vcm1hbGl6ZUhpZ2hXYXRlck1hcms9ZnVuY3Rpb24oZSl7aWYoZT1OdW1iZXIoZSksTnVtYmVyLmlzTmFOKGUpfHxlPDApdGhyb3cgbmV3IFJhbmdlRXJyb3IoImhpZ2hXYXRlck1hcmsgcHJvcGVydHkgb2YgYSBxdWV1aW5nIHN0cmF0ZWd5IG11c3QgYmUgbm9uLW5lZ2F0aXZlIGFuZCBub24tTmFOIik7cmV0dXJuIGV9LHQuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3k9ZnVuY3Rpb24oZSxyKXtpZih2b2lkIDAhPT1lJiYiZnVuY3Rpb24iIT10eXBlb2YgZSl0aHJvdyBuZXcgVHlwZUVycm9yKCJzaXplIHByb3BlcnR5IG9mIGEgcXVldWluZyBzdHJhdGVneSBtdXN0IGJlIGEgZnVuY3Rpb24iKTtyZXR1cm57c2l6ZTplLGhpZ2hXYXRlck1hcms6cj10LlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayhyKX19fSxmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbihlKXt0aGlzLm5hbWU9IkFzc2VydGlvbkVycm9yIix0aGlzLm1lc3NhZ2U9ZXx8IiIsdGhpcy5zdGFjaz0obmV3IEVycm9yKS5zdGFja31uLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEVycm9yLnByb3RvdHlwZSksbi5wcm90b3R5cGUuY29uc3RydWN0b3I9bixlLmV4cG9ydHM9e3JldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbjpmdW5jdGlvbihlKXtlJiZlLmNvbnN0cnVjdG9yPT09biYmc2V0VGltZW91dCgoZnVuY3Rpb24oKXt0aHJvdyBlfSksMCl9LEFzc2VydGlvbkVycm9yOm4sYXNzZXJ0OmZ1bmN0aW9uKGUsdCl7aWYoIWUpdGhyb3cgbmV3IG4odCl9fX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5JbnZva2VPck5vb3Ascz1pLlByb21pc2VJbnZva2VPck5vb3AsbD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplUXVldWluZ1N0cmF0ZWd5LGM9aS50eXBlSXNPYmplY3QsdT1yKDEpLGY9dS5hc3NlcnQsaD11LnJldGhyb3dBc3NlcnRpb25FcnJvclJlamVjdGlvbixkPXIoMykscD1kLkRlcXVldWVWYWx1ZSxtPWQuRW5xdWV1ZVZhbHVlV2l0aFNpemUsZz1kLlBlZWtRdWV1ZVZhbHVlLHY9ZC5SZXNldFF1ZXVlLHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrLG89dm9pZCAwPT09aT8xOmk7YSh0aGlzLGUpLHRoaXMuX3N0YXRlPSJ3cml0YWJsZSIsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX3dyaXRlcj12b2lkIDAsdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyPXZvaWQgMCx0aGlzLl93cml0ZVJlcXVlc3RzPVtdLHRoaXMuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCx0aGlzLl9jbG9zZVJlcXVlc3Q9dm9pZCAwLHRoaXMuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCx0aGlzLl9wZW5kaW5nQWJvcnRSZXF1ZXN0PXZvaWQgMCx0aGlzLl9iYWNrcHJlc3N1cmU9ITE7dmFyIHM9dC50eXBlO2lmKHZvaWQgMCE9PXMpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt0aGlzLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGoodGhpcyx0LG4sbyksdGhpcy5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fc3RhcnRTdGVwcygpfXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PXcodGhpcyk/UHJvbWlzZS5yZWplY3QoSCgiYWJvcnQiKSk6ITA9PT1rKHRoaXMpP1Byb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBhYm9ydCBhIHN0cmVhbSB0aGF0IGFscmVhZHkgaGFzIGEgd3JpdGVyIikpOlModGhpcyxlKX19LHtrZXk6ImdldFdyaXRlciIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXcodGhpcykpdGhyb3cgSCgiZ2V0V3JpdGVyIik7cmV0dXJuIGIodGhpcyl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09dyh0aGlzKSl0aHJvdyBIKCJsb2NrZWQiKTtyZXR1cm4gayh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBiKGUpe3JldHVybiBuZXcgTyhlKX1mdW5jdGlvbiB3KGUpe3JldHVybiEhYyhlKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwoZSwiX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGsoZSl7cmV0dXJuIGYoITA9PT13KGUpLCJJc1dyaXRhYmxlU3RyZWFtTG9ja2VkIHNob3VsZCBvbmx5IGJlIHVzZWQgb24ga25vd24gd3JpdGFibGUgc3RyZWFtcyIpLHZvaWQgMCE9PWUuX3dyaXRlcn1mdW5jdGlvbiBTKGUsdCl7dmFyIHI9ZS5fc3RhdGU7aWYoImNsb3NlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlc29sdmUodm9pZCAwKTtpZigiZXJyb3JlZCI9PT1yKXJldHVybiBQcm9taXNlLnJlamVjdChlLl9zdG9yZWRFcnJvcik7dmFyIG49bmV3IFR5cGVFcnJvcigiUmVxdWVzdGVkIHRvIGFib3J0Iik7aWYodm9pZCAwIT09ZS5fcGVuZGluZ0Fib3J0UmVxdWVzdClyZXR1cm4gUHJvbWlzZS5yZWplY3Qobik7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIsInN0YXRlIG11c3QgYmUgd3JpdGFibGUgb3IgZXJyb3JpbmciKTt2YXIgYT0hMTsiZXJyb3JpbmciPT09ciYmKGE9ITAsdD12b2lkIDApO3ZhciBpPW5ldyBQcm9taXNlKChmdW5jdGlvbihyLG4pe2UuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9e19yZXNvbHZlOnIsX3JlamVjdDpuLF9yZWFzb246dCxfd2FzQWxyZWFkeUVycm9yaW5nOmF9fSkpO3JldHVybiExPT09YSYmeChlLG4pLGl9ZnVuY3Rpb24gXyhlLHQpe3ZhciByPWUuX3N0YXRlOyJ3cml0YWJsZSIhPT1yPyhmKCJlcnJvcmluZyI9PT1yKSxBKGUpKTp4KGUsdCl9ZnVuY3Rpb24geChlLHQpe2Yodm9pZCAwPT09ZS5fc3RvcmVkRXJyb3IsInN0cmVhbS5fc3RvcmVkRXJyb3IgPT09IHVuZGVmaW5lZCIpLGYoIndyaXRhYmxlIj09PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IGJlIHdyaXRhYmxlIik7dmFyIHI9ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyO2Yodm9pZCAwIT09ciwiY29udHJvbGxlciBtdXN0IG5vdCBiZSB1bmRlZmluZWQiKSxlLl9zdGF0ZT0iZXJyb3JpbmciLGUuX3N0b3JlZEVycm9yPXQ7dmFyIG49ZS5fd3JpdGVyO3ZvaWQgMCE9PW4mJkQobix0KSwhMT09PUUoZSkmJiEwPT09ci5fc3RhcnRlZCYmQShlKX1mdW5jdGlvbiBBKGUpe2YoImVycm9yaW5nIj09PWUuX3N0YXRlLCJzdHJlYW0uX3N0YXRlID09PSBlcnJvcmluZyIpLGYoITE9PT1FKGUpLCJXcml0YWJsZVN0cmVhbUhhc09wZXJhdGlvbk1hcmtlZEluRmxpZ2h0KHN0cmVhbSkgPT09IGZhbHNlIiksZS5fc3RhdGU9ImVycm9yZWQiLGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2Vycm9yU3RlcHMoKTtmb3IodmFyIHQ9ZS5fc3RvcmVkRXJyb3Iscj0wO3I8ZS5fd3JpdGVSZXF1ZXN0cy5sZW5ndGg7cisrKWUuX3dyaXRlUmVxdWVzdHNbcl0uX3JlamVjdCh0KTtpZihlLl93cml0ZVJlcXVlc3RzPVtdLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Qpe3ZhciBuPWUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q7aWYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDAsITA9PT1uLl93YXNBbHJlYWR5RXJyb3JpbmcpcmV0dXJuIG4uX3JlamVjdCh0KSx2b2lkIFQoZSk7ZS5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLl9fYWJvcnRTdGVwcyhuLl9yZWFzb24pLnRoZW4oKGZ1bmN0aW9uKCl7bi5fcmVzb2x2ZSgpLFQoZSl9KSwoZnVuY3Rpb24odCl7bi5fcmVqZWN0KHQpLFQoZSl9KSl9ZWxzZSBUKGUpfWZ1bmN0aW9uIEMoZSl7Zih2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3QuX3Jlc29sdmUodm9pZCAwKSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdD12b2lkIDA7dmFyIHQ9ZS5fc3RhdGU7Zigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLCJlcnJvcmluZyI9PT10JiYoZS5fc3RvcmVkRXJyb3I9dm9pZCAwLHZvaWQgMCE9PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QmJihlLl9wZW5kaW5nQWJvcnRSZXF1ZXN0Ll9yZXNvbHZlKCksZS5fcGVuZGluZ0Fib3J0UmVxdWVzdD12b2lkIDApKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmZnVuY3Rpb24oZSl7Zih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0LCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxmKCJwZW5kaW5nIj09PWUuX2Nsb3NlZFByb21pc2VTdGF0ZSwid3JpdGVyLl9jbG9zZWRQcm9taXNlU3RhdGUgaXMgcGVuZGluZyIpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icmVzb2x2ZWQifShyKSxmKHZvaWQgMD09PWUuX3BlbmRpbmdBYm9ydFJlcXVlc3QsInN0cmVhbS5fcGVuZGluZ0Fib3J0UmVxdWVzdCA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9zdG9yZWRFcnJvciwic3RyZWFtLl9zdG9yZWRFcnJvciA9PT0gdW5kZWZpbmVkIil9ZnVuY3Rpb24gUChlKXtyZXR1cm4gdm9pZCAwIT09ZS5fY2xvc2VSZXF1ZXN0fHx2b2lkIDAhPT1lLl9pbkZsaWdodENsb3NlUmVxdWVzdH1mdW5jdGlvbiBFKGUpe3JldHVybiB2b2lkIDAhPT1lLl9pbkZsaWdodFdyaXRlUmVxdWVzdHx8dm9pZCAwIT09ZS5faW5GbGlnaHRDbG9zZVJlcXVlc3R9ZnVuY3Rpb24gVChlKXtmKCJlcnJvcmVkIj09PWUuX3N0YXRlLCdfc3RyZWFtXy5bW3N0YXRlXV0gaXMgYCJlcnJvcmVkImAnKSx2b2lkIDAhPT1lLl9jbG9zZVJlcXVlc3QmJihmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9jbG9zZVJlcXVlc3QuX3JlamVjdChlLl9zdG9yZWRFcnJvciksZS5fY2xvc2VSZXF1ZXN0PXZvaWQgMCk7dmFyIHQ9ZS5fd3JpdGVyO3ZvaWQgMCE9PXQmJihZKHQsZS5fc3RvcmVkRXJyb3IpLHQuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBSKGUsdCl7Zigid3JpdGFibGUiPT09ZS5fc3RhdGUpLGYoITE9PT1QKGUpKTt2YXIgcj1lLl93cml0ZXI7dm9pZCAwIT09ciYmdCE9PWUuX2JhY2twcmVzc3VyZSYmKCEwPT09dD9mdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlID09PSB1bmRlZmluZWQiKSxmKHZvaWQgMD09PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlPW5ldyBQcm9taXNlKChmdW5jdGlvbih0LHIpe2UuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXQsZS5fcmVhZHlQcm9taXNlX3JlamVjdD1yfSkpLGUuX3JlYWR5UHJvbWlzZVN0YXRlPSJwZW5kaW5nIn0ocik6KGYoITE9PT10KSxRKHIpKSksZS5fYmFja3ByZXNzdXJlPXR9ZS5leHBvcnRzPXtBY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyOmIsSXNXcml0YWJsZVN0cmVhbTp3LElzV3JpdGFibGVTdHJlYW1Mb2NrZWQ6ayxXcml0YWJsZVN0cmVhbTp5LFdyaXRhYmxlU3RyZWFtQWJvcnQ6UyxXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6VyxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uOmZ1bmN0aW9uKGUpe3ZhciB0PWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT10KTt2YXIgcj10Ll9zdGF0ZTtyZXR1cm4hMD09PVAodCl8fCJjbG9zZWQiPT09cj9Qcm9taXNlLnJlc29sdmUoKToiZXJyb3JlZCI9PT1yP1Byb21pc2UucmVqZWN0KHQuX3N0b3JlZEVycm9yKTooZigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLEYoZSkpfSxXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJSZWxlYXNlOk4sV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGU6TSxXcml0YWJsZVN0cmVhbUNsb3NlUXVldWVkT3JJbkZsaWdodDpQfTt2YXIgTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFdyaXRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1rKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgd3JpdGluZyBieSBhbm90aGVyIHdyaXRlciIpO3RoaXMuX293bmVyV3JpdGFibGVTdHJlYW09dCx0Ll93cml0ZXI9dGhpczt2YXIgcixuPXQuX3N0YXRlO2lmKCJ3cml0YWJsZSI9PT1uKSExPT09UCh0KSYmITA9PT10Ll9iYWNrcHJlc3N1cmU/KChyPXRoaXMpLl9yZWFkeVByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7ci5fcmVhZHlQcm9taXNlX3Jlc29sdmU9ZSxyLl9yZWFkeVByb21pc2VfcmVqZWN0PXR9KSksci5fcmVhZHlQcm9taXNlU3RhdGU9InBlbmRpbmciKTpKKHRoaXMpLFgodGhpcyk7ZWxzZSBpZigiZXJyb3JpbmciPT09bilLKHRoaXMsdC5fc3RvcmVkRXJyb3IpLHRoaXMuX3JlYWR5UHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSksWCh0aGlzKTtlbHNlIGlmKCJjbG9zZWQiPT09bilKKHRoaXMpLGZ1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZXNvbHZlZCJ9KHRoaXMpO2Vsc2V7ZigiZXJyb3JlZCI9PT1uLCJzdGF0ZSBtdXN0IGJlIGVycm9yZWQiKTt2YXIgaT10Ll9zdG9yZWRFcnJvcjtLKHRoaXMsaSksdGhpcy5fcmVhZHlQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxmdW5jdGlvbihlLHQpe2UuX2Nsb3NlZFByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZVN0YXRlPSJyZWplY3RlZCJ9KHRoaXMsaSksdGhpcy5fY2xvc2VkUHJvbWlzZS5jYXRjaCgoZnVuY3Rpb24oKXt9KSl9fXJldHVybiBuKGUsW3trZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygiYWJvcnQiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChWKCJhYm9ydCIpKTpmdW5jdGlvbihlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07cmV0dXJuIGYodm9pZCAwIT09ciksUyhyLHQpfSh0aGlzLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChHKCJjbG9zZSIpKTt2YXIgZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtO3JldHVybiB2b2lkIDA9PT1lP1Byb21pc2UucmVqZWN0KFYoImNsb3NlIikpOiEwPT09UChlKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJjYW5ub3QgY2xvc2UgYW4gYWxyZWFkeS1jbG9zaW5nIHN0cmVhbSIpKTpGKHRoaXMpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1JKHRoaXMpKXRocm93IEcoInJlbGVhc2VMb2NrIik7dmFyIGU9dGhpcy5fb3duZXJXcml0YWJsZVN0cmVhbTt2b2lkIDAhPT1lJiYoZih2b2lkIDAhPT1lLl93cml0ZXIpLE4odGhpcykpfX0se2tleToid3JpdGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09SSh0aGlzKT9Qcm9taXNlLnJlamVjdChHKCJ3cml0ZSIpKTp2b2lkIDA9PT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KFYoIndyaXRlIHRvIikpOk0odGhpcyxlKX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuITE9PT1JKHRoaXMpP1Byb21pc2UucmVqZWN0KEcoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX0se2tleToiZGVzaXJlZFNpemUiLGdldDpmdW5jdGlvbigpe2lmKCExPT09SSh0aGlzKSl0aHJvdyBHKCJkZXNpcmVkU2l6ZSIpO2lmKHZvaWQgMD09PXRoaXMuX293bmVyV3JpdGFibGVTdHJlYW0pdGhyb3cgVigiZGVzaXJlZFNpemUiKTtyZXR1cm4gZT10aGlzLl9vd25lcldyaXRhYmxlU3RyZWFtLCJlcnJvcmVkIj09PSh0PWUuX3N0YXRlKXx8ImVycm9yaW5nIj09PXQ/bnVsbDoiY2xvc2VkIj09PXQ/MDpCKGUuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcik7dmFyIGUsdH19LHtrZXk6InJlYWR5IixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PUkodGhpcyk/UHJvbWlzZS5yZWplY3QoRygicmVhZHkiKSk6dGhpcy5fcmVhZHlQcm9taXNlfX1dKSxlfSgpO2Z1bmN0aW9uIEkoZSl7cmV0dXJuISFjKGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfb3duZXJXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEYoZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpO3ZhciByPXQuX3N0YXRlO2lmKCJjbG9zZWQiPT09cnx8ImVycm9yZWQiPT09cilyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIityKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgd3JpdGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKSk7Zigid3JpdGFibGUiPT09cnx8ImVycm9yaW5nIj09PXIpLGYoITE9PT1QKHQpKTt2YXIgbixhPW5ldyBQcm9taXNlKChmdW5jdGlvbihlLHIpe3ZhciBuPXtfcmVzb2x2ZTplLF9yZWplY3Q6cn07dC5fY2xvc2VSZXF1ZXN0PW59KSk7cmV0dXJuITA9PT10Ll9iYWNrcHJlc3N1cmUmJiJ3cml0YWJsZSI9PT1yJiZRKGUpLG49dC5fd3JpdGFibGVTdHJlYW1Db250cm9sbGVyLG0obiwiY2xvc2UiLDApLFUobiksYX1mdW5jdGlvbiBMKGUsdCl7InBlbmRpbmciPT09ZS5fY2xvc2VkUHJvbWlzZVN0YXRlP1koZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSA9PT0gdW5kZWZpbmVkIiksZih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCA9PT0gdW5kZWZpbmVkIiksZigicGVuZGluZyIhPT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIG5vdCBwZW5kaW5nIiksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKX1mdW5jdGlvbiBEKGUsdCl7InBlbmRpbmciPT09ZS5fcmVhZHlQcm9taXNlU3RhdGU/ZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX3JlYWR5UHJvbWlzZV9yZXNvbHZlICE9PSB1bmRlZmluZWQiKSxmKHZvaWQgMCE9PWUuX3JlYWR5UHJvbWlzZV9yZWplY3QsIndyaXRlci5fcmVhZHlQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZS5fcmVhZHlQcm9taXNlX3JlamVjdCh0KSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fcmVhZHlQcm9taXNlX3JlamVjdD12b2lkIDAsZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KTpmdW5jdGlvbihlLHQpe2Yodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgPT09IHVuZGVmaW5lZCIpLGYodm9pZCAwPT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ID09PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2U9UHJvbWlzZS5yZWplY3QodCksZS5fcmVhZHlQcm9taXNlU3RhdGU9InJlamVjdGVkIn0oZSx0KSxlLl9yZWFkeVByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfWZ1bmN0aW9uIE4oZSl7dmFyIHQ9ZS5fb3duZXJXcml0YWJsZVN0cmVhbTtmKHZvaWQgMCE9PXQpLGYodC5fd3JpdGVyPT09ZSk7dmFyIHI9bmV3IFR5cGVFcnJvcigiV3JpdGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKTtEKGUsciksTChlLHIpLHQuX3dyaXRlcj12b2lkIDAsZS5fb3duZXJXcml0YWJsZVN0cmVhbT12b2lkIDB9ZnVuY3Rpb24gTShlLHQpe3ZhciByPWUuX293bmVyV3JpdGFibGVTdHJlYW07Zih2b2lkIDAhPT1yKTt2YXIgbj1yLl93cml0YWJsZVN0cmVhbUNvbnRyb2xsZXIsYT1mdW5jdGlvbihlLHQpe3ZhciByPWUuX3N0cmF0ZWd5U2l6ZTtpZih2b2lkIDA9PT1yKXJldHVybiAxO3RyeXtyZXR1cm4gcih0KX1jYXRjaCh0KXtyZXR1cm4gcShlLHQpLDF9fShuLHQpO2lmKHIhPT1lLl9vd25lcldyaXRhYmxlU3RyZWFtKXJldHVybiBQcm9taXNlLnJlamVjdChWKCJ3cml0ZSB0byIpKTt2YXIgaT1yLl9zdGF0ZTtpZigiZXJyb3JlZCI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7aWYoITA9PT1QKHIpfHwiY2xvc2VkIj09PWkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gaXMgY2xvc2luZyBvciBjbG9zZWQgYW5kIGNhbm5vdCBiZSB3cml0dGVuIHRvIikpO2lmKCJlcnJvcmluZyI9PT1pKXJldHVybiBQcm9taXNlLnJlamVjdChyLl9zdG9yZWRFcnJvcik7Zigid3JpdGFibGUiPT09aSk7dmFyIG89ZnVuY3Rpb24oZSl7cmV0dXJuIGYoITA9PT1rKGUpKSxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl93cml0ZVJlcXVlc3RzLnB1c2gobil9KSl9KHIpO3JldHVybiBmdW5jdGlvbihlLHQscil7dmFyIG49e2NodW5rOnR9O3RyeXttKGUsbixyKX1jYXRjaCh0KXtyZXR1cm4gdm9pZCBxKGUsdCl9dmFyIGE9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2lmKCExPT09UChhKSYmIndyaXRhYmxlIj09PWEuX3N0YXRlKXt2YXIgaT16KGUpO1IoYSxpKX1VKGUpfShuLHQsYSksb312YXIgaj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09dyh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBXcml0YWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3dyaXRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBXcml0YWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTaW5rPXIsdGhpcy5fcXVldWU9dm9pZCAwLHRoaXMuX3F1ZXVlVG90YWxTaXplPXZvaWQgMCx2KHRoaXMpLHRoaXMuX3N0YXJ0ZWQ9ITE7dmFyIG89bChuLGkpO3RoaXMuX3N0cmF0ZWd5U2l6ZT1vLnNpemUsdGhpcy5fc3RyYXRlZ3lIV009by5oaWdoV2F0ZXJNYXJrLFIodCx6KHRoaXMpKX1yZXR1cm4gbihlLFt7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PSghIWModD10aGlzKSYmISFPYmplY3QucHJvdG90eXBlLmhhc093blByb3BlcnR5LmNhbGwodCwiX3VuZGVybHlpbmdTaW5rIikpKXRocm93IG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLmVycm9yIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIik7dmFyIHQ7IndyaXRhYmxlIj09PXRoaXMuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbS5fc3RhdGUmJlcodGhpcyxlKX19LHtrZXk6Il9fYWJvcnRTdGVwcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHModGhpcy5fdW5kZXJseWluZ1NpbmssImFib3J0IixbZV0pfX0se2tleToiX19lcnJvclN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3YodGhpcyl9fSx7a2V5OiJfX3N0YXJ0U3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcyx0PW8odGhpcy5fdW5kZXJseWluZ1NpbmssInN0YXJ0IixbdGhpc10pLHI9dGhpcy5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO1Byb21pc2UucmVzb2x2ZSh0KS50aGVuKChmdW5jdGlvbigpe2YoIndyaXRhYmxlIj09PXIuX3N0YXRlfHwiZXJyb3JpbmciPT09ci5fc3RhdGUpLGUuX3N0YXJ0ZWQ9ITAsVShlKX0pLChmdW5jdGlvbih0KXtmKCJ3cml0YWJsZSI9PT1yLl9zdGF0ZXx8ImVycm9yaW5nIj09PXIuX3N0YXRlKSxlLl9zdGFydGVkPSEwLF8ocix0KX0pKS5jYXRjaChoKX19XSksZX0oKTtmdW5jdGlvbiBCKGUpe3JldHVybiBlLl9zdHJhdGVneUhXTS1lLl9xdWV1ZVRvdGFsU2l6ZX1mdW5jdGlvbiBVKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRXcml0YWJsZVN0cmVhbTtpZighMSE9PWUuX3N0YXJ0ZWQmJnZvaWQgMD09PXQuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KXt2YXIgcj10Ll9zdGF0ZTtpZigiY2xvc2VkIiE9PXImJiJlcnJvcmVkIiE9PXIpaWYoImVycm9yaW5nIiE9PXIpe2lmKDAhPT1lLl9xdWV1ZS5sZW5ndGgpe3ZhciBuPWcoZSk7ImNsb3NlIj09PW4/ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxmKHZvaWQgMCE9PWUuX2Nsb3NlUmVxdWVzdCksZS5faW5GbGlnaHRDbG9zZVJlcXVlc3Q9ZS5fY2xvc2VSZXF1ZXN0LGUuX2Nsb3NlUmVxdWVzdD12b2lkIDB9KSh0KSxwKGUpLGYoMD09PWUuX3F1ZXVlLmxlbmd0aCwicXVldWUgbXVzdCBiZSBlbXB0eSBvbmNlIHRoZSBmaW5hbCB3cml0ZSByZWNvcmQgaXMgZGVxdWV1ZWQiKSxzKGUuX3VuZGVybHlpbmdTaW5rLCJjbG9zZSIsW10pLnRoZW4oKGZ1bmN0aW9uKCl7Qyh0KX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0KSxlLl9pbkZsaWdodENsb3NlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0Q2xvc2VSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSx2b2lkIDAhPT1lLl9wZW5kaW5nQWJvcnRSZXF1ZXN0JiYoZS5fcGVuZGluZ0Fib3J0UmVxdWVzdC5fcmVqZWN0KHQpLGUuX3BlbmRpbmdBYm9ydFJlcXVlc3Q9dm9pZCAwKSxfKGUsdCl9KHQsZSl9KSkuY2F0Y2goaCl9KGUpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtOyhmdW5jdGlvbihlKXtmKHZvaWQgMD09PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0LCJ0aGVyZSBtdXN0IGJlIG5vIHBlbmRpbmcgd3JpdGUgcmVxdWVzdCIpLGYoMCE9PWUuX3dyaXRlUmVxdWVzdHMubGVuZ3RoLCJ3cml0ZVJlcXVlc3RzIG11c3Qgbm90IGJlIGVtcHR5IiksZS5faW5GbGlnaHRXcml0ZVJlcXVlc3Q9ZS5fd3JpdGVSZXF1ZXN0cy5zaGlmdCgpfSkocikscyhlLl91bmRlcmx5aW5nU2luaywid3JpdGUiLFt0LGVdKS50aGVuKChmdW5jdGlvbigpeyFmdW5jdGlvbihlKXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVzb2x2ZSh2b2lkIDApLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMH0ocik7dmFyIHQ9ci5fc3RhdGU7aWYoZigid3JpdGFibGUiPT09dHx8ImVycm9yaW5nIj09PXQpLHAoZSksITE9PT1QKHIpJiYid3JpdGFibGUiPT09dCl7dmFyIG49eihlKTtSKHIsbil9VShlKX0pLChmdW5jdGlvbihlKXshZnVuY3Rpb24oZSx0KXtmKHZvaWQgMCE9PWUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0KSxlLl9pbkZsaWdodFdyaXRlUmVxdWVzdC5fcmVqZWN0KHQpLGUuX2luRmxpZ2h0V3JpdGVSZXF1ZXN0PXZvaWQgMCxmKCJ3cml0YWJsZSI9PT1lLl9zdGF0ZXx8ImVycm9yaW5nIj09PWUuX3N0YXRlKSxfKGUsdCl9KHIsZSl9KSkuY2F0Y2goaCl9KGUsbi5jaHVuayl9fWVsc2UgQSh0KX19ZnVuY3Rpb24gcShlLHQpeyJ3cml0YWJsZSI9PT1lLl9jb250cm9sbGVkV3JpdGFibGVTdHJlYW0uX3N0YXRlJiZXKGUsdCl9ZnVuY3Rpb24geihlKXtyZXR1cm4gQihlKTw9MH1mdW5jdGlvbiBXKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFdyaXRhYmxlU3RyZWFtO2YoIndyaXRhYmxlIj09PXIuX3N0YXRlKSx4KHIsdCl9ZnVuY3Rpb24gSChlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiV3JpdGFibGVTdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBXcml0YWJsZVN0cmVhbSIpfWZ1bmN0aW9uIEcoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlci5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlciIpfWZ1bmN0aW9uIFYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHdyaXRlciIpfWZ1bmN0aW9uIFgoZSl7ZS5fY2xvc2VkUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCxyKXtlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dCxlLl9jbG9zZWRQcm9taXNlX3JlamVjdD1yLGUuX2Nsb3NlZFByb21pc2VTdGF0ZT0icGVuZGluZyJ9KSl9ZnVuY3Rpb24gWShlLHQpe2Yodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlLCJ3cml0ZXIuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSAhPT0gdW5kZWZpbmVkIiksZih2b2lkIDAhPT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCwid3JpdGVyLl9jbG9zZWRQcm9taXNlX3JlamVjdCAhPT0gdW5kZWZpbmVkIiksZigicGVuZGluZyI9PT1lLl9jbG9zZWRQcm9taXNlU3RhdGUsIndyaXRlci5fY2xvc2VkUHJvbWlzZVN0YXRlIGlzIHBlbmRpbmciKSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9jbG9zZWRQcm9taXNlU3RhdGU9InJlamVjdGVkIn1mdW5jdGlvbiBLKGUsdCl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0icmVqZWN0ZWQifWZ1bmN0aW9uIEooZSl7ZS5fcmVhZHlQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn1mdW5jdGlvbiBRKGUpe2Yodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3Jlc29sdmUsIndyaXRlci5fcmVhZHlQcm9taXNlX3Jlc29sdmUgIT09IHVuZGVmaW5lZCIpLGYodm9pZCAwIT09ZS5fcmVhZHlQcm9taXNlX3JlamVjdCwid3JpdGVyLl9yZWFkeVByb21pc2VfcmVqZWN0ICE9PSB1bmRlZmluZWQiKSxlLl9yZWFkeVByb21pc2VfcmVzb2x2ZSh2b2lkIDApLGUuX3JlYWR5UHJvbWlzZV9yZXNvbHZlPXZvaWQgMCxlLl9yZWFkeVByb21pc2VfcmVqZWN0PXZvaWQgMCxlLl9yZWFkeVByb21pc2VTdGF0ZT0iZnVsZmlsbGVkIn19LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDApLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYT1yKDEpLmFzc2VydDt0LkRlcXVldWVWYWx1ZT1mdW5jdGlvbihlKXthKCJfcXVldWUiaW4gZSYmIl9xdWV1ZVRvdGFsU2l6ZSJpbiBlLCJTcGVjLWxldmVsIGZhaWx1cmU6IERlcXVldWVWYWx1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxhKGUuX3F1ZXVlLmxlbmd0aD4wLCJTcGVjLWxldmVsIGZhaWx1cmU6IHNob3VsZCBuZXZlciBkZXF1ZXVlIGZyb20gYW4gZW1wdHkgcXVldWUuIik7dmFyIHQ9ZS5fcXVldWUuc2hpZnQoKTtyZXR1cm4gZS5fcXVldWVUb3RhbFNpemUtPXQuc2l6ZSxlLl9xdWV1ZVRvdGFsU2l6ZTwwJiYoZS5fcXVldWVUb3RhbFNpemU9MCksdC52YWx1ZX0sdC5FbnF1ZXVlVmFsdWVXaXRoU2l6ZT1mdW5jdGlvbihlLHQscil7aWYoYSgiX3F1ZXVlImluIGUmJiJfcXVldWVUb3RhbFNpemUiaW4gZSwiU3BlYy1sZXZlbCBmYWlsdXJlOiBFbnF1ZXVlVmFsdWVXaXRoU2l6ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxyPU51bWJlcihyKSwhbihyKSl0aHJvdyBuZXcgUmFuZ2VFcnJvcigiU2l6ZSBtdXN0IGJlIGEgZmluaXRlLCBub24tTmFOLCBub24tbmVnYXRpdmUgbnVtYmVyLiIpO2UuX3F1ZXVlLnB1c2goe3ZhbHVlOnQsc2l6ZTpyfSksZS5fcXVldWVUb3RhbFNpemUrPXJ9LHQuUGVla1F1ZXVlVmFsdWU9ZnVuY3Rpb24oZSl7cmV0dXJuIGEoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUGVla1F1ZXVlVmFsdWUgc2hvdWxkIG9ubHkgYmUgdXNlZCBvbiBjb250YWluZXJzIHdpdGggW1txdWV1ZV1dIGFuZCBbW3F1ZXVlVG90YWxTaXplXV0uIiksYShlLl9xdWV1ZS5sZW5ndGg+MCwiU3BlYy1sZXZlbCBmYWlsdXJlOiBzaG91bGQgbmV2ZXIgcGVlayBhdCBhbiBlbXB0eSBxdWV1ZS4iKSxlLl9xdWV1ZVswXS52YWx1ZX0sdC5SZXNldFF1ZXVlPWZ1bmN0aW9uKGUpe2EoIl9xdWV1ZSJpbiBlJiYiX3F1ZXVlVG90YWxTaXplImluIGUsIlNwZWMtbGV2ZWwgZmFpbHVyZTogUmVzZXRRdWV1ZSBzaG91bGQgb25seSBiZSB1c2VkIG9uIGNvbnRhaW5lcnMgd2l0aCBbW3F1ZXVlXV0gYW5kIFtbcXVldWVUb3RhbFNpemVdXS4iKSxlLl9xdWV1ZT1bXSxlLl9xdWV1ZVRvdGFsU2l6ZT0wfX0sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXJldHVybiBmdW5jdGlvbih0LHIsbil7cmV0dXJuIHImJmUodC5wcm90b3R5cGUsciksbiYmZSh0LG4pLHR9fSgpO2Z1bmN0aW9uIGEoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX12YXIgaT1yKDApLG89aS5BcnJheUJ1ZmZlckNvcHkscz1pLkNyZWF0ZUl0ZXJSZXN1bHRPYmplY3QsbD1pLklzRmluaXRlTm9uTmVnYXRpdmVOdW1iZXIsYz1pLkludm9rZU9yTm9vcCx1PWkuUHJvbWlzZUludm9rZU9yTm9vcCxmPWkuVHJhbnNmZXJBcnJheUJ1ZmZlcixoPWkuVmFsaWRhdGVBbmROb3JtYWxpemVRdWV1aW5nU3RyYXRlZ3ksZD1pLlZhbGlkYXRlQW5kTm9ybWFsaXplSGlnaFdhdGVyTWFyayxwPXIoMCksbT1wLmNyZWF0ZUFycmF5RnJvbUxpc3QsZz1wLmNyZWF0ZURhdGFQcm9wZXJ0eSx2PXAudHlwZUlzT2JqZWN0LHk9cigxKSxiPXkuYXNzZXJ0LHc9eS5yZXRocm93QXNzZXJ0aW9uRXJyb3JSZWplY3Rpb24saz1yKDMpLFM9ay5EZXF1ZXVlVmFsdWUsXz1rLkVucXVldWVWYWx1ZVdpdGhTaXplLHg9ay5SZXNldFF1ZXVlLEE9cigyKSxDPUEuQWNxdWlyZVdyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcixQPUEuSXNXcml0YWJsZVN0cmVhbSxFPUEuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCxUPUEuV3JpdGFibGVTdHJlYW1BYm9ydCxSPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyQ2xvc2VXaXRoRXJyb3JQcm9wYWdhdGlvbixPPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZSxJPUEuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyV3JpdGUsRj1BLldyaXRhYmxlU3RyZWFtQ2xvc2VRdWV1ZWRPckluRmxpZ2h0LEw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHI9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9LG49ci5zaXplLGk9ci5oaWdoV2F0ZXJNYXJrO2EodGhpcyxlKSx0aGlzLl9zdGF0ZT0icmVhZGFibGUiLHRoaXMuX3JlYWRlcj12b2lkIDAsdGhpcy5fc3RvcmVkRXJyb3I9dm9pZCAwLHRoaXMuX2Rpc3R1cmJlZD0hMSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwO3ZhciBvPXQudHlwZSxzPVN0cmluZyhvKTtpZigiYnl0ZXMiPT09cyl2b2lkIDA9PT1pJiYoaT0wKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGRlKHRoaXMsdCxpKTtlbHNle2lmKHZvaWQgMCE9PW8pdGhyb3cgbmV3IFJhbmdlRXJyb3IoIkludmFsaWQgdHlwZSBpcyBzcGVjaWZpZWQiKTt2b2lkIDA9PT1pJiYoaT0xKSx0aGlzLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXI9bmV3IGFlKHRoaXMsdCxuLGkpfX1yZXR1cm4gbihlLFt7a2V5OiJjYW5jZWwiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiExPT09TSh0aGlzKT9Qcm9taXNlLnJlamVjdChSZSgiY2FuY2VsIikpOiEwPT09aih0aGlzKT9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FuY2VsIGEgc3RyZWFtIHRoYXQgYWxyZWFkeSBoYXMgYSByZWFkZXIiKSk6eih0aGlzLGUpfX0se2tleToiZ2V0UmVhZGVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdP2FyZ3VtZW50c1swXTp7fSx0PWUubW9kZTtpZighMT09PU0odGhpcykpdGhyb3cgUmUoImdldFJlYWRlciIpO2lmKHZvaWQgMD09PXQpcmV0dXJuIE4odGhpcyk7aWYoImJ5b2IiPT09KHQ9U3RyaW5nKHQpKSlyZXR1cm4gRCh0aGlzKTt0aHJvdyBuZXcgUmFuZ2VFcnJvcigiSW52YWxpZCBtb2RlIGlzIHNwZWNpZmllZCIpfX0se2tleToicGlwZVRocm91Z2giLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS53cml0YWJsZSxuPWUucmVhZGFibGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3RyeXtQcm9taXNlLnByb3RvdHlwZS50aGVuLmNhbGwoZSx2b2lkIDAsKGZ1bmN0aW9uKCl7fSkpfWNhdGNoKGUpe319KHRoaXMucGlwZVRvKHIsdCkpLG59fSx7a2V5OiJwaXBlVG8iLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbj1yLnByZXZlbnRDbG9zZSxhPXIucHJldmVudEFib3J0LGk9ci5wcmV2ZW50Q2FuY2VsO2lmKCExPT09TSh0aGlzKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QoUmUoInBpcGVUbyIpKTtpZighMT09PVAoZSkpcmV0dXJuIFByb21pc2UucmVqZWN0KG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtLnByb3RvdHlwZS5waXBlVG8ncyBmaXJzdCBhcmd1bWVudCBtdXN0IGJlIGEgV3JpdGFibGVTdHJlYW0iKSk7aWYobj1Cb29sZWFuKG4pLGE9Qm9vbGVhbihhKSxpPUJvb2xlYW4oaSksITA9PT1qKHRoaXMpKXJldHVybiBQcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUucGlwZVRvIGNhbm5vdCBiZSB1c2VkIG9uIGEgbG9ja2VkIFJlYWRhYmxlU3RyZWFtIikpO2lmKCEwPT09RShlKSlyZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW0ucHJvdG90eXBlLnBpcGVUbyBjYW5ub3QgYmUgdXNlZCBvbiBhIGxvY2tlZCBXcml0YWJsZVN0cmVhbSIpKTt2YXIgbz1OKHRoaXMpLHM9QyhlKSxsPSExLGM9UHJvbWlzZS5yZXNvbHZlKCk7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihyLHUpe3ZhciBmLGgsZDtpZihnKHQsby5fY2xvc2VkUHJvbWlzZSwoZnVuY3Rpb24odCl7ITE9PT1hP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIFQoZSx0KX0pLCEwLHQpOnkoITAsdCl9KSksZyhlLHMuX2Nsb3NlZFByb21pc2UsKGZ1bmN0aW9uKGUpeyExPT09aT92KChmdW5jdGlvbigpe3JldHVybiB6KHQsZSl9KSwhMCxlKTp5KCEwLGUpfSkpLGY9dCxoPW8uX2Nsb3NlZFByb21pc2UsZD1mdW5jdGlvbigpeyExPT09bj92KChmdW5jdGlvbigpe3JldHVybiBSKHMpfSkpOnkoKX0sImNsb3NlZCI9PT1mLl9zdGF0ZT9kKCk6aC50aGVuKGQpLmNhdGNoKHcpLCEwPT09RihlKXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSl7dmFyIHA9bmV3IFR5cGVFcnJvcigidGhlIGRlc3RpbmF0aW9uIHdyaXRhYmxlIHN0cmVhbSBjbG9zZWQgYmVmb3JlIGFsbCBkYXRhIGNvdWxkIGJlIHBpcGVkIHRvIGl0Iik7ITE9PT1pP3YoKGZ1bmN0aW9uKCl7cmV0dXJuIHoodCxwKX0pLCEwLHApOnkoITAscCl9ZnVuY3Rpb24gbSgpe3ZhciBlPWM7cmV0dXJuIGMudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gZSE9PWM/bSgpOnZvaWQgMH0pKX1mdW5jdGlvbiBnKGUsdCxyKXsiZXJyb3JlZCI9PT1lLl9zdGF0ZT9yKGUuX3N0b3JlZEVycm9yKTp0LmNhdGNoKHIpLmNhdGNoKHcpfWZ1bmN0aW9uIHYodCxyLG4pe2Z1bmN0aW9uIGEoKXt0KCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYihyLG4pfSksKGZ1bmN0aW9uKGUpe3JldHVybiBiKCEwLGUpfSkpLmNhdGNoKHcpfSEwIT09bCYmKGw9ITAsIndyaXRhYmxlIj09PWUuX3N0YXRlJiYhMT09PUYoZSk/bSgpLnRoZW4oYSk6YSgpKX1mdW5jdGlvbiB5KHQscil7ITAhPT1sJiYobD0hMCwid3JpdGFibGUiPT09ZS5fc3RhdGUmJiExPT09RihlKT9tKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gYih0LHIpfSkpLmNhdGNoKHcpOmIodCxyKSl9ZnVuY3Rpb24gYihlLHQpe08ocykscmUobyksZT91KHQpOnIodm9pZCAwKX0oZnVuY3Rpb24gZSgpe3JldHVybiBjPVByb21pc2UucmVzb2x2ZSgpLCEwPT09bD9Qcm9taXNlLnJlc29sdmUoKTpzLl9yZWFkeVByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmUobykudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9ZS52YWx1ZTshMCE9PWUuZG9uZSYmKGM9SShzLHQpLmNhdGNoKChmdW5jdGlvbigpe30pKSl9KSl9KSkudGhlbihlKX0pKCkuY2F0Y2goKGZ1bmN0aW9uKGUpe2M9UHJvbWlzZS5yZXNvbHZlKCksdyhlKX0pKX0pKX19LHtrZXk6InRlZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PU0odGhpcykpdGhyb3cgUmUoInRlZSIpO3ZhciBlPUIodGhpcywhMSk7cmV0dXJuIG0oZSl9fSx7a2V5OiJsb2NrZWQiLGdldDpmdW5jdGlvbigpe2lmKCExPT09TSh0aGlzKSl0aHJvdyBSZSgibG9ja2VkIik7cmV0dXJuIGoodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gRChlKXtyZXR1cm4gbmV3IFEoZSl9ZnVuY3Rpb24gTihlKXtyZXR1cm4gbmV3IEooZSl9ZnVuY3Rpb24gTShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIiKX1mdW5jdGlvbiBqKGUpe3JldHVybiBiKCEwPT09TShlKSwiSXNSZWFkYWJsZVN0cmVhbUxvY2tlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSx2b2lkIDAhPT1lLl9yZWFkZXJ9ZnVuY3Rpb24gQihlLHQpe2IoITA9PT1NKGUpKSxiKCJib29sZWFuIj09dHlwZW9mIHQpO3ZhciByPU4oZSksbj17Y2xvc2VkT3JFcnJvcmVkOiExLGNhbmNlbGVkMTohMSxjYW5jZWxlZDI6ITEscmVhc29uMTp2b2lkIDAscmVhc29uMjp2b2lkIDB9O24ucHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bi5fcmVzb2x2ZT1lfSkpO3ZhciBhPWZ1bmN0aW9uIGUoKXt2YXIgdD1lLl9icmFuY2gxLHI9ZS5fYnJhbmNoMixuPWUuX3RlZVN0YXRlO3JldHVybiBuZShlLl9yZWFkZXIpLnRoZW4oKGZ1bmN0aW9uKGUpe2IodihlKSk7dmFyIGE9ZS52YWx1ZSxpPWUuZG9uZTtpZihiKCJib29sZWFuIj09dHlwZW9mIGkpLCEwPT09aSYmITE9PT1uLmNsb3NlZE9yRXJyb3JlZCYmKCExPT09bi5jYW5jZWxlZDEmJnNlKHQpLCExPT09bi5jYW5jZWxlZDImJnNlKHIpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKSwhMCE9PW4uY2xvc2VkT3JFcnJvcmVkKXt2YXIgbz1hLHM9YTshMT09PW4uY2FuY2VsZWQxJiZsZSh0LG8pLCExPT09bi5jYW5jZWxlZDImJmxlKHIscyl9fSkpfTthLl9yZWFkZXI9cixhLl90ZWVTdGF0ZT1uLGEuX2Nsb25lRm9yQnJhbmNoMj10O3ZhciBpPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDE9ITAsbi5yZWFzb24xPXQsITA9PT1uLmNhbmNlbGVkMil7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtpLl9zdHJlYW09ZSxpLl90ZWVTdGF0ZT1uO3ZhciBvPWZ1bmN0aW9uIGUodCl7dmFyIHI9ZS5fc3RyZWFtLG49ZS5fdGVlU3RhdGU7aWYobi5jYW5jZWxlZDI9ITAsbi5yZWFzb24yPXQsITA9PT1uLmNhbmNlbGVkMSl7dmFyIGE9eihyLG0oW24ucmVhc29uMSxuLnJlYXNvbjJdKSk7bi5fcmVzb2x2ZShhKX1yZXR1cm4gbi5wcm9taXNlfTtvLl9zdHJlYW09ZSxvLl90ZWVTdGF0ZT1uO3ZhciBzPU9iamVjdC5jcmVhdGUoT2JqZWN0LnByb3RvdHlwZSk7ZyhzLCJwdWxsIixhKSxnKHMsImNhbmNlbCIsaSk7dmFyIGw9bmV3IEwocyksYz1PYmplY3QuY3JlYXRlKE9iamVjdC5wcm90b3R5cGUpO2coYywicHVsbCIsYSksZyhjLCJjYW5jZWwiLG8pO3ZhciB1PW5ldyBMKGMpO3JldHVybiBhLl9icmFuY2gxPWwuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixhLl9icmFuY2gyPXUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcixyLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbihlKXshMCE9PW4uY2xvc2VkT3JFcnJvcmVkJiYoY2UoYS5fYnJhbmNoMSxlKSxjZShhLl9icmFuY2gyLGUpLG4uY2xvc2VkT3JFcnJvcmVkPSEwKX0pKSxbbCx1XX1mdW5jdGlvbiBVKGUpe3JldHVybiBiKCEwPT09WihlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZXx8ImNsb3NlZCI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRJbnRvUmVxdWVzdHMucHVzaChuKX0pKX1mdW5jdGlvbiBxKGUpe3JldHVybiBiKCEwPT09JChlLl9yZWFkZXIpKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSksbmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7dmFyIG49e19yZXNvbHZlOnQsX3JlamVjdDpyfTtlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5wdXNoKG4pfSkpfWZ1bmN0aW9uIHooZSx0KXtyZXR1cm4gZS5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk6ImVycm9yZWQiPT09ZS5fc3RhdGU/UHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpOihXKGUpLGUuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlci5fX2NhbmNlbFN0ZXBzKHQpLnRoZW4oKGZ1bmN0aW9uKCl7fSkpKX1mdW5jdGlvbiBXKGUpe2IoInJlYWRhYmxlIj09PWUuX3N0YXRlKSxlLl9zdGF0ZT0iY2xvc2VkIjt2YXIgdD1lLl9yZWFkZXI7aWYodm9pZCAwIT09dCl7aWYoITA9PT0kKHQpKXtmb3IodmFyIHI9MDtyPHQuX3JlYWRSZXF1ZXN0cy5sZW5ndGg7cisrKSgwLHQuX3JlYWRSZXF1ZXN0c1tyXS5fcmVzb2x2ZSkocyh2b2lkIDAsITApKTt0Ll9yZWFkUmVxdWVzdHM9W119IWZ1bmN0aW9uKGUpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmUodm9pZCAwKSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH0odCl9fWZ1bmN0aW9uIEgoZSx0KXtiKCEwPT09TShlKSwic3RyZWFtIG11c3QgYmUgUmVhZGFibGVTdHJlYW0iKSxiKCJyZWFkYWJsZSI9PT1lLl9zdGF0ZSwic3RhdGUgbXVzdCBiZSByZWFkYWJsZSIpLGUuX3N0YXRlPSJlcnJvcmVkIixlLl9zdG9yZWRFcnJvcj10O3ZhciByPWUuX3JlYWRlcjtpZih2b2lkIDAhPT1yKXtpZighMD09PSQocikpe2Zvcih2YXIgbj0wO248ci5fcmVhZFJlcXVlc3RzLmxlbmd0aDtuKyspci5fcmVhZFJlcXVlc3RzW25dLl9yZWplY3QodCk7ci5fcmVhZFJlcXVlc3RzPVtdfWVsc2V7YihaKHIpLCJyZWFkZXIgbXVzdCBiZSBSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIiKTtmb3IodmFyIGE9MDthPHIuX3JlYWRJbnRvUmVxdWVzdHMubGVuZ3RoO2ErKylyLl9yZWFkSW50b1JlcXVlc3RzW2FdLl9yZWplY3QodCk7ci5fcmVhZEludG9SZXF1ZXN0cz1bXX1GZShyLHQpLHIuX2Nsb3NlZFByb21pc2UuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpfX1mdW5jdGlvbiBHKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkUmVxdWVzdHMubGVuZ3RoPjApLG4uX3JlYWRSZXF1ZXN0cy5zaGlmdCgpLl9yZXNvbHZlKHModCxyKSl9ZnVuY3Rpb24gVihlKXtyZXR1cm4gZS5fcmVhZGVyLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aH1mdW5jdGlvbiBYKGUpe3JldHVybiBlLl9yZWFkZXIuX3JlYWRSZXF1ZXN0cy5sZW5ndGh9ZnVuY3Rpb24gWShlKXt2YXIgdD1lLl9yZWFkZXI7cmV0dXJuIHZvaWQgMCE9PXQmJiExIT09Wih0KX1mdW5jdGlvbiBLKGUpe3ZhciB0PWUuX3JlYWRlcjtyZXR1cm4gdm9pZCAwIT09dCYmITEhPT0kKHQpfWUuZXhwb3J0cz17UmVhZGFibGVTdHJlYW06TCxJc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkOmZ1bmN0aW9uKGUpe3JldHVybiBiKCEwPT09TShlKSwiSXNSZWFkYWJsZVN0cmVhbURpc3R1cmJlZCBzaG91bGQgb25seSBiZSB1c2VkIG9uIGtub3duIHJlYWRhYmxlIHN0cmVhbXMiKSxlLl9kaXN0dXJiZWR9LFJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJDbG9zZTpzZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZTpsZSxSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I6Y2UsUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckdldERlc2lyZWRTaXplOmZlfTt2YXIgSj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09TSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIik7aWYoITA9PT1qKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgc3RyZWFtIGhhcyBhbHJlYWR5IGJlZW4gbG9ja2VkIGZvciBleGNsdXNpdmUgcmVhZGluZyBieSBhbm90aGVyIHJlYWRlciIpO2VlKHRoaXMsdCksdGhpcy5fcmVhZFJlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuITE9PT0kKHRoaXMpP1Byb21pc2UucmVqZWN0KEllKCJjYW5jZWwiKSk6dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSl9fSx7a2V5OiJyZWFkIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiExPT09JCh0aGlzKT9Qcm9taXNlLnJlamVjdChJZSgicmVhZCIpKTp2b2lkIDA9PT10aGlzLl9vd25lclJlYWRhYmxlU3RyZWFtP1Byb21pc2UucmVqZWN0KE9lKCJyZWFkIGZyb20iKSk6bmUodGhpcyl9fSx7a2V5OiJyZWxlYXNlTG9jayIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PSQodGhpcykpdGhyb3cgSWUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZFJlcXVlc3RzLmxlbmd0aD4wKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyaWVkIHRvIHJlbGVhc2UgYSByZWFkZXIgbG9jayB3aGVuIHRoYXQgcmVhZGVyIGhhcyBwZW5kaW5nIHJlYWQoKSBjYWxscyB1bi1zZXR0bGVkIik7cmUodGhpcyl9fX0se2tleToiY2xvc2VkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4hMT09PSQodGhpcyk/UHJvbWlzZS5yZWplY3QoSWUoImNsb3NlZCIpKTp0aGlzLl9jbG9zZWRQcm9taXNlfX1dKSxlfSgpLFE9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2lmKGEodGhpcyxlKSwhTSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbUJZT0JSZWFkZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZighMT09PXBlKHQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcikpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNvbnN0cnVjdCBhIFJlYWRhYmxlU3RyZWFtQllPQlJlYWRlciBmb3IgYSBzdHJlYW0gbm90IGNvbnN0cnVjdGVkIHdpdGggYSBieXRlIHNvdXJjZSIpO2lmKGoodCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhpcyBzdHJlYW0gaGFzIGFscmVhZHkgYmVlbiBsb2NrZWQgZm9yIGV4Y2x1c2l2ZSByZWFkaW5nIGJ5IGFub3RoZXIgcmVhZGVyIik7ZWUodGhpcyx0KSx0aGlzLl9yZWFkSW50b1JlcXVlc3RzPVtdfXJldHVybiBuKGUsW3trZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIFoodGhpcyk/dm9pZCAwPT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbT9Qcm9taXNlLnJlamVjdChPZSgiY2FuY2VsIikpOnRlKHRoaXMsZSk6UHJvbWlzZS5yZWplY3QoTGUoImNhbmNlbCIpKX19LHtrZXk6InJlYWQiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBaKHRoaXMpP3ZvaWQgMD09PXRoaXMuX293bmVyUmVhZGFibGVTdHJlYW0/UHJvbWlzZS5yZWplY3QoT2UoInJlYWQgZnJvbSIpKTpBcnJheUJ1ZmZlci5pc1ZpZXcoZSk/MD09PWUuYnl0ZUxlbmd0aD9Qcm9taXNlLnJlamVjdChuZXcgVHlwZUVycm9yKCJ2aWV3IG11c3QgaGF2ZSBub24temVybyBieXRlTGVuZ3RoIikpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fb3duZXJSZWFkYWJsZVN0cmVhbTtyZXR1cm4gYih2b2lkIDAhPT1yKSxyLl9kaXN0dXJiZWQ9ITAsImVycm9yZWQiPT09ci5fc3RhdGU/UHJvbWlzZS5yZWplY3Qoci5fc3RvcmVkRXJyb3IpOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLG49MTt0LmNvbnN0cnVjdG9yIT09RGF0YVZpZXcmJihuPXQuY29uc3RydWN0b3IuQllURVNfUEVSX0VMRU1FTlQpO3ZhciBhPXQuY29uc3RydWN0b3IsaT17YnVmZmVyOnQuYnVmZmVyLGJ5dGVPZmZzZXQ6dC5ieXRlT2Zmc2V0LGJ5dGVMZW5ndGg6dC5ieXRlTGVuZ3RoLGJ5dGVzRmlsbGVkOjAsZWxlbWVudFNpemU6bixjdG9yOmEscmVhZGVyVHlwZToiYnlvYiJ9O2lmKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApcmV0dXJuIGkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKSxVKHIpO2lmKCJjbG9zZWQiPT09ci5fc3RhdGUpe3ZhciBvPW5ldyB0LmNvbnN0cnVjdG9yKGkuYnVmZmVyLGkuYnl0ZU9mZnNldCwwKTtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKHMobywhMCkpfWlmKGUuX3F1ZXVlVG90YWxTaXplPjApe2lmKCEwPT09a2UoZSxpKSl7dmFyIGw9YmUoaSk7cmV0dXJuIF9lKGUpLFByb21pc2UucmVzb2x2ZShzKGwsITEpKX1pZighMD09PWUuX2Nsb3NlUmVxdWVzdGVkKXt2YXIgYz1uZXcgVHlwZUVycm9yKCJJbnN1ZmZpY2llbnQgYnl0ZXMgdG8gZmlsbCBlbGVtZW50cyBpbiB0aGUgZ2l2ZW4gYnVmZmVyIik7cmV0dXJuIEVlKGUsYyksUHJvbWlzZS5yZWplY3QoYyl9fWkuYnVmZmVyPWYoaS5idWZmZXIpLGUuX3BlbmRpbmdQdWxsSW50b3MucHVzaChpKTt2YXIgdT1VKHIpO3JldHVybiBnZShlKSx1fShyLl9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIsdCl9KHRoaXMsZSk6UHJvbWlzZS5yZWplY3QobmV3IFR5cGVFcnJvcigidmlldyBtdXN0IGJlIGFuIGFycmF5IGJ1ZmZlciB2aWV3IikpOlByb21pc2UucmVqZWN0KExlKCJyZWFkIikpfX0se2tleToicmVsZWFzZUxvY2siLHZhbHVlOmZ1bmN0aW9uKCl7aWYoIVoodGhpcykpdGhyb3cgTGUoInJlbGVhc2VMb2NrIik7aWYodm9pZCAwIT09dGhpcy5fb3duZXJSZWFkYWJsZVN0cmVhbSl7aWYodGhpcy5fcmVhZEludG9SZXF1ZXN0cy5sZW5ndGg+MCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmllZCB0byByZWxlYXNlIGEgcmVhZGVyIGxvY2sgd2hlbiB0aGF0IHJlYWRlciBoYXMgcGVuZGluZyByZWFkKCkgY2FsbHMgdW4tc2V0dGxlZCIpO3JlKHRoaXMpfX19LHtrZXk6ImNsb3NlZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIFoodGhpcyk/dGhpcy5fY2xvc2VkUHJvbWlzZTpQcm9taXNlLnJlamVjdChMZSgiY2xvc2VkIikpfX1dKSxlfSgpO2Z1bmN0aW9uIFooZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZEludG9SZXF1ZXN0cyIpfWZ1bmN0aW9uICQoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfcmVhZFJlcXVlc3RzIil9ZnVuY3Rpb24gZWUoZSx0KXtlLl9vd25lclJlYWRhYmxlU3RyZWFtPXQsdC5fcmVhZGVyPWUsInJlYWRhYmxlIj09PXQuX3N0YXRlP2Z1bmN0aW9uKGUpe2UuX2Nsb3NlZFByb21pc2U9bmV3IFByb21pc2UoKGZ1bmN0aW9uKHQscil7ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlPXQsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9cn0pKX0oZSk6ImNsb3NlZCI9PT10Ll9zdGF0ZT9mdW5jdGlvbihlKXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVzb2x2ZSh2b2lkIDApLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlKTooYigiZXJyb3JlZCI9PT10Ll9zdGF0ZSwic3RhdGUgbXVzdCBiZSBlcnJvcmVkIiksZnVuY3Rpb24oZSx0KXtlLl9jbG9zZWRQcm9taXNlPVByb21pc2UucmVqZWN0KHQpLGUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZT12b2lkIDAsZS5fY2xvc2VkUHJvbWlzZV9yZWplY3Q9dm9pZCAwfShlLHQuX3N0b3JlZEVycm9yKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSl9ZnVuY3Rpb24gdGUoZSx0KXt2YXIgcj1lLl9vd25lclJlYWRhYmxlU3RyZWFtO3JldHVybiBiKHZvaWQgMCE9PXIpLHoocix0KX1mdW5jdGlvbiByZShlKXtiKHZvaWQgMCE9PWUuX293bmVyUmVhZGFibGVTdHJlYW0pLGIoZS5fb3duZXJSZWFkYWJsZVN0cmVhbS5fcmVhZGVyPT09ZSksInJlYWRhYmxlIj09PWUuX293bmVyUmVhZGFibGVTdHJlYW0uX3N0YXRlP0ZlKGUsbmV3IFR5cGVFcnJvcigiUmVhZGVyIHdhcyByZWxlYXNlZCBhbmQgY2FuIG5vIGxvbmdlciBiZSB1c2VkIHRvIG1vbml0b3IgdGhlIHN0cmVhbSdzIGNsb3NlZG5lc3MiKSk6ZnVuY3Rpb24oZSx0KXtiKHZvaWQgMD09PWUuX2Nsb3NlZFByb21pc2VfcmVzb2x2ZSksYih2b2lkIDA9PT1lLl9jbG9zZWRQcm9taXNlX3JlamVjdCksZS5fY2xvc2VkUHJvbWlzZT1Qcm9taXNlLnJlamVjdCh0KX0oZSxuZXcgVHlwZUVycm9yKCJSZWFkZXIgd2FzIHJlbGVhc2VkIGFuZCBjYW4gbm8gbG9uZ2VyIGJlIHVzZWQgdG8gbW9uaXRvciB0aGUgc3RyZWFtJ3MgY2xvc2VkbmVzcyIpKSxlLl9jbG9zZWRQcm9taXNlLmNhdGNoKChmdW5jdGlvbigpe30pKSxlLl9vd25lclJlYWRhYmxlU3RyZWFtLl9yZWFkZXI9dm9pZCAwLGUuX293bmVyUmVhZGFibGVTdHJlYW09dm9pZCAwfWZ1bmN0aW9uIG5lKGUpe3ZhciB0PWUuX293bmVyUmVhZGFibGVTdHJlYW07cmV0dXJuIGIodm9pZCAwIT09dCksdC5fZGlzdHVyYmVkPSEwLCJjbG9zZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZXNvbHZlKHModm9pZCAwLCEwKSk6ImVycm9yZWQiPT09dC5fc3RhdGU/UHJvbWlzZS5yZWplY3QodC5fc3RvcmVkRXJyb3IpOihiKCJyZWFkYWJsZSI9PT10Ll9zdGF0ZSksdC5fcmVhZGFibGVTdHJlYW1Db250cm9sbGVyLl9fcHVsbFN0ZXBzKCkpfXZhciBhZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4saSl7aWYoYSh0aGlzLGUpLCExPT09TSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGNhbiBvbmx5IGJlIGNvbnN0cnVjdGVkIHdpdGggYSBSZWFkYWJsZVN0cmVhbSBpbnN0YW5jZSIpO2lmKHZvaWQgMCE9PXQuX3JlYWRhYmxlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIGluc3RhbmNlcyBjYW4gb25seSBiZSBjcmVhdGVkIGJ5IHRoZSBSZWFkYWJsZVN0cmVhbSBjb25zdHJ1Y3RvciIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdTb3VyY2U9cix0aGlzLl9xdWV1ZT12b2lkIDAsdGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9jbG9zZVJlcXVlc3RlZD0hMSx0aGlzLl9wdWxsQWdhaW49ITEsdGhpcy5fcHVsbGluZz0hMTt2YXIgbz1oKG4saSk7dGhpcy5fc3RyYXRlZ3lTaXplPW8uc2l6ZSx0aGlzLl9zdHJhdGVneUhXTT1vLmhpZ2hXYXRlck1hcms7dmFyIHM9dGhpcyxsPWMociwic3RhcnQiLFt0aGlzXSk7UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4oKGZ1bmN0aW9uKCl7cy5fc3RhcnRlZD0hMCxiKCExPT09cy5fcHVsbGluZyksYighMT09PXMuX3B1bGxBZ2Fpbiksb2Uocyl9KSwoZnVuY3Rpb24oZSl7dWUocyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTtzZSh0aGlzKX19LHtrZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09aWUodGhpcykpdGhyb3cgRGUoImVucXVldWUiKTtpZighMD09PXRoaXMuX2Nsb3NlUmVxdWVzdGVkKXRocm93IG5ldyBUeXBlRXJyb3IoInN0cmVhbSBpcyBjbG9zZWQgb3IgZHJhaW5pbmciKTt2YXIgdD10aGlzLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlO2lmKCJyZWFkYWJsZSIhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlRoZSBzdHJlYW0gKGluICIrdCsiIHN0YXRlKSBpcyBub3QgaW4gdGhlIHJlYWRhYmxlIHN0YXRlIGFuZCBjYW5ub3QgYmUgZW5xdWV1ZWQgdG8iKTtyZXR1cm4gbGUodGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7Y2UodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ1NvdXJjZSwiY2FuY2VsIixbZV0pfX0se2tleToiX19wdWxsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKHRoaXMuX3F1ZXVlLmxlbmd0aD4wKXt2YXIgdD1TKHRoaXMpO3JldHVybiEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQmJjA9PT10aGlzLl9xdWV1ZS5sZW5ndGg/VyhlKTpvZSh0aGlzKSxQcm9taXNlLnJlc29sdmUocyh0LCExKSl9dmFyIHI9cShlKTtyZXR1cm4gb2UodGhpcykscn19LHtrZXk6ImRlc2lyZWRTaXplIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PWllKHRoaXMpKXRocm93IERlKCJkZXNpcmVkU2l6ZSIpO3JldHVybiBmZSh0aGlzKX19XSksZX0oKTtmdW5jdGlvbiBpZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl91bmRlcmx5aW5nU291cmNlIil9ZnVuY3Rpb24gb2UoZSl7ITEhPT1mdW5jdGlvbihlKXt2YXIgdD1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07cmV0dXJuImNsb3NlZCIhPT10Ll9zdGF0ZSYmImVycm9yZWQiIT09dC5fc3RhdGUmJighMCE9PWUuX2Nsb3NlUmVxdWVzdGVkJiYoITEhPT1lLl9zdGFydGVkJiYoITA9PT1qKHQpJiZYKHQpPjB8fGZlKGUpPjApKSl9KGUpJiYoITAhPT1lLl9wdWxsaW5nPyhiKCExPT09ZS5fcHVsbEFnYWluKSxlLl9wdWxsaW5nPSEwLHUoZS5fdW5kZXJseWluZ1NvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2lmKGUuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4pcmV0dXJuIGUuX3B1bGxBZ2Fpbj0hMSxvZShlKX0pLChmdW5jdGlvbih0KXt1ZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHNlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtiKCExPT09ZS5fY2xvc2VSZXF1ZXN0ZWQpLGIoInJlYWRhYmxlIj09PXQuX3N0YXRlKSxlLl9jbG9zZVJlcXVlc3RlZD0hMCwwPT09ZS5fcXVldWUubGVuZ3RoJiZXKHQpfWZ1bmN0aW9uIGxlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpLCEwPT09aihyKSYmWChyKT4wKUcocix0LCExKTtlbHNle3ZhciBuPTE7aWYodm9pZCAwIT09ZS5fc3RyYXRlZ3lTaXplKXt2YXIgYT1lLl9zdHJhdGVneVNpemU7dHJ5e249YSh0KX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fXRyeXtfKGUsdCxuKX1jYXRjaCh0KXt0aHJvdyB1ZShlLHQpLHR9fW9lKGUpfWZ1bmN0aW9uIGNlKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoInJlYWRhYmxlIj09PXIuX3N0YXRlKSx4KGUpLEgocix0KX1mdW5jdGlvbiB1ZShlLHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZjZShlLHQpfWZ1bmN0aW9uIGZlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfXZhciBoZT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXI9dCx0aGlzLl92aWV3PXJ9cmV0dXJuIG4oZSxbe2tleToicmVzcG9uZCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1tZSh0aGlzKSl0aHJvdyBOZSgicmVzcG9uZCIpO2lmKHZvaWQgMD09PXRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyKXRocm93IG5ldyBUeXBlRXJyb3IoIlRoaXMgQllPQiByZXF1ZXN0IGhhcyBiZWVuIGludmFsaWRhdGVkIik7IWZ1bmN0aW9uKGUsdCl7aWYodD1OdW1iZXIodCksITE9PT1sKHQpKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gbXVzdCBiZSBhIGZpbml0ZSIpO2IoZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCksQ2UoZSx0KX0odGhpcy5fYXNzb2NpYXRlZFJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIsZSl9fSx7a2V5OiJyZXNwb25kV2l0aE5ld1ZpZXciLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09bWUodGhpcykpdGhyb3cgTmUoInJlc3BvbmQiKTtpZih2b2lkIDA9PT10aGlzLl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUaGlzIEJZT0IgcmVxdWVzdCBoYXMgYmVlbiBpbnZhbGlkYXRlZCIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IHJlc3BvbmQgd2l0aCBhcnJheSBidWZmZXIgdmlld3MiKTshZnVuY3Rpb24oZSx0KXtiKGUuX3BlbmRpbmdQdWxsSW50b3MubGVuZ3RoPjApO3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF07aWYoci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQhPT10LmJ5dGVPZmZzZXQpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSByZWdpb24gc3BlY2lmaWVkIGJ5IHZpZXcgZG9lcyBub3QgbWF0Y2ggYnlvYlJlcXVlc3QiKTtpZihyLmJ5dGVMZW5ndGghPT10LmJ5dGVMZW5ndGgpdGhyb3cgbmV3IFJhbmdlRXJyb3IoIlRoZSBidWZmZXIgb2YgdmlldyBoYXMgZGlmZmVyZW50IGNhcGFjaXR5IHRoYW4gYnlvYlJlcXVlc3QiKTtyLmJ1ZmZlcj10LmJ1ZmZlcixDZShlLHQuYnl0ZUxlbmd0aCl9KHRoaXMuX2Fzc29jaWF0ZWRSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyLGUpfX0se2tleToidmlldyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3ZpZXd9fV0pLGV9KCksZGU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscixuKXtpZihhKHRoaXMsZSksITE9PT1NKHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIgY2FuIG9ubHkgYmUgY29uc3RydWN0ZWQgd2l0aCBhIFJlYWRhYmxlU3RyZWFtIGluc3RhbmNlIGdpdmVuIGEgYnl0ZSBzb3VyY2UiKTtpZih2b2lkIDAhPT10Ll9yZWFkYWJsZVN0cmVhbUNvbnRyb2xsZXIpdGhyb3cgbmV3IFR5cGVFcnJvcigiUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgUmVhZGFibGVTdHJlYW0gY29uc3RydWN0b3IgZ2l2ZW4gYSBieXRlIHNvdXJjZSIpO3RoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbT10LHRoaXMuX3VuZGVybHlpbmdCeXRlU291cmNlPXIsdGhpcy5fcHVsbEFnYWluPSExLHRoaXMuX3B1bGxpbmc9ITEsdmUodGhpcyksdGhpcy5fcXVldWU9dGhpcy5fcXVldWVUb3RhbFNpemU9dm9pZCAwLHgodGhpcyksdGhpcy5fY2xvc2VSZXF1ZXN0ZWQ9ITEsdGhpcy5fc3RhcnRlZD0hMSx0aGlzLl9zdHJhdGVneUhXTT1kKG4pO3ZhciBpPXIuYXV0b0FsbG9jYXRlQ2h1bmtTaXplO2lmKHZvaWQgMCE9PWkmJighMT09PU51bWJlci5pc0ludGVnZXIoaSl8fGk8PTApKXRocm93IG5ldyBSYW5nZUVycm9yKCJhdXRvQWxsb2NhdGVDaHVua1NpemUgbXVzdCBiZSBhIHBvc2l0aXZlIGludGVnZXIiKTt0aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU9aSx0aGlzLl9wZW5kaW5nUHVsbEludG9zPVtdO3ZhciBvPXRoaXMscz1jKHIsInN0YXJ0IixbdGhpc10pO1Byb21pc2UucmVzb2x2ZShzKS50aGVuKChmdW5jdGlvbigpe28uX3N0YXJ0ZWQ9ITAsYighMT09PW8uX3B1bGxpbmcpLGIoITE9PT1vLl9wdWxsQWdhaW4pLGdlKG8pfSksKGZ1bmN0aW9uKGUpeyJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmRWUobyxlKX0pKS5jYXRjaCh3KX1yZXR1cm4gbihlLFt7a2V5OiJjbG9zZSIsdmFsdWU6ZnVuY3Rpb24oKXtpZighMT09PXBlKHRoaXMpKXRocm93IE1lKCJjbG9zZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBoYXMgYWxyZWFkeSBiZWVuIGNsb3NlZDsgZG8gbm90IGNsb3NlIGl0IGFnYWluISIpO3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PWUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIitlKyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBjbG9zZWQiKTshZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2lmKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09dC5fc3RhdGUpLGUuX3F1ZXVlVG90YWxTaXplPjApZS5fY2xvc2VSZXF1ZXN0ZWQ9ITA7ZWxzZXtpZihlLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiZlLl9wZW5kaW5nUHVsbEludG9zWzBdLmJ5dGVzRmlsbGVkPjApe3ZhciByPW5ldyBUeXBlRXJyb3IoIkluc3VmZmljaWVudCBieXRlcyB0byBmaWxsIGVsZW1lbnRzIGluIHRoZSBnaXZlbiBidWZmZXIiKTt0aHJvdyBFZShlLHIpLHJ9Vyh0KX19KHRoaXMpfX0se2tleToiZW5xdWV1ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiZW5xdWV1ZSIpO2lmKCEwPT09dGhpcy5fY2xvc2VSZXF1ZXN0ZWQpdGhyb3cgbmV3IFR5cGVFcnJvcigic3RyZWFtIGlzIGNsb3NlZCBvciBkcmFpbmluZyIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7aWYoInJlYWRhYmxlIiE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSAoaW4gIit0KyIgc3RhdGUpIGlzIG5vdCBpbiB0aGUgcmVhZGFibGUgc3RhdGUgYW5kIGNhbm5vdCBiZSBlbnF1ZXVlZCB0byIpO2lmKCFBcnJheUJ1ZmZlci5pc1ZpZXcoZSkpdGhyb3cgbmV3IFR5cGVFcnJvcigiWW91IGNhbiBvbmx5IGVucXVldWUgYXJyYXkgYnVmZmVyIHZpZXdzIHdoZW4gdXNpbmcgYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIik7IWZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO2IoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCksYigicmVhZGFibGUiPT09ci5fc3RhdGUpO3ZhciBuPXQuYnVmZmVyLGE9dC5ieXRlT2Zmc2V0LGk9dC5ieXRlTGVuZ3RoLG89ZihuKTtpZighMD09PUsocikpaWYoMD09PVgocikpd2UoZSxvLGEsaSk7ZWxzZXtiKDA9PT1lLl9xdWV1ZS5sZW5ndGgpO3ZhciBzPW5ldyBVaW50OEFycmF5KG8sYSxpKTtHKHIscywhMSl9ZWxzZSEwPT09WShyKT8od2UoZSxvLGEsaSksQWUoZSkpOihiKCExPT09aihyKSwic3RyZWFtIG11c3Qgbm90IGJlIGxvY2tlZCIpLHdlKGUsbyxhLGkpKX0odGhpcyxlKX19LHtrZXk6ImVycm9yIix2YWx1ZTpmdW5jdGlvbihlKXtpZighMT09PXBlKHRoaXMpKXRocm93IE1lKCJlcnJvciIpO3ZhciB0PXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZigicmVhZGFibGUiIT09dC5fc3RhdGUpdGhyb3cgbmV3IFR5cGVFcnJvcigiVGhlIHN0cmVhbSBpcyAiK3QuX3N0YXRlKyIgYW5kIHNvIGNhbm5vdCBiZSBlcnJvcmVkIik7RWUodGhpcyxlKX19LHtrZXk6Il9fY2FuY2VsU3RlcHMiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aD4wJiYodGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXS5ieXRlc0ZpbGxlZD0wKSx4KHRoaXMpLHUodGhpcy5fdW5kZXJseWluZ0J5dGVTb3VyY2UsImNhbmNlbCIsW2VdKX19LHtrZXk6Il9fcHVsbFN0ZXBzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZihiKCEwPT09SyhlKSksdGhpcy5fcXVldWVUb3RhbFNpemU+MCl7YigwPT09WChlKSk7dmFyIHQ9dGhpcy5fcXVldWUuc2hpZnQoKTt0aGlzLl9xdWV1ZVRvdGFsU2l6ZS09dC5ieXRlTGVuZ3RoLF9lKHRoaXMpO3ZhciByPXZvaWQgMDt0cnl7cj1uZXcgVWludDhBcnJheSh0LmJ1ZmZlcix0LmJ5dGVPZmZzZXQsdC5ieXRlTGVuZ3RoKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIFByb21pc2UucmVzb2x2ZShzKHIsITEpKX12YXIgbj10aGlzLl9hdXRvQWxsb2NhdGVDaHVua1NpemU7aWYodm9pZCAwIT09bil7dmFyIGE9dm9pZCAwO3RyeXthPW5ldyBBcnJheUJ1ZmZlcihuKX1jYXRjaChlKXtyZXR1cm4gUHJvbWlzZS5yZWplY3QoZSl9dmFyIGk9e2J1ZmZlcjphLGJ5dGVPZmZzZXQ6MCxieXRlTGVuZ3RoOm4sYnl0ZXNGaWxsZWQ6MCxlbGVtZW50U2l6ZToxLGN0b3I6VWludDhBcnJheSxyZWFkZXJUeXBlOiJkZWZhdWx0In07dGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5wdXNoKGkpfXZhciBvPXEoZSk7cmV0dXJuIGdlKHRoaXMpLG99fSx7a2V5OiJieW9iUmVxdWVzdCIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiYnlvYlJlcXVlc3QiKTtpZih2b2lkIDA9PT10aGlzLl9ieW9iUmVxdWVzdCYmdGhpcy5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MCl7dmFyIGU9dGhpcy5fcGVuZGluZ1B1bGxJbnRvc1swXSx0PW5ldyBVaW50OEFycmF5KGUuYnVmZmVyLGUuYnl0ZU9mZnNldCtlLmJ5dGVzRmlsbGVkLGUuYnl0ZUxlbmd0aC1lLmJ5dGVzRmlsbGVkKTt0aGlzLl9ieW9iUmVxdWVzdD1uZXcgaGUodGhpcyx0KX1yZXR1cm4gdGhpcy5fYnlvYlJlcXVlc3R9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1wZSh0aGlzKSl0aHJvdyBNZSgiZGVzaXJlZFNpemUiKTtyZXR1cm4gVGUodGhpcyl9fV0pLGV9KCk7ZnVuY3Rpb24gcGUoZSl7cmV0dXJuISF2KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdW5kZXJseWluZ0J5dGVTb3VyY2UiKX1mdW5jdGlvbiBtZShlKXtyZXR1cm4hIXYoZSkmJiEhT2JqZWN0LnByb3RvdHlwZS5oYXNPd25Qcm9wZXJ0eS5jYWxsKGUsIl9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlciIpfWZ1bmN0aW9uIGdlKGUpeyExIT09ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtO3JldHVybiJyZWFkYWJsZSI9PT10Ll9zdGF0ZSYmKCEwIT09ZS5fY2xvc2VSZXF1ZXN0ZWQmJighMSE9PWUuX3N0YXJ0ZWQmJighMD09PUsodCkmJlgodCk+MHx8KCEwPT09WSh0KSYmVih0KT4wfHxUZShlKT4wKSkpKX0oZSkmJighMCE9PWUuX3B1bGxpbmc/KGIoITE9PT1lLl9wdWxsQWdhaW4pLGUuX3B1bGxpbmc9ITAsdShlLl91bmRlcmx5aW5nQnl0ZVNvdXJjZSwicHVsbCIsW2VdKS50aGVuKChmdW5jdGlvbigpe2UuX3B1bGxpbmc9ITEsITA9PT1lLl9wdWxsQWdhaW4mJihlLl9wdWxsQWdhaW49ITEsZ2UoZSkpfSksKGZ1bmN0aW9uKHQpeyJyZWFkYWJsZSI9PT1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0uX3N0YXRlJiZFZShlLHQpfSkpLmNhdGNoKHcpKTplLl9wdWxsQWdhaW49ITApfWZ1bmN0aW9uIHZlKGUpe3hlKGUpLGUuX3BlbmRpbmdQdWxsSW50b3M9W119ZnVuY3Rpb24geWUoZSx0KXtiKCJlcnJvcmVkIiE9PWUuX3N0YXRlLCJzdGF0ZSBtdXN0IG5vdCBiZSBlcnJvcmVkIik7dmFyIHI9ITE7ImNsb3NlZCI9PT1lLl9zdGF0ZSYmKGIoMD09PXQuYnl0ZXNGaWxsZWQpLHI9ITApO3ZhciBuPWJlKHQpOyJkZWZhdWx0Ij09PXQucmVhZGVyVHlwZT9HKGUsbixyKTooYigiYnlvYiI9PT10LnJlYWRlclR5cGUpLGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLl9yZWFkZXI7YihuLl9yZWFkSW50b1JlcXVlc3RzLmxlbmd0aD4wKSxuLl9yZWFkSW50b1JlcXVlc3RzLnNoaWZ0KCkuX3Jlc29sdmUocyh0LHIpKX0oZSxuLHIpKX1mdW5jdGlvbiBiZShlKXt2YXIgdD1lLmJ5dGVzRmlsbGVkLHI9ZS5lbGVtZW50U2l6ZTtyZXR1cm4gYih0PD1lLmJ5dGVMZW5ndGgpLGIodCVyPT0wKSxuZXcgZS5jdG9yKGUuYnVmZmVyLGUuYnl0ZU9mZnNldCx0L3IpfWZ1bmN0aW9uIHdlKGUsdCxyLG4pe2UuX3F1ZXVlLnB1c2goe2J1ZmZlcjp0LGJ5dGVPZmZzZXQ6cixieXRlTGVuZ3RoOm59KSxlLl9xdWV1ZVRvdGFsU2l6ZSs9bn1mdW5jdGlvbiBrZShlLHQpe3ZhciByPXQuZWxlbWVudFNpemUsbj10LmJ5dGVzRmlsbGVkLXQuYnl0ZXNGaWxsZWQlcixhPU1hdGgubWluKGUuX3F1ZXVlVG90YWxTaXplLHQuYnl0ZUxlbmd0aC10LmJ5dGVzRmlsbGVkKSxpPXQuYnl0ZXNGaWxsZWQrYSxzPWktaSVyLGw9YSxjPSExO3M+biYmKGw9cy10LmJ5dGVzRmlsbGVkLGM9ITApO2Zvcih2YXIgdT1lLl9xdWV1ZTtsPjA7KXt2YXIgZj11WzBdLGg9TWF0aC5taW4obCxmLmJ5dGVMZW5ndGgpLGQ9dC5ieXRlT2Zmc2V0K3QuYnl0ZXNGaWxsZWQ7byh0LmJ1ZmZlcixkLGYuYnVmZmVyLGYuYnl0ZU9mZnNldCxoKSxmLmJ5dGVMZW5ndGg9PT1oP3Uuc2hpZnQoKTooZi5ieXRlT2Zmc2V0Kz1oLGYuYnl0ZUxlbmd0aC09aCksZS5fcXVldWVUb3RhbFNpemUtPWgsU2UoZSxoLHQpLGwtPWh9cmV0dXJuITE9PT1jJiYoYigwPT09ZS5fcXVldWVUb3RhbFNpemUsInF1ZXVlIG11c3QgYmUgZW1wdHkiKSxiKHQuYnl0ZXNGaWxsZWQ+MCksYih0LmJ5dGVzRmlsbGVkPHQuZWxlbWVudFNpemUpKSxjfWZ1bmN0aW9uIFNlKGUsdCxyKXtiKDA9PT1lLl9wZW5kaW5nUHVsbEludG9zLmxlbmd0aHx8ZS5fcGVuZGluZ1B1bGxJbnRvc1swXT09PXIpLHhlKGUpLHIuYnl0ZXNGaWxsZWQrPXR9ZnVuY3Rpb24gX2UoZSl7YigicmVhZGFibGUiPT09ZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtLl9zdGF0ZSksMD09PWUuX3F1ZXVlVG90YWxTaXplJiYhMD09PWUuX2Nsb3NlUmVxdWVzdGVkP1coZS5fY29udHJvbGxlZFJlYWRhYmxlU3RyZWFtKTpnZShlKX1mdW5jdGlvbiB4ZShlKXt2b2lkIDAhPT1lLl9ieW9iUmVxdWVzdCYmKGUuX2J5b2JSZXF1ZXN0Ll9hc3NvY2lhdGVkUmVhZGFibGVCeXRlU3RyZWFtQ29udHJvbGxlcj12b2lkIDAsZS5fYnlvYlJlcXVlc3QuX3ZpZXc9dm9pZCAwLGUuX2J5b2JSZXF1ZXN0PXZvaWQgMCl9ZnVuY3Rpb24gQWUoZSl7Zm9yKGIoITE9PT1lLl9jbG9zZVJlcXVlc3RlZCk7ZS5fcGVuZGluZ1B1bGxJbnRvcy5sZW5ndGg+MDspe2lmKDA9PT1lLl9xdWV1ZVRvdGFsU2l6ZSlyZXR1cm47dmFyIHQ9ZS5fcGVuZGluZ1B1bGxJbnRvc1swXTshMD09PWtlKGUsdCkmJihQZShlKSx5ZShlLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW0sdCkpfX1mdW5jdGlvbiBDZShlLHQpe3ZhciByPWUuX3BlbmRpbmdQdWxsSW50b3NbMF0sbj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07aWYoImNsb3NlZCI9PT1uLl9zdGF0ZSl7aWYoMCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiYnl0ZXNXcml0dGVuIG11c3QgYmUgMCB3aGVuIGNhbGxpbmcgcmVzcG9uZCgpIG9uIGEgY2xvc2VkIHN0cmVhbSIpOyFmdW5jdGlvbihlLHQpe3QuYnVmZmVyPWYodC5idWZmZXIpLGIoMD09PXQuYnl0ZXNGaWxsZWQsImJ5dGVzRmlsbGVkIG11c3QgYmUgMCIpO3ZhciByPWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbTtpZighMD09PVkocikpZm9yKDtWKHIpPjA7KXllKHIsUGUoZSkpfShlLHIpfWVsc2UgYigicmVhZGFibGUiPT09bi5fc3RhdGUpLGZ1bmN0aW9uKGUsdCxyKXtpZihyLmJ5dGVzRmlsbGVkK3Q+ci5ieXRlTGVuZ3RoKXRocm93IG5ldyBSYW5nZUVycm9yKCJieXRlc1dyaXR0ZW4gb3V0IG9mIHJhbmdlIik7aWYoU2UoZSx0LHIpLCEoci5ieXRlc0ZpbGxlZDxyLmVsZW1lbnRTaXplKSl7UGUoZSk7dmFyIG49ci5ieXRlc0ZpbGxlZCVyLmVsZW1lbnRTaXplO2lmKG4+MCl7dmFyIGE9ci5ieXRlT2Zmc2V0K3IuYnl0ZXNGaWxsZWQsaT1yLmJ1ZmZlci5zbGljZShhLW4sYSk7d2UoZSxpLDAsaS5ieXRlTGVuZ3RoKX1yLmJ1ZmZlcj1mKHIuYnVmZmVyKSxyLmJ5dGVzRmlsbGVkLT1uLHllKGUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbSxyKSxBZShlKX19KGUsdCxyKX1mdW5jdGlvbiBQZShlKXt2YXIgdD1lLl9wZW5kaW5nUHVsbEludG9zLnNoaWZ0KCk7cmV0dXJuIHhlKGUpLHR9ZnVuY3Rpb24gRWUoZSx0KXt2YXIgcj1lLl9jb250cm9sbGVkUmVhZGFibGVTdHJlYW07YigicmVhZGFibGUiPT09ci5fc3RhdGUpLHZlKGUpLHgoZSksSChyLHQpfWZ1bmN0aW9uIFRlKGUpe3ZhciB0PWUuX2NvbnRyb2xsZWRSZWFkYWJsZVN0cmVhbS5fc3RhdGU7cmV0dXJuImVycm9yZWQiPT09dD9udWxsOiJjbG9zZWQiPT09dD8wOmUuX3N0cmF0ZWd5SFdNLWUuX3F1ZXVlVG90YWxTaXplfWZ1bmN0aW9uIFJlKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbS5wcm90b3R5cGUuIitlKyIgY2FuIG9ubHkgYmUgdXNlZCBvbiBhIFJlYWRhYmxlU3RyZWFtIil9ZnVuY3Rpb24gT2UoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIkNhbm5vdCAiK2UrIiBhIHN0cmVhbSB1c2luZyBhIHJlbGVhc2VkIHJlYWRlciIpfWZ1bmN0aW9uIEllKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRSZWFkZXIiKX1mdW5jdGlvbiBGZShlLHQpe2Iodm9pZCAwIT09ZS5fY2xvc2VkUHJvbWlzZV9yZXNvbHZlKSxiKHZvaWQgMCE9PWUuX2Nsb3NlZFByb21pc2VfcmVqZWN0KSxlLl9jbG9zZWRQcm9taXNlX3JlamVjdCh0KSxlLl9jbG9zZWRQcm9taXNlX3Jlc29sdmU9dm9pZCAwLGUuX2Nsb3NlZFByb21pc2VfcmVqZWN0PXZvaWQgMH1mdW5jdGlvbiBMZShlKXtyZXR1cm4gbmV3IFR5cGVFcnJvcigiUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgUmVhZGFibGVTdHJlYW1CWU9CUmVhZGVyIil9ZnVuY3Rpb24gRGUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyIil9ZnVuY3Rpb24gTmUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlU3RyZWFtQllPQlJlcXVlc3QucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZVN0cmVhbUJZT0JSZXF1ZXN0Iil9ZnVuY3Rpb24gTWUoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlQnl0ZVN0cmVhbUNvbnRyb2xsZXIucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBSZWFkYWJsZUJ5dGVTdHJlYW1Db250cm9sbGVyIil9fSxmdW5jdGlvbihlLHQscil7dmFyIG49cig2KSxhPXIoNCksaT1yKDIpO3QuVHJhbnNmb3JtU3RyZWFtPW4uVHJhbnNmb3JtU3RyZWFtLHQuUmVhZGFibGVTdHJlYW09YS5SZWFkYWJsZVN0cmVhbSx0LklzUmVhZGFibGVTdHJlYW1EaXN0dXJiZWQ9YS5Jc1JlYWRhYmxlU3RyZWFtRGlzdHVyYmVkLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlPWEuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckNsb3NlLHQuUmVhZGFibGVTdHJlYW1EZWZhdWx0Q29udHJvbGxlckVucXVldWU9YS5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRW5xdWV1ZSx0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZT1hLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx0LkFjcXVpcmVXcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXI9aS5BY3F1aXJlV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyLHQuSXNXcml0YWJsZVN0cmVhbT1pLklzV3JpdGFibGVTdHJlYW0sdC5Jc1dyaXRhYmxlU3RyZWFtTG9ja2VkPWkuSXNXcml0YWJsZVN0cmVhbUxvY2tlZCx0LldyaXRhYmxlU3RyZWFtPWkuV3JpdGFibGVTdHJlYW0sdC5Xcml0YWJsZVN0cmVhbUFib3J0PWkuV3JpdGFibGVTdHJlYW1BYm9ydCx0LldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcj1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFcnJvcix0LldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlckNsb3NlV2l0aEVycm9yUHJvcGFnYXRpb249aS5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJDbG9zZVdpdGhFcnJvclByb3BhZ2F0aW9uLHQuV3JpdGFibGVTdHJlYW1EZWZhdWx0V3JpdGVyUmVsZWFzZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlclJlbGVhc2UsdC5Xcml0YWJsZVN0cmVhbURlZmF1bHRXcml0ZXJXcml0ZT1pLldyaXRhYmxlU3RyZWFtRGVmYXVsdFdyaXRlcldyaXRlfSxmdW5jdGlvbihlLHQscil7dmFyIG49ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19cmV0dXJuIGZ1bmN0aW9uKHQscixuKXtyZXR1cm4gciYmZSh0LnByb3RvdHlwZSxyKSxuJiZlKHQsbiksdH19KCk7ZnVuY3Rpb24gYShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfXZhciBpPXIoMSkuYXNzZXJ0LG89cigwKSxzPW8uSW52b2tlT3JOb29wLGw9by5Qcm9taXNlSW52b2tlT3JQZXJmb3JtRmFsbGJhY2ssYz1vLlByb21pc2VJbnZva2VPck5vb3AsdT1vLnR5cGVJc09iamVjdCxmPXIoNCksaD1mLlJlYWRhYmxlU3RyZWFtLGQ9Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyQ2xvc2UscD1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJFbnF1ZXVlLG09Zi5SZWFkYWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3IsZz1mLlJlYWRhYmxlU3RyZWFtRGVmYXVsdENvbnRyb2xsZXJHZXREZXNpcmVkU2l6ZSx2PXIoMikseT12LldyaXRhYmxlU3RyZWFtLGI9di5Xcml0YWJsZVN0cmVhbURlZmF1bHRDb250cm9sbGVyRXJyb3I7ZnVuY3Rpb24gdyhlLHQpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7dmFyIHI9ZS5fcmVhZGFibGVDb250cm9sbGVyO3RyeXtwKHIsdCl9Y2F0Y2godCl7dGhyb3cgZS5fcmVhZGFibGVDbG9zZWQ9ITAsUyhlLHQpLGUuX3N0b3JlZEVycm9yfSEwPT1nKHIpPD0wJiYhMT09PWUuX2JhY2twcmVzc3VyZSYmQShlLCEwKX1mdW5jdGlvbiBrKGUpe2koITE9PT1lLl9lcnJvcmVkKSxpKCExPT09ZS5fcmVhZGFibGVDbG9zZWQpO3RyeXtkKGUuX3JlYWRhYmxlQ29udHJvbGxlcil9Y2F0Y2goZSl7aSghMSl9ZS5fcmVhZGFibGVDbG9zZWQ9ITB9ZnVuY3Rpb24gUyhlLHQpeyExPT09ZS5fZXJyb3JlZCYmXyhlLHQpfWZ1bmN0aW9uIF8oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksZS5fZXJyb3JlZD0hMCxlLl9zdG9yZWRFcnJvcj10LCExPT09ZS5fd3JpdGFibGVEb25lJiZiKGUuX3dyaXRhYmxlQ29udHJvbGxlcix0KSwhMT09PWUuX3JlYWRhYmxlQ2xvc2VkJiZtKGUuX3JlYWRhYmxlQ29udHJvbGxlcix0KX1mdW5jdGlvbiB4KGUpe3JldHVybiBpKHZvaWQgMCE9PWUuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMT09PWUuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMD09PWUuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9ZnVuY3Rpb24gQShlLHQpe2koZS5fYmFja3ByZXNzdXJlIT09dCwiVHJhbnNmb3JtU3RyZWFtU2V0QmFja3ByZXNzdXJlKCkgc2hvdWxkIGJlIGNhbGxlZCBvbmx5IHdoZW4gYmFja3ByZXNzdXJlIGlzIGNoYW5nZWQiKSx2b2lkIDAhPT1lLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlJiZlLl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlX3Jlc29sdmUodCksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZT1uZXcgUHJvbWlzZSgoZnVuY3Rpb24odCl7ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZV9yZXNvbHZlPXR9KSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZS50aGVuKChmdW5jdGlvbihlKXtpKGUhPT10LCJfYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSBzaG91bGQgYmUgZnVsZmlsbGVkIG9ubHkgd2hlbiBiYWNrcHJlc3N1cmUgaXMgY2hhbmdlZCIpfSkpLGUuX2JhY2twcmVzc3VyZT10fWZ1bmN0aW9uIEMoZSx0KXtyZXR1cm4gdyh0Ll9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpLFByb21pc2UucmVzb2x2ZSgpfWZ1bmN0aW9uIFAoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSIpfWZ1bmN0aW9uIEUoZSl7cmV0dXJuISF1KGUpJiYhIU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLCJfdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlciIpfXZhciBUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1TdHJlYW09dCx0aGlzLl9zdGFydFByb21pc2U9cn1yZXR1cm4gbihlLFt7a2V5OiJzdGFydCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fdHJhbnNmb3JtU3RyZWFtO3JldHVybiB0Ll93cml0YWJsZUNvbnRyb2xsZXI9ZSx0aGlzLl9zdGFydFByb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4geCh0KX0pKX19LHtrZXk6IndyaXRlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSx0KXtpKCExPT09ZS5fZXJyb3JlZCksaSghMT09PWUuX3RyYW5zZm9ybWluZyksaSghMT09PWUuX2JhY2twcmVzc3VyZSksZS5fdHJhbnNmb3JtaW5nPSEwO3ZhciByPWUuX3RyYW5zZm9ybWVyLG49ZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcjtyZXR1cm4gbChyLCJ0cmFuc2Zvcm0iLFt0LG5dLEMsW3Qsbl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIGUuX3RyYW5zZm9ybWluZz0hMSx4KGUpfSksKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QodCl9KSl9KHRoaXMuX3RyYW5zZm9ybVN0cmVhbSxlKX19LHtrZXk6ImFib3J0Iix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtlLl93cml0YWJsZURvbmU9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIldyaXRhYmxlIHNpZGUgYWJvcnRlZCIpKX19LHtrZXk6ImNsb3NlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMT09PWUuX3RyYW5zZm9ybWluZyksZS5fd3JpdGFibGVEb25lPSEwLGMoZS5fdHJhbnNmb3JtZXIsImZsdXNoIixbZS5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcl0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuITA9PT1lLl9lcnJvcmVkP1Byb21pc2UucmVqZWN0KGUuX3N0b3JlZEVycm9yKTooITE9PT1lLl9yZWFkYWJsZUNsb3NlZCYmayhlKSxQcm9taXNlLnJlc29sdmUoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKHQpe3JldHVybiBTKGUsdCksUHJvbWlzZS5yZWplY3QoZS5fc3RvcmVkRXJyb3IpfSkpfX1dKSxlfSgpLFI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7YSh0aGlzLGUpLHRoaXMuX3RyYW5zZm9ybVN0cmVhbT10LHRoaXMuX3N0YXJ0UHJvbWlzZT1yfXJldHVybiBuKGUsW3trZXk6InN0YXJ0Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl90cmFuc2Zvcm1TdHJlYW07cmV0dXJuIHQuX3JlYWRhYmxlQ29udHJvbGxlcj1lLHRoaXMuX3N0YXJ0UHJvbWlzZS50aGVuKChmdW5jdGlvbigpe3JldHVybiBpKHZvaWQgMCE9PXQuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2UsIl9iYWNrcHJlc3N1cmVDaGFuZ2VQcm9taXNlIHNob3VsZCBoYXZlIGJlZW4gaW5pdGlhbGl6ZWQiKSwhMD09PXQuX2JhY2twcmVzc3VyZT9Qcm9taXNlLnJlc29sdmUoKTooaSghMT09PXQuX2JhY2twcmVzc3VyZSwiX2JhY2twcmVzc3VyZSBzaG91bGQgaGF2ZSBiZWVuIGluaXRpYWxpemVkIiksdC5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSl9KSl9fSx7a2V5OiJwdWxsIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX3RyYW5zZm9ybVN0cmVhbTtyZXR1cm4gaSghMD09PWUuX2JhY2twcmVzc3VyZSwicHVsbCgpIHNob3VsZCBiZSBuZXZlciBjYWxsZWQgd2hpbGUgX2JhY2twcmVzc3VyZSBpcyBmYWxzZSIpLGkodm9pZCAwIT09ZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZSwiX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2Ugc2hvdWxkIGhhdmUgYmVlbiBpbml0aWFsaXplZCIpLEEoZSwhMSksZS5fYmFja3ByZXNzdXJlQ2hhbmdlUHJvbWlzZX19LHtrZXk6ImNhbmNlbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl90cmFuc2Zvcm1TdHJlYW07ZS5fcmVhZGFibGVDbG9zZWQ9ITAsXyhlLG5ldyBUeXBlRXJyb3IoIlJlYWRhYmxlIHNpZGUgY2FuY2VsZWQiKSl9fV0pLGV9KCksTz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7aWYoYSh0aGlzLGUpLCExPT09RSh0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBjYW4gb25seSBiZSBjb25zdHJ1Y3RlZCB3aXRoIGEgVHJhbnNmb3JtU3RyZWFtIGluc3RhbmNlIik7aWYodm9pZCAwIT09dC5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcil0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW1EZWZhdWx0Q29udHJvbGxlciBpbnN0YW5jZXMgY2FuIG9ubHkgYmUgY3JlYXRlZCBieSB0aGUgVHJhbnNmb3JtU3RyZWFtIGNvbnN0cnVjdG9yIik7dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbT10fXJldHVybiBuKGUsW3trZXk6ImVucXVldWUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCExPT09UCh0aGlzKSl0aHJvdyBGKCJlbnF1ZXVlIik7dyh0aGlzLl9jb250cm9sbGVkVHJhbnNmb3JtU3RyZWFtLGUpfX0se2tleToiY2xvc2UiLHZhbHVlOmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImNsb3NlIik7IWZ1bmN0aW9uKGUpe2lmKCEwPT09ZS5fZXJyb3JlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0gaXMgYWxyZWFkeSBlcnJvcmVkIik7aWYoITA9PT1lLl9yZWFkYWJsZUNsb3NlZCl0aHJvdyBuZXcgVHlwZUVycm9yKCJSZWFkYWJsZSBzaWRlIGlzIGFscmVhZHkgY2xvc2VkIik7ayhlKX0odGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbSl9fSx7a2V5OiJlcnJvciIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImVycm9yIik7IWZ1bmN0aW9uKGUsdCl7aWYoITA9PT1lLl9lcnJvcmVkKXRocm93IG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbSBpcyBhbHJlYWR5IGVycm9yZWQiKTtfKGUsdCl9KHRoaXMuX2NvbnRyb2xsZWRUcmFuc2Zvcm1TdHJlYW0sZSl9fSx7a2V5OiJkZXNpcmVkU2l6ZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1QKHRoaXMpKXRocm93IEYoImRlc2lyZWRTaXplIik7dmFyIGU9dGhpcy5fY29udHJvbGxlZFRyYW5zZm9ybVN0cmVhbS5fcmVhZGFibGVDb250cm9sbGVyO3JldHVybiBnKGUpfX1dKSxlfSgpLEk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9O2EodGhpcyxlKSx0aGlzLl90cmFuc2Zvcm1lcj10O3ZhciByPXQucmVhZGFibGVTdHJhdGVneSxuPXQud3JpdGFibGVTdHJhdGVneTt0aGlzLl90cmFuc2Zvcm1pbmc9ITEsdGhpcy5fZXJyb3JlZD0hMSx0aGlzLl9zdG9yZWRFcnJvcj12b2lkIDAsdGhpcy5fd3JpdGFibGVDb250cm9sbGVyPXZvaWQgMCx0aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3RyYW5zZm9ybVN0cmVhbUNvbnRyb2xsZXI9dm9pZCAwLHRoaXMuX3dyaXRhYmxlRG9uZT0hMSx0aGlzLl9yZWFkYWJsZUNsb3NlZD0hMSx0aGlzLl9iYWNrcHJlc3N1cmU9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2U9dm9pZCAwLHRoaXMuX2JhY2twcmVzc3VyZUNoYW5nZVByb21pc2VfcmVzb2x2ZT12b2lkIDAsdGhpcy5fdHJhbnNmb3JtU3RyZWFtQ29udHJvbGxlcj1uZXcgTyh0aGlzKTt2YXIgbz12b2lkIDAsbD1uZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSl7bz1lfSkpLGM9bmV3IFIodGhpcyxsKTt0aGlzLl9yZWFkYWJsZT1uZXcgaChjLHIpO3ZhciB1PW5ldyBUKHRoaXMsbCk7dGhpcy5fd3JpdGFibGU9bmV3IHkodSxuKSxpKHZvaWQgMCE9PXRoaXMuX3dyaXRhYmxlQ29udHJvbGxlciksaSh2b2lkIDAhPT10aGlzLl9yZWFkYWJsZUNvbnRyb2xsZXIpO3ZhciBmPWcodGhpcy5fcmVhZGFibGVDb250cm9sbGVyKTtBKHRoaXMsZjw9MCk7dmFyIGQ9dGhpcyxwPXModCwic3RhcnQiLFtkLl90cmFuc2Zvcm1TdHJlYW1Db250cm9sbGVyXSk7byhwKSxsLmNhdGNoKChmdW5jdGlvbihlKXshMT09PWQuX2Vycm9yZWQmJihkLl9lcnJvcmVkPSEwLGQuX3N0b3JlZEVycm9yPWUpfSkpfXJldHVybiBuKGUsW3trZXk6InJlYWRhYmxlIixnZXQ6ZnVuY3Rpb24oKXtpZighMT09PUUodGhpcykpdGhyb3cgTCgicmVhZGFibGUiKTtyZXR1cm4gdGhpcy5fcmVhZGFibGV9fSx7a2V5OiJ3cml0YWJsZSIsZ2V0OmZ1bmN0aW9uKCl7aWYoITE9PT1FKHRoaXMpKXRocm93IEwoIndyaXRhYmxlIik7cmV0dXJuIHRoaXMuX3dyaXRhYmxlfX1dKSxlfSgpO2Z1bmN0aW9uIEYoZSl7cmV0dXJuIG5ldyBUeXBlRXJyb3IoIlRyYW5zZm9ybVN0cmVhbURlZmF1bHRDb250cm9sbGVyLnByb3RvdHlwZS4iK2UrIiBjYW4gb25seSBiZSB1c2VkIG9uIGEgVHJhbnNmb3JtU3RyZWFtRGVmYXVsdENvbnRyb2xsZXIiKX1mdW5jdGlvbiBMKGUpe3JldHVybiBuZXcgVHlwZUVycm9yKCJUcmFuc2Zvcm1TdHJlYW0ucHJvdG90eXBlLiIrZSsiIGNhbiBvbmx5IGJlIHVzZWQgb24gYSBUcmFuc2Zvcm1TdHJlYW0iKX1lLmV4cG9ydHM9e1RyYW5zZm9ybVN0cmVhbTpJfX0sZnVuY3Rpb24oZSx0LHIpe2UuZXhwb3J0cz1yKDUpfV0pKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9dmFyIGE9ITE7dHJ5e2lmKCJmdW5jdGlvbiI9PXR5cGVvZiBVUkwmJiJvYmplY3QiPT09bihVUkwucHJvdG90eXBlKSYmIm9yaWdpbiJpbiBVUkwucHJvdG90eXBlKXt2YXIgaT1uZXcgVVJMKCJiIiwiaHR0cDovL2EiKTtpLnBhdGhuYW1lPSJjJTIwZCIsYT0iaHR0cDovL2EvYyUyMGQiPT09aS5ocmVmfX1jYXRjaChlKXt9aWYoYSl0LlVSTD1VUkw7ZWxzZXt2YXIgbz1yKDE1MCkuVVJMLHM9cig4KS5VUkw7cyYmKG8uY3JlYXRlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3JldHVybiBzLmNyZWF0ZU9iamVjdFVSTC5hcHBseShzLGFyZ3VtZW50cyl9LG8ucmV2b2tlT2JqZWN0VVJMPWZ1bmN0aW9uKGUpe3MucmV2b2tlT2JqZWN0VVJMKGUpfSksdC5VUkw9b319LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7IWZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZShudWxsKTtlLmZ0cD0yMSxlLmZpbGU9MCxlLmdvcGhlcj03MCxlLmh0dHA9ODAsZS5odHRwcz00NDMsZS53cz04MCxlLndzcz00NDM7dmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKTtmdW5jdGlvbiBuKHQpe3JldHVybiB2b2lkIDAhPT1lW3RdfWZ1bmN0aW9uIGEoKXtoLmNhbGwodGhpcyksdGhpcy5faXNJbnZhbGlkPSEwfWZ1bmN0aW9uIGkoZSl7cmV0dXJuIiI9PT1lJiZhLmNhbGwodGhpcyksZS50b0xvd2VyQ2FzZSgpfWZ1bmN0aW9uIG8oZSl7dmFyIHQ9ZS5jaGFyQ29kZUF0KDApO3JldHVybiB0PjMyJiZ0PDEyNyYmLTE9PT1bMzQsMzUsNjAsNjIsNjMsOTZdLmluZGV4T2YodCk/ZTplbmNvZGVVUklDb21wb25lbnQoZSl9ZnVuY3Rpb24gcyhlKXt2YXIgdD1lLmNoYXJDb2RlQXQoMCk7cmV0dXJuIHQ+MzImJnQ8MTI3JiYtMT09PVszNCwzNSw2MCw2Miw5Nl0uaW5kZXhPZih0KT9lOmVuY29kZVVSSUNvbXBvbmVudChlKX1yWyIlMmUiXT0iLiIsclsiLiUyZSJdPSIuLiIsclsiJTJlLiJdPSIuLiIsclsiJTJlJTJlIl09Ii4uIjt2YXIgbCxjPS9bYS16QS1aXS8sdT0vW2EtekEtWjAtOVwrXC1cLl0vO2Z1bmN0aW9uIGYodCxmLGgpe2Z1bmN0aW9uIGQoZSl7Yi5wdXNoKGUpfXZhciBwPWZ8fCJzY2hlbWUgc3RhcnQiLG09MCxnPSIiLHY9ITEseT0hMSxiPVtdO2U6Zm9yKDsodFttLTFdIT09bHx8MD09PW0pJiYhdGhpcy5faXNJbnZhbGlkOyl7dmFyIHc9dFttXTtzd2l0Y2gocCl7Y2FzZSJzY2hlbWUgc3RhcnQiOmlmKCF3fHwhYy50ZXN0KHcpKXtpZihmKXtkKCJJbnZhbGlkIHNjaGVtZS4iKTticmVhayBlfWc9IiIscD0ibm8gc2NoZW1lIjtjb250aW51ZX1nKz13LnRvTG93ZXJDYXNlKCkscD0ic2NoZW1lIjticmVhaztjYXNlInNjaGVtZSI6aWYodyYmdS50ZXN0KHcpKWcrPXcudG9Mb3dlckNhc2UoKTtlbHNle2lmKCI6IiE9PXcpe2lmKGYpe2lmKHc9PT1sKWJyZWFrIGU7ZCgiQ29kZSBwb2ludCBub3QgYWxsb3dlZCBpbiBzY2hlbWU6ICIrdyk7YnJlYWsgZX1nPSIiLG09MCxwPSJubyBzY2hlbWUiO2NvbnRpbnVlfWlmKHRoaXMuX3NjaGVtZT1nLGc9IiIsZilicmVhayBlO24odGhpcy5fc2NoZW1lKSYmKHRoaXMuX2lzUmVsYXRpdmU9ITApLHA9ImZpbGUiPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSI6dGhpcy5faXNSZWxhdGl2ZSYmaCYmaC5fc2NoZW1lPT09dGhpcy5fc2NoZW1lPyJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOnRoaXMuX2lzUmVsYXRpdmU/ImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6InNjaGVtZSBkYXRhIn1icmVhaztjYXNlInNjaGVtZSBkYXRhIjoiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13Pyh0aGlzLl9mcmFnbWVudD0iIyIscD0iZnJhZ21lbnQiKTp3IT09bCYmIlx0IiE9PXcmJiJcbiIhPT13JiYiXHIiIT09dyYmKHRoaXMuX3NjaGVtZURhdGErPW8odykpO2JyZWFrO2Nhc2Uibm8gc2NoZW1lIjppZihoJiZuKGguX3NjaGVtZSkpe3A9InJlbGF0aXZlIjtjb250aW51ZX1kKCJNaXNzaW5nIHNjaGVtZS4iKSxhLmNhbGwodGhpcyk7YnJlYWs7Y2FzZSJyZWxhdGl2ZSBvciBhdXRob3JpdHkiOmlmKCIvIiE9PXd8fCIvIiE9PXRbbSsxXSl7ZCgiRXhwZWN0ZWQgLywgZ290OiAiK3cpLHA9InJlbGF0aXZlIjtjb250aW51ZX1wPSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiO2JyZWFrO2Nhc2UicmVsYXRpdmUiOmlmKHRoaXMuX2lzUmVsYXRpdmU9ITAsImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5fc2NoZW1lPWguX3NjaGVtZSksdz09PWwpe3RoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQ7YnJlYWsgZX1pZigiLyI9PT13fHwiXFwiPT09dykiXFwiPT09dyYmZCgiXFwgaXMgYW4gaW52YWxpZCBjb2RlIHBvaW50LiIpLHA9InJlbGF0aXZlIHNsYXNoIjtlbHNlIGlmKCI/Ij09PXcpdGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl9wYXRoPWguX3BhdGguc2xpY2UoKSx0aGlzLl9xdWVyeT0iPyIsdGhpcy5fdXNlcm5hbWU9aC5fdXNlcm5hbWUsdGhpcy5fcGFzc3dvcmQ9aC5fcGFzc3dvcmQscD0icXVlcnkiO2Vsc2V7aWYoIiMiIT09dyl7dmFyIGs9dFttKzFdLFM9dFttKzJdOygiZmlsZSIhPT10aGlzLl9zY2hlbWV8fCFjLnRlc3Qodyl8fCI6IiE9PWsmJiJ8IiE9PWt8fFMhPT1sJiYiLyIhPT1TJiYiXFwiIT09UyYmIj8iIT09UyYmIiMiIT09UykmJih0aGlzLl9ob3N0PWguX2hvc3QsdGhpcy5fcG9ydD1oLl9wb3J0LHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHRoaXMuX3BhdGg9aC5fcGF0aC5zbGljZSgpLHRoaXMuX3BhdGgucG9wKCkpLHA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfXRoaXMuX2hvc3Q9aC5faG9zdCx0aGlzLl9wb3J0PWguX3BvcnQsdGhpcy5fcGF0aD1oLl9wYXRoLnNsaWNlKCksdGhpcy5fcXVlcnk9aC5fcXVlcnksdGhpcy5fZnJhZ21lbnQ9IiMiLHRoaXMuX3VzZXJuYW1lPWguX3VzZXJuYW1lLHRoaXMuX3Bhc3N3b3JkPWguX3Bhc3N3b3JkLHA9ImZyYWdtZW50In1icmVhaztjYXNlInJlbGF0aXZlIHNsYXNoIjppZigiLyIhPT13JiYiXFwiIT09dyl7ImZpbGUiIT09dGhpcy5fc2NoZW1lJiYodGhpcy5faG9zdD1oLl9ob3N0LHRoaXMuX3BvcnQ9aC5fcG9ydCx0aGlzLl91c2VybmFtZT1oLl91c2VybmFtZSx0aGlzLl9wYXNzd29yZD1oLl9wYXNzd29yZCkscD0icmVsYXRpdmUgcGF0aCI7Y29udGludWV9IlxcIj09PXcmJmQoIlxcIGlzIGFuIGludmFsaWQgY29kZSBwb2ludC4iKSxwPSJmaWxlIj09PXRoaXMuX3NjaGVtZT8iZmlsZSBob3N0IjoiYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjticmVhaztjYXNlImF1dGhvcml0eSBmaXJzdCBzbGFzaCI6aWYoIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdykscD0iYXV0aG9yaXR5IGlnbm9yZSBzbGFzaGVzIjtjb250aW51ZX1wPSJhdXRob3JpdHkgc2Vjb25kIHNsYXNoIjticmVhaztjYXNlImF1dGhvcml0eSBzZWNvbmQgc2xhc2giOmlmKHA9ImF1dGhvcml0eSBpZ25vcmUgc2xhc2hlcyIsIi8iIT09dyl7ZCgiRXhwZWN0ZWQgJy8nLCBnb3Q6ICIrdyk7Y29udGludWV9YnJlYWs7Y2FzZSJhdXRob3JpdHkgaWdub3JlIHNsYXNoZXMiOmlmKCIvIiE9PXcmJiJcXCIhPT13KXtwPSJhdXRob3JpdHkiO2NvbnRpbnVlfWQoIkV4cGVjdGVkIGF1dGhvcml0eSwgZ290OiAiK3cpO2JyZWFrO2Nhc2UiYXV0aG9yaXR5IjppZigiQCI9PT13KXt2JiYoZCgiQCBhbHJlYWR5IHNlZW4uIiksZys9IiU0MCIpLHY9ITA7Zm9yKHZhciBfPTA7XzxnLmxlbmd0aDtfKyspe3ZhciB4PWdbX107aWYoIlx0IiE9PXgmJiJcbiIhPT14JiYiXHIiIT09eClpZigiOiIhPT14fHxudWxsIT09dGhpcy5fcGFzc3dvcmQpe3ZhciBBPW8oeCk7bnVsbCE9PXRoaXMuX3Bhc3N3b3JkP3RoaXMuX3Bhc3N3b3JkKz1BOnRoaXMuX3VzZXJuYW1lKz1BfWVsc2UgdGhpcy5fcGFzc3dvcmQ9IiI7ZWxzZSBkKCJJbnZhbGlkIHdoaXRlc3BhY2UgaW4gYXV0aG9yaXR5LiIpfWc9IiJ9ZWxzZXtpZih3PT09bHx8Ii8iPT09d3x8IlxcIj09PXd8fCI/Ij09PXd8fCIjIj09PXcpe20tPWcubGVuZ3RoLGc9IiIscD0iaG9zdCI7Y29udGludWV9Zys9d31icmVhaztjYXNlImZpbGUgaG9zdCI6aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXsyIT09Zy5sZW5ndGh8fCFjLnRlc3QoZ1swXSl8fCI6IiE9PWdbMV0mJiJ8IiE9PWdbMV0/MD09PWcubGVuZ3RoP3A9InJlbGF0aXZlIHBhdGggc3RhcnQiOih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIpOnA9InJlbGF0aXZlIHBhdGgiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCB3aGl0ZXNwYWNlIGluIGZpbGUgaG9zdC4iKTpnKz13O2JyZWFrO2Nhc2UiaG9zdCI6Y2FzZSJob3N0bmFtZSI6aWYoIjoiIT09d3x8eSl7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13KXtpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icmVsYXRpdmUgcGF0aCBzdGFydCIsZilicmVhayBlO2NvbnRpbnVlfSJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXc/KCJbIj09PXc/eT0hMDoiXSI9PT13JiYoeT0hMSksZys9dyk6ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIGhvc3QvaG9zdG5hbWU6ICIrdyl9ZWxzZSBpZih0aGlzLl9ob3N0PWkuY2FsbCh0aGlzLGcpLGc9IiIscD0icG9ydCIsImhvc3RuYW1lIj09PWYpYnJlYWsgZTticmVhaztjYXNlInBvcnQiOmlmKC9bMC05XS8udGVzdCh3KSlnKz13O2Vsc2V7aWYodz09PWx8fCIvIj09PXd8fCJcXCI9PT13fHwiPyI9PT13fHwiIyI9PT13fHxmKXtpZigiIiE9PWcpe3ZhciBDPXBhcnNlSW50KGcsMTApO0MhPT1lW3RoaXMuX3NjaGVtZV0mJih0aGlzLl9wb3J0PUMrIiIpLGc9IiJ9aWYoZilicmVhayBlO3A9InJlbGF0aXZlIHBhdGggc3RhcnQiO2NvbnRpbnVlfSJcdCI9PT13fHwiXG4iPT09d3x8IlxyIj09PXc/ZCgiSW52YWxpZCBjb2RlIHBvaW50IGluIHBvcnQ6ICIrdyk6YS5jYWxsKHRoaXMpfWJyZWFrO2Nhc2UicmVsYXRpdmUgcGF0aCBzdGFydCI6aWYoIlxcIj09PXcmJmQoIidcXCcgbm90IGFsbG93ZWQgaW4gcGF0aC4iKSxwPSJyZWxhdGl2ZSBwYXRoIiwiLyIhPT13JiYiXFwiIT09dyljb250aW51ZTticmVhaztjYXNlInJlbGF0aXZlIHBhdGgiOnZhciBQO3chPT1sJiYiLyIhPT13JiYiXFwiIT09dyYmKGZ8fCI/IiE9PXcmJiIjIiE9PXcpPyJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJihnKz1vKHcpKTooIlxcIj09PXcmJmQoIlxcIG5vdCBhbGxvd2VkIGluIHJlbGF0aXZlIHBhdGguIiksKFA9cltnLnRvTG93ZXJDYXNlKCldKSYmKGc9UCksIi4uIj09PWc/KHRoaXMuX3BhdGgucG9wKCksIi8iIT09dyYmIlxcIiE9PXcmJnRoaXMuX3BhdGgucHVzaCgiIikpOiIuIj09PWcmJiIvIiE9PXcmJiJcXCIhPT13P3RoaXMuX3BhdGgucHVzaCgiIik6Ii4iIT09ZyYmKCJmaWxlIj09PXRoaXMuX3NjaGVtZSYmMD09PXRoaXMuX3BhdGgubGVuZ3RoJiYyPT09Zy5sZW5ndGgmJmMudGVzdChnWzBdKSYmInwiPT09Z1sxXSYmKGc9Z1swXSsiOiIpLHRoaXMuX3BhdGgucHVzaChnKSksZz0iIiwiPyI9PT13Pyh0aGlzLl9xdWVyeT0iPyIscD0icXVlcnkiKToiIyI9PT13JiYodGhpcy5fZnJhZ21lbnQ9IiMiLHA9ImZyYWdtZW50IikpO2JyZWFrO2Nhc2UicXVlcnkiOmZ8fCIjIiE9PXc/dyE9PWwmJiJcdCIhPT13JiYiXG4iIT09dyYmIlxyIiE9PXcmJih0aGlzLl9xdWVyeSs9cyh3KSk6KHRoaXMuX2ZyYWdtZW50PSIjIixwPSJmcmFnbWVudCIpO2JyZWFrO2Nhc2UiZnJhZ21lbnQiOnchPT1sJiYiXHQiIT09dyYmIlxuIiE9PXcmJiJcciIhPT13JiYodGhpcy5fZnJhZ21lbnQrPXcpfW0rK319ZnVuY3Rpb24gaCgpe3RoaXMuX3NjaGVtZT0iIix0aGlzLl9zY2hlbWVEYXRhPSIiLHRoaXMuX3VzZXJuYW1lPSIiLHRoaXMuX3Bhc3N3b3JkPW51bGwsdGhpcy5faG9zdD0iIix0aGlzLl9wb3J0PSIiLHRoaXMuX3BhdGg9W10sdGhpcy5fcXVlcnk9IiIsdGhpcy5fZnJhZ21lbnQ9IiIsdGhpcy5faXNJbnZhbGlkPSExLHRoaXMuX2lzUmVsYXRpdmU9ITF9ZnVuY3Rpb24gZChlLHQpe3ZvaWQgMD09PXR8fHQgaW5zdGFuY2VvZiBkfHwodD1uZXcgZChTdHJpbmcodCkpKSx0aGlzLl91cmw9ZSxoLmNhbGwodGhpcyk7dmFyIHI9ZS5yZXBsYWNlKC9eWyBcdFxyXG5cZl0rfFsgXHRcclxuXGZdKyQvZywiIik7Zi5jYWxsKHRoaXMscixudWxsLHQpfWQucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLmhyZWZ9LGdldCBocmVmKCl7aWYodGhpcy5faXNJbnZhbGlkKXJldHVybiB0aGlzLl91cmw7dmFyIGU9IiI7cmV0dXJuIiI9PT10aGlzLl91c2VybmFtZSYmbnVsbD09PXRoaXMuX3Bhc3N3b3JkfHwoZT10aGlzLl91c2VybmFtZSsobnVsbCE9PXRoaXMuX3Bhc3N3b3JkPyI6Iit0aGlzLl9wYXNzd29yZDoiIikrIkAiKSx0aGlzLnByb3RvY29sKyh0aGlzLl9pc1JlbGF0aXZlPyIvLyIrZSt0aGlzLmhvc3Q6IiIpK3RoaXMucGF0aG5hbWUrdGhpcy5fcXVlcnkrdGhpcy5fZnJhZ21lbnR9LHNldCBocmVmKGUpe2guY2FsbCh0aGlzKSxmLmNhbGwodGhpcyxlKX0sZ2V0IHByb3RvY29sKCl7cmV0dXJuIHRoaXMuX3NjaGVtZSsiOiJ9LHNldCBwcm90b2NvbChlKXt0aGlzLl9pc0ludmFsaWR8fGYuY2FsbCh0aGlzLGUrIjoiLCJzY2hlbWUgc3RhcnQiKX0sZ2V0IGhvc3QoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX3BvcnQ/dGhpcy5faG9zdCsiOiIrdGhpcy5fcG9ydDp0aGlzLl9ob3N0fSxzZXQgaG9zdChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiZmLmNhbGwodGhpcyxlLCJob3N0Iil9LGdldCBob3N0bmFtZSgpe3JldHVybiB0aGlzLl9ob3N0fSxzZXQgaG9zdG5hbWUoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwiaG9zdG5hbWUiKX0sZ2V0IHBvcnQoKXtyZXR1cm4gdGhpcy5fcG9ydH0sc2V0IHBvcnQoZSl7IXRoaXMuX2lzSW52YWxpZCYmdGhpcy5faXNSZWxhdGl2ZSYmZi5jYWxsKHRoaXMsZSwicG9ydCIpfSxnZXQgcGF0aG5hbWUoKXtyZXR1cm4gdGhpcy5faXNJbnZhbGlkPyIiOnRoaXMuX2lzUmVsYXRpdmU/Ii8iK3RoaXMuX3BhdGguam9pbigiLyIpOnRoaXMuX3NjaGVtZURhdGF9LHNldCBwYXRobmFtZShlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcGF0aD1bXSxmLmNhbGwodGhpcyxlLCJyZWxhdGl2ZSBwYXRoIHN0YXJ0IikpfSxnZXQgc2VhcmNoKCl7cmV0dXJuIHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3F1ZXJ5fHwiPyI9PT10aGlzLl9xdWVyeT8iIjp0aGlzLl9xdWVyeX0sc2V0IHNlYXJjaChlKXshdGhpcy5faXNJbnZhbGlkJiZ0aGlzLl9pc1JlbGF0aXZlJiYodGhpcy5fcXVlcnk9Ij8iLCI/Ij09PWVbMF0mJihlPWUuc2xpY2UoMSkpLGYuY2FsbCh0aGlzLGUsInF1ZXJ5IikpfSxnZXQgaGFzaCgpe3JldHVybiB0aGlzLl9pc0ludmFsaWR8fCF0aGlzLl9mcmFnbWVudHx8IiMiPT09dGhpcy5fZnJhZ21lbnQ/IiI6dGhpcy5fZnJhZ21lbnR9LHNldCBoYXNoKGUpe3RoaXMuX2lzSW52YWxpZHx8KHRoaXMuX2ZyYWdtZW50PSIjIiwiIyI9PT1lWzBdJiYoZT1lLnNsaWNlKDEpKSxmLmNhbGwodGhpcyxlLCJmcmFnbWVudCIpKX0sZ2V0IG9yaWdpbigpe3ZhciBlO2lmKHRoaXMuX2lzSW52YWxpZHx8IXRoaXMuX3NjaGVtZSlyZXR1cm4iIjtzd2l0Y2godGhpcy5fc2NoZW1lKXtjYXNlImRhdGEiOmNhc2UiZmlsZSI6Y2FzZSJqYXZhc2NyaXB0IjpjYXNlIm1haWx0byI6cmV0dXJuIm51bGwiO2Nhc2UiYmxvYiI6dHJ5e3JldHVybiBuZXcgZCh0aGlzLl9zY2hlbWVEYXRhKS5vcmlnaW58fCJudWxsIn1jYXRjaChlKXt9cmV0dXJuIm51bGwifXJldHVybihlPXRoaXMuaG9zdCk/dGhpcy5fc2NoZW1lKyI6Ly8iK2U6IiJ9fSx0LlVSTD1kfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk5ldHdvcmtQZGZNYW5hZ2VyPXQuTG9jYWxQZGZNYW5hZ2VyPXZvaWQgMDt2YXIgbixhPShuPXIoMikpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoNiksbz1yKDE1Mikscz1yKDE1MyksbD1yKDE1Nyk7ZnVuY3Rpb24gYyhlKXtyZXR1cm4oYz0iZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiYic3ltYm9sIj09dHlwZW9mIFN5bWJvbC5pdGVyYXRvcj9mdW5jdGlvbihlKXtyZXR1cm4gdHlwZW9mIGV9OmZ1bmN0aW9uKGUpe3JldHVybiBlJiYiZnVuY3Rpb24iPT10eXBlb2YgU3ltYm9sJiZlLmNvbnN0cnVjdG9yPT09U3ltYm9sJiZlIT09U3ltYm9sLnByb3RvdHlwZT8ic3ltYm9sIjp0eXBlb2YgZX0pKGUpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4hdHx8Im9iamVjdCIhPT1jKHQpJiYiZnVuY3Rpb24iIT10eXBlb2YgdD9wKGUpOnR9ZnVuY3Rpb24gZihlKXtyZXR1cm4oZj1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gaChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZkKGUsdCl9ZnVuY3Rpb24gZChlLHQpe3JldHVybihkPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBwKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX1mdW5jdGlvbiBtKGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9ZnVuY3Rpb24gZyhlKXtyZXR1cm4gZnVuY3Rpb24oKXt2YXIgdD10aGlzLHI9YXJndW1lbnRzO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obixhKXt2YXIgaT1lLmFwcGx5KHQscik7ZnVuY3Rpb24gbyhlKXttKGksbixhLG8scywibmV4dCIsZSl9ZnVuY3Rpb24gcyhlKXttKGksbixhLG8scywidGhyb3ciLGUpfW8odm9pZCAwKX0pKX19ZnVuY3Rpb24gdihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHkoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBiKGUsdCxyKXtyZXR1cm4gdCYmeShlLnByb3RvdHlwZSx0KSxyJiZ5KGUsciksZX12YXIgdz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt2KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLGkudW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBCYXNlUGRmTWFuYWdlci4iKX12YXIgdDtyZXR1cm4gYihlLFt7a2V5OiJvbkxvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGBvbkxvYWRlZFN0cmVhbWAgY2FsbGVkIil9fSx7a2V5OiJlbnN1cmVEb2MiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQsZSx0KX19LHtrZXk6ImVuc3VyZVhSZWYiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuZW5zdXJlKHRoaXMucGRmRG9jdW1lbnQueHJlZixlLHQpfX0se2tleToiZW5zdXJlQ2F0YWxvZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5lbnN1cmUodGhpcy5wZGZEb2N1bWVudC5jYXRhbG9nLGUsdCl9fSx7a2V5OiJnZXRQYWdlIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5nZXRQYWdlKGUpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLnBkZkRvY3VtZW50LmZvbnRGYWxsYmFjayhlLHQpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wZGZEb2N1bWVudC5jbGVhbnVwKCl9fSx7a2V5OiJlbnN1cmUiLHZhbHVlOih0PWcoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCxyLG4pe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgZW5zdXJlYCBjYWxsZWQiKTtjYXNlIDE6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHIsbil7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0UmFuZ2VgIGNhbGxlZCIpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXsoMCxpLnVucmVhY2hhYmxlKSgiQWJzdHJhY3QgbWV0aG9kIGByZXF1ZXN0TG9hZGVkU3RyZWFtYCBjYWxsZWQiKX19LHtrZXk6InNlbmRQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpeygwLGkudW5yZWFjaGFibGUpKCJBYnN0cmFjdCBtZXRob2QgYHNlbmRQcm9ncmVzc2l2ZURhdGFgIGNhbGxlZCIpfX0se2tleToidXBkYXRlUGFzc3dvcmQiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX3Bhc3N3b3JkPWV9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7KDAsaS51bnJlYWNoYWJsZSkoIkFic3RyYWN0IG1ldGhvZCBgdGVybWluYXRlYCBjYWxsZWQiKX19LHtrZXk6ImRvY0lkIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fZG9jSWR9fSx7a2V5OiJwYXNzd29yZCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX3Bhc3N3b3JkfX0se2tleToiZG9jQmFzZVVybCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDtpZih0aGlzLl9kb2NCYXNlVXJsKXt2YXIgdD0oMCxpLmNyZWF0ZVZhbGlkQWJzb2x1dGVVcmwpKHRoaXMuX2RvY0Jhc2VVcmwpO3Q/ZT10LmhyZWY6KDAsaS53YXJuKSgnSW52YWxpZCBhYnNvbHV0ZSBkb2NCYXNlVXJsOiAiJy5jb25jYXQodGhpcy5fZG9jQmFzZVVybCwnIi4nKSl9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY0Jhc2VVcmwiLGUpfX1dKSxlfSgpLGs9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsbixhLGkpe3ZhciBvO3YodGhpcyx0KSwobz11KHRoaXMsZih0KS5jYWxsKHRoaXMpKSkuX2RvY0lkPWUsby5fcGFzc3dvcmQ9bixvLl9kb2NCYXNlVXJsPWksby5ldmFsdWF0b3JPcHRpb25zPWE7dmFyIGM9bmV3IGwuU3RyZWFtKHIpO3JldHVybiBvLnBkZkRvY3VtZW50PW5ldyBzLlBERkRvY3VtZW50KHAocChvKSksYyksby5fbG9hZGVkU3RyZWFtUHJvbWlzZT1Qcm9taXNlLnJlc29sdmUoYyksb312YXIgcjtyZXR1cm4gaCh0LGUpLGIodCxbe2tleToiZW5zdXJlIix2YWx1ZToocj1nKGEuZGVmYXVsdC5tYXJrKChmdW5jdGlvbiBlKHQscixuKXt2YXIgaTtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCJmdW5jdGlvbiIhPXR5cGVvZihpPXRbcl0pKXtlLm5leHQ9MzticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsaS5hcHBseSh0LG4pKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLGkpO2Nhc2UgNDpjYXNlImVuZCI6cmV0dXJuIGUuc3RvcCgpfX0pLGUsdGhpcyl9KSkpLGZ1bmN0aW9uKGUsdCxuKXtyZXR1cm4gci5hcHBseSh0aGlzLGFyZ3VtZW50cyl9KX0se2tleToicmVxdWVzdFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBQcm9taXNlLnJlc29sdmUoKX19LHtrZXk6InJlcXVlc3RMb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7fX0se2tleToib25Mb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbVByb21pc2V9fSx7a2V5OiJ0ZXJtaW5hdGUiLHZhbHVlOmZ1bmN0aW9uKCl7fX1dKSx0fSh3KTt0LkxvY2FsUGRmTWFuYWdlcj1rO3ZhciBTPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyLG4sYSxpKXt2YXIgbDtyZXR1cm4gdih0aGlzLHQpLChsPXUodGhpcyxmKHQpLmNhbGwodGhpcykpKS5fZG9jSWQ9ZSxsLl9wYXNzd29yZD1uLnBhc3N3b3JkLGwuX2RvY0Jhc2VVcmw9aSxsLm1zZ0hhbmRsZXI9bi5tc2dIYW5kbGVyLGwuZXZhbHVhdG9yT3B0aW9ucz1hLGwuc3RyZWFtTWFuYWdlcj1uZXcgby5DaHVua2VkU3RyZWFtTWFuYWdlcihyLHttc2dIYW5kbGVyOm4ubXNnSGFuZGxlcixsZW5ndGg6bi5sZW5ndGgsZGlzYWJsZUF1dG9GZXRjaDpuLmRpc2FibGVBdXRvRmV0Y2gscmFuZ2VDaHVua1NpemU6bi5yYW5nZUNodW5rU2l6ZX0pLGwucGRmRG9jdW1lbnQ9bmV3IHMuUERGRG9jdW1lbnQocChwKGwpKSxsLnN0cmVhbU1hbmFnZXIuZ2V0U3RyZWFtKCkpLGx9dmFyIHI7cmV0dXJuIGgodCxlKSxiKHQsW3trZXk6ImVuc3VyZSIsdmFsdWU6KHI9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIsbil7dmFyIG87cmV0dXJuIGEuZGVmYXVsdC53cmFwKChmdW5jdGlvbihlKXtmb3IoOzspc3dpdGNoKGUucHJldj1lLm5leHQpe2Nhc2UgMDppZihlLnByZXY9MCwiZnVuY3Rpb24iIT10eXBlb2Yobz10W3JdKSl7ZS5uZXh0PTQ7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLG8uYXBwbHkodCxuKSk7Y2FzZSA0OnJldHVybiBlLmFicnVwdCgicmV0dXJuIixvKTtjYXNlIDc6aWYoZS5wcmV2PTcsZS50MD1lLmNhdGNoKDApLGUudDAgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXtlLm5leHQ9MTE7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDExOnJldHVybiBlLm5leHQ9MTMsdGhpcy5yZXF1ZXN0UmFuZ2UoZS50MC5iZWdpbixlLnQwLmVuZCk7Y2FzZSAxMzpyZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsdGhpcy5lbnN1cmUodCxyLG4pKTtjYXNlIDE0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw3XV0pfSkpKSxmdW5jdGlvbihlLHQsbil7cmV0dXJuIHIuYXBwbHkodGhpcyxhcmd1bWVudHMpfSl9LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gdGhpcy5zdHJlYW1NYW5hZ2VyLnJlcXVlc3RSYW5nZShlLHQpfX0se2tleToicmVxdWVzdExvYWRlZFN0cmVhbSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbU1hbmFnZXIucmVxdWVzdEFsbENodW5rcygpfX0se2tleToic2VuZFByb2dyZXNzaXZlRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zdHJlYW1NYW5hZ2VyLm9uUmVjZWl2ZURhdGEoe2NodW5rOmV9KX19LHtrZXk6Im9uTG9hZGVkU3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbU1hbmFnZXIub25Mb2FkZWRTdHJlYW0oKX19LHtrZXk6InRlcm1pbmF0ZSIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnN0cmVhbU1hbmFnZXIuYWJvcnQoKX19XSksdH0odyk7dC5OZXR3b3JrUGRmTWFuYWdlcj1TfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNodW5rZWRTdHJlYW1NYW5hZ2VyPXQuQ2h1bmtlZFN0cmVhbT12b2lkIDA7dmFyIG49cig2KTtmdW5jdGlvbiBhKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gaShlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIG8oZSx0LHIpe3JldHVybiB0JiZpKGUucHJvdG90eXBlLHQpLHImJmkoZSxyKSxlfXZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7YSh0aGlzLGUpLHRoaXMuYnl0ZXM9bmV3IFVpbnQ4QXJyYXkodCksdGhpcy5zdGFydD0wLHRoaXMucG9zPTAsdGhpcy5lbmQ9dCx0aGlzLmNodW5rU2l6ZT1yLHRoaXMubG9hZGVkQ2h1bmtzPVtdLHRoaXMubnVtQ2h1bmtzTG9hZGVkPTAsdGhpcy5udW1DaHVua3M9TWF0aC5jZWlsKHQvciksdGhpcy5tYW5hZ2VyPW4sdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9MCx0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rPS0xfXJldHVybiBvKGUsW3trZXk6ImdldE1pc3NpbmdDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMubnVtQ2h1bmtzO3Q8cjsrK3QpdGhpcy5sb2FkZWRDaHVua3NbdF18fGUucHVzaCh0KTtyZXR1cm4gZX19LHtrZXk6ImdldEJhc2VTdHJlYW1zIix2YWx1ZTpmdW5jdGlvbigpe3JldHVyblt0aGlzXX19LHtrZXk6ImFsbENodW5rc0xvYWRlZCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5udW1DaHVua3NMb2FkZWQ9PT10aGlzLm51bUNodW5rc319LHtrZXk6Im9uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jaHVua1NpemU7aWYoZSVyIT0wKXRocm93IG5ldyBFcnJvcigiQmFkIGJlZ2luIG9mZnNldDogIi5jb25jYXQoZSkpO3ZhciBuPWUrdC5ieXRlTGVuZ3RoO2lmKG4lciE9MCYmbiE9PXRoaXMuYnl0ZXMubGVuZ3RoKXRocm93IG5ldyBFcnJvcigiQmFkIGVuZCBvZmZzZXQ6ICIuY29uY2F0KG4pKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheSh0KSxlKTtmb3IodmFyIGE9TWF0aC5mbG9vcihlL3IpLGk9TWF0aC5mbG9vcigobi0xKS9yKSsxLG89YTtvPGk7KytvKXRoaXMubG9hZGVkQ2h1bmtzW29dfHwodGhpcy5sb2FkZWRDaHVua3Nbb109ITAsKyt0aGlzLm51bUNodW5rc0xvYWRlZCl9fSx7a2V5OiJvblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMucHJvZ3Jlc3NpdmVEYXRhTGVuZ3RoLHI9TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKTt0aGlzLmJ5dGVzLnNldChuZXcgVWludDhBcnJheShlKSx0KSx0Kz1lLmJ5dGVMZW5ndGgsdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9dDtmb3IodmFyIG49dD49dGhpcy5lbmQ/dGhpcy5udW1DaHVua3M6TWF0aC5mbG9vcih0L3RoaXMuY2h1bmtTaXplKSxhPXI7YTxuOysrYSl0aGlzLmxvYWRlZENodW5rc1thXXx8KHRoaXMubG9hZGVkQ2h1bmtzW2FdPSEwLCsrdGhpcy5udW1DaHVua3NMb2FkZWQpfX0se2tleToiZW5zdXJlQnl0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9TWF0aC5mbG9vcihlL3RoaXMuY2h1bmtTaXplKTtpZih0IT09dGhpcy5sYXN0U3VjY2Vzc2Z1bEVuc3VyZUJ5dGVDaHVuayl7aWYoIXRoaXMubG9hZGVkQ2h1bmtzW3RdKXRocm93IG5ldyBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKGUsZSsxKTt0aGlzLmxhc3RTdWNjZXNzZnVsRW5zdXJlQnl0ZUNodW5rPXR9fX0se2tleToiZW5zdXJlUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7aWYoIShlPj10fHx0PD10aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aCkpZm9yKHZhciByPXRoaXMuY2h1bmtTaXplLGE9TWF0aC5mbG9vcihlL3IpLGk9TWF0aC5mbG9vcigodC0xKS9yKSsxLG89YTtvPGk7KytvKWlmKCF0aGlzLmxvYWRlZENodW5rc1tvXSl0aHJvdyBuZXcgbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbihlLHQpfX0se2tleToibmV4dEVtcHR5Q2h1bmsiLHZhbHVlOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLm51bUNodW5rcyxyPTA7cjx0Oysrcil7dmFyIG49KGUrcikldDtpZighdGhpcy5sb2FkZWRDaHVua3Nbbl0pcmV0dXJuIG59cmV0dXJuIG51bGx9fSx7a2V5OiJoYXNDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISF0aGlzLmxvYWRlZENodW5rc1tlXX19LHtrZXk6ImdldEJ5dGUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5wb3M7cmV0dXJuIGU+PXRoaXMuZW5kPy0xOih0aGlzLmVuc3VyZUJ5dGUoZSksdGhpcy5ieXRlc1t0aGlzLnBvcysrXSl9fSx7a2V5OiJnZXRVaW50MTYiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5nZXRCeXRlKCksdD10aGlzLmdldEJ5dGUoKTtyZXR1cm4tMT09PWV8fC0xPT09dD8tMTooZTw8OCkrdH19LHtrZXk6ImdldEludDMyIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9fSx7a2V5OiJnZXRCeXRlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0mJmFyZ3VtZW50c1sxXSxyPXRoaXMuYnl0ZXMsbj10aGlzLnBvcyxhPXRoaXMuZW5kO2lmKCFlKXt0aGlzLmVuc3VyZVJhbmdlKG4sYSk7dmFyIGk9ci5zdWJhcnJheShuLGEpO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShpKTppfXZhciBvPW4rZTtvPmEmJihvPWEpLHRoaXMuZW5zdXJlUmFuZ2UobixvKSx0aGlzLnBvcz1vO3ZhciBzPXIuc3ViYXJyYXkobixvKTtyZXR1cm4gdD9uZXcgVWludDhDbGFtcGVkQXJyYXkocyk6c319LHtrZXk6InBlZWtCeXRlIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9fSx7a2V5OiJwZWVrQnl0ZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj10aGlzLmdldEJ5dGVzKGUsdCk7cmV0dXJuIHRoaXMucG9zLT1yLmxlbmd0aCxyfX0se2tleToiZ2V0Qnl0ZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmVuc3VyZVJhbmdlKGUsdCksdGhpcy5ieXRlcy5zdWJhcnJheShlLHQpfX0se2tleToic2tpcCIsdmFsdWU6ZnVuY3Rpb24oZSl7ZXx8KGU9MSksdGhpcy5wb3MrPWV9fSx7a2V5OiJyZXNldCIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fX0se2tleToibW92ZVN0YXJ0Iix2YWx1ZTpmdW5jdGlvbigpe3RoaXMuc3RhcnQ9dGhpcy5wb3N9fSx7a2V5OiJtYWtlU3ViU3RyZWFtIix2YWx1ZTpmdW5jdGlvbihlLHQscil7ZnVuY3Rpb24gbigpe310aGlzLmVuc3VyZVJhbmdlKGUsZSt0KSxuLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHRoaXMpLG4ucHJvdG90eXBlLmdldE1pc3NpbmdDaHVua3M9ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jaHVua1NpemUsdD1NYXRoLmZsb29yKHRoaXMuc3RhcnQvZSkscj1NYXRoLmZsb29yKCh0aGlzLmVuZC0xKS9lKSsxLG49W10sYT10O2E8cjsrK2EpdGhpcy5sb2FkZWRDaHVua3NbYV18fG4ucHVzaChhKTtyZXR1cm4gbn07dmFyIGE9bmV3IG47cmV0dXJuIGEucG9zPWEuc3RhcnQ9ZSxhLmVuZD1lK3R8fHRoaXMuZW5kLGEuZGljdD1yLGF9fSx7a2V5OiJsZW5ndGgiLGdldDpmdW5jdGlvbigpe3JldHVybiB0aGlzLmVuZC10aGlzLnN0YXJ0fX0se2tleToiaXNFbXB0eSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIDA9PT10aGlzLmxlbmd0aH19XSksZX0oKTt0LkNodW5rZWRTdHJlYW09czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXthKHRoaXMsZSksdGhpcy5sZW5ndGg9ci5sZW5ndGgsdGhpcy5jaHVua1NpemU9ci5yYW5nZUNodW5rU2l6ZSx0aGlzLnN0cmVhbT1uZXcgcyh0aGlzLmxlbmd0aCx0aGlzLmNodW5rU2l6ZSx0aGlzKSx0aGlzLnBkZk5ldHdvcmtTdHJlYW09dCx0aGlzLmRpc2FibGVBdXRvRmV0Y2g9ci5kaXNhYmxlQXV0b0ZldGNoLHRoaXMubXNnSGFuZGxlcj1yLm1zZ0hhbmRsZXIsdGhpcy5jdXJyUmVxdWVzdElkPTAsdGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnJlcXVlc3RzQnlDaHVuaz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMucHJvbWlzZXNCeVJlcXVlc3Q9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aD0wLHRoaXMuYWJvcnRlZD0hMSx0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCl9cmV0dXJuIG8oZSxbe2tleToib25Mb2FkZWRTdHJlYW0iLHZhbHVlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6InNlbmRSZXF1ZXN0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPXRoaXMsYT10aGlzLnBkZk5ldHdvcmtTdHJlYW0uZ2V0UmFuZ2VSZWFkZXIoZSx0KTthLmlzU3RyZWFtaW5nU3VwcG9ydGVkfHwoYS5vblByb2dyZXNzPXRoaXMub25Qcm9ncmVzcy5iaW5kKHRoaXMpKTt2YXIgaT1bXSxvPTA7bmV3IFByb21pc2UoKGZ1bmN0aW9uKGUsdCl7YS5yZWFkKCkudGhlbigoZnVuY3Rpb24gcyhsKXt0cnl7aWYoIWwuZG9uZSl7dmFyIGM9bC52YWx1ZTtyZXR1cm4gaS5wdXNoKGMpLG8rPSgwLG4uYXJyYXlCeXRlTGVuZ3RoKShjKSxhLmlzU3RyZWFtaW5nU3VwcG9ydGVkJiZyLm9uUHJvZ3Jlc3Moe2xvYWRlZDpvfSksdm9pZCBhLnJlYWQoKS50aGVuKHMsdCl9dmFyIHU9KDAsbi5hcnJheXNUb0J5dGVzKShpKTtpPW51bGwsZSh1KX1jYXRjaChlKXt0KGUpfX0pLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKHQpe3IuYWJvcnRlZHx8ci5vblJlY2VpdmVEYXRhKHtjaHVuazp0LGJlZ2luOmV9KX0pKX19LHtrZXk6InJlcXVlc3RBbGxDaHVua3MiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGUpLHRoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucHJvbWlzZX19LHtrZXk6Il9yZXF1ZXN0Q2h1bmtzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmN1cnJSZXF1ZXN0SWQrKyxyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5jaHVua3NOZWVkZWRCeVJlcXVlc3RbdF09cjt2YXIgYT0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIHMsbD1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHM9bC5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBjPXMudmFsdWU7dGhpcy5zdHJlYW0uaGFzQ2h1bmsoYyl8fChyW2NdPSEwKX19Y2F0Y2goZSl7aT0hMCxvPWV9ZmluYWxseXt0cnl7YXx8bnVsbD09bC5yZXR1cm58fGwucmV0dXJuKCl9ZmluYWxseXtpZihpKXRocm93IG99fWlmKCgwLG4uaXNFbXB0eU9iaikocikpcmV0dXJuIFByb21pc2UucmVzb2x2ZSgpO3ZhciB1PSgwLG4uY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7dGhpcy5wcm9taXNlc0J5UmVxdWVzdFt0XT11O3ZhciBmPVtdO2Zvcih2YXIgaCBpbiByKShofD0wKWluIHRoaXMucmVxdWVzdHNCeUNodW5rfHwodGhpcy5yZXF1ZXN0c0J5Q2h1bmtbaF09W10sZi5wdXNoKGgpKSx0aGlzLnJlcXVlc3RzQnlDaHVua1toXS5wdXNoKHQpO2lmKCFmLmxlbmd0aClyZXR1cm4gdS5wcm9taXNlO3ZhciBkPXRoaXMuZ3JvdXBDaHVua3MoZikscD0hMCxtPSExLGc9dm9pZCAwO3RyeXtmb3IodmFyIHYseT1kW1N5bWJvbC5pdGVyYXRvcl0oKTshKHA9KHY9eS5uZXh0KCkpLmRvbmUpO3A9ITApe3ZhciBiPXYudmFsdWUsdz1iLmJlZ2luQ2h1bmsqdGhpcy5jaHVua1NpemUsaz1NYXRoLm1pbihiLmVuZENodW5rKnRoaXMuY2h1bmtTaXplLHRoaXMubGVuZ3RoKTt0aGlzLnNlbmRSZXF1ZXN0KHcsayl9fWNhdGNoKGUpe209ITAsZz1lfWZpbmFsbHl7dHJ5e3B8fG51bGw9PXkucmV0dXJufHx5LnJldHVybigpfWZpbmFsbHl7aWYobSl0aHJvdyBnfX1yZXR1cm4gdS5wcm9taXNlfX0se2tleToiZ2V0U3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLnN0cmVhbX19LHtrZXk6InJlcXVlc3RSYW5nZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0PU1hdGgubWluKHQsdGhpcy5sZW5ndGgpO2Zvcih2YXIgcj10aGlzLmdldEJlZ2luQ2h1bmsoZSksbj10aGlzLmdldEVuZENodW5rKHQpLGE9W10saT1yO2k8bjsrK2kpYS5wdXNoKGkpO3JldHVybiB0aGlzLl9yZXF1ZXN0Q2h1bmtzKGEpfX0se2tleToicmVxdWVzdFJhbmdlcyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06W10sdD1bXSxyPSEwLG49ITEsYT12b2lkIDA7dHJ5e2Zvcih2YXIgaSxvPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEocj0oaT1vLm5leHQoKSkuZG9uZSk7cj0hMClmb3IodmFyIHM9aS52YWx1ZSxsPXRoaXMuZ2V0QmVnaW5DaHVuayhzLmJlZ2luKSxjPXRoaXMuZ2V0RW5kQ2h1bmsocy5lbmQpLHU9bDt1PGM7Kyt1KXQuaW5jbHVkZXModSl8fHQucHVzaCh1KX1jYXRjaChlKXtuPSEwLGE9ZX1maW5hbGx5e3RyeXtyfHxudWxsPT1vLnJldHVybnx8by5yZXR1cm4oKX1maW5hbGx5e2lmKG4pdGhyb3cgYX19cmV0dXJuIHQuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS10fSkpLHRoaXMuX3JlcXVlc3RDaHVua3ModCl9fSx7a2V5OiJncm91cENodW5rcyIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9LTEsbj0tMSxhPTAsaT1lLmxlbmd0aDthPGk7KythKXt2YXIgbz1lW2FdO3I8MCYmKHI9byksbj49MCYmbisxIT09byYmKHQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOm4rMX0pLHI9byksYSsxPT09ZS5sZW5ndGgmJnQucHVzaCh7YmVnaW5DaHVuazpyLGVuZENodW5rOm8rMX0pLG49b31yZXR1cm4gdH19LHtrZXk6Im9uUHJvZ3Jlc3MiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUrZS5sb2FkZWQsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uUmVjZWl2ZURhdGEiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWUuY2h1bmsscj12b2lkIDA9PT1lLmJlZ2luLGE9cj90aGlzLnByb2dyZXNzaXZlRGF0YUxlbmd0aDplLmJlZ2luLGk9YSt0LmJ5dGVMZW5ndGgsbz1NYXRoLmZsb29yKGEvdGhpcy5jaHVua1NpemUpLHM9aTx0aGlzLmxlbmd0aD9NYXRoLmZsb29yKGkvdGhpcy5jaHVua1NpemUpOk1hdGguY2VpbChpL3RoaXMuY2h1bmtTaXplKTtyPyh0aGlzLnN0cmVhbS5vblJlY2VpdmVQcm9ncmVzc2l2ZURhdGEodCksdGhpcy5wcm9ncmVzc2l2ZURhdGFMZW5ndGg9aSk6dGhpcy5zdHJlYW0ub25SZWNlaXZlRGF0YShhLHQpLHRoaXMuc3RyZWFtLmFsbENodW5rc0xvYWRlZCgpJiZ0aGlzLl9sb2FkZWRTdHJlYW1DYXBhYmlsaXR5LnJlc29sdmUodGhpcy5zdHJlYW0pO2Zvcih2YXIgbD1bXSxjPW87YzxzOysrYyl7dmFyIHU9dGhpcy5yZXF1ZXN0c0J5Q2h1bmtbY118fFtdO2RlbGV0ZSB0aGlzLnJlcXVlc3RzQnlDaHVua1tjXTt2YXIgZj0hMCxoPSExLGQ9dm9pZCAwO3RyeXtmb3IodmFyIHAsbT11W1N5bWJvbC5pdGVyYXRvcl0oKTshKGY9KHA9bS5uZXh0KCkpLmRvbmUpO2Y9ITApe3ZhciBnPXAudmFsdWUsdj10aGlzLmNodW5rc05lZWRlZEJ5UmVxdWVzdFtnXTtjIGluIHYmJmRlbGV0ZSB2W2NdLCgwLG4uaXNFbXB0eU9iaikodikmJmwucHVzaChnKX19Y2F0Y2goZSl7aD0hMCxkPWV9ZmluYWxseXt0cnl7Znx8bnVsbD09bS5yZXR1cm58fG0ucmV0dXJuKCl9ZmluYWxseXtpZihoKXRocm93IGR9fX1pZighdGhpcy5kaXNhYmxlQXV0b0ZldGNoJiYoMCxuLmlzRW1wdHlPYmopKHRoaXMucmVxdWVzdHNCeUNodW5rKSl7dmFyIHk7aWYoMT09PXRoaXMuc3RyZWFtLm51bUNodW5rc0xvYWRlZCl7dmFyIGI9dGhpcy5zdHJlYW0ubnVtQ2h1bmtzLTE7dGhpcy5zdHJlYW0uaGFzQ2h1bmsoYil8fCh5PWIpfWVsc2UgeT10aGlzLnN0cmVhbS5uZXh0RW1wdHlDaHVuayhzKTtOdW1iZXIuaXNJbnRlZ2VyKHkpJiZ0aGlzLl9yZXF1ZXN0Q2h1bmtzKFt5XSl9Zm9yKHZhciB3PTA7dzxsLmxlbmd0aDt3Kyspe3ZhciBrPWxbd10sUz10aGlzLnByb21pc2VzQnlSZXF1ZXN0W2tdO2RlbGV0ZSB0aGlzLnByb21pc2VzQnlSZXF1ZXN0W2tdLFMucmVzb2x2ZSgpfXRoaXMubXNnSGFuZGxlci5zZW5kKCJEb2NQcm9ncmVzcyIse2xvYWRlZDp0aGlzLnN0cmVhbS5udW1DaHVua3NMb2FkZWQqdGhpcy5jaHVua1NpemUsdG90YWw6dGhpcy5sZW5ndGh9KX19LHtrZXk6Im9uRXJyb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuX2xvYWRlZFN0cmVhbUNhcGFiaWxpdHkucmVqZWN0KGUpfX0se2tleToiZ2V0QmVnaW5DaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoZS90aGlzLmNodW5rU2l6ZSl9fSx7a2V5OiJnZXRFbmRDaHVuayIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE1hdGguZmxvb3IoKGUtMSkvdGhpcy5jaHVua1NpemUpKzF9fSx7a2V5OiJhYm9ydCIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGUgaW4gdGhpcy5hYm9ydGVkPSEwLHRoaXMucGRmTmV0d29ya1N0cmVhbSYmdGhpcy5wZGZOZXR3b3JrU3RyZWFtLmNhbmNlbEFsbFJlcXVlc3RzKCJhYm9ydCIpLHRoaXMucHJvbWlzZXNCeVJlcXVlc3QpdGhpcy5wcm9taXNlc0J5UmVxdWVzdFtlXS5yZWplY3QobmV3IEVycm9yKCJSZXF1ZXN0IHdhcyBhYm9ydGVkIikpfX1dKSxlfSgpO3QuQ2h1bmtlZFN0cmVhbU1hbmFnZXI9bH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QREZEb2N1bWVudD10LlBhZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE1NCksaT1yKDE1NSksbz1yKDE1Nykscz1yKDE2OSksbD1yKDE2NyksYz1yKDE1NiksdT1yKDE3MCksZj1yKDE3MSksaD1yKDE4NSk7ZnVuY3Rpb24gZChlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9ZnVuY3Rpb24gcChlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIG0oZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBnKGUsdCxyKXtyZXR1cm4gdCYmbShlLnByb3RvdHlwZSx0KSxyJiZtKGUsciksZX12YXIgdj1bMCwwLDYxMiw3OTJdO2Z1bmN0aW9uIHkoZSx0KXtyZXR1cm4iZGlzcGxheSI9PT10JiZlLnZpZXdhYmxlfHwicHJpbnQiPT09dCYmZS5wcmludGFibGV9dmFyIGI9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQucGRmTWFuYWdlcixuPXQueHJlZixhPXQucGFnZUluZGV4LGk9dC5wYWdlRGljdCxvPXQucmVmLHM9dC5mb250Q2FjaGUsbD10LmJ1aWx0SW5DTWFwQ2FjaGUsYz10LnBkZkZ1bmN0aW9uRmFjdG9yeTtwKHRoaXMsZSksdGhpcy5wZGZNYW5hZ2VyPXIsdGhpcy5wYWdlSW5kZXg9YSx0aGlzLnBhZ2VEaWN0PWksdGhpcy54cmVmPW4sdGhpcy5yZWY9byx0aGlzLmZvbnRDYWNoZT1zLHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1sLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5PWMsdGhpcy5ldmFsdWF0b3JPcHRpb25zPXIuZXZhbHVhdG9yT3B0aW9ucyx0aGlzLnJlc291cmNlc1Byb21pc2U9bnVsbDt2YXIgdT0icCIuY29uY2F0KHRoaXMucGFnZUluZGV4LCJfIiksZj17b2JqOjB9O3RoaXMuaWRGYWN0b3J5PXtjcmVhdGVPYmpJZDpmdW5jdGlvbigpe3JldHVybiB1KyArK2Yub2JqfX19cmV0dXJuIGcoZSxbe2tleToiX2dldEluaGVyaXRhYmxlUHJvcGVydHkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OnRoaXMucGFnZURpY3Qsa2V5OmUsZ2V0QXJyYXk6dCxzdG9wV2hlbkZvdW5kOiExfSk7cmV0dXJuIEFycmF5LmlzQXJyYXkocik/MSE9PXIubGVuZ3RoJiYoMCxpLmlzRGljdCkoclswXSk/aS5EaWN0Lm1lcmdlKHRoaXMueHJlZixyKTpyWzBdOnJ9fSx7a2V5OiJnZXRDb250ZW50U3RyZWFtIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlLHQ9dGhpcy5jb250ZW50O2lmKEFycmF5LmlzQXJyYXkodCkpe3ZhciByPXRoaXMueHJlZixuPVtdLGE9ITAscz0hMSxsPXZvaWQgMDt0cnl7Zm9yKHZhciBjLHU9dFtTeW1ib2wuaXRlcmF0b3JdKCk7IShhPShjPXUubmV4dCgpKS5kb25lKTthPSEwKXt2YXIgZj1jLnZhbHVlO24ucHVzaChyLmZldGNoSWZSZWYoZikpfX1jYXRjaChlKXtzPSEwLGw9ZX1maW5hbGx5e3RyeXthfHxudWxsPT11LnJldHVybnx8dS5yZXR1cm4oKX1maW5hbGx5e2lmKHMpdGhyb3cgbH19ZT1uZXcgby5TdHJlYW1zU2VxdWVuY2VTdHJlYW0obil9ZWxzZSBlPSgwLGkuaXNTdHJlYW0pKHQpP3Q6bmV3IG8uTnVsbFN0cmVhbTtyZXR1cm4gZX19LHtrZXk6ImxvYWRSZXNvdXJjZXMiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7cmV0dXJuIHRoaXMucmVzb3VyY2VzUHJvbWlzZXx8KHRoaXMucmVzb3VyY2VzUHJvbWlzZT10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsInJlc291cmNlcyIpKSx0aGlzLnJlc291cmNlc1Byb21pc2UudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbmV3IGEuT2JqZWN0TG9hZGVyKHQucmVzb3VyY2VzLGUsdC54cmVmKS5sb2FkKCl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsYT1lLnRhc2ssaT1lLmludGVudCxvPWUucmVuZGVySW50ZXJhY3RpdmVGb3JtcyxzPXRoaXMucGRmTWFuYWdlci5lbnN1cmUodGhpcywiZ2V0Q29udGVudFN0cmVhbSIpLGw9dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSksYz1uZXcgZi5QYXJ0aWFsRXZhbHVhdG9yKHtwZGZNYW5hZ2VyOnRoaXMucGRmTWFuYWdlcix4cmVmOnRoaXMueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGlkRmFjdG9yeTp0aGlzLmlkRmFjdG9yeSxmb250Q2FjaGU6dGhpcy5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0aGlzLmJ1aWx0SW5DTWFwQ2FjaGUsb3B0aW9uczp0aGlzLmV2YWx1YXRvck9wdGlvbnMscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMucGRmRnVuY3Rpb25GYWN0b3J5fSksaD1Qcm9taXNlLmFsbChbcyxsXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIG49ZChlLDEpWzBdLG89bmV3IHUuT3BlcmF0b3JMaXN0KGkscix0LnBhZ2VJbmRleCk7cmV0dXJuIHIuc2VuZCgiU3RhcnRSZW5kZXJQYWdlIix7dHJhbnNwYXJlbmN5OmMuaGFzQmxlbmRNb2Rlcyh0LnJlc291cmNlcykscGFnZUluZGV4OnQucGFnZUluZGV4LGludGVudDppfSksYy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6YSxyZXNvdXJjZXM6dC5yZXNvdXJjZXMsb3BlcmF0b3JMaXN0Om99KS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvfSkpfSkpO3JldHVybiBQcm9taXNlLmFsbChbaCx0aGlzLl9wYXJzZWRBbm5vdGF0aW9uc10pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWQoZSwyKSxyPXRbMF0scz10WzFdO2lmKDA9PT1zLmxlbmd0aClyZXR1cm4gci5mbHVzaCghMCkscjt2YXIgbD1bXSx1PSEwLGY9ITEsaD12b2lkIDA7dHJ5e2Zvcih2YXIgcCxtPXNbU3ltYm9sLml0ZXJhdG9yXSgpOyEodT0ocD1tLm5leHQoKSkuZG9uZSk7dT0hMCl7dmFyIGc9cC52YWx1ZTt5KGcsaSkmJmwucHVzaChnLmdldE9wZXJhdG9yTGlzdChjLGEsbykpfX1jYXRjaChlKXtmPSEwLGg9ZX1maW5hbGx5e3RyeXt1fHxudWxsPT1tLnJldHVybnx8bS5yZXR1cm4oKX1maW5hbGx5e2lmKGYpdGhyb3cgaH19cmV0dXJuIFByb21pc2UuYWxsKGwpLnRoZW4oKGZ1bmN0aW9uKGUpe3IuYWRkT3Aobi5PUFMuYmVnaW5Bbm5vdGF0aW9ucyxbXSk7dmFyIHQ9ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7ISh0PShvPXMubmV4dCgpKS5kb25lKTt0PSEwKXt2YXIgbD1vLnZhbHVlO3IuYWRkT3BMaXN0KGwpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXt0fHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHIuYWRkT3Aobi5PUFMuZW5kQW5ub3RhdGlvbnMsW10pLHIuZmx1c2goITApLHJ9KSl9KSl9fSx7a2V5OiJleHRyYWN0VGV4dENvbnRlbnQiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj1lLmhhbmRsZXIsbj1lLnRhc2ssYT1lLm5vcm1hbGl6ZVdoaXRlc3BhY2UsaT1lLnNpbmssbz1lLmNvbWJpbmVUZXh0SXRlbXMscz10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImdldENvbnRlbnRTdHJlYW0iKSxsPXRoaXMubG9hZFJlc291cmNlcyhbIkV4dEdTdGF0ZSIsIlhPYmplY3QiLCJGb250Il0pO3JldHVybiBQcm9taXNlLmFsbChbcyxsXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHM9ZChlLDEpWzBdO3JldHVybiBuZXcgZi5QYXJ0aWFsRXZhbHVhdG9yKHtwZGZNYW5hZ2VyOnQucGRmTWFuYWdlcix4cmVmOnQueHJlZixoYW5kbGVyOnIscGFnZUluZGV4OnQucGFnZUluZGV4LGlkRmFjdG9yeTp0LmlkRmFjdG9yeSxmb250Q2FjaGU6dC5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTp0LmJ1aWx0SW5DTWFwQ2FjaGUsb3B0aW9uczp0LmV2YWx1YXRvck9wdGlvbnMscGRmRnVuY3Rpb25GYWN0b3J5OnQucGRmRnVuY3Rpb25GYWN0b3J5fSkuZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpzLHRhc2s6bixyZXNvdXJjZXM6dC5yZXNvdXJjZXMsbm9ybWFsaXplV2hpdGVzcGFjZTphLGNvbWJpbmVUZXh0SXRlbXM6byxzaW5rOml9KX0pKX19LHtrZXk6ImdldEFubm90YXRpb25zRGF0YSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX3BhcnNlZEFubm90YXRpb25zLnRoZW4oKGZ1bmN0aW9uKHQpe2Zvcih2YXIgcj1bXSxuPTAsYT10Lmxlbmd0aDtuPGE7bisrKWUmJiF5KHRbbl0sZSl8fHIucHVzaCh0W25dLmRhdGEpO3JldHVybiByfSkpfX0se2tleToiY29udGVudCIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucGFnZURpY3QuZ2V0KCJDb250ZW50cyIpfX0se2tleToicmVzb3VyY2VzIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmVzb3VyY2VzIix0aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJSZXNvdXJjZXMiKXx8aS5EaWN0LmVtcHR5KX19LHtrZXk6Im1lZGlhQm94IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLl9nZXRJbmhlcml0YWJsZVByb3BlcnR5KCJNZWRpYUJveCIsITApO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/KDAsbi5zaGFkb3cpKHRoaXMsIm1lZGlhQm94IixlKTooMCxuLnNoYWRvdykodGhpcywibWVkaWFCb3giLHYpfX0se2tleToiY3JvcEJveCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSgiQ3JvcEJveCIsITApO3JldHVybiBBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/KDAsbi5zaGFkb3cpKHRoaXMsImNyb3BCb3giLGUpOigwLG4uc2hhZG93KSh0aGlzLCJjcm9wQm94Iix0aGlzLm1lZGlhQm94KX19LHtrZXk6InVzZXJVbml0IixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnBhZ2VEaWN0LmdldCgiVXNlclVuaXQiKTtyZXR1cm4oISgwLG4uaXNOdW0pKGUpfHxlPD0wKSYmKGU9MSksKDAsbi5zaGFkb3cpKHRoaXMsInVzZXJVbml0IixlKX19LHtrZXk6InZpZXciLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubWVkaWFCb3gsdD10aGlzLmNyb3BCb3g7aWYoZT09PXQpcmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInZpZXciLGUpO3ZhciByPW4uVXRpbC5pbnRlcnNlY3QodCxlKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmlldyIscnx8ZSl9fSx7a2V5OiJyb3RhdGUiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIlJvdGF0ZSIpfHwwO3JldHVybiBlJTkwIT0wP2U9MDplPj0zNjA/ZSU9MzYwOmU8MCYmKGU9KGUlMzYwKzM2MCklMzYwKSwoMCxuLnNoYWRvdykodGhpcywicm90YXRlIixlKX19LHtrZXk6ImFubm90YXRpb25zIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYW5ub3RhdGlvbnMiLHRoaXMuX2dldEluaGVyaXRhYmxlUHJvcGVydHkoIkFubm90cyIpfHxbXSl9fSx7a2V5OiJfcGFyc2VkQW5ub3RhdGlvbnMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMsdD10aGlzLnBkZk1hbmFnZXIuZW5zdXJlKHRoaXMsImFubm90YXRpb25zIikudGhlbigoZnVuY3Rpb24oKXtmb3IodmFyIHQ9ZS5hbm5vdGF0aW9ucyxyPVtdLGE9MCxpPXQubGVuZ3RoO2E8aTthKyspci5wdXNoKHMuQW5ub3RhdGlvbkZhY3RvcnkuY3JlYXRlKGUueHJlZix0W2FdLGUucGRmTWFuYWdlcixlLmlkRmFjdG9yeSkpO3JldHVybiBQcm9taXNlLmFsbChyKS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZS5maWx0ZXIoKGZ1bmN0aW9uKGUpe3JldHVybiEhZX0pKX0pLChmdW5jdGlvbihlKXtyZXR1cm4oMCxuLndhcm4pKCdfcGFyc2VkQW5ub3RhdGlvbnM6ICInLmNvbmNhdChlLCciLicpKSxbXX0pKX0pKTtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiX3BhcnNlZEFubm90YXRpb25zIix0KX19XSksZX0oKTtmdW5jdGlvbiB3KGUsdCxyLG4pe3ZhciBhPWUucG9zLGk9ZS5lbmQ7YStyPmkmJihyPWktYSk7Zm9yKHZhciBvPVtdLHM9MDtzPHI7KytzKW8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUuZ2V0Qnl0ZSgpKSk7dmFyIGw9by5qb2luKCIiKTtlLnBvcz1hO3ZhciBjPW4/bC5sYXN0SW5kZXhPZih0KTpsLmluZGV4T2YodCk7cmV0dXJuLTEhPT1jJiYoZS5wb3MrPWMsITApfXQuUGFnZT1iO3ZhciBrPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIpe3ZhciBzO2lmKHAodGhpcyxlKSwoMCxpLmlzU3RyZWFtKShyKSlzPXI7ZWxzZXtpZighKDAsbi5pc0FycmF5QnVmZmVyKShyKSl0aHJvdyBuZXcgRXJyb3IoIlBERkRvY3VtZW50OiBVbmtub3duIGFyZ3VtZW50IHR5cGUiKTtzPW5ldyBvLlN0cmVhbShyKX1pZihzLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBERkRvY3VtZW50OiBTdHJlYW0gbXVzdCBoYXZlIGRhdGEiKTt0aGlzLnBkZk1hbmFnZXI9dCx0aGlzLnN0cmVhbT1zLHRoaXMueHJlZj1uZXcgYS5YUmVmKHMsdCksdGhpcy5wZGZGdW5jdGlvbkZhY3Rvcnk9bmV3IGguUERGRnVuY3Rpb25GYWN0b3J5KHt4cmVmOnRoaXMueHJlZixpc0V2YWxTdXBwb3J0ZWQ6dC5ldmFsdWF0b3JPcHRpb25zLmlzRXZhbFN1cHBvcnRlZH0pLHRoaXMuX3BhZ2VQcm9taXNlcz1bXX1yZXR1cm4gZyhlLFt7a2V5OiJwYXJzZSIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5zZXR1cChlKTt2YXIgdD10aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoIlZlcnNpb24iKTsoMCxpLmlzTmFtZSkodCkmJih0aGlzLnBkZkZvcm1hdFZlcnNpb249dC5uYW1lKTt0cnl7aWYodGhpcy5hY3JvRm9ybT10aGlzLmNhdGFsb2cuY2F0RGljdC5nZXQoIkFjcm9Gb3JtIiksdGhpcy5hY3JvRm9ybSl7dGhpcy54ZmE9dGhpcy5hY3JvRm9ybS5nZXQoIlhGQSIpO3ZhciByPXRoaXMuYWNyb0Zvcm0uZ2V0KCJGaWVsZHMiKTtyJiZBcnJheS5pc0FycmF5KHIpJiYwIT09ci5sZW5ndGh8fHRoaXMueGZhfHwodGhpcy5hY3JvRm9ybT1udWxsKX19Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJDYW5ub3QgZmV0Y2ggQWNyb0Zvcm0gZW50cnk7IGFzc3VtaW5nIG5vIEFjcm9Gb3JtcyBhcmUgcHJlc2VudCIpLHRoaXMuYWNyb0Zvcm09bnVsbH19fSx7a2V5OiJjaGVja0hlYWRlciIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbTtpZihlLnJlc2V0KCksdyhlLCIlUERGLSIsMTAyNCkpe2UubW92ZVN0YXJ0KCk7Zm9yKHZhciB0LHI9IiI7KHQ9ZS5nZXRCeXRlKCkpPjMyJiYhKHIubGVuZ3RoPj0xMik7KXIrPVN0cmluZy5mcm9tQ2hhckNvZGUodCk7dGhpcy5wZGZGb3JtYXRWZXJzaW9ufHwodGhpcy5wZGZGb3JtYXRWZXJzaW9uPXIuc3Vic3RyaW5nKDUpKX19fSx7a2V5OiJwYXJzZVN0YXJ0WFJlZiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnhyZWYuc2V0U3RhcnRYUmVmKHRoaXMuc3RhcnRYUmVmKX19LHtrZXk6InNldHVwIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLnhyZWYucGFyc2UoZSksdGhpcy5jYXRhbG9nPW5ldyBhLkNhdGFsb2codGhpcy5wZGZNYW5hZ2VyLHRoaXMueHJlZil9fSx7a2V5OiJfZ2V0TGluZWFyaXphdGlvblBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY2F0YWxvZyxyPXRoaXMubGluZWFyaXphdGlvbjsoMCxuLmFzc2VydCkociYmci5wYWdlRmlyc3Q9PT1lKTt2YXIgYT1uZXcgaS5SZWYoci5vYmplY3ROdW1iZXJGaXJzdCwwKTtyZXR1cm4gdGhpcy54cmVmLmZldGNoQXN5bmMoYSkudGhlbigoZnVuY3Rpb24oZSl7aWYoKDAsaS5pc0RpY3QpKGUsIlBhZ2UiKXx8KDAsaS5pc0RpY3QpKGUpJiYhZS5oYXMoIlR5cGUiKSYmZS5oYXMoIkNvbnRlbnRzIikpcmV0dXJuIGEmJiF0LnBhZ2VLaWRzQ291bnRDYWNoZS5oYXMoYSkmJnQucGFnZUtpZHNDb3VudENhY2hlLnB1dChhLDEpLFtlLGFdO3Rocm93IG5ldyBuLkZvcm1hdEVycm9yKCJUaGUgTGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGRvZXNuJ3QgcG9pbnQgdG8gYSB2YWxpZCBQYWdlIGRpY3Rpb25hcnkuIil9KSkuY2F0Y2goKGZ1bmN0aW9uKHIpe3JldHVybigwLG4uaW5mbykociksdC5nZXRQYWdlRGljdChlKX0pKX19LHtrZXk6ImdldFBhZ2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXM7aWYodm9pZCAwIT09dGhpcy5fcGFnZVByb21pc2VzW2VdKXJldHVybiB0aGlzLl9wYWdlUHJvbWlzZXNbZV07dmFyIHI9dGhpcy5jYXRhbG9nLG49dGhpcy5saW5lYXJpemF0aW9uLGE9biYmbi5wYWdlRmlyc3Q9PT1lP3RoaXMuX2dldExpbmVhcml6YXRpb25QYWdlKGUpOnIuZ2V0UGFnZURpY3QoZSk7cmV0dXJuIHRoaXMuX3BhZ2VQcm9taXNlc1tlXT1hLnRoZW4oKGZ1bmN0aW9uKG4pe3ZhciBhPWQobiwyKSxpPWFbMF0sbz1hWzFdO3JldHVybiBuZXcgYih7cGRmTWFuYWdlcjp0LnBkZk1hbmFnZXIseHJlZjp0LnhyZWYscGFnZUluZGV4OmUscGFnZURpY3Q6aSxyZWY6byxmb250Q2FjaGU6ci5mb250Q2FjaGUsYnVpbHRJbkNNYXBDYWNoZTpyLmJ1aWx0SW5DTWFwQ2FjaGUscGRmRnVuY3Rpb25GYWN0b3J5OnQucGRmRnVuY3Rpb25GYWN0b3J5fSl9KSl9fSx7a2V5OiJjaGVja0ZpcnN0UGFnZSIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3JldHVybiB0aGlzLmdldFBhZ2UoMCkuY2F0Y2goKGZ1bmN0aW9uKHQpe2lmKHQgaW5zdGFuY2VvZiBuLlhSZWZFbnRyeUV4Y2VwdGlvbil0aHJvdyBlLl9wYWdlUHJvbWlzZXMubGVuZ3RoPTAsZS5jbGVhbnVwKCksbmV3IG4uWFJlZlBhcnNlRXhjZXB0aW9ufSkpfX0se2tleToiZm9udEZhbGxiYWNrIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiB0aGlzLmNhdGFsb2cuZm9udEZhbGxiYWNrKGUsdCl9fSx7a2V5OiJjbGVhbnVwIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLmNhdGFsb2cuY2xlYW51cCgpfX0se2tleToibGluZWFyaXphdGlvbiIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT1jLkxpbmVhcml6YXRpb24uY3JlYXRlKHRoaXMuc3RyZWFtKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLG4uaW5mbykoZSl9cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImxpbmVhcml6YXRpb24iLGUpfX0se2tleToic3RhcnRYUmVmIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PTA7aWYodGhpcy5saW5lYXJpemF0aW9uKWUucmVzZXQoKSx3KGUsImVuZG9iaiIsMTAyNCkmJih0PWUucG9zKzYpO2Vsc2V7Zm9yKHZhciByPSJzdGFydHhyZWYiLmxlbmd0aCxhPSExLGk9ZS5lbmQ7IWEmJmk+MDspKGktPTEwMjQtcik8MCYmKGk9MCksZS5wb3M9aSxhPXcoZSwic3RhcnR4cmVmIiwxMDI0LCEwKTtpZihhKXt2YXIgbztlLnNraXAoOSk7ZG97bz1lLmdldEJ5dGUoKX13aGlsZSgoMCxuLmlzU3BhY2UpKG8pKTtmb3IodmFyIHM9IiI7bz49MzImJm88PTU3OylzKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG8pLG89ZS5nZXRCeXRlKCk7dD1wYXJzZUludChzLDEwKSxpc05hTih0KSYmKHQ9MCl9fXJldHVybigwLG4uc2hhZG93KSh0aGlzLCJzdGFydFhSZWYiLHQpfX0se2tleToibnVtUGFnZXMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGluZWFyaXphdGlvbix0PWU/ZS5udW1QYWdlczp0aGlzLmNhdGFsb2cubnVtUGFnZXM7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIix0KX19LHtrZXk6ImRvY3VtZW50SW5mbyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD17VGl0bGU6bi5pc1N0cmluZyxBdXRob3I6bi5pc1N0cmluZyxTdWJqZWN0Om4uaXNTdHJpbmcsS2V5d29yZHM6bi5pc1N0cmluZyxDcmVhdG9yOm4uaXNTdHJpbmcsUHJvZHVjZXI6bi5pc1N0cmluZyxDcmVhdGlvbkRhdGU6bi5pc1N0cmluZyxNb2REYXRlOm4uaXNTdHJpbmcsVHJhcHBlZDppLmlzTmFtZX0scj17UERGRm9ybWF0VmVyc2lvbjp0aGlzLnBkZkZvcm1hdFZlcnNpb24sSXNMaW5lYXJpemVkOiEhdGhpcy5saW5lYXJpemF0aW9uLElzQWNyb0Zvcm1QcmVzZW50OiEhdGhpcy5hY3JvRm9ybSxJc1hGQVByZXNlbnQ6ISF0aGlzLnhmYX07dHJ5e2U9dGhpcy54cmVmLnRyYWlsZXIuZ2V0KCJJbmZvIil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG4uTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxuLmluZm8pKCJUaGUgZG9jdW1lbnQgaW5mb3JtYXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfWlmKCgwLGkuaXNEaWN0KShlKSl7dmFyIGE9ITAsbz0hMSxzPXZvaWQgMDt0cnl7Zm9yKHZhciBsLGM9ZS5nZXRLZXlzKClbU3ltYm9sLml0ZXJhdG9yXSgpOyEoYT0obD1jLm5leHQoKSkuZG9uZSk7YT0hMCl7dmFyIHU9bC52YWx1ZSxmPWUuZ2V0KHUpO2lmKHRbdV0pdFt1XShmKT9yW3VdPSJzdHJpbmciIT10eXBlb2YgZj9mOigwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGYpOigwLG4uaW5mbykoJ0JhZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAiJy5jb25jYXQodSwnIi4nKSk7ZWxzZSBpZigic3RyaW5nIj09dHlwZW9mIHUpe3ZhciBoPXZvaWQgMDtpZigoMCxuLmlzU3RyaW5nKShmKSloPSgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGYpO2Vsc2V7aWYoISgoMCxpLmlzTmFtZSkoZil8fCgwLG4uaXNOdW0pKGYpfHwoMCxuLmlzQm9vbCkoZikpKXsoMCxuLmluZm8pKCdVbnN1cHBvcnRlZCB2YWx1ZSBpbiBkb2N1bWVudCBpbmZvIGZvciAoY3VzdG9tKSAiJy5jb25jYXQodSwnIi4nKSk7Y29udGludWV9aD1mfXIuQ3VzdG9tfHwoci5DdXN0b209T2JqZWN0LmNyZWF0ZShudWxsKSksci5DdXN0b21bdV09aH19fWNhdGNoKGUpe289ITAscz1lfWZpbmFsbHl7dHJ5e2F8fG51bGw9PWMucmV0dXJufHxjLnJldHVybigpfWZpbmFsbHl7aWYobyl0aHJvdyBzfX19cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImRvY3VtZW50SW5mbyIscil9fSx7a2V5OiJmaW5nZXJwcmludCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGUsdD10aGlzLnhyZWYudHJhaWxlci5nZXQoIklEIik7QXJyYXkuaXNBcnJheSh0KSYmdFswXSYmKDAsbi5pc1N0cmluZykodFswXSkmJiJcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIhPT10WzBdP2U9KDAsbi5zdHJpbmdUb0J5dGVzKSh0WzBdKToodGhpcy5zdHJlYW0uZW5zdXJlUmFuZ2UmJnRoaXMuc3RyZWFtLmVuc3VyZVJhbmdlKDAsTWF0aC5taW4oMTAyNCx0aGlzLnN0cmVhbS5lbmQpKSxlPSgwLGwuY2FsY3VsYXRlTUQ1KSh0aGlzLnN0cmVhbS5ieXRlcy5zdWJhcnJheSgwLDEwMjQpLDAsMTAyNCkpO2Zvcih2YXIgcj0iIixhPTAsaT1lLmxlbmd0aDthPGk7YSsrKXt2YXIgbz1lW2FdLnRvU3RyaW5nKDE2KTtyKz0xPT09by5sZW5ndGg/IjAiK286b31yZXR1cm4oMCxuLnNoYWRvdykodGhpcywiZmluZ2VycHJpbnQiLHIpfX1dKSxlfSgpO3QuUERGRG9jdW1lbnQ9a30sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5GaWxlU3BlYz10LlhSZWY9dC5PYmplY3RMb2FkZXI9dC5DYXRhbG9nPXZvaWQgMDt2YXIgbixhPShuPXIoMikpJiZuLl9fZXNNb2R1bGU/bjp7ZGVmYXVsdDpufSxpPXIoNiksbz1yKDE1NSkscz1yKDE1NiksbD1yKDE1MiksYz1yKDE2NyksdT1yKDE2OCk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXkodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBoKGUpe3JldHVybihoPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBkKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJnAoZSx0KX1mdW5jdGlvbiBwKGUsdCl7cmV0dXJuKHA9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIG0oZSx0LHIsbixhLGksbyl7dHJ5e3ZhciBzPWVbaV0obyksbD1zLnZhbHVlfWNhdGNoKGUpe3JldHVybiB2b2lkIHIoZSl9cy5kb25lP3QobCk6UHJvbWlzZS5yZXNvbHZlKGwpLnRoZW4obixhKX1mdW5jdGlvbiBnKGUpe3JldHVybiBmdW5jdGlvbigpe3ZhciB0PXRoaXMscj1hcmd1bWVudHM7cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbihuLGEpe3ZhciBpPWUuYXBwbHkodCxyKTtmdW5jdGlvbiBvKGUpe20oaSxuLGEsbyxzLCJuZXh0IixlKX1mdW5jdGlvbiBzKGUpe20oaSxuLGEsbyxzLCJ0aHJvdyIsZSl9byh2b2lkIDApfSkpfX1mdW5jdGlvbiB2KGUsdCl7cmV0dXJuIGZ1bmN0aW9uKGUpe2lmKEFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIGV9KGUpfHxmdW5jdGlvbihlLHQpe3ZhciByPVtdLG49ITAsYT0hMSxpPXZvaWQgMDt0cnl7Zm9yKHZhciBvLHM9ZVtTeW1ib2wuaXRlcmF0b3JdKCk7IShuPShvPXMubmV4dCgpKS5kb25lKSYmKHIucHVzaChvLnZhbHVlKSwhdHx8ci5sZW5ndGghPT10KTtuPSEwKTt9Y2F0Y2goZSl7YT0hMCxpPWV9ZmluYWxseXt0cnl7bnx8bnVsbD09cy5yZXR1cm58fHMucmV0dXJuKCl9ZmluYWxseXtpZihhKXRocm93IGl9fXJldHVybiByfShlLHQpfHxmdW5jdGlvbigpe3Rocm93IG5ldyBUeXBlRXJyb3IoIkludmFsaWQgYXR0ZW1wdCB0byBkZXN0cnVjdHVyZSBub24taXRlcmFibGUgaW5zdGFuY2UiKX0oKX1mdW5jdGlvbiB5KGUpe3JldHVybih5PSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gYihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIHcoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBrKGUsdCxyKXtyZXR1cm4gdCYmdyhlLnByb3RvdHlwZSx0KSxyJiZ3KGUsciksZX1mdW5jdGlvbiBTKGUpe3JldHVybigwLG8uaXNEaWN0KShlKT9lLmdldCgiRCIpOmV9dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aWYoYih0aGlzLGUpLHRoaXMucGRmTWFuYWdlcj10LHRoaXMueHJlZj1yLHRoaXMuY2F0RGljdD1yLmdldENhdGFsb2dPYmooKSwhKDAsby5pc0RpY3QpKHRoaXMuY2F0RGljdCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkNhdGFsb2cgb2JqZWN0IGlzIG5vdCBhIGRpY3Rpb25hcnkuIik7dGhpcy5mb250Q2FjaGU9bmV3IG8uUmVmU2V0Q2FjaGUsdGhpcy5idWlsdEluQ01hcENhY2hlPW5ldyBNYXAsdGhpcy5wYWdlS2lkc0NvdW50Q2FjaGU9bmV3IG8uUmVmU2V0Q2FjaGV9cmV0dXJuIGsoZSxbe2tleToiX3JlYWREb2N1bWVudE91dGxpbmUiLHZhbHVlOmZ1bmN0aW9uKCl7dmFyIHQ9dGhpcy5jYXREaWN0LmdldCgiT3V0bGluZXMiKTtpZighKDAsby5pc0RpY3QpKHQpKXJldHVybiBudWxsO2lmKHQ9dC5nZXRSYXcoIkZpcnN0IiksISgwLG8uaXNSZWYpKHQpKXJldHVybiBudWxsO3ZhciByPXtpdGVtczpbXX0sbj1be29iajp0LHBhcmVudDpyfV0sYT1uZXcgby5SZWZTZXQ7YS5wdXQodCk7Zm9yKHZhciBzPXRoaXMueHJlZixsPW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtuLmxlbmd0aD4wOyl7dmFyIGM9bi5zaGlmdCgpLGY9cy5mZXRjaElmUmVmKGMub2JqKTtpZihudWxsIT09Zil7aWYoIWYuaGFzKCJUaXRsZSIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIG91dGxpbmUgaXRlbSBlbmNvdW50ZXJlZC4iKTt2YXIgaD17dXJsOm51bGwsZGVzdDpudWxsfTtlLnBhcnNlRGVzdERpY3Rpb25hcnkoe2Rlc3REaWN0OmYscmVzdWx0T2JqOmgsZG9jQmFzZVVybDp0aGlzLnBkZk1hbmFnZXIuZG9jQmFzZVVybH0pO3ZhciBkPWYuZ2V0KCJUaXRsZSIpLHA9Zi5nZXQoIkYiKXx8MCxtPWYuZ2V0QXJyYXkoIkMiKSxnPWw7IUFycmF5LmlzQXJyYXkobSl8fDMhPT1tLmxlbmd0aHx8MD09PW1bMF0mJjA9PT1tWzFdJiYwPT09bVsyXXx8KGc9dS5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYihtLDApKTt2YXIgdj17ZGVzdDpoLmRlc3QsdXJsOmgudXJsLHVuc2FmZVVybDpoLnVuc2FmZVVybCxuZXdXaW5kb3c6aC5uZXdXaW5kb3csdGl0bGU6KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZCksY29sb3I6Zyxjb3VudDpmLmdldCgiQ291bnQiKSxib2xkOiEhKDImcCksaXRhbGljOiEhKDEmcCksaXRlbXM6W119O2MucGFyZW50Lml0ZW1zLnB1c2godiksdD1mLmdldFJhdygiRmlyc3QiKSwoMCxvLmlzUmVmKSh0KSYmIWEuaGFzKHQpJiYobi5wdXNoKHtvYmo6dCxwYXJlbnQ6dn0pLGEucHV0KHQpKSx0PWYuZ2V0UmF3KCJOZXh0IiksKDAsby5pc1JlZikodCkmJiFhLmhhcyh0KSYmKG4ucHVzaCh7b2JqOnQscGFyZW50OmMucGFyZW50fSksYS5wdXQodCkpfX1yZXR1cm4gci5pdGVtcy5sZW5ndGg+MD9yLml0ZW1zOm51bGx9fSx7a2V5OiJfcmVhZFBlcm1pc3Npb25zIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMueHJlZi50cmFpbGVyLmdldCgiRW5jcnlwdCIpO2lmKCEoMCxvLmlzRGljdCkoZSkpcmV0dXJuIG51bGw7dmFyIHQ9ZS5nZXQoIlAiKTtpZighKDAsaS5pc051bSkodCkpcmV0dXJuIG51bGw7dCs9TWF0aC5wb3coMiwzMik7dmFyIHI9W107Zm9yKHZhciBuIGluIGkuUGVybWlzc2lvbkZsYWcpe3ZhciBhPWkuUGVybWlzc2lvbkZsYWdbbl07dCZhJiZyLnB1c2goYSl9cmV0dXJuIHJ9fSx7a2V5OiJnZXREZXN0aW5hdGlvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcmVhZERlc3RzKCk7cmV0dXJuIHQgaW5zdGFuY2VvZiBDfHx0IGluc3RhbmNlb2Ygby5EaWN0P1ModC5nZXQoZSl8fG51bGwpOm51bGx9fSx7a2V5OiJfcmVhZERlc3RzIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIk5hbWVzIik7cmV0dXJuIGUmJmUuaGFzKCJEZXN0cyIpP25ldyBDKGUuZ2V0UmF3KCJEZXN0cyIpLHRoaXMueHJlZik6dGhpcy5jYXREaWN0LmhhcygiRGVzdHMiKT90aGlzLmNhdERpY3QuZ2V0KCJEZXN0cyIpOnZvaWQgMH19LHtrZXk6Il9yZWFkUGFnZUxhYmVscyIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNhdERpY3QuZ2V0UmF3KCJQYWdlTGFiZWxzIik7aWYoIWUpcmV0dXJuIG51bGw7Zm9yKHZhciB0PW5ldyBBcnJheSh0aGlzLm51bVBhZ2VzKSxyPW51bGwsbj0iIixhPW5ldyBQKGUsdGhpcy54cmVmKS5nZXRBbGwoKSxzPSIiLGw9MSxjPTAsdT10aGlzLm51bVBhZ2VzO2M8dTtjKyspe2lmKGMgaW4gYSl7dmFyIGY9YVtjXTtpZighKDAsby5pc0RpY3QpKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJQYWdlTGFiZWwgaXMgbm90IGEgZGljdGlvbmFyeS4iKTtpZihmLmhhcygiVHlwZSIpJiYhKDAsby5pc05hbWUpKGYuZ2V0KCJUeXBlIiksIlBhZ2VMYWJlbCIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHR5cGUgaW4gUGFnZUxhYmVsIGRpY3Rpb25hcnkuIik7aWYoZi5oYXMoIlMiKSl7dmFyIGg9Zi5nZXQoIlMiKTtpZighKDAsby5pc05hbWUpKGgpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHN0eWxlIGluIFBhZ2VMYWJlbCBkaWN0aW9uYXJ5LiIpO3I9aC5uYW1lfWVsc2Ugcj1udWxsO2lmKGYuaGFzKCJQIikpe3ZhciBkPWYuZ2V0KCJQIik7aWYoISgwLGkuaXNTdHJpbmcpKGQpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIHByZWZpeCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtuPSgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGQpfWVsc2Ugbj0iIjtpZihmLmhhcygiU3QiKSl7dmFyIHA9Zi5nZXQoIlN0Iik7aWYoIShOdW1iZXIuaXNJbnRlZ2VyKHApJiZwPj0xKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCBzdGFydCBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4iKTtsPXB9ZWxzZSBsPTF9c3dpdGNoKHIpe2Nhc2UiRCI6cz1sO2JyZWFrO2Nhc2UiUiI6Y2FzZSJyIjpzPSgwLGkudG9Sb21hbk51bWVyYWxzKShsLCJyIj09PXIpO2JyZWFrO2Nhc2UiQSI6Y2FzZSJhIjpmb3IodmFyIG09ImEiPT09cj85Nzo2NSxnPWwtMSx2PVN0cmluZy5mcm9tQ2hhckNvZGUobStnJTI2KSx5PVtdLGI9MCx3PWcvMjZ8MDtiPD13O2IrKyl5LnB1c2godik7cz15LmpvaW4oIiIpO2JyZWFrO2RlZmF1bHQ6aWYocil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcignSW52YWxpZCBzdHlsZSAiJy5jb25jYXQociwnIiBpbiBQYWdlTGFiZWwgZGljdGlvbmFyeS4nKSk7cz0iIn10W2NdPW4rcyxsKyt9cmV0dXJuIHR9fSx7a2V5OiJmb250RmFsbGJhY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9W107cmV0dXJuIHRoaXMuZm9udENhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3IucHVzaChlKX0pKSxQcm9taXNlLmFsbChyKS50aGVuKChmdW5jdGlvbihyKXt2YXIgbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1yW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpO249ITApe3ZhciBsPW8udmFsdWU7aWYobC5sb2FkZWROYW1lPT09ZSlyZXR1cm4gdm9pZCBsLmZhbGxiYWNrKHQpfX1jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19fSkpfX0se2tleToiY2xlYW51cCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzO3RoaXMucGFnZUtpZHNDb3VudENhY2hlLmNsZWFyKCk7dmFyIHQ9W107cmV0dXJuIHRoaXMuZm9udENhY2hlLmZvckVhY2goKGZ1bmN0aW9uKGUpe3QucHVzaChlKX0pKSxQcm9taXNlLmFsbCh0KS50aGVuKChmdW5jdGlvbih0KXtmb3IodmFyIHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspZGVsZXRlIHRbcl0uZGljdC50cmFuc2xhdGVkO2UuZm9udENhY2hlLmNsZWFyKCksZS5idWlsdEluQ01hcENhY2hlLmNsZWFyKCl9KSl9fSx7a2V5OiJnZXRQYWdlRGljdCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscj0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLG49W3RoaXMuY2F0RGljdC5nZXRSYXcoIlBhZ2VzIildLGE9dGhpcy54cmVmLHM9dGhpcy5wYWdlS2lkc0NvdW50Q2FjaGUsbD0wO3JldHVybiBmdW5jdGlvbiBjKCl7Zm9yKHZhciB1PWZ1bmN0aW9uKCl7dmFyIHU9bi5wb3AoKTtpZigoMCxvLmlzUmVmKSh1KSlyZXR1cm4odD1zLmdldCh1KSk+MCYmbCt0PGU/KGwrPXQsImNvbnRpbnVlIik6KGEuZmV0Y2hBc3luYyh1KS50aGVuKChmdW5jdGlvbih0KXsoMCxvLmlzRGljdCkodCwiUGFnZSIpfHwoMCxvLmlzRGljdCkodCkmJiF0LmhhcygiS2lkcyIpP2U9PT1sPyh1JiYhcy5oYXModSkmJnMucHV0KHUsMSksci5yZXNvbHZlKFt0LHVdKSk6KGwrKyxjKCkpOihuLnB1c2godCksYygpKX0pLHIucmVqZWN0KSx7djp2b2lkIDB9KTtpZighKDAsby5pc0RpY3QpKHUpKXJldHVybiByLnJlamVjdChuZXcgaS5Gb3JtYXRFcnJvcigiUGFnZSBkaWN0aW9uYXJ5IGtpZCByZWZlcmVuY2UgcG9pbnRzIHRvIHdyb25nIHR5cGUgb2Ygb2JqZWN0LiIpKSx7djp2b2lkIDB9O2lmKHQ9dS5nZXQoIkNvdW50IiksTnVtYmVyLmlzSW50ZWdlcih0KSYmdD49MCl7dmFyIGY9dS5vYmpJZDtpZihmJiYhcy5oYXMoZikmJnMucHV0KGYsdCksbCt0PD1lKXJldHVybiBsKz10LCJjb250aW51ZSJ9dmFyIGg9dS5nZXQoIktpZHMiKTtpZighQXJyYXkuaXNBcnJheShoKSlyZXR1cm4oMCxvLmlzTmFtZSkodS5nZXQoIlR5cGUiKSwiUGFnZSIpfHwhdS5oYXMoIlR5cGUiKSYmdS5oYXMoIkNvbnRlbnRzIik/bD09PWU/KHIucmVzb2x2ZShbdSxudWxsXSkse3Y6dm9pZCAwfSk6KGwrKywiY29udGludWUiKTooci5yZWplY3QobmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgZGljdGlvbmFyeSBraWRzIG9iamVjdCBpcyBub3QgYW4gYXJyYXkuIikpLHt2OnZvaWQgMH0pO2Zvcih2YXIgZD1oLmxlbmd0aC0xO2Q+PTA7ZC0tKW4ucHVzaChoW2RdKX07bi5sZW5ndGg7KXt2YXIgZj11KCk7c3dpdGNoKGYpe2Nhc2UiY29udGludWUiOmNvbnRpbnVlO2RlZmF1bHQ6aWYoIm9iamVjdCI9PT15KGYpKXJldHVybiBmLnZ9fXIucmVqZWN0KG5ldyBFcnJvcigiUGFnZSBpbmRleCAiLmNvbmNhdChlLCIgbm90IGZvdW5kLiIpKSl9KCksci5wcm9taXNlfX0se2tleToiZ2V0UGFnZUluZGV4Iix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLnhyZWYscj0wO3JldHVybiBmdW5jdGlvbiBuKGEpe3JldHVybiBmdW5jdGlvbihyKXt2YXIgbixhPTA7cmV0dXJuIHQuZmV0Y2hBc3luYyhyKS50aGVuKChmdW5jdGlvbih0KXtpZigoMCxvLmlzUmVmc0VxdWFsKShyLGUpJiYhKDAsby5pc0RpY3QpKHQsIlBhZ2UiKSYmKCEoMCxvLmlzRGljdCkodCl8fHQuaGFzKCJUeXBlIil8fCF0LmhhcygiQ29udGVudHMiKSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlRoZSByZWZlcmVuY2UgZG9lcyBub3QgcG9pbnQgdG8gYSAvUGFnZSBkaWN0aW9uYXJ5LiIpO2lmKCF0KXJldHVybiBudWxsO2lmKCEoMCxvLmlzRGljdCkodCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7cmV0dXJuIG49dC5nZXRSYXcoIlBhcmVudCIpLHQuZ2V0QXN5bmMoIlBhcmVudCIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2lmKCEoMCxvLmlzRGljdCkoZSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhcmVudCBtdXN0IGJlIGEgZGljdGlvbmFyeS4iKTtyZXR1cm4gZS5nZXRBc3luYygiS2lkcyIpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe2lmKCFlKXJldHVybiBudWxsO2Zvcih2YXIgcz1bXSxsPSExLGM9MCx1PWUubGVuZ3RoO2M8dTtjKyspe3ZhciBmPWVbY107aWYoISgwLG8uaXNSZWYpKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJLaWQgbXVzdCBiZSBhIHJlZmVyZW5jZS4iKTtpZigoMCxvLmlzUmVmc0VxdWFsKShmLHIpKXtsPSEwO2JyZWFrfXMucHVzaCh0LmZldGNoQXN5bmMoZikudGhlbigoZnVuY3Rpb24oZSl7aWYoISgwLG8uaXNEaWN0KShlKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIG5vZGUgbXVzdCBiZSBhIGRpY3Rpb25hcnkuIik7ZS5oYXMoIkNvdW50Iik/YSs9ZS5nZXQoIkNvdW50Iik6YSsrfSkpKX1pZighbCl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiS2lkIHJlZmVyZW5jZSBub3QgZm91bmQgaW4gcGFyZW50J3Mga2lkcy4iKTtyZXR1cm4gUHJvbWlzZS5hbGwocykudGhlbigoZnVuY3Rpb24oKXtyZXR1cm5bYSxuXX0pKX0pKX0oYSkudGhlbigoZnVuY3Rpb24oZSl7aWYoIWUpcmV0dXJuIHI7dmFyIHQ9dihlLDIpLGE9dFswXSxpPXRbMV07cmV0dXJuIHIrPWEsbihpKX0pKX0oZSl9fSx7a2V5OiJtZXRhZGF0YSIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jYXREaWN0LmdldFJhdygiTWV0YWRhdGEiKTtpZighKDAsby5pc1JlZikoZSkpcmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm1ldGFkYXRhIixudWxsKTt2YXIgdCxyPSEodGhpcy54cmVmLmVuY3J5cHQmJnRoaXMueHJlZi5lbmNyeXB0LmVuY3J5cHRNZXRhZGF0YSksbj10aGlzLnhyZWYuZmV0Y2goZSxyKTtpZihuJiYoMCxvLmlzRGljdCkobi5kaWN0KSl7dmFyIGE9bi5kaWN0LmdldCgiVHlwZSIpLHM9bi5kaWN0LmdldCgiU3VidHlwZSIpO2lmKCgwLG8uaXNOYW1lKShhLCJNZXRhZGF0YSIpJiYoMCxvLmlzTmFtZSkocywiWE1MIikpdHJ5e3Q9KDAsaS5zdHJpbmdUb1VURjhTdHJpbmcpKCgwLGkuYnl0ZXNUb1N0cmluZykobi5nZXRCeXRlcygpKSl9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLmluZm8pKCJTa2lwcGluZyBpbnZhbGlkIG1ldGFkYXRhLiIpfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywibWV0YWRhdGEiLHQpfX0se2tleToidG9wbGV2ZWxQYWdlc0RpY3QiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIlBhZ2VzIik7aWYoISgwLG8uaXNEaWN0KShlKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCB0b3AtbGV2ZWwgcGFnZXMgZGljdGlvbmFyeS4iKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywidG9wbGV2ZWxQYWdlc0RpY3QiLGUpfX0se2tleToiZG9jdW1lbnRPdXRsaW5lIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT1udWxsO3RyeXtlPXRoaXMuX3JlYWREb2N1bWVudE91dGxpbmUoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIGRvY3VtZW50IG91dGxpbmUuIil9cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsImRvY3VtZW50T3V0bGluZSIsZSl9fSx7a2V5OiJwZXJtaXNzaW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9bnVsbDt0cnl7ZT10aGlzLl9yZWFkUGVybWlzc2lvbnMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIHBlcm1pc3Npb25zLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwZXJtaXNzaW9ucyIsZSl9fSx7a2V5OiJudW1QYWdlcyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy50b3BsZXZlbFBhZ2VzRGljdC5nZXQoIkNvdW50Iik7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIlBhZ2UgY291bnQgaW4gdG9wLWxldmVsIHBhZ2VzIGRpY3Rpb25hcnkgaXMgbm90IGFuIGludGVnZXIuIik7cmV0dXJuKDAsaS5zaGFkb3cpKHRoaXMsIm51bVBhZ2VzIixlKX19LHtrZXk6ImRlc3RpbmF0aW9ucyIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5fcmVhZERlc3RzKCksdD1PYmplY3QuY3JlYXRlKG51bGwpO2lmKGUgaW5zdGFuY2VvZiBDKXt2YXIgcj1lLmdldEFsbCgpO2Zvcih2YXIgbiBpbiByKXRbbl09UyhyW25dKX1lbHNlIGUgaW5zdGFuY2VvZiBvLkRpY3QmJmUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtyJiYodFtlXT1TKHIpKX0pKTtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiZGVzdGluYXRpb25zIix0KX19LHtrZXk6InBhZ2VMYWJlbHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPW51bGw7dHJ5e2U9dGhpcy5fcmVhZFBhZ2VMYWJlbHMoKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoIlVuYWJsZSB0byByZWFkIHBhZ2UgbGFiZWxzLiIpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwYWdlTGFiZWxzIixlKX19LHtrZXk6InBhZ2VNb2RlIixnZXQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmNhdERpY3QuZ2V0KCJQYWdlTW9kZSIpLHQ9IlVzZU5vbmUiO2lmKCgwLG8uaXNOYW1lKShlKSlzd2l0Y2goZS5uYW1lKXtjYXNlIlVzZU5vbmUiOmNhc2UiVXNlT3V0bGluZXMiOmNhc2UiVXNlVGh1bWJzIjpjYXNlIkZ1bGxTY3JlZW4iOmNhc2UiVXNlT0MiOmNhc2UiVXNlQXR0YWNobWVudHMiOnQ9ZS5uYW1lfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJwYWdlTW9kZSIsdCl9fSx7a2V5OiJvcGVuQWN0aW9uRGVzdGluYXRpb24iLGdldDpmdW5jdGlvbigpe3ZhciB0PXRoaXMuY2F0RGljdC5nZXQoIk9wZW5BY3Rpb24iKSxyPW51bGw7aWYoKDAsby5pc0RpY3QpKHQpKXt2YXIgbj1uZXcgby5EaWN0KHRoaXMueHJlZik7bi5zZXQoIkEiLHQpO3ZhciBhPXt1cmw6bnVsbCxkZXN0Om51bGx9O2UucGFyc2VEZXN0RGljdGlvbmFyeSh7ZGVzdERpY3Q6bixyZXN1bHRPYmo6YX0pLEFycmF5LmlzQXJyYXkoYS5kZXN0KSYmKHI9YS5kZXN0KX1lbHNlIEFycmF5LmlzQXJyYXkodCkmJihyPXQpO3JldHVybigwLGkuc2hhZG93KSh0aGlzLCJvcGVuQWN0aW9uRGVzdGluYXRpb24iLHIpfX0se2tleToiYXR0YWNobWVudHMiLGdldDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY2F0RGljdC5nZXQoIk5hbWVzIiksdD1udWxsO2lmKGUmJmUuaGFzKCJFbWJlZGRlZEZpbGVzIikpe3ZhciByPW5ldyBDKGUuZ2V0UmF3KCJFbWJlZGRlZEZpbGVzIiksdGhpcy54cmVmKS5nZXRBbGwoKTtmb3IodmFyIG4gaW4gcil7dmFyIGE9bmV3IEUocltuXSx0aGlzLnhyZWYpO3R8fCh0PU9iamVjdC5jcmVhdGUobnVsbCkpLHRbKDAsaS5zdHJpbmdUb1BERlN0cmluZykobildPWEuc2VyaWFsaXphYmxlfX1yZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYXR0YWNobWVudHMiLHQpfX0se2tleToiamF2YVNjcmlwdCIsZ2V0OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jYXREaWN0LmdldCgiTmFtZXMiKSx0PW51bGw7ZnVuY3Rpb24gcihlKXt2YXIgcj1lLmdldCgiUyIpO2lmKCgwLG8uaXNOYW1lKShyLCJKYXZhU2NyaXB0Iikpe3ZhciBuPWUuZ2V0KCJKUyIpO2lmKCgwLG8uaXNTdHJlYW0pKG4pKW49KDAsaS5ieXRlc1RvU3RyaW5nKShuLmdldEJ5dGVzKCkpO2Vsc2UgaWYoISgwLGkuaXNTdHJpbmcpKG4pKXJldHVybjt0fHwodD1bXSksdC5wdXNoKCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKG4pKX19aWYoZSYmZS5oYXMoIkphdmFTY3JpcHQiKSl7dmFyIG49bmV3IEMoZS5nZXRSYXcoIkphdmFTY3JpcHQiKSx0aGlzLnhyZWYpLmdldEFsbCgpO2Zvcih2YXIgYSBpbiBuKXt2YXIgcz1uW2FdOygwLG8uaXNEaWN0KShzKSYmcihzKX19dmFyIGw9dGhpcy5jYXREaWN0LmdldCgiT3BlbkFjdGlvbiIpO2lmKCgwLG8uaXNEaWN0KShsLCJBY3Rpb24iKSl7dmFyIGM9bC5nZXQoIlMiKTtpZigoMCxvLmlzTmFtZSkoYywiTmFtZWQiKSl7dmFyIHU9bC5nZXQoIk4iKTsoMCxvLmlzTmFtZSkodSwiUHJpbnQiKSYmKHR8fCh0PVtdKSx0LnB1c2goInByaW50KHt9KTsiKSl9ZWxzZSByKGwpfXJldHVybigwLGkuc2hhZG93KSh0aGlzLCJqYXZhU2NyaXB0Iix0KX19XSxbe2tleToicGFyc2VEZXN0RGljdGlvbmFyeSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kZXN0RGljdDtpZigoMCxvLmlzRGljdCkodCkpe3ZhciByPWUucmVzdWx0T2JqO2lmKCJvYmplY3QiPT09eShyKSl7dmFyIG4sYSxzPWUuZG9jQmFzZVVybHx8bnVsbCxsPXQuZ2V0KCJBIik7aWYoISgwLG8uaXNEaWN0KShsKSYmdC5oYXMoIkRlc3QiKSYmKGw9dC5nZXQoIkRlc3QiKSksKDAsby5pc0RpY3QpKGwpKXt2YXIgYz1sLmdldCgiUyIpO2lmKCEoMCxvLmlzTmFtZSkoYykpcmV0dXJuIHZvaWQoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBJbnZhbGlkIHR5cGUgaW4gQWN0aW9uIGRpY3Rpb25hcnkuIik7dmFyIHU9Yy5uYW1lO3N3aXRjaCh1KXtjYXNlIlVSSSI6bj1sLmdldCgiVVJJIiksKDAsby5pc05hbWUpKG4pP249Ii8iK24ubmFtZTooMCxpLmlzU3RyaW5nKShuKSYmKG49ZnVuY3Rpb24oZSl7cmV0dXJuIGUuc3RhcnRzV2l0aCgid3d3LiIpPyJodHRwOi8vIi5jb25jYXQoZSk6ZX0obikpO2JyZWFrO2Nhc2UiR29UbyI6YT1sLmdldCgiRCIpO2JyZWFrO2Nhc2UiTGF1bmNoIjpjYXNlIkdvVG9SIjp2YXIgZj1sLmdldCgiRiIpOygwLG8uaXNEaWN0KShmKT9uPWYuZ2V0KCJGIil8fG51bGw6KDAsaS5pc1N0cmluZykoZikmJihuPWYpO3ZhciBoPWwuZ2V0KCJEIik7aWYoaCYmKCgwLG8uaXNOYW1lKShoKSYmKGg9aC5uYW1lKSwoMCxpLmlzU3RyaW5nKShuKSkpe3ZhciBkPW4uc3BsaXQoIiMiKVswXTsoMCxpLmlzU3RyaW5nKShoKT9uPWQrIiMiK2g6QXJyYXkuaXNBcnJheShoKSYmKG49ZCsiIyIrSlNPTi5zdHJpbmdpZnkoaCkpfXZhciBwPWwuZ2V0KCJOZXdXaW5kb3ciKTsoMCxpLmlzQm9vbCkocCkmJihyLm5ld1dpbmRvdz1wKTticmVhaztjYXNlIk5hbWVkIjp2YXIgbT1sLmdldCgiTiIpOygwLG8uaXNOYW1lKShtKSYmKHIuYWN0aW9uPW0ubmFtZSk7YnJlYWs7Y2FzZSJKYXZhU2NyaXB0Ijp2YXIgZyx2PWwuZ2V0KCJKUyIpO2lmKCgwLG8uaXNTdHJlYW0pKHYpP2c9KDAsaS5ieXRlc1RvU3RyaW5nKSh2LmdldEJ5dGVzKCkpOigwLGkuaXNTdHJpbmcpKHYpJiYoZz12KSxnKXt2YXIgYj1uZXcgUmVnRXhwKCJeXFxzKigiK1siYXBwLmxhdW5jaFVSTCIsIndpbmRvdy5vcGVuIl0uam9pbigifCIpLnNwbGl0KCIuIikuam9pbigiXFwuIikrIilcXCgoPzonfFwiKShbXidcIl0qKSg/Oid8XCIpKD86LFxccyooXFx3KylcXCl8XFwpKSIsImkiKS5leGVjKCgwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGcpKTtpZihiJiZiWzJdKXtuPWJbMl0sInRydWUiPT09YlszXSYmImFwcC5sYXVuY2hVUkwiPT09YlsxXSYmKHIubmV3V2luZG93PSEwKTticmVha319ZGVmYXVsdDooMCxpLndhcm4pKCdwYXJzZURlc3REaWN0aW9uYXJ5OiB1bnN1cHBvcnRlZCBhY3Rpb24gdHlwZSAiJy5jb25jYXQodSwnIi4nKSl9fWVsc2UgdC5oYXMoIkRlc3QiKSYmKGE9dC5nZXQoIkRlc3QiKSk7aWYoKDAsaS5pc1N0cmluZykobikpe249ZnVuY3Rpb24oZSl7dHJ5e3JldHVybigwLGkuc3RyaW5nVG9VVEY4U3RyaW5nKShlKX1jYXRjaCh0KXtyZXR1cm4gZX19KG4pO3ZhciB3PSgwLGkuY3JlYXRlVmFsaWRBYnNvbHV0ZVVybCkobixzKTt3JiYoci51cmw9dy5ocmVmKSxyLnVuc2FmZVVybD1ufWEmJigoMCxvLmlzTmFtZSkoYSkmJihhPWEubmFtZSksKCgwLGkuaXNTdHJpbmcpKGEpfHxBcnJheS5pc0FycmF5KGEpKSYmKHIuZGVzdD1hKSl9ZWxzZSgwLGkud2FybikoInBhcnNlRGVzdERpY3Rpb25hcnk6IGByZXN1bHRPYmpgIG11c3QgYmUgYW4gb2JqZWN0LiIpfWVsc2UoMCxpLndhcm4pKCJwYXJzZURlc3REaWN0aW9uYXJ5OiBgZGVzdERpY3RgIG11c3QgYmUgYSBkaWN0aW9uYXJ5LiIpfX1dKSxlfSgpO3QuQ2F0YWxvZz1fO3ZhciB4PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyZWFtPWUsdGhpcy5wZGZNYW5hZ2VyPXQsdGhpcy5lbnRyaWVzPVtdLHRoaXMueHJlZnN0bXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmNhY2hlPVtdLHRoaXMuc3RhdHM9e3N0cmVhbVR5cGVzOltdLGZvbnRUeXBlczpbXX19dmFyIHQscjtyZXR1cm4gZS5wcm90b3R5cGU9e3NldFN0YXJ0WFJlZjpmdW5jdGlvbihlKXt0aGlzLnN0YXJ0WFJlZlF1ZXVlPVtlXX0scGFyc2U6ZnVuY3Rpb24oZSl7dmFyIHQscixuO2U/KCgwLGkud2FybikoIkluZGV4aW5nIGFsbCBQREYgb2JqZWN0cyIpLHQ9dGhpcy5pbmRleE9iamVjdHMoKSk6dD10aGlzLnJlYWRYUmVmKCksdC5hc3NpZ25YcmVmKHRoaXMpLHRoaXMudHJhaWxlcj10O3RyeXtyPXQuZ2V0KCJFbmNyeXB0Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTsoMCxpLndhcm4pKCdYUmVmLnBhcnNlIC0gSW52YWxpZCAiRW5jcnlwdCIgcmVmZXJlbmNlOiAiJy5jb25jYXQoZSwnIi4nKSl9aWYoKDAsby5pc0RpY3QpKHIpKXt2YXIgYT10LmdldCgiSUQiKSxzPWEmJmEubGVuZ3RoP2FbMF06IiI7ci5zdXBwcmVzc0VuY3J5cHRpb249ITAsdGhpcy5lbmNyeXB0PW5ldyBjLkNpcGhlclRyYW5zZm9ybUZhY3RvcnkocixzLHRoaXMucGRmTWFuYWdlci5wYXNzd29yZCl9dHJ5e249dC5nZXQoIlJvb3QiKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlOygwLGkud2FybikoJ1hSZWYucGFyc2UgLSBJbnZhbGlkICJSb290IiByZWZlcmVuY2U6ICInLmNvbmNhdChlLCciLicpKX1pZighKDAsby5pc0RpY3QpKG4pfHwhbi5oYXMoIlBhZ2VzIikpe2lmKCFlKXRocm93IG5ldyBpLlhSZWZQYXJzZUV4Y2VwdGlvbjt0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCByb290IHJlZmVyZW5jZSIpfXRoaXMucm9vdD1ufSxwcm9jZXNzWFJlZlRhYmxlOmZ1bmN0aW9uKGUpeyJ0YWJsZVN0YXRlImluIHRoaXN8fCh0aGlzLnRhYmxlU3RhdGU9e2VudHJ5TnVtOjAsc3RyZWFtUG9zOmUubGV4ZXIuc3RyZWFtLnBvcyxwYXJzZXJCdWYxOmUuYnVmMSxwYXJzZXJCdWYyOmUuYnVmMn0pO3ZhciB0PXRoaXMucmVhZFhSZWZUYWJsZShlKTtpZighKDAsby5pc0NtZCkodCwidHJhaWxlciIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgdGFibGU6IGNvdWxkIG5vdCBmaW5kIHRyYWlsZXIgZGljdGlvbmFyeSIpO3ZhciByPWUuZ2V0T2JqKCk7aWYoISgwLG8uaXNEaWN0KShyKSYmci5kaWN0JiYocj1yLmRpY3QpLCEoMCxvLmlzRGljdCkocikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogY291bGQgbm90IHBhcnNlIHRyYWlsZXIgZGljdGlvbmFyeSIpO3JldHVybiBkZWxldGUgdGhpcy50YWJsZVN0YXRlLHJ9LHJlYWRYUmVmVGFibGU6ZnVuY3Rpb24oZSl7dmFyIHQscj1lLmxleGVyLnN0cmVhbSxuPXRoaXMudGFibGVTdGF0ZTtmb3Ioci5wb3M9bi5zdHJlYW1Qb3MsZS5idWYxPW4ucGFyc2VyQnVmMSxlLmJ1ZjI9bi5wYXJzZXJCdWYyOzspe2lmKCEoImZpcnN0RW50cnlOdW0iaW4gbiYmImVudHJ5Q291bnQiaW4gbikpe2lmKCgwLG8uaXNDbWQpKHQ9ZS5nZXRPYmooKSwidHJhaWxlciIpKWJyZWFrO24uZmlyc3RFbnRyeU51bT10LG4uZW50cnlDb3VudD1lLmdldE9iaigpfXZhciBhPW4uZmlyc3RFbnRyeU51bSxzPW4uZW50cnlDb3VudDtpZighTnVtYmVyLmlzSW50ZWdlcihhKXx8IU51bWJlci5pc0ludGVnZXIocykpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogd3JvbmcgdHlwZXMgaW4gc3Vic2VjdGlvbiBoZWFkZXIiKTtmb3IodmFyIGw9bi5lbnRyeU51bTtsPHM7bCsrKXtuLnN0cmVhbVBvcz1yLnBvcyxuLmVudHJ5TnVtPWwsbi5wYXJzZXJCdWYxPWUuYnVmMSxuLnBhcnNlckJ1ZjI9ZS5idWYyO3ZhciBjPXt9O2Mub2Zmc2V0PWUuZ2V0T2JqKCksYy5nZW49ZS5nZXRPYmooKTt2YXIgdT1lLmdldE9iaigpO2lmKCgwLG8uaXNDbWQpKHUsImYiKT9jLmZyZWU9ITA6KDAsby5pc0NtZCkodSwibiIpJiYoYy51bmNvbXByZXNzZWQ9ITApLCFOdW1iZXIuaXNJbnRlZ2VyKGMub2Zmc2V0KXx8IU51bWJlci5pc0ludGVnZXIoYy5nZW4pfHwhYy5mcmVlJiYhYy51bmNvbXByZXNzZWQpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgZW50cnkgaW4gWFJlZiBzdWJzZWN0aW9uOiAiLmNvbmNhdChhLCIsICIpLmNvbmNhdChzKSk7MD09PWwmJmMuZnJlZSYmMT09PWEmJihhPTApLHRoaXMuZW50cmllc1tsK2FdfHwodGhpcy5lbnRyaWVzW2wrYV09Yyl9bi5lbnRyeU51bT0wLG4uc3RyZWFtUG9zPXIucG9zLG4ucGFyc2VyQnVmMT1lLmJ1ZjEsbi5wYXJzZXJCdWYyPWUuYnVmMixkZWxldGUgbi5maXJzdEVudHJ5TnVtLGRlbGV0ZSBuLmVudHJ5Q291bnR9aWYodGhpcy5lbnRyaWVzWzBdJiYhdGhpcy5lbnRyaWVzWzBdLmZyZWUpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiB0YWJsZTogdW5leHBlY3RlZCBmaXJzdCBvYmplY3QiKTtyZXR1cm4gdH0scHJvY2Vzc1hSZWZTdHJlYW06ZnVuY3Rpb24oZSl7aWYoISgic3RyZWFtU3RhdGUiaW4gdGhpcykpe3ZhciB0PWUuZGljdCxyPXQuZ2V0KCJXIiksbj10LmdldCgiSW5kZXgiKTtufHwobj1bMCx0LmdldCgiU2l6ZSIpXSksdGhpcy5zdHJlYW1TdGF0ZT17ZW50cnlSYW5nZXM6bixieXRlV2lkdGhzOnIsZW50cnlOdW06MCxzdHJlYW1Qb3M6ZS5wb3N9fXJldHVybiB0aGlzLnJlYWRYUmVmU3RyZWFtKGUpLGRlbGV0ZSB0aGlzLnN0cmVhbVN0YXRlLGUuZGljdH0scmVhZFhSZWZTdHJlYW06ZnVuY3Rpb24oZSl7dmFyIHQscixuPXRoaXMuc3RyZWFtU3RhdGU7ZS5wb3M9bi5zdHJlYW1Qb3M7Zm9yKHZhciBhPW4uYnl0ZVdpZHRocyxvPWFbMF0scz1hWzFdLGw9YVsyXSxjPW4uZW50cnlSYW5nZXM7Yy5sZW5ndGg+MDspe3ZhciB1PWNbMF0sZj1jWzFdO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKHUpfHwhTnVtYmVyLmlzSW50ZWdlcihmKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCBYUmVmIHJhbmdlIGZpZWxkczogIi5jb25jYXQodSwiLCAiKS5jb25jYXQoZikpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKG8pfHwhTnVtYmVyLmlzSW50ZWdlcihzKXx8IU51bWJlci5pc0ludGVnZXIobCkpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkludmFsaWQgWFJlZiBlbnRyeSBmaWVsZHMgbGVuZ3RoOiAiLmNvbmNhdCh1LCIsICIpLmNvbmNhdChmKSk7Zm9yKHQ9bi5lbnRyeU51bTt0PGY7Kyt0KXtuLmVudHJ5TnVtPXQsbi5zdHJlYW1Qb3M9ZS5wb3M7dmFyIGg9MCxkPTAscD0wO2ZvcihyPTA7cjxvOysrciloPWg8PDh8ZS5nZXRCeXRlKCk7Zm9yKDA9PT1vJiYoaD0xKSxyPTA7cjxzOysrcilkPWQ8PDh8ZS5nZXRCeXRlKCk7Zm9yKHI9MDtyPGw7KytyKXA9cDw8OHxlLmdldEJ5dGUoKTt2YXIgbT17fTtzd2l0Y2gobS5vZmZzZXQ9ZCxtLmdlbj1wLGgpe2Nhc2UgMDptLmZyZWU9ITA7YnJlYWs7Y2FzZSAxOm0udW5jb21wcmVzc2VkPSEwO2JyZWFrO2Nhc2UgMjpicmVhaztkZWZhdWx0OnRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgZW50cnkgdHlwZTogIi5jb25jYXQoaCkpfXRoaXMuZW50cmllc1t1K3RdfHwodGhpcy5lbnRyaWVzW3UrdF09bSl9bi5lbnRyeU51bT0wLG4uc3RyZWFtUG9zPWUucG9zLGMuc3BsaWNlKDAsMil9fSxpbmRleE9iamVjdHM6ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7Zm9yKHZhciByPSIiLG49ZVt0XTsxMCE9PW4mJjEzIT09biYmNjAhPT1uJiYhKCsrdD49ZS5sZW5ndGgpOylyKz1TdHJpbmcuZnJvbUNoYXJDb2RlKG4pLG49ZVt0XTtyZXR1cm4gcn1mdW5jdGlvbiB0KGUsdCxyKXtmb3IodmFyIG49ci5sZW5ndGgsYT1lLmxlbmd0aCxpPTA7dDxhOyl7Zm9yKHZhciBvPTA7bzxuJiZlW3Qrb109PT1yW29dOykrK287aWYobz49bilicmVhazt0KyssaSsrfXJldHVybiBpfXZhciByPS9eKFxkKylccysoXGQrKVxzK29ialxiLyxuPS9cYmVuZG9ialtcYlxzXSQvLGE9L1xzKyhcZCtccytcZCtccytvYmpbXGJcczxdKSQvLGw9bmV3IFVpbnQ4QXJyYXkoWzExNiwxMTQsOTcsMTA1LDEwOCwxMDEsMTE0XSksYz1uZXcgVWludDhBcnJheShbMTE1LDExNiw5NywxMTQsMTE2LDEyMCwxMTQsMTAxLDEwMl0pLHU9bmV3IFVpbnQ4QXJyYXkoWzExMSw5OCwxMDZdKSxmPW5ldyBVaW50OEFycmF5KFs0Nyw4OCw4MiwxMDEsMTAyXSk7dGhpcy5lbnRyaWVzLmxlbmd0aD0wO3ZhciBoPXRoaXMuc3RyZWFtO2gucG9zPTA7Zm9yKHZhciBkLHAsbSxnPWguZ2V0Qnl0ZXMoKSx2PWguc3RhcnQseT1nLmxlbmd0aCxiPVtdLHc9W107djx5Oyl7dmFyIGs9Z1t2XTtpZig5IT09ayYmMTAhPT1rJiYxMyE9PWsmJjMyIT09aylpZigzNyE9PWspe3ZhciBTLF89ZShnLHYpO2lmKF8uc3RhcnRzV2l0aCgieHJlZiIpJiYoND09PV8ubGVuZ3RofHwvXHMvLnRlc3QoX1s0XSkpKXYrPXQoZyx2LGwpLGIucHVzaCh2KSx2Kz10KGcsdixjKTtlbHNlIGlmKFM9ci5leGVjKF8pKXt2YXIgeD0wfFNbMV0sQT0wfFNbMl07dm9pZCAwPT09dGhpcy5lbnRyaWVzW3hdJiYodGhpcy5lbnRyaWVzW3hdPXtvZmZzZXQ6di1oLnN0YXJ0LGdlbjpBLHVuY29tcHJlc3NlZDohMH0pO2Zvcih2YXIgQz12b2lkIDAsUD12K18ubGVuZ3RoO1A8Zy5sZW5ndGg7KXt2YXIgRT1QK3QoZyxQLHUpKzQ7Qz1FLXY7dmFyIFQ9TWF0aC5tYXgoRS0yNSxQKSxSPSgwLGkuYnl0ZXNUb1N0cmluZykoZy5zdWJhcnJheShULEUpKTtpZihuLnRlc3QoUikpYnJlYWs7dmFyIE89YS5leGVjKFIpO2lmKE8mJk9bMV0peygwLGkud2FybikoJ2luZGV4T2JqZWN0czogRm91bmQgbmV3ICJvYmoiIGluc2lkZSBvZiBhbm90aGVyICJvYmoiLCBjYXVzZWQgYnkgbWlzc2luZyAiZW5kb2JqIiAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSxDLT1PWzFdLmxlbmd0aDticmVha31QPUV9dmFyIEk9Zy5zdWJhcnJheSh2LHYrQyksRj10KEksMCxmKTtGPEMmJklbRis1XTw2NCYmKHcucHVzaCh2LWguc3RhcnQpLHRoaXMueHJlZnN0bXNbdi1oLnN0YXJ0XT0xKSx2Kz1DfWVsc2UgXy5zdGFydHNXaXRoKCJ0cmFpbGVyIikmJig3PT09Xy5sZW5ndGh8fC9ccy8udGVzdChfWzddKSk/KGIucHVzaCh2KSx2Kz10KGcsdixjKSk6dis9Xy5sZW5ndGgrMX1lbHNlIGRve2lmKCsrdj49eSlicmVhaztrPWdbdl19d2hpbGUoMTAhPT1rJiYxMyE9PWspO2Vsc2UrK3Z9Zm9yKGQ9MCxwPXcubGVuZ3RoO2Q8cDsrK2QpdGhpcy5zdGFydFhSZWZRdWV1ZS5wdXNoKHdbZF0pLHRoaXMucmVhZFhSZWYoITApO2ZvcihkPTAscD1iLmxlbmd0aDtkPHA7KytkKXtoLnBvcz1iW2RdO3ZhciBMPW5ldyBzLlBhcnNlcihuZXcgcy5MZXhlcihoKSwhMCx0aGlzLCEwKSxEPUwuZ2V0T2JqKCk7aWYoKDAsby5pc0NtZCkoRCwidHJhaWxlciIpKXt2YXIgTj1MLmdldE9iaigpO2lmKCgwLG8uaXNEaWN0KShOKSl7dmFyIE09dm9pZCAwO3RyeXtNPU4uZ2V0KCJSb290Iil9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pdGhyb3cgZTtjb250aW51ZX1pZigoMCxvLmlzRGljdCkoTSkmJk0uaGFzKCJQYWdlcyIpKXtpZihOLmhhcygiSUQiKSlyZXR1cm4gTjttPU59fX19aWYobSlyZXR1cm4gbTt0aHJvdyBuZXcgaS5JbnZhbGlkUERGRXhjZXB0aW9uKCJJbnZhbGlkIFBERiBzdHJ1Y3R1cmUiKX0scmVhZFhSZWY6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5zdHJlYW0scj1PYmplY3QuY3JlYXRlKG51bGwpO3RyeXtmb3IoO3RoaXMuc3RhcnRYUmVmUXVldWUubGVuZ3RoOyl7dmFyIG49dGhpcy5zdGFydFhSZWZRdWV1ZVswXTtpZihyW25dKSgwLGkud2FybikoInJlYWRYUmVmIC0gc2tpcHBpbmcgWFJlZiB0YWJsZSBzaW5jZSBpdCB3YXMgYWxyZWFkeSBwYXJzZWQuIiksdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpO2Vsc2V7cltuXT0hMCx0LnBvcz1uK3Quc3RhcnQ7dmFyIGEsbD1uZXcgcy5QYXJzZXIobmV3IHMuTGV4ZXIodCksITAsdGhpcyksYz1sLmdldE9iaigpO2lmKCgwLG8uaXNDbWQpKGMsInhyZWYiKSl7aWYoYT10aGlzLnByb2Nlc3NYUmVmVGFibGUobCksdGhpcy50b3BEaWN0fHwodGhpcy50b3BEaWN0PWEpLGM9YS5nZXQoIlhSZWZTdG0iKSxOdW1iZXIuaXNJbnRlZ2VyKGMpKXt2YXIgdT1jO3UgaW4gdGhpcy54cmVmc3Rtc3x8KHRoaXMueHJlZnN0bXNbdV09MSx0aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2godSkpfX1lbHNle2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIGhlYWRlciIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGwuZ2V0T2JqKCkpfHwhKDAsby5pc0NtZCkobC5nZXRPYmooKSwib2JqIil8fCEoMCxvLmlzU3RyZWFtKShjPWwuZ2V0T2JqKCkpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIFhSZWYgc3RyZWFtIik7aWYoYT10aGlzLnByb2Nlc3NYUmVmU3RyZWFtKGMpLHRoaXMudG9wRGljdHx8KHRoaXMudG9wRGljdD1hKSwhYSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiRmFpbGVkIHRvIHJlYWQgWFJlZiBzdHJlYW0iKX1jPWEuZ2V0KCJQcmV2IiksTnVtYmVyLmlzSW50ZWdlcihjKT90aGlzLnN0YXJ0WFJlZlF1ZXVlLnB1c2goYyk6KDAsby5pc1JlZikoYykmJnRoaXMuc3RhcnRYUmVmUXVldWUucHVzaChjLm51bSksdGhpcy5zdGFydFhSZWZRdWV1ZS5zaGlmdCgpfX1yZXR1cm4gdGhpcy50b3BEaWN0fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBpLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsaS5pbmZvKSgiKHdoaWxlIHJlYWRpbmcgWFJlZik6ICIrZSl9aWYoIWUpdGhyb3cgbmV3IGkuWFJlZlBhcnNlRXhjZXB0aW9ufSxnZXRFbnRyeTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmVudHJpZXNbZV07cmV0dXJuIHQmJiF0LmZyZWUmJnQub2Zmc2V0P3Q6bnVsbH0sZmV0Y2hJZlJlZjpmdW5jdGlvbihlLHQpe3JldHVybigwLG8uaXNSZWYpKGUpP3RoaXMuZmV0Y2goZSx0KTplfSxmZXRjaDpmdW5jdGlvbihlLHQpe2lmKCEoMCxvLmlzUmVmKShlKSl0aHJvdyBuZXcgRXJyb3IoInJlZiBvYmplY3QgaXMgbm90IGEgcmVmZXJlbmNlIik7dmFyIHI9ZS5udW07aWYociBpbiB0aGlzLmNhY2hlKXt2YXIgbj10aGlzLmNhY2hlW3JdO3JldHVybiBuIGluc3RhbmNlb2Ygby5EaWN0JiYhbi5vYmpJZCYmKG4ub2JqSWQ9ZS50b1N0cmluZygpKSxufXZhciBhPXRoaXMuZ2V0RW50cnkocik7cmV0dXJuIG51bGw9PT1hP3RoaXMuY2FjaGVbcl09bnVsbDooYT1hLnVuY29tcHJlc3NlZD90aGlzLmZldGNoVW5jb21wcmVzc2VkKGUsYSx0KTp0aGlzLmZldGNoQ29tcHJlc3NlZChlLGEsdCksKDAsby5pc0RpY3QpKGEpP2Eub2JqSWQ9ZS50b1N0cmluZygpOigwLG8uaXNTdHJlYW0pKGEpJiYoYS5kaWN0Lm9iaklkPWUudG9TdHJpbmcoKSksYSl9LGZldGNoVW5jb21wcmVzc2VkOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxuPWUuZ2VuLGE9ZS5udW07aWYodC5nZW4hPT1uKXRocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiSW5jb25zaXN0ZW50IGdlbmVyYXRpb24gaW4gWFJlZjogIi5jb25jYXQoZSkpO3ZhciBsPXRoaXMuc3RyZWFtLm1ha2VTdWJTdHJlYW0odC5vZmZzZXQrdGhpcy5zdHJlYW0uc3RhcnQpLGM9bmV3IHMuUGFyc2VyKG5ldyBzLkxleGVyKGwpLCEwLHRoaXMpLHU9Yy5nZXRPYmooKSxmPWMuZ2V0T2JqKCksaD1jLmdldE9iaigpO2lmKE51bWJlci5pc0ludGVnZXIodSl8fCh1PXBhcnNlSW50KHUsMTApKSxOdW1iZXIuaXNJbnRlZ2VyKGYpfHwoZj1wYXJzZUludChmLDEwKSksdSE9PWF8fGYhPT1ufHwhKDAsby5pc0NtZCkoaCkpdGhyb3cgbmV3IGkuWFJlZkVudHJ5RXhjZXB0aW9uKCJCYWQgKHVuY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO2lmKCJvYmoiIT09aC5jbWQpe2lmKGguY21kLnN0YXJ0c1dpdGgoIm9iaiIpJiYoYT1wYXJzZUludChoLmNtZC5zdWJzdHJpbmcoMyksMTApLCFOdW1iZXIuaXNOYU4oYSkpKXJldHVybiBhO3Rocm93IG5ldyBpLlhSZWZFbnRyeUV4Y2VwdGlvbigiQmFkICh1bmNvbXByZXNzZWQpIFhSZWYgZW50cnk6ICIuY29uY2F0KGUpKX1yZXR1cm4gdD10aGlzLmVuY3J5cHQmJiFyP2MuZ2V0T2JqKHRoaXMuZW5jcnlwdC5jcmVhdGVDaXBoZXJUcmFuc2Zvcm0oYSxuKSk6Yy5nZXRPYmooKSwoMCxvLmlzU3RyZWFtKSh0KXx8KHRoaXMuY2FjaGVbYV09dCksdH0sZmV0Y2hDb21wcmVzc2VkOmZ1bmN0aW9uKGUsdCl7YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXTt2YXIgcj10Lm9mZnNldCxuPXRoaXMuZmV0Y2gobmV3IG8uUmVmKHIsMCkpO2lmKCEoMCxvLmlzU3RyZWFtKShuKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiYmFkIE9ialN0bSBzdHJlYW0iKTt2YXIgYT1uLmRpY3QuZ2V0KCJGaXJzdCIpLGw9bi5kaWN0LmdldCgiTiIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGEpfHwhTnVtYmVyLmlzSW50ZWdlcihsKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmaXJzdCBhbmQgbiBwYXJhbWV0ZXJzIGZvciBPYmpTdG0gc3RyZWFtIik7dmFyIGM9bmV3IHMuUGFyc2VyKG5ldyBzLkxleGVyKG4pLCExLHRoaXMpO2MuYWxsb3dTdHJlYW1zPSEwO3ZhciB1LGYsaD1bXSxkPVtdO2Zvcih1PTA7dTxsOysrdSl7aWYoZj1jLmdldE9iaigpLCFOdW1iZXIuaXNJbnRlZ2VyKGYpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJpbnZhbGlkIG9iamVjdCBudW1iZXIgaW4gdGhlIE9ialN0bSBzdHJlYW06ICIuY29uY2F0KGYpKTtkLnB1c2goZik7dmFyIHA9Yy5nZXRPYmooKTtpZighTnVtYmVyLmlzSW50ZWdlcihwKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBvYmplY3Qgb2Zmc2V0IGluIHRoZSBPYmpTdG0gc3RyZWFtOiAiLmNvbmNhdChwKSl9Zm9yKHU9MDt1PGw7Kyt1KXtoLnB1c2goYy5nZXRPYmooKSksKDAsby5pc0NtZCkoYy5idWYxLCJlbmRvYmoiKSYmYy5zaGlmdCgpLGY9ZFt1XTt2YXIgbT10aGlzLmVudHJpZXNbZl07bSYmbS5vZmZzZXQ9PT1yJiZtLmdlbj09PXUmJih0aGlzLmNhY2hlW2ZdPWhbdV0pfWlmKHZvaWQgMD09PSh0PWhbdC5nZW5dKSl0aHJvdyBuZXcgaS5YUmVmRW50cnlFeGNlcHRpb24oIkJhZCAoY29tcHJlc3NlZCkgWFJlZiBlbnRyeTogIi5jb25jYXQoZSkpO3JldHVybiB0fSxmZXRjaElmUmVmQXN5bmM6KHI9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6aWYoKDAsby5pc1JlZikodCkpe2UubmV4dD0yO2JyZWFrfXJldHVybiBlLmFicnVwdCgicmV0dXJuIix0KTtjYXNlIDI6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDM6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpKSxmdW5jdGlvbihlLHQpe3JldHVybiByLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGZldGNoQXN5bmM6KHQ9ZyhhLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0LHIpe3JldHVybiBhLmRlZmF1bHQud3JhcCgoZnVuY3Rpb24oZSl7Zm9yKDs7KXN3aXRjaChlLnByZXY9ZS5uZXh0KXtjYXNlIDA6cmV0dXJuIGUucHJldj0wLGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2godCxyKSk7Y2FzZSA0OmlmKGUucHJldj00LGUudDA9ZS5jYXRjaCgwKSxlLnQwIGluc3RhbmNlb2YgaS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil7ZS5uZXh0PTg7YnJlYWt9dGhyb3cgZS50MDtjYXNlIDg6cmV0dXJuIGUubmV4dD0xMCx0aGlzLnBkZk1hbmFnZXIucmVxdWVzdFJhbmdlKGUudDAuYmVnaW4sZS50MC5lbmQpO2Nhc2UgMTA6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHRoaXMuZmV0Y2hBc3luYyh0LHIpKTtjYXNlIDExOmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzLFtbMCw0XV0pfSkpKSxmdW5jdGlvbihlLHIpe3JldHVybiB0LmFwcGx5KHRoaXMsYXJndW1lbnRzKX0pLGdldENhdGFsb2dPYmo6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5yb290fX0sZX0oKTt0LlhSZWY9eDt2YXIgQT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyLG4pe2IodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsaS51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIE5hbWVPck51bWJlclRyZWUuIiksdGhpcy5yb290PXQsdGhpcy54cmVmPXIsdGhpcy5fdHlwZT1ufXJldHVybiBrKGUsW3trZXk6ImdldEFsbCIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT1PYmplY3QuY3JlYXRlKG51bGwpO2lmKCF0aGlzLnJvb3QpcmV0dXJuIGU7dmFyIHQ9dGhpcy54cmVmLHI9bmV3IG8uUmVmU2V0O3IucHV0KHRoaXMucm9vdCk7Zm9yKHZhciBuPVt0aGlzLnJvb3RdO24ubGVuZ3RoPjA7KXt2YXIgYT10LmZldGNoSWZSZWYobi5zaGlmdCgpKTtpZigoMCxvLmlzRGljdCkoYSkpaWYoYS5oYXMoIktpZHMiKSlmb3IodmFyIHM9YS5nZXQoIktpZHMiKSxsPTAsYz1zLmxlbmd0aDtsPGM7bCsrKXt2YXIgdT1zW2xdO2lmKHIuaGFzKHUpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCdEdXBsaWNhdGUgZW50cnkgaW4gIicuY29uY2F0KHRoaXMuX3R5cGUsJyIgdHJlZS4nKSk7bi5wdXNoKHUpLHIucHV0KHUpfWVsc2V7dmFyIGY9YS5nZXQodGhpcy5fdHlwZSk7aWYoQXJyYXkuaXNBcnJheShmKSlmb3IodmFyIGg9MCxkPWYubGVuZ3RoO2g8ZDtoKz0yKWVbdC5mZXRjaElmUmVmKGZbaF0pXT10LmZldGNoSWZSZWYoZltoKzFdKX19cmV0dXJuIGV9fSx7a2V5OiJnZXQiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCF0aGlzLnJvb3QpcmV0dXJuIG51bGw7Zm9yKHZhciB0PXRoaXMueHJlZixyPXQuZmV0Y2hJZlJlZih0aGlzLnJvb3QpLG49MDtyLmhhcygiS2lkcyIpOyl7aWYoKytuPjEwKXJldHVybigwLGkud2FybikoJ1NlYXJjaCBkZXB0aCBsaW1pdCByZWFjaGVkIGZvciAiJy5jb25jYXQodGhpcy5fdHlwZSwnIiB0cmVlLicpKSxudWxsO3ZhciBhPXIuZ2V0KCJLaWRzIik7aWYoIUFycmF5LmlzQXJyYXkoYSkpcmV0dXJuIG51bGw7Zm9yKHZhciBvPTAscz1hLmxlbmd0aC0xO288PXM7KXt2YXIgbD1vK3M+PjEsYz10LmZldGNoSWZSZWYoYVtsXSkuZ2V0KCJMaW1pdHMiKTtpZihlPHQuZmV0Y2hJZlJlZihjWzBdKSlzPWwtMTtlbHNle2lmKCEoZT50LmZldGNoSWZSZWYoY1sxXSkpKXtyPXQuZmV0Y2hJZlJlZihhW2xdKTticmVha31vPWwrMX19aWYobz5zKXJldHVybiBudWxsfXZhciB1PXIuZ2V0KHRoaXMuX3R5cGUpO2lmKEFycmF5LmlzQXJyYXkodSkpe2Zvcih2YXIgZj0wLGg9dS5sZW5ndGgtMjtmPD1oOyl7dmFyIGQ9ZitoPj4xLHA9ZCsoMSZkKSxtPXQuZmV0Y2hJZlJlZih1W3BdKTtpZihlPG0paD1wLTI7ZWxzZXtpZighKGU+bSkpcmV0dXJuIHQuZmV0Y2hJZlJlZih1W3ArMV0pO2Y9cCsyfX0oMCxpLmluZm8pKCdGYWxsaW5nIGJhY2sgdG8gYW4gZXhoYXVzdGl2ZSBzZWFyY2gsIGZvciBrZXkgIicuY29uY2F0KGUsJyIsICcpKydpbiAiJy5jb25jYXQodGhpcy5fdHlwZSwnIiB0cmVlLicpKTtmb3IodmFyIGc9MCx2PXUubGVuZ3RoO2c8djtnKz0yKWlmKHQuZmV0Y2hJZlJlZih1W2ddKT09PWUpcmV0dXJuKDAsaS53YXJuKSgnVGhlICInLmNvbmNhdChlLCciIGtleSB3YXMgZm91bmQgYXQgYW4gaW5jb3JyZWN0LCAnKSsnaS5lLiBvdXQtb2Ytb3JkZXIsIHBvc2l0aW9uIGluICInLmNvbmNhdCh0aGlzLl90eXBlLCciIHRyZWUuJykpLHQuZmV0Y2hJZlJlZih1W2crMV0pfXJldHVybiBudWxsfX1dKSxlfSgpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIpe3JldHVybiBiKHRoaXMsdCksZih0aGlzLGgodCkuY2FsbCh0aGlzLGUsciwiTmFtZXMiKSl9cmV0dXJuIGQodCxlKSx0fShBKSxQPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyKXtyZXR1cm4gYih0aGlzLHQpLGYodGhpcyxoKHQpLmNhbGwodGhpcyxlLHIsIk51bXMiKSl9cmV0dXJuIGQodCxlKSx0fShBKSxFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2UmJigwLG8uaXNEaWN0KShlKSYmKHRoaXMueHJlZj10LHRoaXMucm9vdD1lLGUuaGFzKCJGUyIpJiYodGhpcy5mcz1lLmdldCgiRlMiKSksdGhpcy5kZXNjcmlwdGlvbj1lLmhhcygiRGVzYyIpPygwLGkuc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJEZXNjIikpOiIiLGUuaGFzKCJSRiIpJiYoMCxpLndhcm4pKCJSZWxhdGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSx0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITAsZS5oYXMoIkVGIil8fCh0aGlzLmNvbnRlbnRBdmFpbGFibGU9ITEsKDAsaS53YXJuKSgiTm9uLWVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbnMgYXJlIG5vdCBzdXBwb3J0ZWQiKSkpfWZ1bmN0aW9uIHQoZSl7cmV0dXJuIGUuaGFzKCJVRiIpP2UuZ2V0KCJVRiIpOmUuaGFzKCJGIik/ZS5nZXQoIkYiKTplLmhhcygiVW5peCIpP2UuZ2V0KCJVbml4Iik6ZS5oYXMoIk1hYyIpP2UuZ2V0KCJNYWMiKTplLmhhcygiRE9TIik/ZS5nZXQoIkRPUyIpOm51bGx9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQgZmlsZW5hbWUoKXtpZighdGhpcy5fZmlsZW5hbWUmJnRoaXMucm9vdCl7dmFyIGU9dCh0aGlzLnJvb3QpfHwidW5uYW1lZCI7dGhpcy5fZmlsZW5hbWU9KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZSkucmVwbGFjZSgvXFxcXC9nLCJcXCIpLnJlcGxhY2UoL1xcXC8vZywiLyIpLnJlcGxhY2UoL1xcL2csIi8iKX1yZXR1cm4gdGhpcy5fZmlsZW5hbWV9LGdldCBjb250ZW50KCl7aWYoIXRoaXMuY29udGVudEF2YWlsYWJsZSlyZXR1cm4gbnVsbDshdGhpcy5jb250ZW50UmVmJiZ0aGlzLnJvb3QmJih0aGlzLmNvbnRlbnRSZWY9dCh0aGlzLnJvb3QuZ2V0KCJFRiIpKSk7dmFyIGU9bnVsbDtpZih0aGlzLmNvbnRlbnRSZWYpe3ZhciByPXRoaXMueHJlZi5mZXRjaElmUmVmKHRoaXMuY29udGVudFJlZik7ciYmKDAsby5pc1N0cmVhbSkocik/ZT1yLmdldEJ5dGVzKCk6KDAsaS53YXJuKSgiRW1iZWRkZWQgZmlsZSBzcGVjaWZpY2F0aW9uIHBvaW50cyB0byBub24tZXhpc3RpbmcvaW52YWxpZCBjb250ZW50Iil9ZWxzZSgwLGkud2FybikoIkVtYmVkZGVkIGZpbGUgc3BlY2lmaWNhdGlvbiBkb2VzIG5vdCBoYXZlIGEgY29udGVudCIpO3JldHVybiBlfSxnZXQgc2VyaWFsaXphYmxlKCl7cmV0dXJue2ZpbGVuYW1lOnRoaXMuZmlsZW5hbWUsY29udGVudDp0aGlzLmNvbnRlbnR9fX0sZX0oKTt0LkZpbGVTcGVjPUU7dmFyIFQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3JldHVybigwLG8uaXNSZWYpKGUpfHwoMCxvLmlzRGljdCkoZSl8fEFycmF5LmlzQXJyYXkoZSl8fCgwLG8uaXNTdHJlYW0pKGUpfWZ1bmN0aW9uIHQodCxyKXtpZigoMCxvLmlzRGljdCkodCl8fCgwLG8uaXNTdHJlYW0pKHQpKWZvcih2YXIgbj0oMCxvLmlzRGljdCkodCk/dDp0LmRpY3QsYT1uLmdldEtleXMoKSxpPTAscz1hLmxlbmd0aDtpPHM7aSsrKXt2YXIgbD1uLmdldFJhdyhhW2ldKTtlKGwpJiZyLnB1c2gobCl9ZWxzZSBpZihBcnJheS5pc0FycmF5KHQpKWZvcih2YXIgYz0wLHU9dC5sZW5ndGg7Yzx1O2MrKyl7dmFyIGY9dFtjXTtlKGYpJiZyLnB1c2goZil9fWZ1bmN0aW9uIHIoZSx0LHIpe3RoaXMuZGljdD1lLHRoaXMua2V5cz10LHRoaXMueHJlZj1yLHRoaXMucmVmU2V0PW51bGwsdGhpcy5jYXBhYmlsaXR5PW51bGx9cmV0dXJuIHIucHJvdG90eXBlPXtsb2FkOmZ1bmN0aW9uKCl7aWYodGhpcy5jYXBhYmlsaXR5PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCksISh0aGlzLnhyZWYuc3RyZWFtIGluc3RhbmNlb2YgbC5DaHVua2VkU3RyZWFtKXx8MD09PXRoaXMueHJlZi5zdHJlYW0uZ2V0TWlzc2luZ0NodW5rcygpLmxlbmd0aClyZXR1cm4gdGhpcy5jYXBhYmlsaXR5LnJlc29sdmUoKSx0aGlzLmNhcGFiaWxpdHkucHJvbWlzZTt2YXIgZT10aGlzLmtleXMsdD10aGlzLmRpY3Q7dGhpcy5yZWZTZXQ9bmV3IG8uUmVmU2V0O2Zvcih2YXIgcj1bXSxuPTAsYT1lLmxlbmd0aDtuPGE7bisrKXt2YXIgcz10LmdldFJhdyhlW25dKTt2b2lkIDAhPT1zJiZyLnB1c2gocyl9cmV0dXJuIHRoaXMuX3dhbGsociksdGhpcy5jYXBhYmlsaXR5LnByb21pc2V9LF93YWxrOmZ1bmN0aW9uKGUpe2Zvcih2YXIgcj10aGlzLG49W10sYT1bXTtlLmxlbmd0aDspe3ZhciBzPWUucG9wKCk7aWYoKDAsby5pc1JlZikocykpe2lmKHRoaXMucmVmU2V0LmhhcyhzKSljb250aW51ZTt0cnl7dGhpcy5yZWZTZXQucHV0KHMpLHM9dGhpcy54cmVmLmZldGNoKHMpfWNhdGNoKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuTWlzc2luZ0RhdGFFeGNlcHRpb24pKXRocm93IGU7bi5wdXNoKHMpLGEucHVzaCh7YmVnaW46ZS5iZWdpbixlbmQ6ZS5lbmR9KX19aWYocyYmcy5nZXRCYXNlU3RyZWFtcyl7Zm9yKHZhciBsPXMuZ2V0QmFzZVN0cmVhbXMoKSxjPSExLHU9MCxmPWwubGVuZ3RoO3U8Zjt1Kyspe3ZhciBoPWxbdV07aC5nZXRNaXNzaW5nQ2h1bmtzJiZoLmdldE1pc3NpbmdDaHVua3MoKS5sZW5ndGgmJihjPSEwLGEucHVzaCh7YmVnaW46aC5zdGFydCxlbmQ6aC5lbmR9KSl9YyYmbi5wdXNoKHMpfXQocyxlKX1hLmxlbmd0aD90aGlzLnhyZWYuc3RyZWFtLm1hbmFnZXIucmVxdWVzdFJhbmdlcyhhKS50aGVuKChmdW5jdGlvbigpe2Zvcih2YXIgZT0wLHQ9bi5sZW5ndGg7ZTx0O2UrKyl7dmFyIGE9bltlXTsoMCxvLmlzUmVmKShhKSYmci5yZWZTZXQucmVtb3ZlKGEpfXIuX3dhbGsobil9KSx0aGlzLmNhcGFiaWxpdHkucmVqZWN0KToodGhpcy5yZWZTZXQ9bnVsbCx0aGlzLmNhcGFiaWxpdHkucmVzb2x2ZSgpKX19LHJ9KCk7dC5PYmplY3RMb2FkZXI9VH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtmdW5jdGlvbiBuKGUpe3JldHVybihuPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuaXNFT0Y9ZnVuY3Rpb24oZSl7cmV0dXJuIGU9PT1hfSx0LmlzQ21kPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUgaW5zdGFuY2VvZiBvJiYodm9pZCAwPT09dHx8ZS5jbWQ9PT10KX0sdC5pc0RpY3Q9aCx0LmlzTmFtZT1mLHQuaXNSZWY9ZCx0LmlzUmVmc0VxdWFsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUubnVtPT09dC5udW0mJmUuZ2VuPT09dC5nZW59LHQuaXNTdHJlYW09ZnVuY3Rpb24oZSl7cmV0dXJuIm9iamVjdCI9PT1uKGUpJiZudWxsIT09ZSYmdm9pZCAwIT09ZS5nZXRCeXRlc30sdC5SZWZTZXRDYWNoZT10LlJlZlNldD10LlJlZj10Lk5hbWU9dC5EaWN0PXQuQ21kPXQuRU9GPXZvaWQgMDt2YXIgYT17fTt0LkVPRj1hO3ZhciBpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm5hbWU9ZX1lLnByb3RvdHlwZT17fTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO3JldHVybiBlLmdldD1mdW5jdGlvbihyKXt2YXIgbj10W3JdO3JldHVybiBufHwodFtyXT1uZXcgZShyKSl9LGV9KCk7dC5OYW1lPWk7dmFyIG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuY21kPWV9ZS5wcm90b3R5cGU9e307dmFyIHQ9T2JqZWN0LmNyZWF0ZShudWxsKTtyZXR1cm4gZS5nZXQ9ZnVuY3Rpb24ocil7dmFyIG49dFtyXTtyZXR1cm4gbnx8KHRbcl09bmV3IGUocikpfSxlfSgpO3QuQ21kPW87dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT1mdW5jdGlvbigpe3JldHVybiBlfTtmdW5jdGlvbiB0KHQpe3RoaXMuX21hcD1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMueHJlZj10LHRoaXMub2JqSWQ9bnVsbCx0aGlzLnN1cHByZXNzRW5jcnlwdGlvbj0hMSx0aGlzLl9fbm9uU2VyaWFsaXphYmxlX189ZX1yZXR1cm4gdC5wcm90b3R5cGU9e2Fzc2lnblhyZWY6ZnVuY3Rpb24oZSl7dGhpcy54cmVmPWV9LGdldDpmdW5jdGlvbihlLHQscil7dmFyIG4sYT10aGlzLnhyZWYsaT10aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtyZXR1cm4gdm9pZCAwIT09KG49dGhpcy5fbWFwW2VdKXx8ZSBpbiB0aGlzLl9tYXB8fHZvaWQgMD09PXQ/YT9hLmZldGNoSWZSZWYobixpKTpuOnZvaWQgMCE9PShuPXRoaXMuX21hcFt0XSl8fHQgaW4gdGhpcy5fbWFwfHx2b2lkIDA9PT1yP2E/YS5mZXRjaElmUmVmKG4saSk6bjoobj10aGlzLl9tYXBbcl18fG51bGwsYT9hLmZldGNoSWZSZWYobixpKTpuKX0sZ2V0QXN5bmM6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE9dGhpcy54cmVmLGk9dGhpcy5zdXBwcmVzc0VuY3J5cHRpb247cmV0dXJuIHZvaWQgMCE9PShuPXRoaXMuX21hcFtlXSl8fGUgaW4gdGhpcy5fbWFwfHx2b2lkIDA9PT10P2E/YS5mZXRjaElmUmVmQXN5bmMobixpKTpQcm9taXNlLnJlc29sdmUobik6dm9pZCAwIT09KG49dGhpcy5fbWFwW3RdKXx8dCBpbiB0aGlzLl9tYXB8fHZvaWQgMD09PXI/YT9hLmZldGNoSWZSZWZBc3luYyhuLGkpOlByb21pc2UucmVzb2x2ZShuKToobj10aGlzLl9tYXBbcl18fG51bGwsYT9hLmZldGNoSWZSZWZBc3luYyhuLGkpOlByb21pc2UucmVzb2x2ZShuKSl9LGdldEFycmF5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLmdldChlLHQsciksYT10aGlzLnhyZWYsaT10aGlzLnN1cHByZXNzRW5jcnlwdGlvbjtpZighQXJyYXkuaXNBcnJheShuKXx8IWEpcmV0dXJuIG47Zm9yKHZhciBvPTAscz0obj1uLnNsaWNlKCkpLmxlbmd0aDtvPHM7bysrKWQobltvXSkmJihuW29dPWEuZmV0Y2gobltvXSxpKSk7cmV0dXJuIG59LGdldFJhdzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfSxnZXRLZXlzOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5rZXlzKHRoaXMuX21hcCl9LHNldDpmdW5jdGlvbihlLHQpe3RoaXMuX21hcFtlXT10fSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gdGhpcy5fbWFwfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuZ2V0KHQpKX19LHQuZW1wdHk9bmV3IHQobnVsbCksdC5tZXJnZT1mdW5jdGlvbihlLHIpe2Zvcih2YXIgbj1uZXcgdChlKSxhPTAsaT1yLmxlbmd0aDthPGk7YSsrKXt2YXIgbz1yW2FdO2lmKGgobykpZm9yKHZhciBzIGluIG8uX21hcCl2b2lkIDA9PT1uLl9tYXBbc10mJihuLl9tYXBbc109by5fbWFwW3NdKX1yZXR1cm4gbn0sdH0oKTt0LkRpY3Q9czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLm51bT1lLHRoaXMuZ2VuPXR9cmV0dXJuIGUucHJvdG90eXBlPXt0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5nZW4/IiIuY29uY2F0KHRoaXMubnVtLCJSIikuY29uY2F0KHRoaXMuZ2VuKToiIi5jb25jYXQodGhpcy5udW0sIlIiKX19LGV9KCk7dC5SZWY9bDt2YXIgYz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmRpY3Q9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGU9e2hhczpmdW5jdGlvbihlKXtyZXR1cm4gZS50b1N0cmluZygpaW4gdGhpcy5kaWN0fSxwdXQ6ZnVuY3Rpb24oZSl7dGhpcy5kaWN0W2UudG9TdHJpbmcoKV09ITB9LHJlbW92ZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy5kaWN0W2UudG9TdHJpbmcoKV19fSxlfSgpO3QuUmVmU2V0PWM7dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy5kaWN0PU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlPXtnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZGljdFtlLnRvU3RyaW5nKCldfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIGUudG9TdHJpbmcoKWluIHRoaXMuZGljdH0scHV0OmZ1bmN0aW9uKGUsdCl7dGhpcy5kaWN0W2UudG9TdHJpbmcoKV09dH0scHV0QWxpYXM6ZnVuY3Rpb24oZSx0KXt0aGlzLmRpY3RbZS50b1N0cmluZygpXT10aGlzLmdldCh0KX0sZm9yRWFjaDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgciBpbiB0aGlzLmRpY3QpZS5jYWxsKHQsdGhpcy5kaWN0W3JdKX0sY2xlYXI6ZnVuY3Rpb24oKXt0aGlzLmRpY3Q9T2JqZWN0LmNyZWF0ZShudWxsKX19LGV9KCk7ZnVuY3Rpb24gZihlLHQpe3JldHVybiBlIGluc3RhbmNlb2YgaSYmKHZvaWQgMD09PXR8fGUubmFtZT09PXQpfWZ1bmN0aW9uIGgoZSx0KXtyZXR1cm4gZSBpbnN0YW5jZW9mIHMmJih2b2lkIDA9PT10fHxmKGUuZ2V0KCJUeXBlIiksdCkpfWZ1bmN0aW9uIGQoZSl7cmV0dXJuIGUgaW5zdGFuY2VvZiBsfXQuUmVmU2V0Q2FjaGU9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5QYXJzZXI9dC5MaW5lYXJpemF0aW9uPXQuTGV4ZXI9dm9pZCAwO3ZhciBuPXIoMTU3KSxhPXIoNiksaT1yKDE1NSksbz1yKDE1OCkscz1yKDE2MCksbD1yKDE2MyksYz1yKDE2NSk7ZnVuY3Rpb24gdShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj0xLG49MCxhPTA7YTx0OysrYSluKz1yKz0yNTUmZVthXTtyZXR1cm4gbiU2NTUyMTw8MTZ8ciU2NTUyMX12YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbil7dGhpcy5sZXhlcj1lLHRoaXMuYWxsb3dTdHJlYW1zPXQsdGhpcy54cmVmPXIsdGhpcy5yZWNvdmVyeU1vZGU9bnx8ITEsdGhpcy5pbWFnZUNhY2hlPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5yZWZpbGwoKX1yZXR1cm4gZS5wcm90b3R5cGU9e3JlZmlsbDpmdW5jdGlvbigpe3RoaXMuYnVmMT10aGlzLmxleGVyLmdldE9iaigpLHRoaXMuYnVmMj10aGlzLmxleGVyLmdldE9iaigpfSxzaGlmdDpmdW5jdGlvbigpeygwLGkuaXNDbWQpKHRoaXMuYnVmMiwiSUQiKT8odGhpcy5idWYxPXRoaXMuYnVmMix0aGlzLmJ1ZjI9bnVsbCk6KHRoaXMuYnVmMT10aGlzLmJ1ZjIsdGhpcy5idWYyPXRoaXMubGV4ZXIuZ2V0T2JqKCkpfSx0cnlTaGlmdDpmdW5jdGlvbigpe3RyeXtyZXR1cm4gdGhpcy5zaGlmdCgpLCEwfWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBhLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuITF9fSxnZXRPYmo6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5idWYxO2lmKHRoaXMuc2hpZnQoKSx0IGluc3RhbmNlb2YgaS5DbWQpc3dpdGNoKHQuY21kKXtjYXNlIkJJIjpyZXR1cm4gdGhpcy5tYWtlSW5saW5lSW1hZ2UoZSk7Y2FzZSJbIjpmb3IodmFyIHI9W107ISgwLGkuaXNDbWQpKHRoaXMuYnVmMSwiXSIpJiYhKDAsaS5pc0VPRikodGhpcy5idWYxKTspci5wdXNoKHRoaXMuZ2V0T2JqKGUpKTtpZigoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpKXtpZighdGhpcy5yZWNvdmVyeU1vZGUpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkVuZCBvZiBmaWxlIGluc2lkZSBhcnJheSIpO3JldHVybiByfXJldHVybiB0aGlzLnNoaWZ0KCkscjtjYXNlIjw8Ijpmb3IodmFyIG49bmV3IGkuRGljdCh0aGlzLnhyZWYpOyEoMCxpLmlzQ21kKSh0aGlzLmJ1ZjEsIj4+IikmJiEoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpOylpZigoMCxpLmlzTmFtZSkodGhpcy5idWYxKSl7dmFyIG89dGhpcy5idWYxLm5hbWU7aWYodGhpcy5zaGlmdCgpLCgwLGkuaXNFT0YpKHRoaXMuYnVmMSkpYnJlYWs7bi5zZXQobyx0aGlzLmdldE9iaihlKSl9ZWxzZSgwLGEuaW5mbykoIk1hbGZvcm1lZCBkaWN0aW9uYXJ5OiBrZXkgbXVzdCBiZSBhIG5hbWUgb2JqZWN0IiksdGhpcy5zaGlmdCgpO2lmKCgwLGkuaXNFT0YpKHRoaXMuYnVmMSkpe2lmKCF0aGlzLnJlY292ZXJ5TW9kZSl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiRW5kIG9mIGZpbGUgaW5zaWRlIGRpY3Rpb25hcnkiKTtyZXR1cm4gbn1yZXR1cm4oMCxpLmlzQ21kKSh0aGlzLmJ1ZjIsInN0cmVhbSIpP3RoaXMuYWxsb3dTdHJlYW1zP3RoaXMubWFrZVN0cmVhbShuLGUpOm46KHRoaXMuc2hpZnQoKSxuKTtkZWZhdWx0OnJldHVybiB0fWlmKE51bWJlci5pc0ludGVnZXIodCkpe3ZhciBzPXQ7aWYoTnVtYmVyLmlzSW50ZWdlcih0aGlzLmJ1ZjEpJiYoMCxpLmlzQ21kKSh0aGlzLmJ1ZjIsIlIiKSl7dmFyIGw9bmV3IGkuUmVmKHMsdGhpcy5idWYxKTtyZXR1cm4gdGhpcy5zaGlmdCgpLHRoaXMuc2hpZnQoKSxsfXJldHVybiBzfWlmKCgwLGEuaXNTdHJpbmcpKHQpKXt2YXIgYz10O3JldHVybiBlJiYoYz1lLmRlY3J5cHRTdHJpbmcoYykpLGN9cmV0dXJuIHR9LGZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49ZS5wb3MsaT0wOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigwPT09aSlpPTY5PT09dD8xOjA7ZWxzZSBpZigxPT09aSlpPTczPT09dD8yOjA7ZWxzZSBpZigoMCxhLmFzc2VydCkoMj09PWkpLDMyPT09dHx8MTA9PT10fHwxMz09PXQpe3I9ZS5wb3M7Zm9yKHZhciBvPWUucGVla0J5dGVzKDEwKSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKWlmKCgwIT09KHQ9b1tzXSl8fDA9PT1vW3MrMV0pJiYxMCE9PXQmJjEzIT09dCYmKHQ8MzJ8fHQ+MTI3KSl7aT0wO2JyZWFrfWlmKDI9PT1pKWJyZWFrfWVsc2UgaT0wOy0xPT09dCYmKCgwLGEud2FybikoImZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kOiBSZWFjaGVkIHRoZSBlbmQgb2YgdGhlIHN0cmVhbSB3aXRob3V0IGZpbmRpbmcgYSB2YWxpZCBFSSBtYXJrZXIiKSxyJiYoKDAsYS53YXJuKSgnLi4uIHRyeWluZyB0byByZWNvdmVyIGJ5IHVzaW5nIHRoZSBsYXN0ICJFSSIgb2NjdXJyZW5jZS4nKSxlLnNraXAoLShlLnBvcy1yKSkpKTt2YXIgYz00O3JldHVybiBlLnNraXAoLWMpLHQ9ZS5wZWVrQnl0ZSgpLGUuc2tpcChjKSwoMCxhLmlzU3BhY2UpKHQpfHxjLS0sZS5wb3MtYy1ufSxmaW5kRENURGVjb2RlSW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4saT1lLnBvcyxvPSExOy0xIT09KHQ9ZS5nZXRCeXRlKCkpOylpZigyNTU9PT10KXtzd2l0Y2goZS5nZXRCeXRlKCkpe2Nhc2UgMDpicmVhaztjYXNlIDI1NTplLnNraXAoLTEpO2JyZWFrO2Nhc2UgMjE3Om89ITA7YnJlYWs7Y2FzZSAxOTI6Y2FzZSAxOTM6Y2FzZSAxOTQ6Y2FzZSAxOTU6Y2FzZSAxOTc6Y2FzZSAxOTg6Y2FzZSAxOTk6Y2FzZSAyMDE6Y2FzZSAyMDI6Y2FzZSAyMDM6Y2FzZSAyMDU6Y2FzZSAyMDY6Y2FzZSAyMDc6Y2FzZSAxOTY6Y2FzZSAyMDQ6Y2FzZSAyMTg6Y2FzZSAyMTk6Y2FzZSAyMjA6Y2FzZSAyMjE6Y2FzZSAyMjI6Y2FzZSAyMjM6Y2FzZSAyMjQ6Y2FzZSAyMjU6Y2FzZSAyMjY6Y2FzZSAyMjc6Y2FzZSAyMjg6Y2FzZSAyMjk6Y2FzZSAyMzA6Y2FzZSAyMzE6Y2FzZSAyMzI6Y2FzZSAyMzM6Y2FzZSAyMzQ6Y2FzZSAyMzU6Y2FzZSAyMzY6Y2FzZSAyMzc6Y2FzZSAyMzg6Y2FzZSAyMzk6Y2FzZSAyNTQ6KHI9ZS5nZXRVaW50MTYoKSk+Mj9lLnNraXAoci0yKTplLnNraXAoLTIpfWlmKG8pYnJlYWt9cmV0dXJuIG49ZS5wb3MtaSwtMT09PXQ/KCgwLGEud2FybikoIklubGluZSBEQ1REZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0kgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1uKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSksbil9LGZpbmRBU0NJSTg1RGVjb2RlSW5saW5lU3RyZWFtRW5kOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG49ZS5wb3M7LTEhPT0odD1lLmdldEJ5dGUoKSk7KWlmKDEyNj09PXQmJjYyPT09ZS5wZWVrQnl0ZSgpKXtlLnNraXAoKTticmVha31yZXR1cm4gcj1lLnBvcy1uLC0xPT09dD8oKDAsYS53YXJuKSgiSW5saW5lIEFTQ0lJODVEZWNvZGUgaW1hZ2Ugc3RyZWFtOiBFT0QgbWFya2VyIG5vdCBmb3VuZCwgc2VhcmNoaW5nIGZvciAvRUkvIGluc3RlYWQuIiksZS5za2lwKC1yKSx0aGlzLmZpbmREZWZhdWx0SW5saW5lU3RyZWFtRW5kKGUpKToodGhpcy5pbmxpbmVTdHJlYW1Ta2lwRUkoZSkscil9LGZpbmRBU0NJSUhleERlY29kZUlubGluZVN0cmVhbUVuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuPWUucG9zOy0xIT09KHQ9ZS5nZXRCeXRlKCkpJiY2MiE9PXQ7KTtyZXR1cm4gcj1lLnBvcy1uLC0xPT09dD8oKDAsYS53YXJuKSgiSW5saW5lIEFTQ0lJSGV4RGVjb2RlIGltYWdlIHN0cmVhbTogRU9EIG1hcmtlciBub3QgZm91bmQsIHNlYXJjaGluZyBmb3IgL0VJLyBpbnN0ZWFkLiIpLGUuc2tpcCgtciksdGhpcy5maW5kRGVmYXVsdElubGluZVN0cmVhbUVuZChlKSk6KHRoaXMuaW5saW5lU3RyZWFtU2tpcEVJKGUpLHIpfSxpbmxpbmVTdHJlYW1Ta2lwRUk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHI9MDstMSE9PSh0PWUuZ2V0Qnl0ZSgpKTspaWYoMD09PXIpcj02OT09PXQ/MTowO2Vsc2UgaWYoMT09PXIpcj03Mz09PXQ/MjowO2Vsc2UgaWYoMj09PXIpYnJlYWt9LG1ha2VJbmxpbmVJbWFnZTpmdW5jdGlvbihlKXtmb3IodmFyIHQscj10aGlzLmxleGVyLG49ci5zdHJlYW0sbz1uZXcgaS5EaWN0KHRoaXMueHJlZik7ISgwLGkuaXNDbWQpKHRoaXMuYnVmMSwiSUQiKSYmISgwLGkuaXNFT0YpKHRoaXMuYnVmMSk7KXtpZighKDAsaS5pc05hbWUpKHRoaXMuYnVmMSkpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkRpY3Rpb25hcnkga2V5IG11c3QgYmUgYSBuYW1lIG9iamVjdCIpO3ZhciBzPXRoaXMuYnVmMS5uYW1lO2lmKHRoaXMuc2hpZnQoKSwoMCxpLmlzRU9GKSh0aGlzLmJ1ZjEpKWJyZWFrO28uc2V0KHMsdGhpcy5nZXRPYmooZSkpfS0xIT09ci5iZWdpbklubGluZUltYWdlUG9zJiYodD1uLnBvcy1yLmJlZ2luSW5saW5lSW1hZ2VQb3MpO3ZhciBsLGM9by5nZXQoIkZpbHRlciIsIkYiKTtpZigoMCxpLmlzTmFtZSkoYykpbD1jLm5hbWU7ZWxzZSBpZihBcnJheS5pc0FycmF5KGMpKXt2YXIgZj10aGlzLnhyZWYuZmV0Y2hJZlJlZihjWzBdKTsoMCxpLmlzTmFtZSkoZikmJihsPWYubmFtZSl9dmFyIGgsZD1uLnBvcztoPSJEQ1REZWNvZGUiPT09bHx8IkRDVCI9PT1sP3RoaXMuZmluZERDVERlY29kZUlubGluZVN0cmVhbUVuZChuKToiQVNDSUk4NURlY29kZSI9PT1sfHwiQTg1Ij09PWw/dGhpcy5maW5kQVNDSUk4NURlY29kZUlubGluZVN0cmVhbUVuZChuKToiQVNDSUlIZXhEZWNvZGUiPT09bHx8IkFIeCI9PT1sP3RoaXMuZmluZEFTQ0lJSGV4RGVjb2RlSW5saW5lU3RyZWFtRW5kKG4pOnRoaXMuZmluZERlZmF1bHRJbmxpbmVTdHJlYW1FbmQobik7dmFyIHAsbT1uLm1ha2VTdWJTdHJlYW0oZCxoLG8pO2lmKGg8MWUzJiZ0PDU1NTIpe3ZhciBnPW0uZ2V0Qnl0ZXMoKTttLnJlc2V0KCk7dmFyIHY9bi5wb3M7bi5wb3M9ci5iZWdpbklubGluZUltYWdlUG9zO3ZhciB5PW4uZ2V0Qnl0ZXModCk7bi5wb3M9dixwPXUoZykrIl8iK3UoeSk7dmFyIGI9dGhpcy5pbWFnZUNhY2hlW3BdO2lmKHZvaWQgMCE9PWIpcmV0dXJuIHRoaXMuYnVmMj1pLkNtZC5nZXQoIkVJIiksdGhpcy5zaGlmdCgpLGIucmVzZXQoKSxifXJldHVybiBlJiYobT1lLmNyZWF0ZVN0cmVhbShtLGgpKSwobT10aGlzLmZpbHRlcihtLG8saCkpLmRpY3Q9byx2b2lkIDAhPT1wJiYobS5jYWNoZUtleT0iaW5saW5lXyIraCsiXyIrcCx0aGlzLmltYWdlQ2FjaGVbcF09bSksdGhpcy5idWYyPWkuQ21kLmdldCgiRUkiKSx0aGlzLnNoaWZ0KCksbX0sX2ZpbmRTdHJlYW1MZW5ndGg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLmxleGVyLnN0cmVhbTtyLnBvcz1lO2Zvcih2YXIgbj10Lmxlbmd0aDtyLnBvczxyLmVuZDspe3ZhciBhPXIucGVla0J5dGVzKDIwNDgpLGk9YS5sZW5ndGgtbjtpZihpPD0wKWJyZWFrO2Zvcih2YXIgbz0wO288aTspe2Zvcih2YXIgcz0wO3M8biYmYVtvK3NdPT09dFtzXTspcysrO2lmKHM+PW4pcmV0dXJuIHIucG9zKz1vLHIucG9zLWU7bysrfXIucG9zKz1pfXJldHVybi0xfSxtYWtlU3RyZWFtOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5sZXhlcixuPXIuc3RyZWFtO3Iuc2tpcFRvTmV4dExpbmUoKTt2YXIgbz1uLnBvcy0xLHM9ZS5nZXQoIkxlbmd0aCIpO2lmKE51bWJlci5pc0ludGVnZXIocyl8fCgoMCxhLmluZm8pKCJCYWQgIitzKyIgYXR0cmlidXRlIGluIHN0cmVhbSIpLHM9MCksbi5wb3M9bytzLHIubmV4dENoYXIoKSx0aGlzLnRyeVNoaWZ0KCkmJigwLGkuaXNDbWQpKHRoaXMuYnVmMiwiZW5kc3RyZWFtIikpdGhpcy5zaGlmdCgpO2Vsc2V7dmFyIGw9bmV3IFVpbnQ4QXJyYXkoWzEwMSwxMTAsMTAwLDExNSwxMTYsMTE0LDEwMSw5NywxMDldKSxjPXRoaXMuX2ZpbmRTdHJlYW1MZW5ndGgobyxsKTtpZihjPDApe2Zvcih2YXIgdT0xO3U8PTE7dSsrKXt2YXIgZj1sLmxlbmd0aC11LGg9bC5zbGljZSgwLGYpLGQ9dGhpcy5fZmluZFN0cmVhbUxlbmd0aChvLGgpO2lmKGQ+PTApe3ZhciBwPW4ucGVla0J5dGVzKGYrMSlbZl07aWYoISgwLGEuaXNTcGFjZSkocCkpYnJlYWs7KDAsYS5pbmZvKSgnRm91bmQgIicuY29uY2F0KCgwLGEuYnl0ZXNUb1N0cmluZykoaCksJyIgd2hlbiAnKSsic2VhcmNoaW5nIGZvciBlbmRzdHJlYW0gY29tbWFuZC4iKSxjPWQ7YnJlYWt9fWlmKGM8MCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiTWlzc2luZyBlbmRzdHJlYW0gY29tbWFuZC4iKX1zPWMsci5uZXh0Q2hhcigpLHRoaXMuc2hpZnQoKSx0aGlzLnNoaWZ0KCl9cmV0dXJuIHRoaXMuc2hpZnQoKSxuPW4ubWFrZVN1YlN0cmVhbShvLHMsZSksdCYmKG49dC5jcmVhdGVTdHJlYW0obixzKSksKG49dGhpcy5maWx0ZXIobixlLHMpKS5kaWN0PWUsbn0sZmlsdGVyOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10LmdldCgiRmlsdGVyIiwiRiIpLG89dC5nZXQoIkRlY29kZVBhcm1zIiwiRFAiKTtpZigoMCxpLmlzTmFtZSkobikpcmV0dXJuIEFycmF5LmlzQXJyYXkobykmJigwLGEud2FybikoIi9EZWNvZGVQYXJtcyBzaG91bGQgbm90IGNvbnRhaW4gYW4gQXJyYXksIHdoZW4gL0ZpbHRlciBjb250YWlucyBhIE5hbWUuIiksdGhpcy5tYWtlRmlsdGVyKGUsbi5uYW1lLHIsbyk7dmFyIHM9cjtpZihBcnJheS5pc0FycmF5KG4pKWZvcih2YXIgbD1uLGM9byx1PTAsZj1sLmxlbmd0aDt1PGY7Kyt1KXtpZihuPXRoaXMueHJlZi5mZXRjaElmUmVmKGxbdV0pLCEoMCxpLmlzTmFtZSkobikpdGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkJhZCBmaWx0ZXIgbmFtZTogIituKTtvPW51bGwsQXJyYXkuaXNBcnJheShjKSYmdSBpbiBjJiYobz10aGlzLnhyZWYuZmV0Y2hJZlJlZihjW3VdKSksZT10aGlzLm1ha2VGaWx0ZXIoZSxuLm5hbWUscyxvKSxzPW51bGx9cmV0dXJuIGV9LG1ha2VGaWx0ZXI6ZnVuY3Rpb24oZSx0LHIsaSl7aWYoMD09PXIpcmV0dXJuKDAsYS53YXJuKSgnRW1wdHkgIicrdCsnIiBzdHJlYW0uJyksbmV3IG4uTnVsbFN0cmVhbTt0cnl7dmFyIHU9dGhpcy54cmVmLnN0YXRzLnN0cmVhbVR5cGVzO2lmKCJGbGF0ZURlY29kZSI9PT10fHwiRmwiPT09dClyZXR1cm4gdVthLlN0cmVhbVR5cGUuRkxBVEVdPSEwLGk/bmV3IG4uUHJlZGljdG9yU3RyZWFtKG5ldyBuLkZsYXRlU3RyZWFtKGUscikscixpKTpuZXcgbi5GbGF0ZVN0cmVhbShlLHIpO2lmKCJMWldEZWNvZGUiPT09dHx8IkxaVyI9PT10KXt1W2EuU3RyZWFtVHlwZS5MWlddPSEwO3ZhciBmPTE7cmV0dXJuIGk/KGkuaGFzKCJFYXJseUNoYW5nZSIpJiYoZj1pLmdldCgiRWFybHlDaGFuZ2UiKSksbmV3IG4uUHJlZGljdG9yU3RyZWFtKG5ldyBuLkxaV1N0cmVhbShlLHIsZikscixpKSk6bmV3IG4uTFpXU3RyZWFtKGUscixmKX1yZXR1cm4iRENURGVjb2RlIj09PXR8fCJEQ1QiPT09dD8odVthLlN0cmVhbVR5cGUuRENUXT0hMCxuZXcgbC5KcGVnU3RyZWFtKGUscixlLmRpY3QsaSkpOiJKUFhEZWNvZGUiPT09dHx8IkpQWCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5KUFhdPSEwLG5ldyBjLkpweFN0cmVhbShlLHIsZS5kaWN0LGkpKToiQVNDSUk4NURlY29kZSI9PT10fHwiQTg1Ij09PXQ/KHVbYS5TdHJlYW1UeXBlLkE4NV09ITAsbmV3IG4uQXNjaWk4NVN0cmVhbShlLHIpKToiQVNDSUlIZXhEZWNvZGUiPT09dHx8IkFIeCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5BSFhdPSEwLG5ldyBuLkFzY2lpSGV4U3RyZWFtKGUscikpOiJDQ0lUVEZheERlY29kZSI9PT10fHwiQ0NGIj09PXQ/KHVbYS5TdHJlYW1UeXBlLkNDRl09ITAsbmV3IG8uQ0NJVFRGYXhTdHJlYW0oZSxyLGkpKToiUnVuTGVuZ3RoRGVjb2RlIj09PXR8fCJSTCI9PT10Pyh1W2EuU3RyZWFtVHlwZS5STF09ITAsbmV3IG4uUnVuTGVuZ3RoU3RyZWFtKGUscikpOiJKQklHMkRlY29kZSI9PT10Pyh1W2EuU3RyZWFtVHlwZS5KQklHXT0hMCxuZXcgcy5KYmlnMlN0cmVhbShlLHIsZS5kaWN0LGkpKTooKDAsYS53YXJuKSgnZmlsdGVyICInK3QrJyIgbm90IHN1cHBvcnRlZCB5ZXQnKSxlKX1jYXRjaChlKXtpZihlIGluc3RhbmNlb2YgYS5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlO3JldHVybigwLGEud2FybikoJ0ludmFsaWQgc3RyZWFtOiAiJytlKyciJyksbmV3IG4uTnVsbFN0cmVhbX19fSxlfSgpO3QuUGFyc2VyPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHJlYW09ZSx0aGlzLm5leHRDaGFyKCksdGhpcy5zdHJCdWY9W10sdGhpcy5rbm93bkNvbW1hbmRzPXQsdGhpcy5iZWdpbklubGluZUltYWdlUG9zPS0xfXZhciB0PVsxLDAsMCwwLDAsMCwwLDAsMCwxLDEsMCwxLDEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMSwwLDAsMCwwLDIsMCwwLDIsMiwwLDAsMCwwLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDIsMCwyLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwyLDAsMiwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCwwXTtmdW5jdGlvbiByKGUpe3JldHVybiBlPj00OCYmZTw9NTc/MTUmZTplPj02NSYmZTw9NzB8fGU+PTk3JiZlPD0xMDI/OSsoMTUmZSk6LTF9cmV0dXJuIGUucHJvdG90eXBlPXtuZXh0Q2hhcjpmdW5jdGlvbigpe3JldHVybiB0aGlzLmN1cnJlbnRDaGFyPXRoaXMuc3RyZWFtLmdldEJ5dGUoKX0scGVla0NoYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHJlYW0ucGVla0J5dGUoKX0sZ2V0TnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50Q2hhcix0PSExLHI9MCxuPTA7aWYoNDU9PT1lPyhuPS0xLDQ1PT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmKGU9dGhpcy5uZXh0Q2hhcigpKSk6NDM9PT1lJiYobj0xLGU9dGhpcy5uZXh0Q2hhcigpKSwxMD09PWV8fDEzPT09ZSlkb3tlPXRoaXMubmV4dENoYXIoKX13aGlsZSgxMD09PWV8fDEzPT09ZSk7aWYoNDY9PT1lJiYocj0xMCxlPXRoaXMubmV4dENoYXIoKSksZTw0OHx8ZT41Nyl7aWYoMTA9PT1yJiYwPT09biYmKCgwLGEuaXNTcGFjZSkoZSl8fC0xPT09ZSkpcmV0dXJuKDAsYS53YXJuKSgiTGV4ZXIuZ2V0TnVtYmVyIC0gdHJlYXRpbmcgYSBzaW5nbGUgZGVjaW1hbCBwb2ludCBhcyB6ZXJvLiIpLDA7dGhyb3cgbmV3IGEuRm9ybWF0RXJyb3IoIkludmFsaWQgbnVtYmVyOiAiLmNvbmNhdChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpLCIgKGNoYXJDb2RlICIpLmNvbmNhdChlLCIpIikpfW49bnx8MTtmb3IodmFyIGk9ZS00OCxvPTAscz0xOyhlPXRoaXMubmV4dENoYXIoKSk+PTA7KWlmKDQ4PD1lJiZlPD01Nyl7dmFyIGw9ZS00ODt0P289MTAqbytsOigwIT09ciYmKHIqPTEwKSxpPTEwKmkrbCl9ZWxzZSBpZig0Nj09PWUpe2lmKDAhPT1yKWJyZWFrO3I9MX1lbHNlIGlmKDQ1PT09ZSkoMCxhLndhcm4pKCJCYWRseSBmb3JtYXR0ZWQgbnVtYmVyIik7ZWxzZXtpZig2OSE9PWUmJjEwMSE9PWUpYnJlYWs7aWYoNDM9PT0oZT10aGlzLnBlZWtDaGFyKCkpfHw0NT09PWUpcz00NT09PWU/LTE6MSx0aGlzLm5leHRDaGFyKCk7ZWxzZSBpZihlPDQ4fHxlPjU3KWJyZWFrO3Q9ITB9cmV0dXJuIDAhPT1yJiYoaS89ciksdCYmKGkqPU1hdGgucG93KDEwLHMqbykpLG4qaX0sZ2V0U3RyaW5nOmZ1bmN0aW9uKCl7dmFyIGU9MSx0PSExLHI9dGhpcy5zdHJCdWY7ci5sZW5ndGg9MDtmb3IodmFyIG49dGhpcy5uZXh0Q2hhcigpOzspe3ZhciBpPSExO3N3aXRjaCgwfG4pe2Nhc2UtMTooMCxhLndhcm4pKCJVbnRlcm1pbmF0ZWQgc3RyaW5nIiksdD0hMDticmVhaztjYXNlIDQwOisrZSxyLnB1c2goIigiKTticmVhaztjYXNlIDQxOjA9PS0tZT8odGhpcy5uZXh0Q2hhcigpLHQ9ITApOnIucHVzaCgiKSIpO2JyZWFrO2Nhc2UgOTI6c3dpdGNoKG49dGhpcy5uZXh0Q2hhcigpKXtjYXNlLTE6KDAsYS53YXJuKSgiVW50ZXJtaW5hdGVkIHN0cmluZyIpLHQ9ITA7YnJlYWs7Y2FzZSAxMTA6ci5wdXNoKCJcbiIpO2JyZWFrO2Nhc2UgMTE0OnIucHVzaCgiXHIiKTticmVhaztjYXNlIDExNjpyLnB1c2goIlx0Iik7YnJlYWs7Y2FzZSA5ODpyLnB1c2goIlxiIik7YnJlYWs7Y2FzZSAxMDI6ci5wdXNoKCJcZiIpO2JyZWFrO2Nhc2UgOTI6Y2FzZSA0MDpjYXNlIDQxOnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKTticmVhaztjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6dmFyIG89MTUmbjtpPSEwLChuPXRoaXMubmV4dENoYXIoKSk+PTQ4JiZuPD01NSYmKG89KG88PDMpKygxNSZuKSwobj10aGlzLm5leHRDaGFyKCkpPj00OCYmbjw9NTUmJihpPSExLG89KG88PDMpKygxNSZuKSkpLHIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG8pKTticmVhaztjYXNlIDEzOjEwPT09dGhpcy5wZWVrQ2hhcigpJiZ0aGlzLm5leHRDaGFyKCk7YnJlYWs7Y2FzZSAxMDpicmVhaztkZWZhdWx0OnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKX1icmVhaztkZWZhdWx0OnIucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKG4pKX1pZih0KWJyZWFrO2l8fChuPXRoaXMubmV4dENoYXIoKSl9cmV0dXJuIHIuam9pbigiIil9LGdldE5hbWU6ZnVuY3Rpb24oKXt2YXIgZSxuLG89dGhpcy5zdHJCdWY7Zm9yKG8ubGVuZ3RoPTA7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmIXRbZV07KWlmKDM1PT09ZSl7aWYoZT10aGlzLm5leHRDaGFyKCksdFtlXSl7KDAsYS53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogTlVNQkVSIFNJR04gKCMpIHNob3VsZCBiZSBmb2xsb3dlZCBieSBhIGhleGFkZWNpbWFsIG51bWJlci4iKSxvLnB1c2goIiMiKTticmVha312YXIgcz1yKGUpO2lmKC0xIT09cyl7bj1lO3ZhciBsPXIoZT10aGlzLm5leHRDaGFyKCkpO2lmKC0xPT09bCl7aWYoKDAsYS53YXJuKSgiTGV4ZXJfZ2V0TmFtZTogSWxsZWdhbCBkaWdpdCAoIitTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKyIpIGluIGhleGFkZWNpbWFsIG51bWJlci4iKSxvLnB1c2goIiMiLFN0cmluZy5mcm9tQ2hhckNvZGUobikpLHRbZV0pYnJlYWs7by5wdXNoKFN0cmluZy5mcm9tQ2hhckNvZGUoZSkpO2NvbnRpbnVlfW8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKHM8PDR8bCkpfWVsc2Ugby5wdXNoKCIjIixTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKX1lbHNlIG8ucHVzaChTdHJpbmcuZnJvbUNoYXJDb2RlKGUpKTtyZXR1cm4gby5sZW5ndGg+MTI3JiYoMCxhLndhcm4pKCJuYW1lIHRva2VuIGlzIGxvbmdlciB0aGFuIGFsbG93ZWQgYnkgdGhlIHNwZWM6ICIrby5sZW5ndGgpLGkuTmFtZS5nZXQoby5qb2luKCIiKSl9LGdldEhleFN0cmluZzpmdW5jdGlvbigpe3ZhciBlPXRoaXMuc3RyQnVmO2UubGVuZ3RoPTA7Zm9yKHZhciBuLGksbz10aGlzLmN1cnJlbnRDaGFyLHM9ITA7Oyl7aWYobzwwKXsoMCxhLndhcm4pKCJVbnRlcm1pbmF0ZWQgaGV4IHN0cmluZyIpO2JyZWFrfWlmKDYyPT09byl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEhPT10W29dKXtpZihzKXtpZigtMT09PShuPXIobykpKXsoMCxhLndhcm4pKCdJZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlciAiJytvKyciIGluIGhleCBzdHJpbmcnKSxvPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX19ZWxzZXtpZigtMT09PShpPXIobykpKXsoMCxhLndhcm4pKCdJZ25vcmluZyBpbnZhbGlkIGNoYXJhY3RlciAiJytvKyciIGluIGhleCBzdHJpbmcnKSxvPXRoaXMubmV4dENoYXIoKTtjb250aW51ZX1lLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShuPDw0fGkpKX1zPSFzLG89dGhpcy5uZXh0Q2hhcigpfWVsc2Ugbz10aGlzLm5leHRDaGFyKCl9cmV0dXJuIGUuam9pbigiIil9LGdldE9iajpmdW5jdGlvbigpe2Zvcih2YXIgZT0hMSxyPXRoaXMuY3VycmVudENoYXI7Oyl7aWYocjwwKXJldHVybiBpLkVPRjtpZihlKTEwIT09ciYmMTMhPT1yfHwoZT0hMSk7ZWxzZSBpZigzNz09PXIpZT0hMDtlbHNlIGlmKDEhPT10W3JdKWJyZWFrO3I9dGhpcy5uZXh0Q2hhcigpfXN3aXRjaCgwfHIpe2Nhc2UgNDg6Y2FzZSA0OTpjYXNlIDUwOmNhc2UgNTE6Y2FzZSA1MjpjYXNlIDUzOmNhc2UgNTQ6Y2FzZSA1NTpjYXNlIDU2OmNhc2UgNTc6Y2FzZSA0MzpjYXNlIDQ1OmNhc2UgNDY6cmV0dXJuIHRoaXMuZ2V0TnVtYmVyKCk7Y2FzZSA0MDpyZXR1cm4gdGhpcy5nZXRTdHJpbmcoKTtjYXNlIDQ3OnJldHVybiB0aGlzLmdldE5hbWUoKTtjYXNlIDkxOnJldHVybiB0aGlzLm5leHRDaGFyKCksaS5DbWQuZ2V0KCJbIik7Y2FzZSA5MzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGkuQ21kLmdldCgiXSIpO2Nhc2UgNjA6cmV0dXJuIDYwPT09KHI9dGhpcy5uZXh0Q2hhcigpKT8odGhpcy5uZXh0Q2hhcigpLGkuQ21kLmdldCgiPDwiKSk6dGhpcy5nZXRIZXhTdHJpbmcoKTtjYXNlIDYyOnJldHVybiA2Mj09PShyPXRoaXMubmV4dENoYXIoKSk/KHRoaXMubmV4dENoYXIoKSxpLkNtZC5nZXQoIj4+IikpOmkuQ21kLmdldCgiPiIpO2Nhc2UgMTIzOnJldHVybiB0aGlzLm5leHRDaGFyKCksaS5DbWQuZ2V0KCJ7Iik7Y2FzZSAxMjU6cmV0dXJuIHRoaXMubmV4dENoYXIoKSxpLkNtZC5nZXQoIn0iKTtjYXNlIDQxOnRocm93IHRoaXMubmV4dENoYXIoKSxuZXcgYS5Gb3JtYXRFcnJvcigiSWxsZWdhbCBjaGFyYWN0ZXI6ICIuY29uY2F0KHIpKX1mb3IodmFyIG49U3RyaW5nLmZyb21DaGFyQ29kZShyKSxvPXRoaXMua25vd25Db21tYW5kcyxzPW8mJnZvaWQgMCE9PW9bbl07KHI9dGhpcy5uZXh0Q2hhcigpKT49MCYmIXRbcl07KXt2YXIgbD1uK1N0cmluZy5mcm9tQ2hhckNvZGUocik7aWYocyYmdm9pZCAwPT09b1tsXSlicmVhaztpZigxMjg9PT1uLmxlbmd0aCl0aHJvdyBuZXcgYS5Gb3JtYXRFcnJvcigiQ29tbWFuZCB0b2tlbiB0b28gbG9uZzogIi5jb25jYXQobi5sZW5ndGgpKTtuPWwscz1vJiZ2b2lkIDAhPT1vW25dfXJldHVybiJ0cnVlIj09PW58fCJmYWxzZSIhPT1uJiYoIm51bGwiPT09bj9udWxsOigiQkkiPT09biYmKHRoaXMuYmVnaW5JbmxpbmVJbWFnZVBvcz10aGlzLnN0cmVhbS5wb3MpLGkuQ21kLmdldChuKSkpfSxza2lwVG9OZXh0TGluZTpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmN1cnJlbnRDaGFyO2U+PTA7KXtpZigxMz09PWUpezEwPT09KGU9dGhpcy5uZXh0Q2hhcigpKSYmdGhpcy5uZXh0Q2hhcigpO2JyZWFrfWlmKDEwPT09ZSl7dGhpcy5uZXh0Q2hhcigpO2JyZWFrfWU9dGhpcy5uZXh0Q2hhcigpfX19LGV9KCk7dC5MZXhlcj1oO3ZhciBkPXtjcmVhdGU6ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHQpe3ZhciByPXUuZ2V0KGUpO2lmKE51bWJlci5pc0ludGVnZXIocikmJih0P3I+PTA6cj4wKSlyZXR1cm4gcjt0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiJytlKyciIHBhcmFtZXRlciBpbiB0aGUgbGluZWFyaXphdGlvbiBkaWN0aW9uYXJ5IGlzIGludmFsaWQuJyl9dmFyIHIsbixvPW5ldyBmKG5ldyBoKGUpLCExLG51bGwpLHM9by5nZXRPYmooKSxsPW8uZ2V0T2JqKCksYz1vLmdldE9iaigpLHU9by5nZXRPYmooKTtpZighKE51bWJlci5pc0ludGVnZXIocykmJk51bWJlci5pc0ludGVnZXIobCkmJigwLGkuaXNDbWQpKGMsIm9iaiIpJiYoMCxpLmlzRGljdCkodSkmJigwLGEuaXNOdW0pKHI9dS5nZXQoIkxpbmVhcml6ZWQiKSkmJnI+MCkpcmV0dXJuIG51bGw7aWYoKG49dCgiTCIpKSE9PWUubGVuZ3RoKXRocm93IG5ldyBFcnJvcignVGhlICJMIiBwYXJhbWV0ZXIgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBkb2VzIG5vdCBlcXVhbCB0aGUgc3RyZWFtIGxlbmd0aC4nKTtyZXR1cm57bGVuZ3RoOm4saGludHM6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dS5nZXQoIkgiKTtpZihBcnJheS5pc0FycmF5KHIpJiYoMj09PShlPXIubGVuZ3RoKXx8ND09PWUpKXtmb3IodmFyIG49MDtuPGU7bisrKWlmKCEoTnVtYmVyLmlzSW50ZWdlcih0PXJbbl0pJiZ0PjApKXRocm93IG5ldyBFcnJvcigiSGludCAoIituKyIpIGluIHRoZSBsaW5lYXJpemF0aW9uIGRpY3Rpb25hcnkgaXMgaW52YWxpZC4iKTtyZXR1cm4gcn10aHJvdyBuZXcgRXJyb3IoIkhpbnQgYXJyYXkgaW4gdGhlIGxpbmVhcml6YXRpb24gZGljdGlvbmFyeSBpcyBpbnZhbGlkLiIpfSgpLG9iamVjdE51bWJlckZpcnN0OnQoIk8iKSxlbmRGaXJzdDp0KCJFIiksbnVtUGFnZXM6dCgiTiIpLG1haW5YUmVmRW50cmllc09mZnNldDp0KCJUIikscGFnZUZpcnN0OnUuaGFzKCJQIik/dCgiUCIsITApOjB9fX07dC5MaW5lYXJpemF0aW9uPWR9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuTFpXU3RyZWFtPXQuU3RyaW5nU3RyZWFtPXQuU3RyZWFtc1NlcXVlbmNlU3RyZWFtPXQuU3RyZWFtPXQuUnVuTGVuZ3RoU3RyZWFtPXQuUHJlZGljdG9yU3RyZWFtPXQuTnVsbFN0cmVhbT10LkZsYXRlU3RyZWFtPXQuRGVjb2RlU3RyZWFtPXQuRGVjcnlwdFN0cmVhbT10LkFzY2lpSGV4U3RyZWFtPXQuQXNjaWk4NVN0cmVhbT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KTtmdW5jdGlvbiBpKGUpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXtmb3IodmFyIHQ9MCxyPW5ldyBBcnJheShlLmxlbmd0aCk7dDxlLmxlbmd0aDt0Kyspclt0XT1lW3RdO3JldHVybiByfX0oZSl8fGZ1bmN0aW9uKGUpe2lmKFN5bWJvbC5pdGVyYXRvciBpbiBPYmplY3QoZSl8fCJbb2JqZWN0IEFyZ3VtZW50c10iPT09T2JqZWN0LnByb3RvdHlwZS50b1N0cmluZy5jYWxsKGUpKXJldHVybiBBcnJheS5mcm9tKGUpfShlKXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gc3ByZWFkIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuKXt0aGlzLmJ5dGVzPWUgaW5zdGFuY2VvZiBVaW50OEFycmF5P2U6bmV3IFVpbnQ4QXJyYXkoZSksdGhpcy5zdGFydD10fHwwLHRoaXMucG9zPXRoaXMuc3RhcnQsdGhpcy5lbmQ9dCtyfHx0aGlzLmJ5dGVzLmxlbmd0aCx0aGlzLmRpY3Q9bn1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5lbmQtdGhpcy5zdGFydH0sZ2V0IGlzRW1wdHkoKXtyZXR1cm4gMD09PXRoaXMubGVuZ3RofSxnZXRCeXRlOmZ1bmN0aW9uKCl7cmV0dXJuIHRoaXMucG9zPj10aGlzLmVuZD8tMTp0aGlzLmJ5dGVzW3RoaXMucG9zKytdfSxnZXRVaW50MTY6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldEJ5dGUoKSx0PXRoaXMuZ2V0Qnl0ZSgpO3JldHVybi0xPT09ZXx8LTE9PT10Py0xOihlPDw4KSt0fSxnZXRJbnQzMjpmdW5jdGlvbigpe3JldHVybih0aGlzLmdldEJ5dGUoKTw8MjQpKyh0aGlzLmdldEJ5dGUoKTw8MTYpKyh0aGlzLmdldEJ5dGUoKTw8OCkrdGhpcy5nZXRCeXRlKCl9LGdldEJ5dGVzOmZ1bmN0aW9uKGUpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MSYmdm9pZCAwIT09YXJndW1lbnRzWzFdJiZhcmd1bWVudHNbMV0scj10aGlzLmJ5dGVzLG49dGhpcy5wb3MsYT10aGlzLmVuZDtpZighZSl7dmFyIGk9ci5zdWJhcnJheShuLGEpO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShpKTppfXZhciBvPW4rZTtvPmEmJihvPWEpLHRoaXMucG9zPW87dmFyIHM9ci5zdWJhcnJheShuLG8pO3JldHVybiB0P25ldyBVaW50OENsYW1wZWRBcnJheShzKTpzfSxwZWVrQnl0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9LHBlZWtCeXRlczpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9dGhpcy5nZXRCeXRlcyhlLHQpO3JldHVybiB0aGlzLnBvcy09ci5sZW5ndGgscn0sc2tpcDpmdW5jdGlvbihlKXtlfHwoZT0xKSx0aGlzLnBvcys9ZX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLnBvcz10aGlzLnN0YXJ0fSxtb3ZlU3RhcnQ6ZnVuY3Rpb24oKXt0aGlzLnN0YXJ0PXRoaXMucG9zfSxtYWtlU3ViU3RyZWFtOmZ1bmN0aW9uKHQscixuKXtyZXR1cm4gbmV3IGUodGhpcy5ieXRlcy5idWZmZXIsdCxyLG4pfX0sZX0oKTt0LlN0cmVhbT1vO3ZhciBzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt2YXIgdD0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO28uY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1vLnByb3RvdHlwZSxlfSgpO3QuU3RyaW5nU3RyZWFtPXM7dmFyIGw9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheSgwKTtmdW5jdGlvbiB0KHQpe2lmKHRoaXMuX3Jhd01pbkJ1ZmZlckxlbmd0aD10fHwwLHRoaXMucG9zPTAsdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmVvZj0hMSx0aGlzLmJ1ZmZlcj1lLHRoaXMubWluQnVmZmVyTGVuZ3RoPTUxMix0KWZvcig7dGhpcy5taW5CdWZmZXJMZW5ndGg8dDspdGhpcy5taW5CdWZmZXJMZW5ndGgqPTJ9cmV0dXJuIHQucHJvdG90eXBlPXtnZXQgaXNFbXB0eSgpe2Zvcig7IXRoaXMuZW9mJiYwPT09dGhpcy5idWZmZXJMZW5ndGg7KXRoaXMucmVhZEJsb2NrKCk7cmV0dXJuIDA9PT10aGlzLmJ1ZmZlckxlbmd0aH0sZW5zdXJlQnVmZmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuYnVmZmVyO2lmKGU8PXQuYnl0ZUxlbmd0aClyZXR1cm4gdDtmb3IodmFyIHI9dGhpcy5taW5CdWZmZXJMZW5ndGg7cjxlOylyKj0yO3ZhciBuPW5ldyBVaW50OEFycmF5KHIpO3JldHVybiBuLnNldCh0KSx0aGlzLmJ1ZmZlcj1ufSxnZXRCeXRlOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMucG9zO3RoaXMuYnVmZmVyTGVuZ3RoPD1lOyl7aWYodGhpcy5lb2YpcmV0dXJuLTE7dGhpcy5yZWFkQmxvY2soKX1yZXR1cm4gdGhpcy5idWZmZXJbdGhpcy5wb3MrK119LGdldFVpbnQxNjpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpLHQ9dGhpcy5nZXRCeXRlKCk7cmV0dXJuLTE9PT1lfHwtMT09PXQ/LTE6KGU8PDgpK3R9LGdldEludDMyOmZ1bmN0aW9uKCl7cmV0dXJuKHRoaXMuZ2V0Qnl0ZSgpPDwyNCkrKHRoaXMuZ2V0Qnl0ZSgpPDwxNikrKHRoaXMuZ2V0Qnl0ZSgpPDw4KSt0aGlzLmdldEJ5dGUoKX0sZ2V0Qnl0ZXM6ZnVuY3Rpb24oZSl7dmFyIHQscj1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLG49dGhpcy5wb3M7aWYoZSl7Zm9yKHRoaXMuZW5zdXJlQnVmZmVyKG4rZSksdD1uK2U7IXRoaXMuZW9mJiZ0aGlzLmJ1ZmZlckxlbmd0aDx0Oyl0aGlzLnJlYWRCbG9jaygpO3ZhciBhPXRoaXMuYnVmZmVyTGVuZ3RoO3Q+YSYmKHQ9YSl9ZWxzZXtmb3IoOyF0aGlzLmVvZjspdGhpcy5yZWFkQmxvY2soKTt0PXRoaXMuYnVmZmVyTGVuZ3RofXRoaXMucG9zPXQ7dmFyIGk9dGhpcy5idWZmZXIuc3ViYXJyYXkobix0KTtyZXR1cm4hcnx8aSBpbnN0YW5jZW9mIFVpbnQ4Q2xhbXBlZEFycmF5P2k6bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGkpfSxwZWVrQnl0ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLnBvcy0tLGV9LHBlZWtCeXRlczpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXSYmYXJndW1lbnRzWzFdLHI9dGhpcy5nZXRCeXRlcyhlLHQpO3JldHVybiB0aGlzLnBvcy09ci5sZW5ndGgscn0sbWFrZVN1YlN0cmVhbTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPWUrdDt0aGlzLmJ1ZmZlckxlbmd0aDw9biYmIXRoaXMuZW9mOyl0aGlzLnJlYWRCbG9jaygpO3JldHVybiBuZXcgbyh0aGlzLmJ1ZmZlcixlLHQscil9LHNraXA6ZnVuY3Rpb24oZSl7ZXx8KGU9MSksdGhpcy5wb3MrPWV9LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5wb3M9MH0sZ2V0QmFzZVN0cmVhbXM6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5zdHImJnRoaXMuc3RyLmdldEJhc2VTdHJlYW1zP3RoaXMuc3RyLmdldEJhc2VTdHJlYW1zKCk6W119fSx0fSgpO3QuRGVjb2RlU3RyZWFtPWw7dmFyIGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuc3RyZWFtcz1lO2Zvcih2YXIgdD0wLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07dCs9YSBpbnN0YW5jZW9mIGw/YS5fcmF3TWluQnVmZmVyTGVuZ3RoOmEubGVuZ3RofWwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbXM7aWYoMCE9PWUubGVuZ3RoKXt2YXIgdD1lLnNoaWZ0KCkuZ2V0Qnl0ZXMoKSxyPXRoaXMuYnVmZmVyTGVuZ3RoLG49cit0Lmxlbmd0aDt0aGlzLmVuc3VyZUJ1ZmZlcihuKS5zZXQodCxyKSx0aGlzLmJ1ZmZlckxlbmd0aD1ufWVsc2UgdGhpcy5lb2Y9ITB9LGUucHJvdG90eXBlLmdldEJhc2VTdHJlYW1zPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPVtdLHQ9MCxyPXRoaXMuc3RyZWFtcy5sZW5ndGg7dDxyO3QrKyl7dmFyIG49dGhpcy5zdHJlYW1zW3RdO24uZ2V0QmFzZVN0cmVhbXMmJmUucHVzaC5hcHBseShlLGkobi5nZXRCYXNlU3RyZWFtcygpKSl9cmV0dXJuIGV9LGV9KCk7dC5TdHJlYW1zU2VxdWVuY2VTdHJlYW09Yzt2YXIgdT1mdW5jdGlvbigpe3ZhciBlPW5ldyBJbnQzMkFycmF5KFsxNiwxNywxOCwwLDgsNyw5LDYsMTAsNSwxMSw0LDEyLDMsMTMsMiwxNCwxLDE1XSksdD1uZXcgSW50MzJBcnJheShbMyw0LDUsNiw3LDgsOSwxMCw2NTU0Nyw2NTU0OSw2NTU1MSw2NTU1MywxMzEwOTEsMTMxMDk1LDEzMTA5OSwxMzExMDMsMTk2NjQzLDE5NjY1MSwxOTY2NTksMTk2NjY3LDI2MjIxMSwyNjIyMjcsMjYyMjQzLDI2MjI1OSwzMjc4MTEsMzI3ODQzLDMyNzg3NSwzMjc5MDcsMjU4LDI1OCwyNThdKSxyPW5ldyBJbnQzMkFycmF5KFsxLDIsMyw0LDY1NTQxLDY1NTQzLDEzMTA4MSwxMzEwODUsMTk2NjI1LDE5NjYzMywyNjIxNzcsMjYyMTkzLDMyNzc0NSwzMjc3NzcsMzkzMzQ1LDM5MzQwOSw0NTkwMDksNDU5MTM3LDUyNDgwMSw1MjUwNTcsNTkwODQ5LDU5MTM2MSw2NTc0MDksNjU4NDMzLDcyNDk5Myw3MjcwNDEsNzk0NjI1LDc5ODcyMSw4NjgzNTMsODc2NTQ1XSksYT1bbmV3IEludDMyQXJyYXkoWzQ1OTAwOCw1MjQzNjgsNTI0MzA0LDUyNDU2OCw0NTkwMjQsNTI0NDAwLDUyNDMzNiw1OTAwMTYsNDU5MDE2LDUyNDM4NCw1MjQzMjAsNTg5OTg0LDUyNDI4OCw1MjQ0MTYsNTI0MzUyLDU5MDA0OCw0NTkwMTIsNTI0Mzc2LDUyNDMxMiw1ODk5NjgsNDU5MDI4LDUyNDQwOCw1MjQzNDQsNTkwMDMyLDQ1OTAyMCw1MjQzOTIsNTI0MzI4LDU5ZTQsNTI0Mjk2LDUyNDQyNCw1MjQzNjAsNTkwMDY0LDQ1OTAxMCw1MjQzNzIsNTI0MzA4LDUyNDU3Miw0NTkwMjYsNTI0NDA0LDUyNDM0MCw1OTAwMjQsNDU5MDE4LDUyNDM4OCw1MjQzMjQsNTg5OTkyLDUyNDI5Miw1MjQ0MjAsNTI0MzU2LDU5MDA1Niw0NTkwMTQsNTI0MzgwLDUyNDMxNiw1ODk5NzYsNDU5MDMwLDUyNDQxMiw1MjQzNDgsNTkwMDQwLDQ1OTAyMiw1MjQzOTYsNTI0MzMyLDU5MDAwOCw1MjQzMDAsNTI0NDI4LDUyNDM2NCw1OTAwNzIsNDU5MDA5LDUyNDM3MCw1MjQzMDYsNTI0NTcwLDQ1OTAyNSw1MjQ0MDIsNTI0MzM4LDU5MDAyMCw0NTkwMTcsNTI0Mzg2LDUyNDMyMiw1ODk5ODgsNTI0MjkwLDUyNDQxOCw1MjQzNTQsNTkwMDUyLDQ1OTAxMyw1MjQzNzgsNTI0MzE0LDU4OTk3Miw0NTkwMjksNTI0NDEwLDUyNDM0Niw1OTAwMzYsNDU5MDIxLDUyNDM5NCw1MjQzMzAsNTkwMDA0LDUyNDI5OCw1MjQ0MjYsNTI0MzYyLDU5MDA2OCw0NTkwMTEsNTI0Mzc0LDUyNDMxMCw1MjQ1NzQsNDU5MDI3LDUyNDQwNiw1MjQzNDIsNTkwMDI4LDQ1OTAxOSw1MjQzOTAsNTI0MzI2LDU4OTk5Niw1MjQyOTQsNTI0NDIyLDUyNDM1OCw1OTAwNjAsNDU5MDE1LDUyNDM4Miw1MjQzMTgsNTg5OTgwLDQ1OTAzMSw1MjQ0MTQsNTI0MzUwLDU5MDA0NCw0NTkwMjMsNTI0Mzk4LDUyNDMzNCw1OTAwMTIsNTI0MzAyLDUyNDQzMCw1MjQzNjYsNTkwMDc2LDQ1OTAwOCw1MjQzNjksNTI0MzA1LDUyNDU2OSw0NTkwMjQsNTI0NDAxLDUyNDMzNyw1OTAwMTgsNDU5MDE2LDUyNDM4NSw1MjQzMjEsNTg5OTg2LDUyNDI4OSw1MjQ0MTcsNTI0MzUzLDU5MDA1MCw0NTkwMTIsNTI0Mzc3LDUyNDMxMyw1ODk5NzAsNDU5MDI4LDUyNDQwOSw1MjQzNDUsNTkwMDM0LDQ1OTAyMCw1MjQzOTMsNTI0MzI5LDU5MDAwMiw1MjQyOTcsNTI0NDI1LDUyNDM2MSw1OTAwNjYsNDU5MDEwLDUyNDM3Myw1MjQzMDksNTI0NTczLDQ1OTAyNiw1MjQ0MDUsNTI0MzQxLDU5MDAyNiw0NTkwMTgsNTI0Mzg5LDUyNDMyNSw1ODk5OTQsNTI0MjkzLDUyNDQyMSw1MjQzNTcsNTkwMDU4LDQ1OTAxNCw1MjQzODEsNTI0MzE3LDU4OTk3OCw0NTkwMzAsNTI0NDEzLDUyNDM0OSw1OTAwNDIsNDU5MDIyLDUyNDM5Nyw1MjQzMzMsNTkwMDEwLDUyNDMwMSw1MjQ0MjksNTI0MzY1LDU5MDA3NCw0NTkwMDksNTI0MzcxLDUyNDMwNyw1MjQ1NzEsNDU5MDI1LDUyNDQwMyw1MjQzMzksNTkwMDIyLDQ1OTAxNyw1MjQzODcsNTI0MzIzLDU4OTk5MCw1MjQyOTEsNTI0NDE5LDUyNDM1NSw1OTAwNTQsNDU5MDEzLDUyNDM3OSw1MjQzMTUsNTg5OTc0LDQ1OTAyOSw1MjQ0MTEsNTI0MzQ3LDU5MDAzOCw0NTkwMjEsNTI0Mzk1LDUyNDMzMSw1OTAwMDYsNTI0Mjk5LDUyNDQyNyw1MjQzNjMsNTkwMDcwLDQ1OTAxMSw1MjQzNzUsNTI0MzExLDUyNDU3NSw0NTkwMjcsNTI0NDA3LDUyNDM0Myw1OTAwMzAsNDU5MDE5LDUyNDM5MSw1MjQzMjcsNTg5OTk4LDUyNDI5NSw1MjQ0MjMsNTI0MzU5LDU5MDA2Miw0NTkwMTUsNTI0MzgzLDUyNDMxOSw1ODk5ODIsNDU5MDMxLDUyNDQxNSw1MjQzNTEsNTkwMDQ2LDQ1OTAyMyw1MjQzOTksNTI0MzM1LDU5MDAxNCw1MjQzMDMsNTI0NDMxLDUyNDM2Nyw1OTAwNzgsNDU5MDA4LDUyNDM2OCw1MjQzMDQsNTI0NTY4LDQ1OTAyNCw1MjQ0MDAsNTI0MzM2LDU5MDAxNyw0NTkwMTYsNTI0Mzg0LDUyNDMyMCw1ODk5ODUsNTI0Mjg4LDUyNDQxNiw1MjQzNTIsNTkwMDQ5LDQ1OTAxMiw1MjQzNzYsNTI0MzEyLDU4OTk2OSw0NTkwMjgsNTI0NDA4LDUyNDM0NCw1OTAwMzMsNDU5MDIwLDUyNDM5Miw1MjQzMjgsNTkwMDAxLDUyNDI5Niw1MjQ0MjQsNTI0MzYwLDU5MDA2NSw0NTkwMTAsNTI0MzcyLDUyNDMwOCw1MjQ1NzIsNDU5MDI2LDUyNDQwNCw1MjQzNDAsNTkwMDI1LDQ1OTAxOCw1MjQzODgsNTI0MzI0LDU4OTk5Myw1MjQyOTIsNTI0NDIwLDUyNDM1Niw1OTAwNTcsNDU5MDE0LDUyNDM4MCw1MjQzMTYsNTg5OTc3LDQ1OTAzMCw1MjQ0MTIsNTI0MzQ4LDU5MDA0MSw0NTkwMjIsNTI0Mzk2LDUyNDMzMiw1OTAwMDksNTI0MzAwLDUyNDQyOCw1MjQzNjQsNTkwMDczLDQ1OTAwOSw1MjQzNzAsNTI0MzA2LDUyNDU3MCw0NTkwMjUsNTI0NDAyLDUyNDMzOCw1OTAwMjEsNDU5MDE3LDUyNDM4Niw1MjQzMjIsNTg5OTg5LDUyNDI5MCw1MjQ0MTgsNTI0MzU0LDU5MDA1Myw0NTkwMTMsNTI0Mzc4LDUyNDMxNCw1ODk5NzMsNDU5MDI5LDUyNDQxMCw1MjQzNDYsNTkwMDM3LDQ1OTAyMSw1MjQzOTQsNTI0MzMwLDU5MDAwNSw1MjQyOTgsNTI0NDI2LDUyNDM2Miw1OTAwNjksNDU5MDExLDUyNDM3NCw1MjQzMTAsNTI0NTc0LDQ1OTAyNyw1MjQ0MDYsNTI0MzQyLDU5MDAyOSw0NTkwMTksNTI0MzkwLDUyNDMyNiw1ODk5OTcsNTI0Mjk0LDUyNDQyMiw1MjQzNTgsNTkwMDYxLDQ1OTAxNSw1MjQzODIsNTI0MzE4LDU4OTk4MSw0NTkwMzEsNTI0NDE0LDUyNDM1MCw1OTAwNDUsNDU5MDIzLDUyNDM5OCw1MjQzMzQsNTkwMDEzLDUyNDMwMiw1MjQ0MzAsNTI0MzY2LDU5MDA3Nyw0NTkwMDgsNTI0MzY5LDUyNDMwNSw1MjQ1NjksNDU5MDI0LDUyNDQwMSw1MjQzMzcsNTkwMDE5LDQ1OTAxNiw1MjQzODUsNTI0MzIxLDU4OTk4Nyw1MjQyODksNTI0NDE3LDUyNDM1Myw1OTAwNTEsNDU5MDEyLDUyNDM3Nyw1MjQzMTMsNTg5OTcxLDQ1OTAyOCw1MjQ0MDksNTI0MzQ1LDU5MDAzNSw0NTkwMjAsNTI0MzkzLDUyNDMyOSw1OTAwMDMsNTI0Mjk3LDUyNDQyNSw1MjQzNjEsNTkwMDY3LDQ1OTAxMCw1MjQzNzMsNTI0MzA5LDUyNDU3Myw0NTkwMjYsNTI0NDA1LDUyNDM0MSw1OTAwMjcsNDU5MDE4LDUyNDM4OSw1MjQzMjUsNTg5OTk1LDUyNDI5Myw1MjQ0MjEsNTI0MzU3LDU5MDA1OSw0NTkwMTQsNTI0MzgxLDUyNDMxNyw1ODk5NzksNDU5MDMwLDUyNDQxMyw1MjQzNDksNTkwMDQzLDQ1OTAyMiw1MjQzOTcsNTI0MzMzLDU5MDAxMSw1MjQzMDEsNTI0NDI5LDUyNDM2NSw1OTAwNzUsNDU5MDA5LDUyNDM3MSw1MjQzMDcsNTI0NTcxLDQ1OTAyNSw1MjQ0MDMsNTI0MzM5LDU5MDAyMyw0NTkwMTcsNTI0Mzg3LDUyNDMyMyw1ODk5OTEsNTI0MjkxLDUyNDQxOSw1MjQzNTUsNTkwMDU1LDQ1OTAxMyw1MjQzNzksNTI0MzE1LDU4OTk3NSw0NTkwMjksNTI0NDExLDUyNDM0Nyw1OTAwMzksNDU5MDIxLDUyNDM5NSw1MjQzMzEsNTkwMDA3LDUyNDI5OSw1MjQ0MjcsNTI0MzYzLDU5MDA3MSw0NTkwMTEsNTI0Mzc1LDUyNDMxMSw1MjQ1NzUsNDU5MDI3LDUyNDQwNyw1MjQzNDMsNTkwMDMxLDQ1OTAxOSw1MjQzOTEsNTI0MzI3LDU4OTk5OSw1MjQyOTUsNTI0NDIzLDUyNDM1OSw1OTAwNjMsNDU5MDE1LDUyNDM4Myw1MjQzMTksNTg5OTgzLDQ1OTAzMSw1MjQ0MTUsNTI0MzUxLDU5MDA0Nyw0NTkwMjMsNTI0Mzk5LDUyNDMzNSw1OTAwMTUsNTI0MzAzLDUyNDQzMSw1MjQzNjcsNTkwMDc5XSksOV0saT1bbmV3IEludDMyQXJyYXkoWzMyNzY4MCwzMjc2OTYsMzI3Njg4LDMyNzcwNCwzMjc2ODQsMzI3NzAwLDMyNzY5MiwzMjc3MDgsMzI3NjgyLDMyNzY5OCwzMjc2OTAsMzI3NzA2LDMyNzY4NiwzMjc3MDIsMzI3Njk0LDAsMzI3NjgxLDMyNzY5NywzMjc2ODksMzI3NzA1LDMyNzY4NSwzMjc3MDEsMzI3NjkzLDMyNzcwOSwzMjc2ODMsMzI3Njk5LDMyNzY5MSwzMjc3MDcsMzI3Njg3LDMyNzcwMywzMjc2OTUsMF0pLDVdO2Z1bmN0aW9uIG8oZSx0KXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3Q7dmFyIHI9ZS5nZXRCeXRlKCksYT1lLmdldEJ5dGUoKTtpZigtMT09PXJ8fC0xPT09YSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChyLCIsICIpLmNvbmNhdChhKSk7aWYoOCE9KDE1JnIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNvbXByZXNzaW9uIG1ldGhvZCBpbiBmbGF0ZSBzdHJlYW06ICIuY29uY2F0KHIsIiwgIikuY29uY2F0KGEpKTtpZigoKHI8PDgpK2EpJTMxIT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgRkNIRUNLIGluIGZsYXRlIHN0cmVhbTogIi5jb25jYXQociwiLCAiKS5jb25jYXQoYSkpO2lmKDMyJmEpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkZESUNUIGJpdCBzZXQgaW4gZmxhdGUgc3RyZWFtOiAiLmNvbmNhdChyLCIsICIpLmNvbmNhdChhKSk7dGhpcy5jb2RlU2l6ZT0wLHRoaXMuY29kZUJ1Zj0wLGwuY2FsbCh0aGlzLHQpfXJldHVybiBvLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxvLnByb3RvdHlwZS5nZXRCaXRzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuc3RyLGE9dGhpcy5jb2RlU2l6ZSxpPXRoaXMuY29kZUJ1ZjthPGU7KXtpZigtMT09PSh0PXIuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGVuY29kaW5nIGluIGZsYXRlIHN0cmVhbSIpO2l8PXQ8PGEsYSs9OH1yZXR1cm4gdD1pJigxPDxlKS0xLHRoaXMuY29kZUJ1Zj1pPj5lLHRoaXMuY29kZVNpemU9YS09ZSx0fSxvLnByb3RvdHlwZS5nZXRDb2RlPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyPXRoaXMuc3RyLGE9ZVswXSxpPWVbMV0sbz10aGlzLmNvZGVTaXplLHM9dGhpcy5jb2RlQnVmO288aSYmLTEhPT0odD1yLmdldEJ5dGUoKSk7KXN8PXQ8PG8sbys9ODt2YXIgbD1hW3MmKDE8PGkpLTFdLGM9bD4+MTYsdT02NTUzNSZsO2lmKGM8MXx8bzxjKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgZW5jb2RpbmcgaW4gZmxhdGUgc3RyZWFtIik7cmV0dXJuIHRoaXMuY29kZUJ1Zj1zPj5jLHRoaXMuY29kZVNpemU9by1jLHV9LG8ucHJvdG90eXBlLmdlbmVyYXRlSHVmZm1hblRhYmxlPWZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyOysrdCllW3RdPm4mJihuPWVbdF0pO2Zvcih2YXIgYT0xPDxuLGk9bmV3IEludDMyQXJyYXkoYSksbz0xLHM9MCxsPTI7bzw9bjsrK28sczw8PTEsbDw8PTEpZm9yKHZhciBjPTA7YzxyOysrYylpZihlW2NdPT09byl7dmFyIHU9MCxmPXM7Zm9yKHQ9MDt0PG87Kyt0KXU9dTw8MXwxJmYsZj4+PTE7Zm9yKHQ9dTt0PGE7dCs9bClpW3RdPW88PDE2fGM7KytzfXJldHVybltpLG5dfSxvLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgbyxzLGw9dGhpcy5zdHIsYz10aGlzLmdldEJpdHMoMyk7aWYoMSZjJiYodGhpcy5lb2Y9ITApLDAhPShjPj49MSkpe3ZhciB1LGY7aWYoMT09PWMpdT1hLGY9aTtlbHNle2lmKDIhPT1jKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGJsb2NrIHR5cGUgaW4gZmxhdGUgc3RyZWFtIik7dmFyIGgsZD10aGlzLmdldEJpdHMoNSkrMjU3LHA9dGhpcy5nZXRCaXRzKDUpKzEsbT10aGlzLmdldEJpdHMoNCkrNCxnPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKTtmb3IoaD0wO2g8bTsrK2gpZ1tlW2hdXT10aGlzLmdldEJpdHMoMyk7dmFyIHY9dGhpcy5nZW5lcmF0ZUh1ZmZtYW5UYWJsZShnKTtzPTAsaD0wO2Zvcih2YXIgeSxiLHcsaz1kK3AsUz1uZXcgVWludDhBcnJheShrKTtoPGs7KXt2YXIgXz10aGlzLmdldENvZGUodik7aWYoMTY9PT1fKXk9MixiPTMsdz1zO2Vsc2UgaWYoMTc9PT1fKXk9MyxiPTMsdz1zPTA7ZWxzZXtpZigxOCE9PV8pe1NbaCsrXT1zPV87Y29udGludWV9eT03LGI9MTEsdz1zPTB9Zm9yKHZhciB4PXRoaXMuZ2V0Qml0cyh5KStiO3gtLSA+MDspU1toKytdPXd9dT10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKFMuc3ViYXJyYXkoMCxkKSksZj10aGlzLmdlbmVyYXRlSHVmZm1hblRhYmxlKFMuc3ViYXJyYXkoZCxrKSl9Zm9yKHZhciBBPShvPXRoaXMuYnVmZmVyKT9vLmxlbmd0aDowLEM9dGhpcy5idWZmZXJMZW5ndGg7Oyl7dmFyIFA9dGhpcy5nZXRDb2RlKHUpO2lmKFA8MjU2KUMrMT49QSYmKEE9KG89dGhpcy5lbnN1cmVCdWZmZXIoQysxKSkubGVuZ3RoKSxvW0MrK109UDtlbHNle2lmKDI1Nj09PVApcmV0dXJuIHZvaWQodGhpcy5idWZmZXJMZW5ndGg9Qyk7dmFyIEU9KFA9dFtQLT0yNTddKT4+MTY7RT4wJiYoRT10aGlzLmdldEJpdHMoRSkpLHM9KDY1NTM1JlApK0UsUD10aGlzLmdldENvZGUoZiksKEU9KFA9cltQXSk+PjE2KT4wJiYoRT10aGlzLmdldEJpdHMoRSkpO3ZhciBUPSg2NTUzNSZQKStFO0Mrcz49QSYmKEE9KG89dGhpcy5lbnN1cmVCdWZmZXIoQytzKSkubGVuZ3RoKTtmb3IodmFyIFI9MDtSPHM7KytSLCsrQylvW0NdPW9bQy1UXX19fWVsc2V7dmFyIE87aWYoLTE9PT0oTz1sLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7dmFyIEk9TztpZigtMT09PShPPWwuZ2V0Qnl0ZSgpKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIGJsb2NrIGhlYWRlciBpbiBmbGF0ZSBzdHJlYW0iKTtpZihJfD1PPDw4LC0xPT09KE89bC5nZXRCeXRlKCkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJCYWQgYmxvY2sgaGVhZGVyIGluIGZsYXRlIHN0cmVhbSIpO3ZhciBGPU87aWYoLTE9PT0oTz1sLmdldEJ5dGUoKSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBibG9jayBoZWFkZXIgaW4gZmxhdGUgc3RyZWFtIik7aWYoKEZ8PU88PDgpIT0oNjU1MzUmfkkpJiYoMCE9PUl8fDAhPT1GKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQmFkIHVuY29tcHJlc3NlZCBibG9jayBsZW5ndGggaW4gZmxhdGUgc3RyZWFtIik7dGhpcy5jb2RlQnVmPTAsdGhpcy5jb2RlU2l6ZT0wO3ZhciBMPXRoaXMuYnVmZmVyTGVuZ3RoO289dGhpcy5lbnN1cmVCdWZmZXIoTCtJKTt2YXIgRD1MK0k7aWYodGhpcy5idWZmZXJMZW5ndGg9RCwwPT09SSktMT09PWwucGVla0J5dGUoKSYmKHRoaXMuZW9mPSEwKTtlbHNlIGZvcih2YXIgTj1MO048RDsrK04pe2lmKC0xPT09KE89bC5nZXRCeXRlKCkpKXt0aGlzLmVvZj0hMDticmVha31vW05dPU99fX0sb30oKTt0LkZsYXRlU3RyZWFtPXU7dmFyIGY9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtpZighKDAsYS5pc0RpY3QpKHIpKXJldHVybiBlO3ZhciBpPXRoaXMucHJlZGljdG9yPXIuZ2V0KCJQcmVkaWN0b3IiKXx8MTtpZihpPD0xKXJldHVybiBlO2lmKDIhPT1pJiYoaTwxMHx8aT4xNSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuc3VwcG9ydGVkIHByZWRpY3RvcjogIi5jb25jYXQoaSkpO3RoaXMucmVhZEJsb2NrPTI9PT1pP3RoaXMucmVhZEJsb2NrVGlmZjp0aGlzLnJlYWRCbG9ja1BuZyx0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3Q7dmFyIG89dGhpcy5jb2xvcnM9ci5nZXQoIkNvbG9ycyIpfHwxLHM9dGhpcy5iaXRzPXIuZ2V0KCJCaXRzUGVyQ29tcG9uZW50Iil8fDgsYz10aGlzLmNvbHVtbnM9ci5nZXQoIkNvbHVtbnMiKXx8MTtyZXR1cm4gdGhpcy5waXhCeXRlcz1vKnMrNz4+Myx0aGlzLnJvd0J5dGVzPWMqbypzKzc+PjMsbC5jYWxsKHRoaXMsdCksdGhpc31yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrVGlmZj1mdW5jdGlvbigpe3ZhciBlPXRoaXMucm93Qnl0ZXMsdD10aGlzLmJ1ZmZlckxlbmd0aCxyPXRoaXMuZW5zdXJlQnVmZmVyKHQrZSksbj10aGlzLmJpdHMsYT10aGlzLmNvbG9ycyxpPXRoaXMuc3RyLmdldEJ5dGVzKGUpO2lmKHRoaXMuZW9mPSFpLmxlbmd0aCwhdGhpcy5lb2Ype3ZhciBvLHM9MCxsPTAsYz0wLHU9MCxmPXQ7aWYoMT09PW4mJjE9PT1hKWZvcihvPTA7bzxlOysrbyl7dmFyIGg9aVtvXV5zO2hePWg+PjEsaF49aD4+MixzPSgxJihoXj1oPj40KSk8PDcscltmKytdPWh9ZWxzZSBpZig4PT09bil7Zm9yKG89MDtvPGE7KytvKXJbZisrXT1pW29dO2Zvcig7bzxlOysrbylyW2ZdPXJbZi1hXStpW29dLGYrK31lbHNlIGlmKDE2PT09bil7dmFyIGQ9MiphO2ZvcihvPTA7bzxkOysrbylyW2YrK109aVtvXTtmb3IoO288ZTtvKz0yKXt2YXIgcD0oKDI1NSZpW29dKTw8OCkrKDI1NSZpW28rMV0pKygoMjU1JnJbZi1kXSk8PDgpKygyNTUmcltmLWQrMV0pO3JbZisrXT1wPj44JjI1NSxyW2YrK109MjU1JnB9fWVsc2V7dmFyIG09bmV3IFVpbnQ4QXJyYXkoYSsxKSxnPSgxPDxuKS0xLHY9MCx5PXQsYj10aGlzLmNvbHVtbnM7Zm9yKG89MDtvPGI7KytvKWZvcih2YXIgdz0wO3c8YTsrK3cpYzxuJiYocz1zPDw4fDI1NSZpW3YrK10sYys9OCksbVt3XT1tW3ddKyhzPj5jLW4pJmcsYy09bixsPWw8PG58bVt3XSwodSs9bik+PTgmJihyW3krK109bD4+dS04JjI1NSx1LT04KTt1PjAmJihyW3krK109KGw8PDgtdSkrKHMmKDE8PDgtdSktMSkpfXRoaXMuYnVmZmVyTGVuZ3RoKz1lfX0sZS5wcm90b3R5cGUucmVhZEJsb2NrUG5nPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yb3dCeXRlcyx0PXRoaXMucGl4Qnl0ZXMscj10aGlzLnN0ci5nZXRCeXRlKCksYT10aGlzLnN0ci5nZXRCeXRlcyhlKTtpZih0aGlzLmVvZj0hYS5sZW5ndGgsIXRoaXMuZW9mKXt2YXIgaT10aGlzLmJ1ZmZlckxlbmd0aCxvPXRoaXMuZW5zdXJlQnVmZmVyKGkrZSkscz1vLnN1YmFycmF5KGktZSxpKTswPT09cy5sZW5ndGgmJihzPW5ldyBVaW50OEFycmF5KGUpKTt2YXIgbCxjLHUsZj1pO3N3aXRjaChyKXtjYXNlIDA6Zm9yKGw9MDtsPGU7KytsKW9bZisrXT1hW2xdO2JyZWFrO2Nhc2UgMTpmb3IobD0wO2w8dDsrK2wpb1tmKytdPWFbbF07Zm9yKDtsPGU7KytsKW9bZl09b1tmLXRdK2FbbF0mMjU1LGYrKzticmVhaztjYXNlIDI6Zm9yKGw9MDtsPGU7KytsKW9bZisrXT1zW2xdK2FbbF0mMjU1O2JyZWFrO2Nhc2UgMzpmb3IobD0wO2w8dDsrK2wpb1tmKytdPShzW2xdPj4xKSthW2xdO2Zvcig7bDxlOysrbClvW2ZdPShzW2xdK29bZi10XT4+MSkrYVtsXSYyNTUsZisrO2JyZWFrO2Nhc2UgNDpmb3IobD0wO2w8dDsrK2wpYz1zW2xdLHU9YVtsXSxvW2YrK109Yyt1O2Zvcig7bDxlOysrbCl7Yz1zW2xdO3ZhciBoPXNbbC10XSxkPW9bZi10XSxwPWQrYy1oLG09cC1kO208MCYmKG09LW0pO3ZhciBnPXAtYztnPDAmJihnPS1nKTt2YXIgdj1wLWg7djwwJiYodj0tdiksdT1hW2xdLG9bZisrXT1tPD1nJiZtPD12P2QrdTpnPD12P2MrdTpoK3V9YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgcHJlZGljdG9yOiAiLmNvbmNhdChyKSl9dGhpcy5idWZmZXJMZW5ndGgrPWV9fSxlfSgpO3QuUHJlZGljdG9yU3RyZWFtPWY7dmFyIGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsdGhpcy5kZWNyeXB0PXIsdGhpcy5uZXh0Q2h1bms9bnVsbCx0aGlzLmluaXRpYWxpemVkPSExLGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZTtpZih0aGlzLmluaXRpYWxpemVkP2U9dGhpcy5uZXh0Q2h1bms6KGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoNTEyKSx0aGlzLmluaXRpYWxpemVkPSEwKSxlJiYwIT09ZS5sZW5ndGgpe3RoaXMubmV4dENodW5rPXRoaXMuc3RyLmdldEJ5dGVzKDUxMik7dmFyIHQ9dGhpcy5uZXh0Q2h1bmsmJnRoaXMubmV4dENodW5rLmxlbmd0aD4wO2U9KDAsdGhpcy5kZWNyeXB0KShlLCF0KTt2YXIgcixuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9ZS5sZW5ndGgsaT10aGlzLmVuc3VyZUJ1ZmZlcihuK2EpO2ZvcihyPTA7cjxhO3IrKylpW24rK109ZVtyXTt0aGlzLmJ1ZmZlckxlbmd0aD1ufWVsc2UgdGhpcy5lb2Y9ITB9LGV9KCk7dC5EZWNyeXB0U3RyZWFtPWg7dmFyIGQ9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMuaW5wdXQ9bmV3IFVpbnQ4QXJyYXkoNSksdCYmKHQqPS44KSxsLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuc3RyLHQ9ZS5nZXRCeXRlKCk7KDAsbi5pc1NwYWNlKSh0KTspdD1lLmdldEJ5dGUoKTtpZigtMSE9PXQmJjEyNiE9PXQpe3ZhciByLGEsaT10aGlzLmJ1ZmZlckxlbmd0aDtpZigxMjI9PT10KXtmb3Iocj10aGlzLmVuc3VyZUJ1ZmZlcihpKzQpLGE9MDthPDQ7KythKXJbaSthXT0wO3RoaXMuYnVmZmVyTGVuZ3RoKz00fWVsc2V7dmFyIG89dGhpcy5pbnB1dDtmb3Iob1swXT10LGE9MTthPDU7KythKXtmb3IodD1lLmdldEJ5dGUoKTsoMCxuLmlzU3BhY2UpKHQpOyl0PWUuZ2V0Qnl0ZSgpO2lmKG9bYV09dCwtMT09PXR8fDEyNj09PXQpYnJlYWt9aWYocj10aGlzLmVuc3VyZUJ1ZmZlcihpK2EtMSksdGhpcy5idWZmZXJMZW5ndGgrPWEtMSxhPDUpe2Zvcig7YTw1OysrYSlvW2FdPTExNzt0aGlzLmVvZj0hMH12YXIgcz0wO2ZvcihhPTA7YTw1OysrYSlzPTg1KnMrKG9bYV0tMzMpO2ZvcihhPTM7YT49MDstLWEpcltpK2FdPTI1NSZzLHM+Pj04fX1lbHNlIHRoaXMuZW9mPSEwfSxlfSgpO3QuQXNjaWk4NVN0cmVhbT1kO3ZhciBwPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyPWUsdGhpcy5kaWN0PWUuZGljdCx0aGlzLmZpcnN0RGlnaXQ9LTEsdCYmKHQqPS41KSxsLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShsLnByb3RvdHlwZSksZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdHIuZ2V0Qnl0ZXMoOGUzKTtpZihlLmxlbmd0aCl7Zm9yKHZhciB0PWUubGVuZ3RoKzE+PjEscj10aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCt0KSxuPXRoaXMuYnVmZmVyTGVuZ3RoLGE9dGhpcy5maXJzdERpZ2l0LGk9MCxvPWUubGVuZ3RoO2k8bztpKyspe3ZhciBzLGw9ZVtpXTtpZihsPj00OCYmbDw9NTcpcz0xNSZsO2Vsc2V7aWYoIShsPj02NSYmbDw9NzB8fGw+PTk3JiZsPD0xMDIpKXtpZig2Mj09PWwpe3RoaXMuZW9mPSEwO2JyZWFrfWNvbnRpbnVlfXM9OSsoMTUmbCl9YTwwP2E9czoocltuKytdPWE8PDR8cyxhPS0xKX1hPj0wJiZ0aGlzLmVvZiYmKHJbbisrXT1hPDw0LGE9LTEpLHRoaXMuZmlyc3REaWdpdD1hLHRoaXMuYnVmZmVyTGVuZ3RoPW59ZWxzZSB0aGlzLmVvZj0hMH0sZX0oKTt0LkFzY2lpSGV4U3RyZWFtPXA7dmFyIG09ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0ci5nZXRCeXRlcygyKTtpZighZXx8ZS5sZW5ndGg8Mnx8MTI4PT09ZVswXSl0aGlzLmVvZj0hMDtlbHNle3ZhciB0LHI9dGhpcy5idWZmZXJMZW5ndGgsbj1lWzBdO2lmKG48MTI4KXtpZigodD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSkpW3IrK109ZVsxXSxuPjApe3ZhciBhPXRoaXMuc3RyLmdldEJ5dGVzKG4pO3Quc2V0KGEscikscis9bn19ZWxzZXtuPTI1Ny1uO3ZhciBpPWVbMV07dD10aGlzLmVuc3VyZUJ1ZmZlcihyK24rMSk7Zm9yKHZhciBvPTA7bzxuO28rKyl0W3IrK109aX10aGlzLmJ1ZmZlckxlbmd0aD1yfX0sZX0oKTt0LlJ1bkxlbmd0aFN0cmVhbT1tO3ZhciBnPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5zdHI9ZSx0aGlzLmRpY3Q9ZS5kaWN0LHRoaXMuY2FjaGVkRGF0YT0wLHRoaXMuYml0c0NhY2hlZD0wO2Zvcih2YXIgbj17ZWFybHlDaGFuZ2U6cixjb2RlTGVuZ3RoOjksbmV4dENvZGU6MjU4LGRpY3Rpb25hcnlWYWx1ZXM6bmV3IFVpbnQ4QXJyYXkoNDA5NiksZGljdGlvbmFyeUxlbmd0aHM6bmV3IFVpbnQxNkFycmF5KDQwOTYpLGRpY3Rpb25hcnlQcmV2Q29kZXM6bmV3IFVpbnQxNkFycmF5KDQwOTYpLGN1cnJlbnRTZXF1ZW5jZTpuZXcgVWludDhBcnJheSg0MDk2KSxjdXJyZW50U2VxdWVuY2VMZW5ndGg6MH0sYT0wO2E8MjU2OysrYSluLmRpY3Rpb25hcnlWYWx1ZXNbYV09YSxuLmRpY3Rpb25hcnlMZW5ndGhzW2FdPTE7dGhpcy5sendTdGF0ZT1uLGwuY2FsbCh0aGlzLHQpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKGwucHJvdG90eXBlKSxlLnByb3RvdHlwZS5yZWFkQml0cz1mdW5jdGlvbihlKXtmb3IodmFyIHQ9dGhpcy5iaXRzQ2FjaGVkLHI9dGhpcy5jYWNoZWREYXRhO3Q8ZTspe3ZhciBuPXRoaXMuc3RyLmdldEJ5dGUoKTtpZigtMT09PW4pcmV0dXJuIHRoaXMuZW9mPSEwLG51bGw7cj1yPDw4fG4sdCs9OH1yZXR1cm4gdGhpcy5iaXRzQ2FjaGVkPXQtPWUsdGhpcy5jYWNoZWREYXRhPXIsdGhpcy5sYXN0Q29kZT1udWxsLHI+Pj50JigxPDxlKS0xfSxlLnByb3RvdHlwZS5yZWFkQmxvY2s9ZnVuY3Rpb24oKXt2YXIgZSx0LHIsbj0xMDI0LGE9dGhpcy5sendTdGF0ZTtpZihhKXt2YXIgaT1hLmVhcmx5Q2hhbmdlLG89YS5uZXh0Q29kZSxzPWEuZGljdGlvbmFyeVZhbHVlcyxsPWEuZGljdGlvbmFyeUxlbmd0aHMsYz1hLmRpY3Rpb25hcnlQcmV2Q29kZXMsdT1hLmNvZGVMZW5ndGgsZj1hLnByZXZDb2RlLGg9YS5jdXJyZW50U2VxdWVuY2UsZD1hLmN1cnJlbnRTZXF1ZW5jZUxlbmd0aCxwPTAsbT10aGlzLmJ1ZmZlckxlbmd0aCxnPXRoaXMuZW5zdXJlQnVmZmVyKHRoaXMuYnVmZmVyTGVuZ3RoK24pO2ZvcihlPTA7ZTw1MTI7ZSsrKXt2YXIgdj10aGlzLnJlYWRCaXRzKHUpLHk9ZD4wO2lmKHY8MjU2KWhbMF09dixkPTE7ZWxzZXtpZighKHY+PTI1OCkpe2lmKDI1Nj09PXYpe3U9OSxvPTI1OCxkPTA7Y29udGludWV9dGhpcy5lb2Y9ITAsZGVsZXRlIHRoaXMubHp3U3RhdGU7YnJlYWt9aWYodjxvKWZvcih0PShkPWxbdl0pLTEscj12O3Q+PTA7dC0tKWhbdF09c1tyXSxyPWNbcl07ZWxzZSBoW2QrK109aFswXX1pZih5JiYoY1tvXT1mLGxbb109bFtmXSsxLHNbb109aFswXSx1PSsrbytpJm8raS0xP3U6MHxNYXRoLm1pbihNYXRoLmxvZyhvK2kpLy42OTMxNDcxODA1NTk5NDUzKzEsMTIpKSxmPXYsbjwocCs9ZCkpe2Rve24rPTUxMn13aGlsZShuPHApO2c9dGhpcy5lbnN1cmVCdWZmZXIodGhpcy5idWZmZXJMZW5ndGgrbil9Zm9yKHQ9MDt0PGQ7dCsrKWdbbSsrXT1oW3RdfWEubmV4dENvZGU9byxhLmNvZGVMZW5ndGg9dSxhLnByZXZDb2RlPWYsYS5jdXJyZW50U2VxdWVuY2VMZW5ndGg9ZCx0aGlzLmJ1ZmZlckxlbmd0aD1tfX0sZX0oKTt0LkxaV1N0cmVhbT1nO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe28uY2FsbCh0aGlzLG5ldyBVaW50OEFycmF5KDApKX1yZXR1cm4gZS5wcm90b3R5cGU9by5wcm90b3R5cGUsZX0oKTt0Lk51bGxTdHJlYW09dn0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DQ0lUVEZheFN0cmVhbT12b2lkIDA7dmFyIG49cigxNTUpLGE9cigxNTkpLGk9cigxNTcpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXt0aGlzLnN0cj1lLHRoaXMuZGljdD1lLmRpY3QsKDAsbi5pc0RpY3QpKHIpfHwocj1uLkRpY3QuZW1wdHkpO3ZhciBvPXtuZXh0OmZ1bmN0aW9uKCl7cmV0dXJuIGUuZ2V0Qnl0ZSgpfX07dGhpcy5jY2l0dEZheERlY29kZXI9bmV3IGEuQ0NJVFRGYXhEZWNvZGVyKG8se0s6ci5nZXQoIksiKSxFbmRPZkxpbmU6ci5nZXQoIkVuZE9mTGluZSIpLEVuY29kZWRCeXRlQWxpZ246ci5nZXQoIkVuY29kZWRCeXRlQWxpZ24iKSxDb2x1bW5zOnIuZ2V0KCJDb2x1bW5zIiksUm93czpyLmdldCgiUm93cyIpLEVuZE9mQmxvY2s6ci5nZXQoIkVuZE9mQmxvY2siKSxCbGFja0lzMTpyLmdldCgiQmxhY2tJczEiKX0pLGkuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShpLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLGUucHJvdG90eXBlLnJlYWRCbG9jaz1mdW5jdGlvbigpe2Zvcig7IXRoaXMuZW9mOyl7dmFyIGU9dGhpcy5jY2l0dEZheERlY29kZXIucmVhZE5leHRDaGFyKCk7aWYoLTE9PT1lKXJldHVybiB2b2lkKHRoaXMuZW9mPSEwKTt0aGlzLmVuc3VyZUJ1ZmZlcih0aGlzLmJ1ZmZlckxlbmd0aCsxKSx0aGlzLmJ1ZmZlclt0aGlzLmJ1ZmZlckxlbmd0aCsrXT1lfX0sZX0oKTt0LkNDSVRURmF4U3RyZWFtPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuQ0NJVFRGYXhEZWNvZGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9ZnVuY3Rpb24oKXt2YXIgZT1bWy0xLC0xXSxbLTEsLTFdLFs3LDhdLFs3LDddLFs2LDZdLFs2LDZdLFs2LDVdLFs2LDVdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFs0LDBdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDFdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDRdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFszLDNdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdLFsxLDJdXSx0PVtbLTEsLTFdLFsxMiwtMl0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjExMl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjMwNF0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjQzMl0sWzEyLDI0OTZdLFsxMiwyNTYwXV0scj1bWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbOCwyOV0sWzgsMjldLFs4LDMwXSxbOCwzMF0sWzgsNDVdLFs4LDQ1XSxbOCw0Nl0sWzgsNDZdLFs3LDIyXSxbNywyMl0sWzcsMjJdLFs3LDIyXSxbNywyM10sWzcsMjNdLFs3LDIzXSxbNywyM10sWzgsNDddLFs4LDQ3XSxbOCw0OF0sWzgsNDhdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzYsMTNdLFs2LDEzXSxbNiwxM10sWzcsMjBdLFs3LDIwXSxbNywyMF0sWzcsMjBdLFs4LDMzXSxbOCwzM10sWzgsMzRdLFs4LDM0XSxbOCwzNV0sWzgsMzVdLFs4LDM2XSxbOCwzNl0sWzgsMzddLFs4LDM3XSxbOCwzOF0sWzgsMzhdLFs3LDE5XSxbNywxOV0sWzcsMTldLFs3LDE5XSxbOCwzMV0sWzgsMzFdLFs4LDMyXSxbOCwzMl0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMV0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbNiwxMl0sWzYsMTJdLFs2LDEyXSxbOCw1M10sWzgsNTNdLFs4LDU0XSxbOCw1NF0sWzcsMjZdLFs3LDI2XSxbNywyNl0sWzcsMjZdLFs4LDM5XSxbOCwzOV0sWzgsNDBdLFs4LDQwXSxbOCw0MV0sWzgsNDFdLFs4LDQyXSxbOCw0Ml0sWzgsNDNdLFs4LDQzXSxbOCw0NF0sWzgsNDRdLFs3LDIxXSxbNywyMV0sWzcsMjFdLFs3LDIxXSxbNywyOF0sWzcsMjhdLFs3LDI4XSxbNywyOF0sWzgsNjFdLFs4LDYxXSxbOCw2Ml0sWzgsNjJdLFs4LDYzXSxbOCw2M10sWzgsMF0sWzgsMF0sWzgsMzIwXSxbOCwzMjBdLFs4LDM4NF0sWzgsMzg0XSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTBdLFs1LDEwXSxbNSwxMF0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs1LDExXSxbNSwxMV0sWzUsMTFdLFs3LDI3XSxbNywyN10sWzcsMjddLFs3LDI3XSxbOCw1OV0sWzgsNTldLFs4LDYwXSxbOCw2MF0sWzksMTQ3Ml0sWzksMTUzNl0sWzksMTYwMF0sWzksMTcyOF0sWzcsMThdLFs3LDE4XSxbNywxOF0sWzcsMThdLFs3LDI0XSxbNywyNF0sWzcsMjRdLFs3LDI0XSxbOCw0OV0sWzgsNDldLFs4LDUwXSxbOCw1MF0sWzgsNTFdLFs4LDUxXSxbOCw1Ml0sWzgsNTJdLFs3LDI1XSxbNywyNV0sWzcsMjVdLFs3LDI1XSxbOCw1NV0sWzgsNTVdLFs4LDU2XSxbOCw1Nl0sWzgsNTddLFs4LDU3XSxbOCw1OF0sWzgsNThdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxOTJdLFs2LDE5Ml0sWzYsMTkyXSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbNiwxNjY0XSxbOCw0NDhdLFs4LDQ0OF0sWzgsNTEyXSxbOCw1MTJdLFs5LDcwNF0sWzksNzY4XSxbOCw2NDBdLFs4LDY0MF0sWzgsNTc2XSxbOCw1NzZdLFs5LDgzMl0sWzksODk2XSxbOSw5NjBdLFs5LDEwMjRdLFs5LDEwODhdLFs5LDExNTJdLFs5LDEyMTZdLFs5LDEyODBdLFs5LDEzNDRdLFs5LDE0MDhdLFs3LDI1Nl0sWzcsMjU2XSxbNywyNTZdLFs3LDI1Nl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsMl0sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzQsM10sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSwxMjhdLFs1LDEyOF0sWzUsMTI4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw4XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNSw5XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE2XSxbNiwxNl0sWzYsMTZdLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzYsMTddLFs2LDE3XSxbNiwxN10sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNF0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNF0sWzYsMTRdLFs2LDE0XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs2LDE1XSxbNiwxNV0sWzYsMTVdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNSw2NF0sWzUsNjRdLFs1LDY0XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw2XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XSxbNCw3XV0sYT1bWy0xLC0xXSxbLTEsLTFdLFsxMiwtMl0sWzEyLC0yXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFsxMSwxNzkyXSxbMTEsMTc5Ml0sWzExLDE3OTJdLFsxMSwxNzkyXSxbMTIsMTk4NF0sWzEyLDE5ODRdLFsxMiwyMDQ4XSxbMTIsMjA0OF0sWzEyLDIxMTJdLFsxMiwyMTEyXSxbMTIsMjE3Nl0sWzEyLDIxNzZdLFsxMiwyMjQwXSxbMTIsMjI0MF0sWzEyLDIzMDRdLFsxMiwyMzA0XSxbMTEsMTg1Nl0sWzExLDE4NTZdLFsxMSwxODU2XSxbMTEsMTg1Nl0sWzExLDE5MjBdLFsxMSwxOTIwXSxbMTEsMTkyMF0sWzExLDE5MjBdLFsxMiwyMzY4XSxbMTIsMjM2OF0sWzEyLDI0MzJdLFsxMiwyNDMyXSxbMTIsMjQ5Nl0sWzEyLDI0OTZdLFsxMiwyNTYwXSxbMTIsMjU2MF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMCwxOF0sWzEwLDE4XSxbMTAsMThdLFsxMiw1Ml0sWzEyLDUyXSxbMTMsNjQwXSxbMTMsNzA0XSxbMTMsNzY4XSxbMTMsODMyXSxbMTIsNTVdLFsxMiw1NV0sWzEyLDU2XSxbMTIsNTZdLFsxMywxMjgwXSxbMTMsMTM0NF0sWzEzLDE0MDhdLFsxMywxNDcyXSxbMTIsNTldLFsxMiw1OV0sWzEyLDYwXSxbMTIsNjBdLFsxMywxNTM2XSxbMTMsMTYwMF0sWzExLDI0XSxbMTEsMjRdLFsxMSwyNF0sWzExLDI0XSxbMTEsMjVdLFsxMSwyNV0sWzExLDI1XSxbMTEsMjVdLFsxMywxNjY0XSxbMTMsMTcyOF0sWzEyLDMyMF0sWzEyLDMyMF0sWzEyLDM4NF0sWzEyLDM4NF0sWzEyLDQ0OF0sWzEyLDQ0OF0sWzEzLDUxMl0sWzEzLDU3Nl0sWzEyLDUzXSxbMTIsNTNdLFsxMiw1NF0sWzEyLDU0XSxbMTMsODk2XSxbMTMsOTYwXSxbMTMsMTAyNF0sWzEzLDEwODhdLFsxMywxMTUyXSxbMTMsMTIxNl0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdLFsxMCw2NF0sWzEwLDY0XSxbMTAsNjRdXSxpPVtbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzgsMTNdLFs4LDEzXSxbOCwxM10sWzExLDIzXSxbMTEsMjNdLFsxMiw1MF0sWzEyLDUxXSxbMTIsNDRdLFsxMiw0NV0sWzEyLDQ2XSxbMTIsNDddLFsxMiw1N10sWzEyLDU4XSxbMTIsNjFdLFsxMiwyNTZdLFsxMCwxNl0sWzEwLDE2XSxbMTAsMTZdLFsxMCwxNl0sWzEwLDE3XSxbMTAsMTddLFsxMCwxN10sWzEwLDE3XSxbMTIsNDhdLFsxMiw0OV0sWzEyLDYyXSxbMTIsNjNdLFsxMiwzMF0sWzEyLDMxXSxbMTIsMzJdLFsxMiwzM10sWzEyLDQwXSxbMTIsNDFdLFsxMSwyMl0sWzExLDIyXSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzgsMTRdLFs4LDE0XSxbOCwxNF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMF0sWzcsMTBdLFs3LDEwXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs3LDExXSxbNywxMV0sWzcsMTFdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzksMTVdLFs5LDE1XSxbOSwxNV0sWzEyLDEyOF0sWzEyLDE5Ml0sWzEyLDI2XSxbMTIsMjddLFsxMiwyOF0sWzEyLDI5XSxbMTEsMTldLFsxMSwxOV0sWzExLDIwXSxbMTEsMjBdLFsxMiwzNF0sWzEyLDM1XSxbMTIsMzZdLFsxMiwzN10sWzEyLDM4XSxbMTIsMzldLFsxMSwyMV0sWzExLDIxXSxbMTIsNDJdLFsxMiw0M10sWzEwLDBdLFsxMCwwXSxbMTAsMF0sWzEwLDBdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl0sWzcsMTJdLFs3LDEyXSxbNywxMl1dLG89W1stMSwtMV0sWy0xLC0xXSxbLTEsLTFdLFstMSwtMV0sWzYsOV0sWzYsOF0sWzUsN10sWzUsN10sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNl0sWzQsNV0sWzQsNV0sWzQsNV0sWzQsNV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsMV0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzMsNF0sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsM10sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl0sWzIsMl1dO2Z1bmN0aW9uIHMoZSl7dmFyIHQ9YXJndW1lbnRzLmxlbmd0aD4xJiZ2b2lkIDAhPT1hcmd1bWVudHNbMV0/YXJndW1lbnRzWzFdOnt9O2lmKCFlfHwiZnVuY3Rpb24iIT10eXBlb2YgZS5uZXh0KXRocm93IG5ldyBFcnJvcignQ0NJVFRGYXhEZWNvZGVyIC0gaW52YWxpZCAic291cmNlIiBwYXJhbWV0ZXIuJyk7dGhpcy5zb3VyY2U9ZSx0aGlzLmVvZj0hMSx0aGlzLmVuY29kaW5nPXQuS3x8MCx0aGlzLmVvbGluZT10LkVuZE9mTGluZXx8ITEsdGhpcy5ieXRlQWxpZ249dC5FbmNvZGVkQnl0ZUFsaWdufHwhMSx0aGlzLmNvbHVtbnM9dC5Db2x1bW5zfHwxNzI4LHRoaXMucm93cz10LlJvd3N8fDA7dmFyIHIsbj10LkVuZE9mQmxvY2s7Zm9yKG51bGw9PW4mJihuPSEwKSx0aGlzLmVvYmxvY2s9bix0aGlzLmJsYWNrPXQuQmxhY2tJczF8fCExLHRoaXMuY29kaW5nTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzEpLHRoaXMucmVmTGluZT1uZXcgVWludDMyQXJyYXkodGhpcy5jb2x1bW5zKzIpLHRoaXMuY29kaW5nTGluZVswXT10aGlzLmNvbHVtbnMsdGhpcy5jb2RpbmdQb3M9MCx0aGlzLnJvdz0wLHRoaXMubmV4dExpbmUyRD10aGlzLmVuY29kaW5nPDAsdGhpcy5pbnB1dEJpdHM9MCx0aGlzLmlucHV0QnVmPTAsdGhpcy5vdXRwdXRCaXRzPTAsdGhpcy5yb3dzRG9uZT0hMTswPT09KHI9dGhpcy5fbG9va0JpdHMoMTIpKTspdGhpcy5fZWF0Qml0cygxKTsxPT09ciYmdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5uZXh0TGluZTJEPSF0aGlzLl9sb29rQml0cygxKSx0aGlzLl9lYXRCaXRzKDEpKX1yZXR1cm4gcy5wcm90b3R5cGU9e3JlYWROZXh0Q2hhcjpmdW5jdGlvbigpe2lmKHRoaXMuZW9mKXJldHVybi0xO3ZhciBlLHQscixhLGksbz10aGlzLnJlZkxpbmUscz10aGlzLmNvZGluZ0xpbmUsbD10aGlzLmNvbHVtbnM7aWYoMD09PXRoaXMub3V0cHV0Qml0cyl7aWYodGhpcy5yb3dzRG9uZSYmKHRoaXMuZW9mPSEwKSx0aGlzLmVvZilyZXR1cm4tMTt2YXIgYyx1LGY7aWYodGhpcy5lcnI9ITEsdGhpcy5uZXh0TGluZTJEKXtmb3IoYT0wO3NbYV08bDsrK2Epb1thXT1zW2FdO2ZvcihvW2ErK109bCxvW2FdPWwsc1swXT0wLHRoaXMuY29kaW5nUG9zPTAsZT0wLHQ9MDtzW3RoaXMuY29kaW5nUG9zXTxsOylzd2l0Y2goYz10aGlzLl9nZXRUd29EaW1Db2RlKCkpe2Nhc2UgMDp0aGlzLl9hZGRQaXhlbHMob1tlKzFdLHQpLG9bZSsxXTxsJiYoZSs9Mik7YnJlYWs7Y2FzZSAxOmlmKGM9dT0wLHQpe2Rve2MrPWY9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZj49NjQpO2Rve3UrPWY9dGhpcy5fZ2V0V2hpdGVDb2RlKCl9d2hpbGUoZj49NjQpfWVsc2V7ZG97Yys9Zj10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShmPj02NCk7ZG97dSs9Zj10aGlzLl9nZXRCbGFja0NvZGUoKX13aGlsZShmPj02NCl9Zm9yKHRoaXMuX2FkZFBpeGVscyhzW3RoaXMuY29kaW5nUG9zXStjLHQpLHNbdGhpcy5jb2RpbmdQb3NdPGwmJnRoaXMuX2FkZFBpeGVscyhzW3RoaXMuY29kaW5nUG9zXSt1LDFedCk7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDc6aWYodGhpcy5fYWRkUGl4ZWxzKG9bZV0rMyx0KSx0Xj0xLHNbdGhpcy5jb2RpbmdQb3NdPGwpZm9yKCsrZTtvW2VdPD1zW3RoaXMuY29kaW5nUG9zXSYmb1tlXTxsOyllKz0yO2JyZWFrO2Nhc2UgNTppZih0aGlzLl9hZGRQaXhlbHMob1tlXSsyLHQpLHRePTEsc1t0aGlzLmNvZGluZ1Bvc108bClmb3IoKytlO29bZV08PXNbdGhpcy5jb2RpbmdQb3NdJiZvW2VdPGw7KWUrPTI7YnJlYWs7Y2FzZSAzOmlmKHRoaXMuX2FkZFBpeGVscyhvW2VdKzEsdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcigrK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDI6aWYodGhpcy5fYWRkUGl4ZWxzKG9bZV0sdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcigrK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlIDg6aWYodGhpcy5fYWRkUGl4ZWxzTmVnKG9bZV0tMyx0KSx0Xj0xLHNbdGhpcy5jb2RpbmdQb3NdPGwpZm9yKGU+MD8tLWU6KytlO29bZV08PXNbdGhpcy5jb2RpbmdQb3NdJiZvW2VdPGw7KWUrPTI7YnJlYWs7Y2FzZSA2OmlmKHRoaXMuX2FkZFBpeGVsc05lZyhvW2VdLTIsdCksdF49MSxzW3RoaXMuY29kaW5nUG9zXTxsKWZvcihlPjA/LS1lOisrZTtvW2VdPD1zW3RoaXMuY29kaW5nUG9zXSYmb1tlXTxsOyllKz0yO2JyZWFrO2Nhc2UgNDppZih0aGlzLl9hZGRQaXhlbHNOZWcob1tlXS0xLHQpLHRePTEsc1t0aGlzLmNvZGluZ1Bvc108bClmb3IoZT4wPy0tZTorK2U7b1tlXTw9c1t0aGlzLmNvZGluZ1Bvc10mJm9bZV08bDspZSs9MjticmVhaztjYXNlLTE6dGhpcy5fYWRkUGl4ZWxzKGwsMCksdGhpcy5lb2Y9ITA7YnJlYWs7ZGVmYXVsdDooMCxuLmluZm8pKCJiYWQgMmQgY29kZSIpLHRoaXMuX2FkZFBpeGVscyhsLDApLHRoaXMuZXJyPSEwfX1lbHNlIGZvcihzWzBdPTAsdGhpcy5jb2RpbmdQb3M9MCx0PTA7c1t0aGlzLmNvZGluZ1Bvc108bDspe2lmKGM9MCx0KWRve2MrPWY9dGhpcy5fZ2V0QmxhY2tDb2RlKCl9d2hpbGUoZj49NjQpO2Vsc2UgZG97Yys9Zj10aGlzLl9nZXRXaGl0ZUNvZGUoKX13aGlsZShmPj02NCk7dGhpcy5fYWRkUGl4ZWxzKHNbdGhpcy5jb2RpbmdQb3NdK2MsdCksdF49MX12YXIgaD0hMTtpZih0aGlzLmJ5dGVBbGlnbiYmKHRoaXMuaW5wdXRCaXRzJj0tOCksdGhpcy5lb2Jsb2NrfHx0aGlzLnJvdyE9PXRoaXMucm93cy0xKXtpZihjPXRoaXMuX2xvb2tCaXRzKDEyKSx0aGlzLmVvbGluZSlmb3IoOy0xIT09YyYmMSE9PWM7KXRoaXMuX2VhdEJpdHMoMSksYz10aGlzLl9sb29rQml0cygxMik7ZWxzZSBmb3IoOzA9PT1jOyl0aGlzLl9lYXRCaXRzKDEpLGM9dGhpcy5fbG9va0JpdHMoMTIpOzE9PT1jPyh0aGlzLl9lYXRCaXRzKDEyKSxoPSEwKTotMT09PWMmJih0aGlzLmVvZj0hMCl9ZWxzZSB0aGlzLnJvd3NEb25lPSEwO2lmKCF0aGlzLmVvZiYmdGhpcy5lbmNvZGluZz4wJiYhdGhpcy5yb3dzRG9uZSYmKHRoaXMubmV4dExpbmUyRD0hdGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSksdGhpcy5lb2Jsb2NrJiZoJiZ0aGlzLmJ5dGVBbGlnbil7aWYoMT09PShjPXRoaXMuX2xvb2tCaXRzKDEyKSkpe2lmKHRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2xvb2tCaXRzKDEpLHRoaXMuX2VhdEJpdHMoMSkpLHRoaXMuZW5jb2Rpbmc+PTApZm9yKGE9MDthPDQ7KythKTEhPT0oYz10aGlzLl9sb29rQml0cygxMikpJiYoMCxuLmluZm8pKCJiYWQgcnRjIGNvZGU6ICIrYyksdGhpcy5fZWF0Qml0cygxMiksdGhpcy5lbmNvZGluZz4wJiYodGhpcy5fbG9va0JpdHMoMSksdGhpcy5fZWF0Qml0cygxKSk7dGhpcy5lb2Y9ITB9fWVsc2UgaWYodGhpcy5lcnImJnRoaXMuZW9saW5lKXtmb3IoOzspe2lmKC0xPT09KGM9dGhpcy5fbG9va0JpdHMoMTMpKSlyZXR1cm4gdGhpcy5lb2Y9ITAsLTE7aWYoYz4+MT09MSlicmVhazt0aGlzLl9lYXRCaXRzKDEpfXRoaXMuX2VhdEJpdHMoMTIpLHRoaXMuZW5jb2Rpbmc+MCYmKHRoaXMuX2VhdEJpdHMoMSksdGhpcy5uZXh0TGluZTJEPSEoMSZjKSl9c1swXT4wP3RoaXMub3V0cHV0Qml0cz1zW3RoaXMuY29kaW5nUG9zPTBdOnRoaXMub3V0cHV0Qml0cz1zW3RoaXMuY29kaW5nUG9zPTFdLHRoaXMucm93Kyt9aWYodGhpcy5vdXRwdXRCaXRzPj04KWk9MSZ0aGlzLmNvZGluZ1Bvcz8wOjI1NSx0aGlzLm91dHB1dEJpdHMtPTgsMD09PXRoaXMub3V0cHV0Qml0cyYmc1t0aGlzLmNvZGluZ1Bvc108bCYmKHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPXNbdGhpcy5jb2RpbmdQb3NdLXNbdGhpcy5jb2RpbmdQb3MtMV0pO2Vsc2V7cj04LGk9MDtkb3t0aGlzLm91dHB1dEJpdHM+cj8oaTw8PXIsMSZ0aGlzLmNvZGluZ1Bvc3x8KGl8PTI1NT4+OC1yKSx0aGlzLm91dHB1dEJpdHMtPXIscj0wKTooaTw8PXRoaXMub3V0cHV0Qml0cywxJnRoaXMuY29kaW5nUG9zfHwoaXw9MjU1Pj44LXRoaXMub3V0cHV0Qml0cyksci09dGhpcy5vdXRwdXRCaXRzLHRoaXMub3V0cHV0Qml0cz0wLHNbdGhpcy5jb2RpbmdQb3NdPGw/KHRoaXMuY29kaW5nUG9zKyssdGhpcy5vdXRwdXRCaXRzPXNbdGhpcy5jb2RpbmdQb3NdLXNbdGhpcy5jb2RpbmdQb3MtMV0pOnI+MCYmKGk8PD1yLHI9MCkpfXdoaWxlKHIpfXJldHVybiB0aGlzLmJsYWNrJiYoaV49MjU1KSxpfSxfYWRkUGl4ZWxzOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2RpbmdQb3M7ZT5yW2FdJiYoZT50aGlzLmNvbHVtbnMmJigoMCxuLmluZm8pKCJyb3cgaXMgd3JvbmcgbGVuZ3RoIiksdGhpcy5lcnI9ITAsZT10aGlzLmNvbHVtbnMpLDEmYV50JiYrK2EsclthXT1lKSx0aGlzLmNvZGluZ1Bvcz1hfSxfYWRkUGl4ZWxzTmVnOmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy5jb2RpbmdMaW5lLGE9dGhpcy5jb2RpbmdQb3M7aWYoZT5yW2FdKWU+dGhpcy5jb2x1bW5zJiYoKDAsbi5pbmZvKSgicm93IGlzIHdyb25nIGxlbmd0aCIpLHRoaXMuZXJyPSEwLGU9dGhpcy5jb2x1bW5zKSwxJmFedCYmKythLHJbYV09ZTtlbHNlIGlmKGU8clthXSl7Zm9yKGU8MCYmKCgwLG4uaW5mbykoImludmFsaWQgY29kZSIpLHRoaXMuZXJyPSEwLGU9MCk7YT4wJiZlPHJbYS0xXTspLS1hO3JbYV09ZX10aGlzLmNvZGluZ1Bvcz1hfSxfZmluZFRhYmxlQ29kZTpmdW5jdGlvbihlLHQscixuKXtmb3IodmFyIGE9bnx8MCxpPWU7aTw9dDsrK2kpe3ZhciBvPXRoaXMuX2xvb2tCaXRzKGkpO2lmKC0xPT09bylyZXR1cm5bITAsMSwhMV07aWYoaTx0JiYobzw8PXQtaSksIWF8fG8+PWEpe3ZhciBzPXJbby1hXTtpZihzWzBdPT09aSlyZXR1cm4gdGhpcy5fZWF0Qml0cyhpKSxbITAsc1sxXSwhMF19fXJldHVyblshMSwwLCExXX0sX2dldFR3b0RpbUNvZGU6ZnVuY3Rpb24oKXt2YXIgdCxyPTA7aWYodGhpcy5lb2Jsb2NrKXtpZihyPXRoaXMuX2xvb2tCaXRzKDcpLCh0PWVbcl0pJiZ0WzBdPjApcmV0dXJuIHRoaXMuX2VhdEJpdHModFswXSksdFsxXX1lbHNle3ZhciBhPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMSw3LGUpO2lmKGFbMF0mJmFbMl0pcmV0dXJuIGFbMV19cmV0dXJuKDAsbi5pbmZvKSgiQmFkIHR3byBkaW0gY29kZSIpLC0xfSxfZ2V0V2hpdGVDb2RlOmZ1bmN0aW9uKCl7dmFyIGUsYT0wO2lmKHRoaXMuZW9ibG9jayl7aWYoLTE9PT0oYT10aGlzLl9sb29rQml0cygxMikpKXJldHVybiAxO2lmKChlPWE+PjU9PTA/dFthXTpyW2E+PjNdKVswXT4wKXJldHVybiB0aGlzLl9lYXRCaXRzKGVbMF0pLGVbMV19ZWxzZXt2YXIgaT10aGlzLl9maW5kVGFibGVDb2RlKDEsOSxyKTtpZihpWzBdKXJldHVybiBpWzFdO2lmKChpPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTEsMTIsdCkpWzBdKXJldHVybiBpWzFdfXJldHVybigwLG4uaW5mbykoImJhZCB3aGl0ZSBjb2RlIiksdGhpcy5fZWF0Qml0cygxKSwxfSxfZ2V0QmxhY2tDb2RlOmZ1bmN0aW9uKCl7dmFyIGUsdDtpZih0aGlzLmVvYmxvY2spe2lmKC0xPT09KGU9dGhpcy5fbG9va0JpdHMoMTMpKSlyZXR1cm4gMTtpZigodD1lPj43PT0wP2FbZV06ZT4+OT09MCYmZT4+NyE9MD9pWyhlPj4xKS02NF06b1tlPj43XSlbMF0+MClyZXR1cm4gdGhpcy5fZWF0Qml0cyh0WzBdKSx0WzFdfWVsc2V7dmFyIHI9dGhpcy5fZmluZFRhYmxlQ29kZSgyLDYsbyk7aWYoclswXSlyZXR1cm4gclsxXTtpZigocj10aGlzLl9maW5kVGFibGVDb2RlKDcsMTIsaSw2NCkpWzBdKXJldHVybiByWzFdO2lmKChyPXRoaXMuX2ZpbmRUYWJsZUNvZGUoMTAsMTMsYSkpWzBdKXJldHVybiByWzFdfXJldHVybigwLG4uaW5mbykoImJhZCBibGFjayBjb2RlIiksdGhpcy5fZWF0Qml0cygxKSwxfSxfbG9va0JpdHM6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0O3RoaXMuaW5wdXRCaXRzPGU7KXtpZigtMT09PSh0PXRoaXMuc291cmNlLm5leHQoKSkpcmV0dXJuIDA9PT10aGlzLmlucHV0Qml0cz8tMTp0aGlzLmlucHV0QnVmPDxlLXRoaXMuaW5wdXRCaXRzJjY1NTM1Pj4xNi1lO3RoaXMuaW5wdXRCdWY9dGhpcy5pbnB1dEJ1Zjw8OHx0LHRoaXMuaW5wdXRCaXRzKz04fXJldHVybiB0aGlzLmlucHV0QnVmPj50aGlzLmlucHV0Qml0cy1lJjY1NTM1Pj4xNi1lfSxfZWF0Qml0czpmdW5jdGlvbihlKXsodGhpcy5pbnB1dEJpdHMtPWUpPDAmJih0aGlzLmlucHV0Qml0cz0wKX19LHN9KCk7dC5DQ0lUVEZheERlY29kZXI9YX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KYmlnMlN0cmVhbT12b2lkIDA7dmFyIG49cigxNTUpLGE9cigxNTcpLGk9cigxNjEpLG89cig2KSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuKXt0aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1uLGEuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxvLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgaS5KYmlnMkltYWdlLHQ9W107aWYoKDAsbi5pc0RpY3QpKHRoaXMucGFyYW1zKSl7dmFyIHI9dGhpcy5wYXJhbXMuZ2V0KCJKQklHMkdsb2JhbHMiKTtpZigoMCxuLmlzU3RyZWFtKShyKSl7dmFyIGE9ci5nZXRCeXRlcygpO3QucHVzaCh7ZGF0YTphLHN0YXJ0OjAsZW5kOmEubGVuZ3RofSl9fXQucHVzaCh7ZGF0YTp0aGlzLmJ5dGVzLHN0YXJ0OjAsZW5kOnRoaXMuYnl0ZXMubGVuZ3RofSk7Zm9yKHZhciBvPWUucGFyc2VDaHVua3ModCkscz1vLmxlbmd0aCxsPTA7bDxzO2wrKylvW2xdXj0yNTU7dGhpcy5idWZmZXI9byx0aGlzLmJ1ZmZlckxlbmd0aD1zLHRoaXMuZW9mPSEwfX0sZX0oKTt0LkpiaWcyU3RyZWFtPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSmJpZzJJbWFnZT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTYyKSxpPXIoMTU5KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9IkpCSUcyIGVycm9yOiAiK2V9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJKYmlnMkVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31mdW5jdGlvbiB0KGUsdCxyKXt0aGlzLmRhdGE9ZSx0aGlzLnN0YXJ0PXQsdGhpcy5lbmQ9cn1mdW5jdGlvbiByKGUsdCxyKXt2YXIgbj1lLmdldENvbnRleHRzKHQpLGE9MTtmdW5jdGlvbiBpKGUpe2Zvcih2YXIgdD0wLGk9MDtpPGU7aSsrKXt2YXIgbz1yLnJlYWRCaXQobixhKTthPWE8MjU2P2E8PDF8bzo1MTEmKGE8PDF8byl8MjU2LHQ9dDw8MXxvfXJldHVybiB0Pj4+MH12YXIgbz1pKDEpLHM9aSgxKT9pKDEpP2koMSk/aSgxKT9pKDEpP2koMzIpKzQ0MzY6aSgxMikrMzQwOmkoOCkrODQ6aSg2KSsyMDppKDQpKzQ6aSgyKTtyZXR1cm4gMD09PW8/czpzPjA/LXM6bnVsbH1mdW5jdGlvbiBzKGUsdCxyKXtmb3IodmFyIG49ZS5nZXRDb250ZXh0cygiSUFJRCIpLGE9MSxpPTA7aTxyO2krKylhPWE8PDF8dC5yZWFkQml0KG4sYSk7cmV0dXJuIHI8MzE/YSYoMTw8ciktMToyMTQ3NDgzNjQ3JmF9ZS5wcm90b3R5cGU9e2dldENvbnRleHRzOmZ1bmN0aW9uKGUpe3JldHVybiBlIGluIHRoaXM/dGhpc1tlXTp0aGlzW2VdPW5ldyBJbnQ4QXJyYXkoNjU1MzYpfX0sdC5wcm90b3R5cGU9e2dldCBkZWNvZGVyKCl7dmFyIGU9bmV3IGEuQXJpdGhtZXRpY0RlY29kZXIodGhpcy5kYXRhLHRoaXMuc3RhcnQsdGhpcy5lbmQpO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJkZWNvZGVyIixlKX0sZ2V0IGNvbnRleHRDYWNoZSgpe3ZhciB0PW5ldyBlO3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJjb250ZXh0Q2FjaGUiLHQpfX07dmFyIGw9WyJTeW1ib2xEaWN0aW9uYXJ5IixudWxsLG51bGwsbnVsbCwiSW50ZXJtZWRpYXRlVGV4dFJlZ2lvbiIsbnVsbCwiSW1tZWRpYXRlVGV4dFJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJQYXR0ZXJuRGljdGlvbmFyeSIsbnVsbCxudWxsLG51bGwsIkludGVybWVkaWF0ZUhhbGZ0b25lUmVnaW9uIixudWxsLCJJbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbiIsIkltbWVkaWF0ZUxvc3NsZXNzSGFsZnRvbmVSZWdpb24iLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJJbnRlcm1lZGlhdGVHZW5lcmljUmVnaW9uIixudWxsLCJJbW1lZGlhdGVHZW5lcmljUmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uIiwiSW50ZXJtZWRpYXRlR2VuZXJpY1JlZmluZW1lbnRSZWdpb24iLG51bGwsIkltbWVkaWF0ZUdlbmVyaWNSZWZpbmVtZW50UmVnaW9uIiwiSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVmaW5lbWVudFJlZ2lvbiIsbnVsbCxudWxsLG51bGwsbnVsbCwiUGFnZUluZm9ybWF0aW9uIiwiRW5kT2ZQYWdlIiwiRW5kT2ZTdHJpcGUiLCJFbmRPZkZpbGUiLCJQcm9maWxlcyIsIlRhYmxlcyIsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLG51bGwsbnVsbCxudWxsLCJFeHRlbnNpb24iXSxjPVtbe3g6LTEseTotMn0se3g6MCx5Oi0yfSx7eDoxLHk6LTJ9LHt4Oi0yLHk6LTF9LHt4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDoyLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dLFt7eDotMSx5Oi0yfSx7eDowLHk6LTJ9LHt4OjEseTotMn0se3g6Mix5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6Mix5Oi0xfSx7eDotMyx5OjB9LHt4Oi0yLHk6MH0se3g6LTEseTowfV0sW3t4Oi0xLHk6LTJ9LHt4OjAseTotMn0se3g6MSx5Oi0yfSx7eDotMix5Oi0xfSx7eDotMSx5Oi0xfSx7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTIseTowfSx7eDotMSx5OjB9XSxbe3g6LTMseTotMX0se3g6LTIseTotMX0se3g6LTEseTotMX0se3g6MCx5Oi0xfSx7eDoxLHk6LTF9LHt4Oi00LHk6MH0se3g6LTMseTowfSx7eDotMix5OjB9LHt4Oi0xLHk6MH1dXSx1PVt7Y29kaW5nOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfV0scmVmZXJlbmNlOlt7eDowLHk6LTF9LHt4OjEseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4Oi0xLHk6MX0se3g6MCx5OjF9LHt4OjEseToxfV19LHtjb2Rpbmc6W3t4Oi0xLHk6LTF9LHt4OjAseTotMX0se3g6MSx5Oi0xfSx7eDotMSx5OjB9XSxyZWZlcmVuY2U6W3t4OjAseTotMX0se3g6LTEseTowfSx7eDowLHk6MH0se3g6MSx5OjB9LHt4OjAseToxfSx7eDoxLHk6MX1dfV0sZj1bMzk3MTcsMTk0MSwyMjksNDA1XSxoPVszMiw4XTtmdW5jdGlvbiBkKGUsdCxyLG4sYSxpLG8scyl7aWYoZSlyZXR1cm4gTyhuZXcgRShzLmRhdGEscy5zdGFydCxzLmVuZCksdCxyLCExKTtpZigwPT09biYmIWkmJiFhJiY0PT09by5sZW5ndGgmJjM9PT1vWzBdLngmJi0xPT09b1swXS55JiYtMz09PW9bMV0ueCYmLTE9PT1vWzFdLnkmJjI9PT1vWzJdLngmJi0yPT09b1syXS55JiYtMj09PW9bM10ueCYmLTI9PT1vWzNdLnkpcmV0dXJuIGZ1bmN0aW9uKGUsdCxyKXt2YXIgbixhLGksbyxzLGwsYyx1PXIuZGVjb2RlcixmPXIuY29udGV4dENhY2hlLmdldENvbnRleHRzKCJHQiIpLGg9W107Zm9yKGE9MDthPHQ7YSsrKWZvcihzPWhbYV09bmV3IFVpbnQ4QXJyYXkoZSksbD1hPDE/czpoW2EtMV0sbj0oYz1hPDI/czpoW2EtMl0pWzBdPDwxM3xjWzFdPDwxMnxjWzJdPDwxMXxsWzBdPDw3fGxbMV08PDZ8bFsyXTw8NXxsWzNdPDw0LGk9MDtpPGU7aSsrKXNbaV09bz11LnJlYWRCaXQoZixuKSxuPSgzMTczNSZuKTw8MXwoaSszPGU/Y1tpKzNdPDwxMTowKXwoaSs0PGU/bFtpKzRdPDw0OjApfG87cmV0dXJuIGh9KHQscixzKTt2YXIgbD0hIWksdT1jW25dLmNvbmNhdChvKTt1LnNvcnQoKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUueS10Lnl8fGUueC10Lnh9KSk7dmFyIGgsZCxwPXUubGVuZ3RoLG09bmV3IEludDhBcnJheShwKSxnPW5ldyBJbnQ4QXJyYXkocCksdj1bXSx5PTAsYj0wLHc9MCxrPTA7Zm9yKGQ9MDtkPHA7ZCsrKW1bZF09dVtkXS54LGdbZF09dVtkXS55LGI9TWF0aC5taW4oYix1W2RdLngpLHc9TWF0aC5tYXgodyx1W2RdLngpLGs9TWF0aC5taW4oayx1W2RdLnkpLGQ8cC0xJiZ1W2RdLnk9PT11W2QrMV0ueSYmdVtkXS54PT09dVtkKzFdLngtMT95fD0xPDxwLTEtZDp2LnB1c2goZCk7dmFyIFM9di5sZW5ndGgsXz1uZXcgSW50OEFycmF5KFMpLHg9bmV3IEludDhBcnJheShTKSxBPW5ldyBVaW50MTZBcnJheShTKTtmb3IoaD0wO2g8UztoKyspZD12W2hdLF9baF09dVtkXS54LHhbaF09dVtkXS55LEFbaF09MTw8cC0xLWQ7Zm9yKHZhciBDLFAsVCxSLEksRj0tYixMPS1rLEQ9dC13LE49ZltuXSxNPW5ldyBVaW50OEFycmF5KHQpLGo9W10sQj1zLmRlY29kZXIsVT1zLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR0IiKSxxPTAsej0wLFc9MDtXPHI7VysrKWlmKGEmJihxXj1CLnJlYWRCaXQoVSxOKSkpai5wdXNoKE0pO2Vsc2UgZm9yKE09bmV3IFVpbnQ4QXJyYXkoTSksai5wdXNoKE0pLEM9MDtDPHQ7QysrKWlmKGwmJmlbV11bQ10pTVtDXT0wO2Vsc2V7aWYoQz49RiYmQzxEJiZXPj1MKWZvcih6PXo8PDEmeSxkPTA7ZDxTO2QrKylQPVcreFtkXSxUPUMrX1tkXSwoUj1qW1BdW1RdKSYmKHp8PVI9QVtkXSk7ZWxzZSBmb3Ioej0wLEk9cC0xLGQ9MDtkPHA7ZCsrLEktLSkoVD1DK21bZF0pPj0wJiZUPHQmJihQPVcrZ1tkXSk+PTAmJihSPWpbUF1bVF0pJiYoenw9Ujw8SSk7dmFyIEg9Qi5yZWFkQml0KFUseik7TVtDXT1IfXJldHVybiBqfWZ1bmN0aW9uIHAoZSx0LHIsbixhLGkscyxsLGMpe3ZhciBmPXVbcl0uY29kaW5nOzA9PT1yJiYoZj1mLmNvbmNhdChbbFswXV0pKTt2YXIgZCxwPWYubGVuZ3RoLG09bmV3IEludDMyQXJyYXkocCksZz1uZXcgSW50MzJBcnJheShwKTtmb3IoZD0wO2Q8cDtkKyspbVtkXT1mW2RdLngsZ1tkXT1mW2RdLnk7dmFyIHY9dVtyXS5yZWZlcmVuY2U7MD09PXImJih2PXYuY29uY2F0KFtsWzFdXSkpO3ZhciB5PXYubGVuZ3RoLGI9bmV3IEludDMyQXJyYXkoeSksdz1uZXcgSW50MzJBcnJheSh5KTtmb3IoZD0wO2Q8eTtkKyspYltkXT12W2RdLngsd1tkXT12W2RdLnk7Zm9yKHZhciBrPW5bMF0ubGVuZ3RoLFM9bi5sZW5ndGgsXz1oW3JdLHg9W10sQT1jLmRlY29kZXIsQz1jLmNvbnRleHRDYWNoZS5nZXRDb250ZXh0cygiR1IiKSxQPTAsRT0wO0U8dDtFKyspe2lmKHMmJihQXj1BLnJlYWRCaXQoQyxfKSkpdGhyb3cgbmV3IG8oInByZWRpY3Rpb24gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBUPW5ldyBVaW50OEFycmF5KGUpO3gucHVzaChUKTtmb3IodmFyIFI9MDtSPGU7UisrKXt2YXIgTyxJLEY9MDtmb3IoZD0wO2Q8cDtkKyspTz1FK2dbZF0sST1SK21bZF0sTzwwfHxJPDB8fEk+PWU/Rjw8PTE6Rj1GPDwxfHhbT11bSV07Zm9yKGQ9MDtkPHk7ZCsrKU89RSt3W2RdLWksST1SK2JbZF0tYSxPPDB8fE8+PVN8fEk8MHx8ST49az9GPDw9MTpGPUY8PDF8bltPXVtJXTt2YXIgTD1BLnJlYWRCaXQoQyxGKTtUW1JdPUx9fXJldHVybiB4fWZ1bmN0aW9uIG0oZSx0LG4sYSxpLGwsYyx1LGYsaCxkLG0sZyx2LHksYix3LGssUyl7aWYoZSYmdCl0aHJvdyBuZXcgbygicmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBfLHgsQT1bXTtmb3IoXz0wO188YTtfKyspe2lmKHg9bmV3IFVpbnQ4QXJyYXkobiksaSlmb3IodmFyIEM9MDtDPG47QysrKXhbQ109aTtBLnB1c2goeCl9dmFyIFA9dy5kZWNvZGVyLEU9dy5jb250ZXh0Q2FjaGUsVD1lPy12LnRhYmxlRGVsdGFULmRlY29kZShTKTotcihFLCJJQURUIixQKSxSPTA7Zm9yKF89MDtfPGw7KXtUKz1lP3YudGFibGVEZWx0YVQuZGVjb2RlKFMpOnIoRSwiSUFEVCIsUCk7Zm9yKHZhciBPPVIrPWU/di50YWJsZUZpcnN0Uy5kZWNvZGUoUyk6cihFLCJJQUZTIixQKTs7KXt2YXIgST0wO2M+MSYmKEk9ZT9TLnJlYWRCaXRzKGspOnIoRSwiSUFJVCIsUCkpO3ZhciBGPWMqVCtJLEw9ZT92LnN5bWJvbElEVGFibGUuZGVjb2RlKFMpOnMoRSxQLGYpLEQ9dCYmKGU/Uy5yZWFkQml0KCk6cihFLCJJQVJJIixQKSksTj11W0xdLE09TlswXS5sZW5ndGgsaj1OLmxlbmd0aDtpZihEKXt2YXIgQj1yKEUsIklBUkRXIixQKSxVPXIoRSwiSUFSREgiLFApO049cChNKz1CLGorPVUseSxOLChCPj4xKStyKEUsIklBUkRYIixQKSwoVT4+MSkrcihFLCJJQVJEWSIsUCksITEsYix3KX12YXIgcSx6LFcsSD1GLSgxJm0/MDpqLTEpLEc9Ty0oMiZtP00tMTowKTtpZihoKXtmb3IocT0wO3E8ajtxKyspaWYoeD1BW0crcV0pe1c9TltxXTt2YXIgVj1NYXRoLm1pbihuLUgsTSk7c3dpdGNoKGcpe2Nhc2UgMDpmb3Ioej0wO3o8Vjt6KyspeFtIK3pdfD1XW3pdO2JyZWFrO2Nhc2UgMjpmb3Ioej0wO3o8Vjt6KyspeFtIK3pdXj1XW3pdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oIm9wZXJhdG9yICIuY29uY2F0KGcsIiBpcyBub3Qgc3VwcG9ydGVkIikpfX1PKz1qLTF9ZWxzZXtmb3Ioej0wO3o8ajt6KyspaWYoeD1BW0grel0pc3dpdGNoKFc9Tlt6XSxnKXtjYXNlIDA6Zm9yKHE9MDtxPE07cSsrKXhbRytxXXw9V1txXTticmVhaztjYXNlIDI6Zm9yKHE9MDtxPE07cSsrKXhbRytxXV49V1txXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJvcGVyYXRvciAiLmNvbmNhdChnLCIgaXMgbm90IHN1cHBvcnRlZCIpKX1PKz1NLTF9XysrO3ZhciBYPWU/di50YWJsZURlbHRhUy5kZWNvZGUoUyk6cihFLCJJQURTIixQKTtpZihudWxsPT09WClicmVhaztPKz1YK2R9fXJldHVybiBBfWZ1bmN0aW9uIGcoZSx0KXt2YXIgcj17fTtyLm51bWJlcj0oMCxuLnJlYWRVaW50MzIpKGUsdCk7dmFyIGE9ZVt0KzRdLGk9NjMmYTtpZighbFtpXSl0aHJvdyBuZXcgbygiaW52YWxpZCBzZWdtZW50IHR5cGU6ICIraSk7ci50eXBlPWksci50eXBlTmFtZT1sW2ldLHIuZGVmZXJyZWROb25SZXRhaW49ISEoMTI4JmEpO3ZhciBzPSEhKDY0JmEpLGM9ZVt0KzVdLHU9Yz4+NSY3LGY9WzMxJmNdLGg9dCs2O2lmKDc9PT1jKXt1PTUzNjg3MDkxMSYoMCxuLnJlYWRVaW50MzIpKGUsaC0xKSxoKz0zO3ZhciBkPXUrNz4+Mztmb3IoZlswXT1lW2grK107LS1kPjA7KWYucHVzaChlW2grK10pfWVsc2UgaWYoNT09PWN8fDY9PT1jKXRocm93IG5ldyBvKCJpbnZhbGlkIHJlZmVycmVkLXRvIGZsYWdzIik7ci5yZXRhaW5CaXRzPWY7dmFyIHAsbSxnPXIubnVtYmVyPD0yNTY/MTpyLm51bWJlcjw9NjU1MzY/Mjo0LHY9W107Zm9yKHA9MDtwPHU7cCsrKXt2YXIgdz0xPT09Zz9lW2hdOjI9PT1nPygwLG4ucmVhZFVpbnQxNikoZSxoKTooMCxuLnJlYWRVaW50MzIpKGUsaCk7di5wdXNoKHcpLGgrPWd9aWYoci5yZWZlcnJlZFRvPXYscz8oci5wYWdlQXNzb2NpYXRpb249KDAsbi5yZWFkVWludDMyKShlLGgpLGgrPTQpOnIucGFnZUFzc29jaWF0aW9uPWVbaCsrXSxyLmxlbmd0aD0oMCxuLnJlYWRVaW50MzIpKGUsaCksaCs9NCw0Mjk0OTY3Mjk1PT09ci5sZW5ndGgpe2lmKDM4IT09aSl0aHJvdyBuZXcgbygiaW52YWxpZCB1bmtub3duIHNlZ21lbnQgbGVuZ3RoIik7dmFyIGs9eShlLGgpLFM9ISEoMSZlW2grYl0pLF89bmV3IFVpbnQ4QXJyYXkoNik7Zm9yKFN8fChfWzBdPTI1NSxfWzFdPTE3MiksX1syXT1rLmhlaWdodD4+PjI0JjI1NSxfWzNdPWsuaGVpZ2h0Pj4xNiYyNTUsX1s0XT1rLmhlaWdodD4+OCYyNTUsX1s1XT0yNTUmay5oZWlnaHQscD1oLG09ZS5sZW5ndGg7cDxtO3ArKyl7Zm9yKHZhciB4PTA7eDw2JiZfW3hdPT09ZVtwK3hdOyl4Kys7aWYoNj09PXgpe3IubGVuZ3RoPXArNjticmVha319aWYoNDI5NDk2NzI5NT09PXIubGVuZ3RoKXRocm93IG5ldyBvKCJzZWdtZW50IGVuZCB3YXMgbm90IGZvdW5kIil9cmV0dXJuIHIuaGVhZGVyRW5kPWgscn1mdW5jdGlvbiB2KGUsdCxyLG4pe2Zvcih2YXIgYT1bXSxpPXI7aTxuOyl7dmFyIG89Zyh0LGkpO2k9by5oZWFkZXJFbmQ7dmFyIHM9e2hlYWRlcjpvLGRhdGE6dH07aWYoZS5yYW5kb21BY2Nlc3N8fChzLnN0YXJ0PWksaSs9by5sZW5ndGgscy5lbmQ9aSksYS5wdXNoKHMpLDUxPT09by50eXBlKWJyZWFrfWlmKGUucmFuZG9tQWNjZXNzKWZvcih2YXIgbD0wLGM9YS5sZW5ndGg7bDxjO2wrKylhW2xdLnN0YXJ0PWksaSs9YVtsXS5oZWFkZXIubGVuZ3RoLGFbbF0uZW5kPWk7cmV0dXJuIGF9ZnVuY3Rpb24geShlLHQpe3JldHVybnt3aWR0aDooMCxuLnJlYWRVaW50MzIpKGUsdCksaGVpZ2h0OigwLG4ucmVhZFVpbnQzMikoZSx0KzQpLHg6KDAsbi5yZWFkVWludDMyKShlLHQrOCkseTooMCxuLnJlYWRVaW50MzIpKGUsdCsxMiksY29tYmluYXRpb25PcGVyYXRvcjo3JmVbdCsxNl19fXZhciBiPTE3O2Z1bmN0aW9uIHcoZSx0KXt2YXIgcixhLGkscyxsPWUuaGVhZGVyLGM9ZS5kYXRhLHU9ZS5zdGFydCxmPWUuZW5kO3N3aXRjaChsLnR5cGUpe2Nhc2UgMDp2YXIgaD17fSxkPSgwLG4ucmVhZFVpbnQxNikoYyx1KTtpZihoLmh1ZmZtYW49ISEoMSZkKSxoLnJlZmluZW1lbnQ9ISEoMiZkKSxoLmh1ZmZtYW5ESFNlbGVjdG9yPWQ+PjImMyxoLmh1ZmZtYW5EV1NlbGVjdG9yPWQ+PjQmMyxoLmJpdG1hcFNpemVTZWxlY3Rvcj1kPj42JjEsaC5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yPWQ+PjcmMSxoLmJpdG1hcENvZGluZ0NvbnRleHRVc2VkPSEhKDI1NiZkKSxoLmJpdG1hcENvZGluZ0NvbnRleHRSZXRhaW5lZD0hISg1MTImZCksaC50ZW1wbGF0ZT1kPj4xMCYzLGgucmVmaW5lbWVudFRlbXBsYXRlPWQ+PjEyJjEsdSs9MiwhaC5odWZmbWFuKXtmb3Iocz0wPT09aC50ZW1wbGF0ZT80OjEsYT1bXSxpPTA7aTxzO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7aC5hdD1hfWlmKGgucmVmaW5lbWVudCYmIWgucmVmaW5lbWVudFRlbXBsYXRlKXtmb3IoYT1bXSxpPTA7aTwyO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7aC5yZWZpbmVtZW50QXQ9YX1oLm51bWJlck9mRXhwb3J0ZWRTeW1ib2xzPSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LGgubnVtYmVyT2ZOZXdTeW1ib2xzPSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LHI9W2gsbC5udW1iZXIsbC5yZWZlcnJlZFRvLGMsdSxmXTticmVhaztjYXNlIDY6Y2FzZSA3OnZhciBwPXt9O3AuaW5mbz15KGMsdSksdSs9Yjt2YXIgbT0oMCxuLnJlYWRVaW50MTYpKGMsdSk7aWYodSs9MixwLmh1ZmZtYW49ISEoMSZtKSxwLnJlZmluZW1lbnQ9ISEoMiZtKSxwLmxvZ1N0cmlwU2l6ZT1tPj4yJjMscC5zdHJpcFNpemU9MTw8cC5sb2dTdHJpcFNpemUscC5yZWZlcmVuY2VDb3JuZXI9bT4+NCYzLHAudHJhbnNwb3NlZD0hISg2NCZtKSxwLmNvbWJpbmF0aW9uT3BlcmF0b3I9bT4+NyYzLHAuZGVmYXVsdFBpeGVsVmFsdWU9bT4+OSYxLHAuZHNPZmZzZXQ9bTw8MTc+PjI3LHAucmVmaW5lbWVudFRlbXBsYXRlPW0+PjE1JjEscC5odWZmbWFuKXt2YXIgZz0oMCxuLnJlYWRVaW50MTYpKGMsdSk7dSs9MixwLmh1ZmZtYW5GUz0zJmcscC5odWZmbWFuRFM9Zz4+MiYzLHAuaHVmZm1hbkRUPWc+PjQmMyxwLmh1ZmZtYW5SZWZpbmVtZW50RFc9Zz4+NiYzLHAuaHVmZm1hblJlZmluZW1lbnRESD1nPj44JjMscC5odWZmbWFuUmVmaW5lbWVudERYPWc+PjEwJjMscC5odWZmbWFuUmVmaW5lbWVudERZPWc+PjEyJjMscC5odWZmbWFuUmVmaW5lbWVudFNpemVTZWxlY3Rvcj0hISgxNjM4NCZnKX1pZihwLnJlZmluZW1lbnQmJiFwLnJlZmluZW1lbnRUZW1wbGF0ZSl7Zm9yKGE9W10saT0wO2k8MjtpKyspYS5wdXNoKHt4OigwLG4ucmVhZEludDgpKGMsdSkseTooMCxuLnJlYWRJbnQ4KShjLHUrMSl9KSx1Kz0yO3AucmVmaW5lbWVudEF0PWF9cC5udW1iZXJPZlN5bWJvbEluc3RhbmNlcz0oMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxyPVtwLGwucmVmZXJyZWRUbyxjLHUsZl07YnJlYWs7Y2FzZSAxNjp2YXIgdj17fSx3PWNbdSsrXTt2Lm1tcj0hISgxJncpLHYudGVtcGxhdGU9dz4+MSYzLHYucGF0dGVybldpZHRoPWNbdSsrXSx2LnBhdHRlcm5IZWlnaHQ9Y1t1KytdLHYubWF4UGF0dGVybkluZGV4PSgwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LHI9W3YsbC5udW1iZXIsYyx1LGZdO2JyZWFrO2Nhc2UgMjI6Y2FzZSAyMzp2YXIgaz17fTtrLmluZm89eShjLHUpLHUrPWI7dmFyIFM9Y1t1KytdO2subW1yPSEhKDEmUyksay50ZW1wbGF0ZT1TPj4xJjMsay5lbmFibGVTa2lwPSEhKDgmUyksay5jb21iaW5hdGlvbk9wZXJhdG9yPVM+PjQmNyxrLmRlZmF1bHRQaXhlbFZhbHVlPVM+PjcmMSxrLmdyaWRXaWR0aD0oMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxrLmdyaWRIZWlnaHQ9KDAsbi5yZWFkVWludDMyKShjLHUpLHUrPTQsay5ncmlkT2Zmc2V0WD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikoYyx1KSx1Kz00LGsuZ3JpZE9mZnNldFk9NDI5NDk2NzI5NSYoMCxuLnJlYWRVaW50MzIpKGMsdSksdSs9NCxrLmdyaWRWZWN0b3JYPSgwLG4ucmVhZFVpbnQxNikoYyx1KSx1Kz0yLGsuZ3JpZFZlY3Rvclk9KDAsbi5yZWFkVWludDE2KShjLHUpLHUrPTIscj1bayxsLnJlZmVycmVkVG8sYyx1LGZdO2JyZWFrO2Nhc2UgMzg6Y2FzZSAzOTp2YXIgXz17fTtfLmluZm89eShjLHUpLHUrPWI7dmFyIHg9Y1t1KytdO2lmKF8ubW1yPSEhKDEmeCksXy50ZW1wbGF0ZT14Pj4xJjMsXy5wcmVkaWN0aW9uPSEhKDgmeCksIV8ubW1yKXtmb3Iocz0wPT09Xy50ZW1wbGF0ZT80OjEsYT1bXSxpPTA7aTxzO2krKylhLnB1c2goe3g6KDAsbi5yZWFkSW50OCkoYyx1KSx5OigwLG4ucmVhZEludDgpKGMsdSsxKX0pLHUrPTI7Xy5hdD1hfXI9W18sYyx1LGZdO2JyZWFrO2Nhc2UgNDg6dmFyIEE9e3dpZHRoOigwLG4ucmVhZFVpbnQzMikoYyx1KSxoZWlnaHQ6KDAsbi5yZWFkVWludDMyKShjLHUrNCkscmVzb2x1dGlvblg6KDAsbi5yZWFkVWludDMyKShjLHUrOCkscmVzb2x1dGlvblk6KDAsbi5yZWFkVWludDMyKShjLHUrMTIpfTs0Mjk0OTY3Mjk1PT09QS5oZWlnaHQmJmRlbGV0ZSBBLmhlaWdodDt2YXIgQz1jW3UrMTZdOygwLG4ucmVhZFVpbnQxNikoYyx1KzE3KSxBLmxvc3NsZXNzPSEhKDEmQyksQS5yZWZpbmVtZW50PSEhKDImQyksQS5kZWZhdWx0UGl4ZWxWYWx1ZT1DPj4yJjEsQS5jb21iaW5hdGlvbk9wZXJhdG9yPUM+PjMmMyxBLnJlcXVpcmVzQnVmZmVyPSEhKDMyJkMpLEEuY29tYmluYXRpb25PcGVyYXRvck92ZXJyaWRlPSEhKDY0JkMpLHI9W0FdO2JyZWFrO2Nhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmJyZWFrO2Nhc2UgNTM6cj1bbC5udW1iZXIsYyx1LGZdO2JyZWFrO2Nhc2UgNjI6YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygic2VnbWVudCB0eXBlICIuY29uY2F0KGwudHlwZU5hbWUsIigiKS5jb25jYXQobC50eXBlLCIpIikrIiBpcyBub3QgaW1wbGVtZW50ZWQiKX12YXIgUD0ib24iK2wudHlwZU5hbWU7UCBpbiB0JiZ0W1BdLmFwcGx5KHQscil9ZnVuY3Rpb24gayhlLHQpe2Zvcih2YXIgcj0wLG49ZS5sZW5ndGg7cjxuO3IrKyl3KGVbcl0sdCl9ZnVuY3Rpb24gUygpe31mdW5jdGlvbiBfKGUpezI9PT1lLmxlbmd0aD8odGhpcy5pc09PQj0hMCx0aGlzLnJhbmdlTG93PTAsdGhpcy5wcmVmaXhMZW5ndGg9ZVswXSx0aGlzLnJhbmdlTGVuZ3RoPTAsdGhpcy5wcmVmaXhDb2RlPWVbMV0sdGhpcy5pc0xvd2VyUmFuZ2U9ITEpOih0aGlzLmlzT09CPSExLHRoaXMucmFuZ2VMb3c9ZVswXSx0aGlzLnByZWZpeExlbmd0aD1lWzFdLHRoaXMucmFuZ2VMZW5ndGg9ZVsyXSx0aGlzLnByZWZpeENvZGU9ZVszXSx0aGlzLmlzTG93ZXJSYW5nZT0ibG93ZXIiPT09ZVs0XSl9ZnVuY3Rpb24geChlKXt0aGlzLmNoaWxkcmVuPVtdLGU/KHRoaXMuaXNMZWFmPSEwLHRoaXMucmFuZ2VMZW5ndGg9ZS5yYW5nZUxlbmd0aCx0aGlzLnJhbmdlTG93PWUucmFuZ2VMb3csdGhpcy5pc0xvd2VyUmFuZ2U9ZS5pc0xvd2VyUmFuZ2UsdGhpcy5pc09PQj1lLmlzT09CKTp0aGlzLmlzTGVhZj0hMX1mdW5jdGlvbiBBKGUsdCl7dHx8dGhpcy5hc3NpZ25QcmVmaXhDb2RlcyhlKSx0aGlzLnJvb3ROb2RlPW5ldyB4KG51bGwpO3ZhciByLG4sYT1lLmxlbmd0aDtmb3Iocj0wO3I8YTtyKyspKG49ZVtyXSkucHJlZml4TGVuZ3RoPjAmJnRoaXMucm9vdE5vZGUuYnVpbGRUcmVlKG4sbi5wcmVmaXhMZW5ndGgtMSl9Uy5wcm90b3R5cGU9e29uUGFnZUluZm9ybWF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMuY3VycmVudFBhZ2VJbmZvPWU7dmFyIHQ9ZS53aWR0aCs3Pj4zLHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqZS5oZWlnaHQpO2lmKGUuZGVmYXVsdFBpeGVsVmFsdWUpZm9yKHZhciBuPTAsYT1yLmxlbmd0aDtuPGE7bisrKXJbbl09MjU1O3RoaXMuYnVmZmVyPXJ9LGRyYXdCaXRtYXA6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxzPXRoaXMuY3VycmVudFBhZ2VJbmZvLGw9ZS53aWR0aCxjPWUuaGVpZ2h0LHU9cy53aWR0aCs3Pj4zLGY9cy5jb21iaW5hdGlvbk9wZXJhdG9yT3ZlcnJpZGU/ZS5jb21iaW5hdGlvbk9wZXJhdG9yOnMuY29tYmluYXRpb25PcGVyYXRvcixoPXRoaXMuYnVmZmVyLGQ9MTI4Pj4oNyZlLngpLHA9ZS55KnUrKGUueD4+Myk7c3dpdGNoKGYpe2Nhc2UgMDpmb3Iocj0wO3I8YztyKyspe2ZvcihhPWQsaT1wLG49MDtuPGw7bisrKXRbcl1bbl0mJihoW2ldfD1hKSwoYT4+PTEpfHwoYT0xMjgsaSsrKTtwKz11fWJyZWFrO2Nhc2UgMjpmb3Iocj0wO3I8YztyKyspe2ZvcihhPWQsaT1wLG49MDtuPGw7bisrKXRbcl1bbl0mJihoW2ldXj1hKSwoYT4+PTEpfHwoYT0xMjgsaSsrKTtwKz11fWJyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oIm9wZXJhdG9yICIuY29uY2F0KGYsIiBpcyBub3Qgc3VwcG9ydGVkIikpfX0sb25JbW1lZGlhdGVHZW5lcmljUmVnaW9uOmZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPWUuaW5mbyxvPW5ldyB0KHIsbixhKSxzPWQoZS5tbXIsaS53aWR0aCxpLmhlaWdodCxlLnRlbXBsYXRlLGUucHJlZGljdGlvbixudWxsLGUuYXQsbyk7dGhpcy5kcmF3Qml0bWFwKGkscyl9LG9uSW1tZWRpYXRlTG9zc2xlc3NHZW5lcmljUmVnaW9uOmZ1bmN0aW9uKCl7dGhpcy5vbkltbWVkaWF0ZUdlbmVyaWNSZWdpb24uYXBwbHkodGhpcyxhcmd1bWVudHMpfSxvblN5bWJvbERpY3Rpb25hcnk6ZnVuY3Rpb24oZSxhLGksbCxjLHUpe3ZhciBmLGg7ZS5odWZmbWFuJiYoZj1mdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLHMsbD0wO3N3aXRjaChlLmh1ZmZtYW5ESFNlbGVjdG9yKXtjYXNlIDA6Y2FzZSAxOm49UChlLmh1ZmZtYW5ESFNlbGVjdG9yKzQpO2JyZWFrO2Nhc2UgMzpuPVQobCx0LHIpLGwrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJpbnZhbGlkIEh1ZmZtYW4gREggc2VsZWN0b3IiKX1zd2l0Y2goZS5odWZmbWFuRFdTZWxlY3Rvcil7Y2FzZSAwOmNhc2UgMTphPVAoZS5odWZmbWFuRFdTZWxlY3RvcisyKTticmVhaztjYXNlIDM6YT1UKGwsdCxyKSxsKys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIERXIHNlbGVjdG9yIil9cmV0dXJuIGUuYml0bWFwU2l6ZVNlbGVjdG9yPyhpPVQobCx0LHIpLGwrKyk6aT1QKDEpLHM9ZS5hZ2dyZWdhdGlvbkluc3RhbmNlc1NlbGVjdG9yP1QobCx0LHIpOlAoMSkse3RhYmxlRGVsdGFIZWlnaHQ6bix0YWJsZURlbHRhV2lkdGg6YSx0YWJsZUJpdG1hcFNpemU6aSx0YWJsZUFnZ3JlZ2F0ZUluc3RhbmNlczpzfX0oZSxpLHRoaXMuY3VzdG9tVGFibGVzKSxoPW5ldyBFKGwsYyx1KSk7dmFyIGc9dGhpcy5zeW1ib2xzO2d8fCh0aGlzLnN5bWJvbHM9Zz17fSk7Zm9yKHZhciB2PVtdLHk9MCxiPWkubGVuZ3RoO3k8Yjt5Kyspe3ZhciB3PWdbaVt5XV07dyYmKHY9di5jb25jYXQodykpfXZhciBrPW5ldyB0KGwsYyx1KTtnW2FdPWZ1bmN0aW9uKGUsdCxhLGksbCxjLHUsZixoLGcsdix5KXtpZihlJiZ0KXRocm93IG5ldyBvKCJzeW1ib2wgcmVmaW5lbWVudCB3aXRoIEh1ZmZtYW4gaXMgbm90IHN1cHBvcnRlZCIpO3ZhciBiLHcsaz1bXSxTPTAsXz0oMCxuLmxvZzIpKGEubGVuZ3RoK2kpLHg9di5kZWNvZGVyLEE9di5jb250ZXh0Q2FjaGU7Zm9yKGUmJihiPVAoMSksdz1bXSxfPU1hdGgubWF4KF8sMSkpO2subGVuZ3RoPGk7KXtTKz1lP2MudGFibGVEZWx0YUhlaWdodC5kZWNvZGUoeSk6cihBLCJJQURIIix4KTtmb3IodmFyIEM9MCxFPTAsVD1lP3cubGVuZ3RoOjA7Oyl7dmFyIEksRj1lP2MudGFibGVEZWx0YVdpZHRoLmRlY29kZSh5KTpyKEEsIklBRFciLHgpO2lmKG51bGw9PT1GKWJyZWFrO2lmKEUrPUMrPUYsdCl7dmFyIEw9cihBLCJJQUFJIix4KTtpZihMPjEpST1tKGUsdCxDLFMsMCxMLDEsYS5jb25jYXQoayksXywwLDAsMSwwLGMsaCxnLHYsMCx5KTtlbHNle3ZhciBEPXMoQSx4LF8pLE49cihBLCJJQVJEWCIseCksTT1yKEEsIklBUkRZIix4KTtJPXAoQyxTLGgsRDxhLmxlbmd0aD9hW0RdOmtbRC1hLmxlbmd0aF0sTixNLCExLGcsdil9ay5wdXNoKEkpfWVsc2UgZT93LnB1c2goQyk6KEk9ZCghMSxDLFMsdSwhMSxudWxsLGYsdiksay5wdXNoKEkpKX1pZihlJiYhdCl7dmFyIGo9Yy50YWJsZUJpdG1hcFNpemUuZGVjb2RlKHkpO3kuYnl0ZUFsaWduKCk7dmFyIEI9dm9pZCAwO2lmKDA9PT1qKUI9Uih5LEUsUyk7ZWxzZXt2YXIgVT15LmVuZCxxPXkucG9zaXRpb24rajt5LmVuZD1xLEI9Tyh5LEUsUywhMSkseS5lbmQ9VSx5LnBvc2l0aW9uPXF9dmFyIHo9dy5sZW5ndGg7aWYoVD09PXotMSlrLnB1c2goQik7ZWxzZXt2YXIgVz12b2lkIDAsSD12b2lkIDAsRz0wLFY9dm9pZCAwLFg9dm9pZCAwO2ZvcihXPVQ7Vzx6O1crKyl7Zm9yKFY9Ryt3W1ddLFg9W10sSD0wO0g8UztIKyspWC5wdXNoKEJbSF0uc3ViYXJyYXkoRyxWKSk7ay5wdXNoKFgpLEc9Vn19fX1mb3IodmFyIFk9W10sSz1bXSxKPSExLFE9YS5sZW5ndGgraTtLLmxlbmd0aDxROyl7Zm9yKHZhciBaPWU/Yi5kZWNvZGUoeSk6cihBLCJJQUVYIix4KTtaLS07KUsucHVzaChKKTtKPSFKfWZvcih2YXIgJD0wLGVlPWEubGVuZ3RoOyQ8ZWU7JCsrKUtbJF0mJlkucHVzaChhWyRdKTtmb3IodmFyIHRlPTA7dGU8aTskKyssdGUrKylLWyRdJiZZLnB1c2goa1t0ZV0pO3JldHVybiBZfShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHYsZS5udW1iZXJPZk5ld1N5bWJvbHMsZS5udW1iZXJPZkV4cG9ydGVkU3ltYm9scyxmLGUudGVtcGxhdGUsZS5hdCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCxrLGgpfSxvbkltbWVkaWF0ZVRleHRSZWdpb246ZnVuY3Rpb24oZSxyLGEsaSxzKXtmb3IodmFyIGwsYyx1PWUuaW5mbyxmPXRoaXMuc3ltYm9scyxoPVtdLGQ9MCxwPXIubGVuZ3RoO2Q8cDtkKyspe3ZhciBnPWZbcltkXV07ZyYmKGg9aC5jb25jYXQoZykpfXZhciB2PSgwLG4ubG9nMikoaC5sZW5ndGgpO2UuaHVmZm1hbiYmKGM9bmV3IEUoYSxpLHMpLGw9ZnVuY3Rpb24oZSx0LHIsbixhKXt2YXIgaSxzLGw9W107Zm9yKGk9MDtpPD0zNDtpKyspcz1hLnJlYWRCaXRzKDQpLGwucHVzaChuZXcgXyhbaSxzLDAsMF0pKTt2YXIgYz1uZXcgQShsLCExKTtmb3IobC5sZW5ndGg9MCxpPTA7aTxuOylpZigocz1jLmRlY29kZShhKSk+PTMyKXt2YXIgdT12b2lkIDAsZj12b2lkIDAsaD12b2lkIDA7c3dpdGNoKHMpe2Nhc2UgMzI6aWYoMD09PWkpdGhyb3cgbmV3IG8oIm5vIHByZXZpb3VzIHZhbHVlIGluIHN5bWJvbCBJRCB0YWJsZSIpO2Y9YS5yZWFkQml0cygyKSszLHU9bFtpLTFdLnByZWZpeExlbmd0aDticmVhaztjYXNlIDMzOmY9YS5yZWFkQml0cygzKSszLHU9MDticmVhaztjYXNlIDM0OmY9YS5yZWFkQml0cyg3KSsxMSx1PTA7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBjb2RlIGxlbmd0aCBpbiBzeW1ib2wgSUQgdGFibGUiKX1mb3IoaD0wO2g8ZjtoKyspbC5wdXNoKG5ldyBfKFtpLHUsMCwwXSkpLGkrK31lbHNlIGwucHVzaChuZXcgXyhbaSxzLDAsMF0pKSxpKys7YS5ieXRlQWxpZ24oKTt2YXIgZCxwLG0sZz1uZXcgQShsLCExKSx2PTA7c3dpdGNoKGUuaHVmZm1hbkZTKXtjYXNlIDA6Y2FzZSAxOmQ9UChlLmh1ZmZtYW5GUys2KTticmVhaztjYXNlIDM6ZD1UKHYsdCxyKSx2Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIEZTIHNlbGVjdG9yIil9c3dpdGNoKGUuaHVmZm1hbkRTKXtjYXNlIDA6Y2FzZSAxOmNhc2UgMjpwPVAoZS5odWZmbWFuRFMrOCk7YnJlYWs7Y2FzZSAzOnA9VCh2LHQsciksdisrO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IG8oImludmFsaWQgSHVmZm1hbiBEUyBzZWxlY3RvciIpfXN3aXRjaChlLmh1ZmZtYW5EVCl7Y2FzZSAwOmNhc2UgMTpjYXNlIDI6bT1QKGUuaHVmZm1hbkRUKzExKTticmVhaztjYXNlIDM6bT1UKHYsdCxyKSx2Kys7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbygiaW52YWxpZCBIdWZmbWFuIERUIHNlbGVjdG9yIil9aWYoZS5yZWZpbmVtZW50KXRocm93IG5ldyBvKCJyZWZpbmVtZW50IHdpdGggSHVmZm1hbiBpcyBub3Qgc3VwcG9ydGVkIik7cmV0dXJue3N5bWJvbElEVGFibGU6Zyx0YWJsZUZpcnN0UzpkLHRhYmxlRGVsdGFTOnAsdGFibGVEZWx0YVQ6bX19KGUscix0aGlzLmN1c3RvbVRhYmxlcyxoLmxlbmd0aCxjKSk7dmFyIHk9bmV3IHQoYSxpLHMpLGI9bShlLmh1ZmZtYW4sZS5yZWZpbmVtZW50LHUud2lkdGgsdS5oZWlnaHQsZS5kZWZhdWx0UGl4ZWxWYWx1ZSxlLm51bWJlck9mU3ltYm9sSW5zdGFuY2VzLGUuc3RyaXBTaXplLGgsdixlLnRyYW5zcG9zZWQsZS5kc09mZnNldCxlLnJlZmVyZW5jZUNvcm5lcixlLmNvbWJpbmF0aW9uT3BlcmF0b3IsbCxlLnJlZmluZW1lbnRUZW1wbGF0ZSxlLnJlZmluZW1lbnRBdCx5LGUubG9nU3RyaXBTaXplLGMpO3RoaXMuZHJhd0JpdG1hcCh1LGIpfSxvbkltbWVkaWF0ZUxvc3NsZXNzVGV4dFJlZ2lvbjpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVUZXh0UmVnaW9uLmFwcGx5KHRoaXMsYXJndW1lbnRzKX0sb25QYXR0ZXJuRGljdGlvbmFyeTpmdW5jdGlvbihlLHIsbixhLGkpe3ZhciBvPXRoaXMucGF0dGVybnM7b3x8KHRoaXMucGF0dGVybnM9bz17fSk7dmFyIHM9bmV3IHQobixhLGkpO29bcl09ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPVtdO2V8fChvLnB1c2goe3g6LXQseTowfSksMD09PWEmJihvLnB1c2goe3g6LTMseTotMX0pLG8ucHVzaCh7eDoyLHk6LTJ9KSxvLnB1c2goe3g6LTIseTotMn0pKSk7Zm9yKHZhciBzLGwsYyx1LGY9ZChlLChuKzEpKnQscixhLCExLG51bGwsbyxpKSxoPVtdLHA9MDtwPD1uOyl7Zm9yKHM9W10sYz0obD10KnApK3QsdT0wO3U8cjt1Kyspcy5wdXNoKGZbdV0uc3ViYXJyYXkobCxjKSk7aC5wdXNoKHMpLHArK31yZXR1cm4gaH0oZS5tbXIsZS5wYXR0ZXJuV2lkdGgsZS5wYXR0ZXJuSGVpZ2h0LGUubWF4UGF0dGVybkluZGV4LGUudGVtcGxhdGUscyl9LG9uSW1tZWRpYXRlSGFsZnRvbmVSZWdpb246ZnVuY3Rpb24oZSxyLGEsaSxzKXt2YXIgbD10aGlzLnBhdHRlcm5zW3JbMF1dLGM9ZS5pbmZvLHU9bmV3IHQoYSxpLHMpLGY9ZnVuY3Rpb24oZSx0LHIsYSxpLHMsbCxjLHUsZixoLHAsbSxnLHYpe2lmKGwpdGhyb3cgbmV3IG8oInNraXAgaXMgbm90IHN1cHBvcnRlZCIpO2lmKDAhPT1jKXRocm93IG5ldyBvKCJvcGVyYXRvciAiK2MrIiBpcyBub3Qgc3VwcG9ydGVkIGluIGhhbGZ0b25lIHJlZ2lvbiIpO3ZhciB5LGIsdyxrPVtdO2Zvcih5PTA7eTxpO3krKyl7aWYodz1uZXcgVWludDhBcnJheShhKSxzKWZvcihiPTA7YjxhO2IrKyl3W2JdPXM7ay5wdXNoKHcpfXZhciBTPXQubGVuZ3RoLF89dFswXSx4PV9bMF0ubGVuZ3RoLEE9Xy5sZW5ndGgsQz0oMCxuLmxvZzIpKFMpLFA9W107ZXx8KFAucHVzaCh7eDpyPD0xPzM6Mix5Oi0xfSksMD09PXImJihQLnB1c2goe3g6LTMseTotMX0pLFAucHVzaCh7eDoyLHk6LTJ9KSxQLnB1c2goe3g6LTIseTotMn0pKSk7dmFyIFQsUixJLEYsTCxELE4sTSxqLEIsVSxxPVtdO2ZvcihlJiYoVD1uZXcgRSh2LmRhdGEsdi5zdGFydCx2LmVuZCkpLHk9Qy0xO3k+PTA7eS0tKVI9ZT9PKFQsdSxmLCEwKTpkKCExLHUsZixyLCExLG51bGwsUCx2KSxxW3ldPVI7Zm9yKEk9MDtJPGY7SSsrKWZvcihGPTA7Rjx1O0YrKyl7Zm9yKEw9MCxEPTAsYj1DLTE7Yj49MDtiLS0pRHw9KEw9cVtiXVtJXVtGXV5MKTw8YjtpZihOPXRbRF0saj1wK0kqbS1GKmc+PjgsKE09aCtJKmcrRiptPj44KT49MCYmTSt4PD1hJiZqPj0wJiZqK0E8PWkpZm9yKHk9MDt5PEE7eSsrKWZvcihVPWtbait5XSxCPU5beV0sYj0wO2I8eDtiKyspVVtNK2JdfD1CW2JdO2Vsc2V7dmFyIHo9dm9pZCAwLFc9dm9pZCAwO2Zvcih5PTA7eTxBO3krKylpZighKChXPWoreSk8MHx8Vz49aSkpZm9yKFU9a1tXXSxCPU5beV0sYj0wO2I8eDtiKyspKHo9TStiKT49MCYmejxhJiYoVVt6XXw9QltiXSl9fXJldHVybiBrfShlLm1tcixsLGUudGVtcGxhdGUsYy53aWR0aCxjLmhlaWdodCxlLmRlZmF1bHRQaXhlbFZhbHVlLGUuZW5hYmxlU2tpcCxlLmNvbWJpbmF0aW9uT3BlcmF0b3IsZS5ncmlkV2lkdGgsZS5ncmlkSGVpZ2h0LGUuZ3JpZE9mZnNldFgsZS5ncmlkT2Zmc2V0WSxlLmdyaWRWZWN0b3JYLGUuZ3JpZFZlY3RvclksdSk7dGhpcy5kcmF3Qml0bWFwKGMsZil9LG9uSW1tZWRpYXRlTG9zc2xlc3NIYWxmdG9uZVJlZ2lvbjpmdW5jdGlvbigpe3RoaXMub25JbW1lZGlhdGVIYWxmdG9uZVJlZ2lvbi5hcHBseSh0aGlzLGFyZ3VtZW50cyl9LG9uVGFibGVzOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBpPXRoaXMuY3VzdG9tVGFibGVzO2l8fCh0aGlzLmN1c3RvbVRhYmxlcz1pPXt9KSxpW2VdPWZ1bmN0aW9uKGUsdCxyKXt2YXIgYSxpLG89ZVt0XSxzPTQyOTQ5NjcyOTUmKDAsbi5yZWFkVWludDMyKShlLHQrMSksbD00Mjk0OTY3Mjk1JigwLG4ucmVhZFVpbnQzMikoZSx0KzUpLGM9bmV3IEUoZSx0KzksciksdT0xKyhvPj4xJjcpLGY9MSsobz4+NCY3KSxoPVtdLGQ9cztkb3thPWMucmVhZEJpdHModSksaT1jLnJlYWRCaXRzKGYpLGgucHVzaChuZXcgXyhbZCxhLGksMF0pKSxkKz0xPDxpfXdoaWxlKGQ8bCk7cmV0dXJuIGE9Yy5yZWFkQml0cyh1KSxoLnB1c2gobmV3IF8oW3MtMSxhLDMyLDAsImxvd2VyIl0pKSxhPWMucmVhZEJpdHModSksaC5wdXNoKG5ldyBfKFtsLGEsMzIsMF0pKSwxJm8mJihhPWMucmVhZEJpdHModSksaC5wdXNoKG5ldyBfKFthLDBdKSkpLG5ldyBBKGgsITEpfSh0LHIsYSl9fSx4LnByb3RvdHlwZT17YnVpbGRUcmVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5wcmVmaXhDb2RlPj50JjE7aWYodDw9MCl0aGlzLmNoaWxkcmVuW3JdPW5ldyB4KGUpO2Vsc2V7dmFyIG49dGhpcy5jaGlsZHJlbltyXTtufHwodGhpcy5jaGlsZHJlbltyXT1uPW5ldyB4KG51bGwpKSxuLmJ1aWxkVHJlZShlLHQtMSl9fSxkZWNvZGVOb2RlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuaXNMZWFmKXtpZih0aGlzLmlzT09CKXJldHVybiBudWxsO3ZhciB0PWUucmVhZEJpdHModGhpcy5yYW5nZUxlbmd0aCk7cmV0dXJuIHRoaXMucmFuZ2VMb3crKHRoaXMuaXNMb3dlclJhbmdlPy10OnQpfXZhciByPXRoaXMuY2hpbGRyZW5bZS5yZWFkQml0KCldO2lmKCFyKXRocm93IG5ldyBvKCJpbnZhbGlkIEh1ZmZtYW4gZGF0YSIpO3JldHVybiByLmRlY29kZU5vZGUoZSl9fSxBLnByb3RvdHlwZT17ZGVjb2RlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLnJvb3ROb2RlLmRlY29kZU5vZGUoZSl9LGFzc2lnblByZWZpeENvZGVzOmZ1bmN0aW9uKGUpe3ZhciB0LHI9ZS5sZW5ndGgsbj0wO2Zvcih0PTA7dDxyO3QrKyluPU1hdGgubWF4KG4sZVt0XS5wcmVmaXhMZW5ndGgpO3ZhciBhPW5ldyBVaW50MzJBcnJheShuKzEpO2Zvcih0PTA7dDxyO3QrKylhW2VbdF0ucHJlZml4TGVuZ3RoXSsrO3ZhciBpLG8scyxsPTEsYz0wO2ZvcihhWzBdPTA7bDw9bjspe2ZvcihpPWM9YythW2wtMV08PDEsbz0wO288cjspKHM9ZVtvXSkucHJlZml4TGVuZ3RoPT09bCYmKHMucHJlZml4Q29kZT1pLGkrKyksbysrO2wrK319fTt2YXIgQz17fTtmdW5jdGlvbiBQKGUpe3ZhciB0LHI9Q1tlXTtpZihyKXJldHVybiByO3N3aXRjaChlKXtjYXNlIDE6dD1bWzAsMSw0LDBdLFsxNiwyLDgsMl0sWzI3MiwzLDE2LDZdLFs2NTgwOCwzLDMyLDddXTticmVhaztjYXNlIDI6dD1bWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbNzUsNiwzMiw2Ml0sWzYsNjNdXTticmVhaztjYXNlIDM6dD1bWy0yNTYsOCw4LDI1NF0sWzAsMSwwLDBdLFsxLDIsMCwyXSxbMiwzLDAsNl0sWzMsNCwzLDE0XSxbMTEsNSw2LDMwXSxbLTI1Nyw4LDMyLDI1NSwibG93ZXIiXSxbNzUsNywzMiwxMjZdLFs2LDYyXV07YnJlYWs7Y2FzZSA0OnQ9W1sxLDEsMCwwXSxbMiwyLDAsMl0sWzMsMywwLDZdLFs0LDQsMywxNF0sWzEyLDUsNiwzMF0sWzc2LDUsMzIsMzFdXTticmVhaztjYXNlIDU6dD1bWy0yNTUsNyw4LDEyNl0sWzEsMSwwLDBdLFsyLDIsMCwyXSxbMywzLDAsNl0sWzQsNCwzLDE0XSxbMTIsNSw2LDMwXSxbLTI1Niw3LDMyLDEyNywibG93ZXIiXSxbNzYsNiwzMiw2Ml1dO2JyZWFrO2Nhc2UgNjp0PVtbLTIwNDgsNSwxMCwyOF0sWy0xMDI0LDQsOSw4XSxbLTUxMiw0LDgsOV0sWy0yNTYsNCw3LDEwXSxbLTEyOCw1LDYsMjldLFstNjQsNSw1LDMwXSxbLTMyLDQsNSwxMV0sWzAsMiw3LDBdLFsxMjgsMyw3LDJdLFsyNTYsMyw4LDNdLFs1MTIsNCw5LDEyXSxbMTAyNCw0LDEwLDEzXSxbLTIwNDksNiwzMiw2MiwibG93ZXIiXSxbMjA0OCw2LDMyLDYzXV07YnJlYWs7Y2FzZSA3OnQ9W1stMTAyNCw0LDksOF0sWy01MTIsMyw4LDBdLFstMjU2LDQsNyw5XSxbLTEyOCw1LDYsMjZdLFstNjQsNSw1LDI3XSxbLTMyLDQsNSwxMF0sWzAsNCw1LDExXSxbMzIsNSw1LDI4XSxbNjQsNSw2LDI5XSxbMTI4LDQsNywxMl0sWzI1NiwzLDgsMV0sWzUxMiwzLDksMl0sWzEwMjQsMywxMCwzXSxbLTEwMjUsNSwzMiwzMCwibG93ZXIiXSxbMjA0OCw1LDMyLDMxXV07YnJlYWs7Y2FzZSA4OnQ9W1stMTUsOCwzLDI1Ml0sWy03LDksMSw1MDhdLFstNSw4LDEsMjUzXSxbLTMsOSwwLDUwOV0sWy0yLDcsMCwxMjRdLFstMSw0LDAsMTBdLFswLDIsMSwwXSxbMiw1LDAsMjZdLFszLDYsMCw1OF0sWzQsMyw0LDRdLFsyMCw2LDEsNTldLFsyMiw0LDQsMTFdLFszOCw0LDUsMTJdLFs3MCw1LDYsMjddLFsxMzQsNSw3LDI4XSxbMjYyLDYsNyw2MF0sWzM5MCw3LDgsMTI1XSxbNjQ2LDYsMTAsNjFdLFstMTYsOSwzMiw1MTAsImxvd2VyIl0sWzE2NzAsOSwzMiw1MTFdLFsyLDFdXTticmVhaztjYXNlIDk6dD1bWy0zMSw4LDQsMjUyXSxbLTE1LDksMiw1MDhdLFstMTEsOCwyLDI1M10sWy03LDksMSw1MDldLFstNSw3LDEsMTI0XSxbLTMsNCwxLDEwXSxbLTEsMywxLDJdLFsxLDMsMSwzXSxbMyw1LDEsMjZdLFs1LDYsMSw1OF0sWzcsMyw1LDRdLFszOSw2LDIsNTldLFs0Myw0LDUsMTFdLFs3NSw0LDYsMTJdLFsxMzksNSw3LDI3XSxbMjY3LDUsOCwyOF0sWzUyMyw2LDgsNjBdLFs3NzksNyw5LDEyNV0sWzEyOTEsNiwxMSw2MV0sWy0zMiw5LDMyLDUxMCwibG93ZXIiXSxbMzMzOSw5LDMyLDUxMV0sWzIsMF1dO2JyZWFrO2Nhc2UgMTA6dD1bWy0yMSw3LDQsMTIyXSxbLTUsOCwwLDI1Ml0sWy00LDcsMCwxMjNdLFstMyw1LDAsMjRdLFstMiwyLDIsMF0sWzIsNSwwLDI1XSxbMyw2LDAsNTRdLFs0LDcsMCwxMjRdLFs1LDgsMCwyNTNdLFs2LDIsNiwxXSxbNzAsNSw1LDI2XSxbMTAyLDYsNSw1NV0sWzEzNCw2LDYsNTZdLFsxOTgsNiw3LDU3XSxbMzI2LDYsOCw1OF0sWzU4Miw2LDksNTldLFsxMDk0LDYsMTAsNjBdLFsyMTE4LDcsMTEsMTI1XSxbLTIyLDgsMzIsMjU0LCJsb3dlciJdLFs0MTY2LDgsMzIsMjU1XSxbMiwyXV07YnJlYWs7Y2FzZSAxMTp0PVtbMSwxLDAsMF0sWzIsMiwxLDJdLFs0LDQsMCwxMl0sWzUsNCwxLDEzXSxbNyw1LDEsMjhdLFs5LDUsMiwyOV0sWzEzLDYsMiw2MF0sWzE3LDcsMiwxMjJdLFsyMSw3LDMsMTIzXSxbMjksNyw0LDEyNF0sWzQ1LDcsNSwxMjVdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxMjp0PVtbMSwxLDAsMF0sWzIsMiwwLDJdLFszLDMsMSw2XSxbNSw1LDAsMjhdLFs2LDUsMSwyOV0sWzgsNiwxLDYwXSxbMTAsNywwLDEyMl0sWzExLDcsMSwxMjNdLFsxMyw3LDIsMTI0XSxbMTcsNywzLDEyNV0sWzI1LDcsNCwxMjZdLFs0MSw4LDUsMjU0XSxbNzMsOCwzMiwyNTVdXTticmVhaztjYXNlIDEzOnQ9W1sxLDEsMCwwXSxbMiwzLDAsNF0sWzMsNCwwLDEyXSxbNCw1LDAsMjhdLFs1LDQsMSwxM10sWzcsMywzLDVdLFsxNSw2LDEsNThdLFsxNyw2LDIsNTldLFsyMSw2LDMsNjBdLFsyOSw2LDQsNjFdLFs0NSw2LDUsNjJdLFs3Nyw3LDYsMTI2XSxbMTQxLDcsMzIsMTI3XV07YnJlYWs7Y2FzZSAxNDp0PVtbLTIsMywwLDRdLFstMSwzLDAsNV0sWzAsMSwwLDBdLFsxLDMsMCw2XSxbMiwzLDAsN11dO2JyZWFrO2Nhc2UgMTU6dD1bWy0yNCw3LDQsMTI0XSxbLTgsNiwyLDYwXSxbLTQsNSwxLDI4XSxbLTIsNCwwLDEyXSxbLTEsMywwLDRdLFswLDEsMCwwXSxbMSwzLDAsNV0sWzIsNCwwLDEzXSxbMyw1LDEsMjldLFs1LDYsMiw2MV0sWzksNyw0LDEyNV0sWy0yNSw3LDMyLDEyNiwibG93ZXIiXSxbMjUsNywzMiwxMjddXTticmVhaztkZWZhdWx0OnRocm93IG5ldyBvKCJzdGFuZGFyZCB0YWJsZSBCLiIuY29uY2F0KGUsIiBkb2VzIG5vdCBleGlzdCIpKX12YXIgbixhPXQubGVuZ3RoO2ZvcihuPTA7bjxhO24rKyl0W25dPW5ldyBfKHRbbl0pO3JldHVybiByPW5ldyBBKHQsITApLENbZV09cixyfWZ1bmN0aW9uIEUoZSx0LHIpe3RoaXMuZGF0YT1lLHRoaXMuc3RhcnQ9dCx0aGlzLmVuZD1yLHRoaXMucG9zaXRpb249dCx0aGlzLnNoaWZ0PS0xLHRoaXMuY3VycmVudEJ5dGU9MH1mdW5jdGlvbiBUKGUsdCxyKXt2YXIgbixhLGk9MCxzPXQubGVuZ3RoO2ZvcihuPTA7bjxzO24rKylpZihhPXJbdFtuXV0pe2lmKGU9PT1pKXJldHVybiBhO2krK310aHJvdyBuZXcgbygiY2FuJ3QgZmluZCBjdXN0b20gSHVmZm1hbiB0YWJsZSIpfWZ1bmN0aW9uIFIoZSx0LHIpe3ZhciBuLGEsaSxvPVtdO2ZvcihhPTA7YTxyO2ErKyl7Zm9yKGk9bmV3IFVpbnQ4QXJyYXkodCksby5wdXNoKGkpLG49MDtuPHQ7bisrKWlbbl09ZS5yZWFkQml0KCk7ZS5ieXRlQWxpZ24oKX1yZXR1cm4gb31mdW5jdGlvbiBPKGUsdCxyLG4pe3ZhciBhLG8scyxsLGMsdT17SzotMSxDb2x1bW5zOnQsUm93czpyLEJsYWNrSXMxOiEwLEVuZE9mQmxvY2s6bn0sZj1uZXcgaS5DQ0lUVEZheERlY29kZXIoZSx1KSxoPVtdLGQ9ITE7Zm9yKG89MDtvPHI7bysrKWZvcihzPW5ldyBVaW50OEFycmF5KHQpLGgucHVzaChzKSxjPS0xLGE9MDthPHQ7YSsrKWM8MCYmKC0xPT09KGw9Zi5yZWFkTmV4dENoYXIoKSkmJihsPTAsZD0hMCksYz03KSxzW2FdPWw+PmMmMSxjLS07aWYobiYmIWQpZm9yKHZhciBwPTA7cDw1JiYtMSE9PWYucmVhZE5leHRDaGFyKCk7cCsrKTtyZXR1cm4gaH1mdW5jdGlvbiBJKCl7fXJldHVybiBFLnByb3RvdHlwZT17cmVhZEJpdDpmdW5jdGlvbigpe2lmKHRoaXMuc2hpZnQ8MCl7aWYodGhpcy5wb3NpdGlvbj49dGhpcy5lbmQpdGhyb3cgbmV3IG8oImVuZCBvZiBkYXRhIHdoaWxlIHJlYWRpbmcgYml0Iik7dGhpcy5jdXJyZW50Qnl0ZT10aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXSx0aGlzLnNoaWZ0PTd9dmFyIGU9dGhpcy5jdXJyZW50Qnl0ZT4+dGhpcy5zaGlmdCYxO3JldHVybiB0aGlzLnNoaWZ0LS0sZX0scmVhZEJpdHM6ZnVuY3Rpb24oZSl7dmFyIHQscj0wO2Zvcih0PWUtMTt0Pj0wO3QtLSlyfD10aGlzLnJlYWRCaXQoKTw8dDtyZXR1cm4gcn0sYnl0ZUFsaWduOmZ1bmN0aW9uKCl7dGhpcy5zaGlmdD0tMX0sbmV4dDpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBvc2l0aW9uPj10aGlzLmVuZD8tMTp0aGlzLmRhdGFbdGhpcy5wb3NpdGlvbisrXX19LEkucHJvdG90eXBlPXtwYXJzZUNodW5rczpmdW5jdGlvbihlKXtyZXR1cm4gZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBTLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspe3ZhciBhPWVbcl07ayh2KHt9LGEuZGF0YSxhLnN0YXJ0LGEuZW5kKSx0KX1yZXR1cm4gdC5idWZmZXJ9KGUpfSxwYXJzZTpmdW5jdGlvbihlKXt2YXIgdD1mdW5jdGlvbihlKXt2YXIgdD0wLHI9ZS5sZW5ndGg7aWYoMTUxIT09ZVt0XXx8NzQhPT1lW3QrMV18fDY2IT09ZVt0KzJdfHw1MCE9PWVbdCszXXx8MTMhPT1lW3QrNF18fDEwIT09ZVt0KzVdfHwyNiE9PWVbdCs2XXx8MTAhPT1lW3QrN10pdGhyb3cgbmV3IG8oInBhcnNlSmJpZzIgLSBpbnZhbGlkIGhlYWRlci4iKTt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpO3QrPTg7dmFyIGk9ZVt0KytdO2EucmFuZG9tQWNjZXNzPSEoMSZpKSwyJml8fChhLm51bWJlck9mUGFnZXM9KDAsbi5yZWFkVWludDMyKShlLHQpLHQrPTQpO3ZhciBzPXYoYSxlLHQsciksbD1uZXcgUztrKHMsbCk7Zm9yKHZhciBjPWwuY3VycmVudFBhZ2VJbmZvLHU9Yy53aWR0aCxmPWMuaGVpZ2h0LGg9bC5idWZmZXIsZD1uZXcgVWludDhDbGFtcGVkQXJyYXkodSpmKSxwPTAsbT0wLGc9MDtnPGY7ZysrKWZvcih2YXIgeT0wLGI9dm9pZCAwLHc9MDt3PHU7dysrKXl8fCh5PTEyOCxiPWhbbSsrXSksZFtwKytdPWImeT8wOjI1NSx5Pj49MTtyZXR1cm57aW1nRGF0YTpkLHdpZHRoOnUsaGVpZ2h0OmZ9fShlKSxyPXQuaW1nRGF0YSxhPXQud2lkdGgsaT10LmhlaWdodDtyZXR1cm4gdGhpcy53aWR0aD1hLHRoaXMuaGVpZ2h0PWkscn19LEl9KCk7dC5KYmlnMkltYWdlPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ZnVuY3Rpb24gbihlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fU9iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFyaXRobWV0aWNEZWNvZGVyPXZvaWQgMDt2YXIgYT1be3FlOjIyMDE3LG5tcHM6MSxubHBzOjEsc3dpdGNoRmxhZzoxfSx7cWU6MTMzMTMsbm1wczoyLG5scHM6Nixzd2l0Y2hGbGFnOjB9LHtxZTo2MTQ1LG5tcHM6MyxubHBzOjksc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjQsbmxwczoxMixzd2l0Y2hGbGFnOjB9LHtxZToxMzEzLG5tcHM6NSxubHBzOjI5LHN3aXRjaEZsYWc6MH0se3FlOjU0NSxubXBzOjM4LG5scHM6MzMsc3dpdGNoRmxhZzowfSx7cWU6MjIwMTcsbm1wczo3LG5scHM6Nixzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjgsbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxODQzMyxubXBzOjksbmxwczoxNCxzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjEwLG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MTIyODksbm1wczoxMSxubHBzOjE3LHN3aXRjaEZsYWc6MH0se3FlOjkyMTcsbm1wczoxMixubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjcxNjksbm1wczoxMyxubHBzOjIwLHN3aXRjaEZsYWc6MH0se3FlOjU2MzMsbm1wczoyOSxubHBzOjIxLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6MTUsbmxwczoxNCxzd2l0Y2hGbGFnOjF9LHtxZToyMTUwNSxubXBzOjE2LG5scHM6MTQsc3dpdGNoRmxhZzowfSx7cWU6MjA3Mzcsbm1wczoxNyxubHBzOjE1LHN3aXRjaEZsYWc6MH0se3FlOjE4NDMzLG5tcHM6MTgsbmxwczoxNixzd2l0Y2hGbGFnOjB9LHtxZToxNDMzNyxubXBzOjE5LG5scHM6MTcsc3dpdGNoRmxhZzowfSx7cWU6MTMzMTMsbm1wczoyMCxubHBzOjE4LHN3aXRjaEZsYWc6MH0se3FlOjEyMjg5LG5tcHM6MjEsbmxwczoxOSxzd2l0Y2hGbGFnOjB9LHtxZToxMDI0MSxubXBzOjIyLG5scHM6MTksc3dpdGNoRmxhZzowfSx7cWU6OTIxNyxubXBzOjIzLG5scHM6MjAsc3dpdGNoRmxhZzowfSx7cWU6ODcwNSxubXBzOjI0LG5scHM6MjEsc3dpdGNoRmxhZzowfSx7cWU6NzE2OSxubXBzOjI1LG5scHM6MjIsc3dpdGNoRmxhZzowfSx7cWU6NjE0NSxubXBzOjI2LG5scHM6MjMsc3dpdGNoRmxhZzowfSx7cWU6NTYzMyxubXBzOjI3LG5scHM6MjQsc3dpdGNoRmxhZzowfSx7cWU6NTEyMSxubXBzOjI4LG5scHM6MjUsc3dpdGNoRmxhZzowfSx7cWU6NDYwOSxubXBzOjI5LG5scHM6MjYsc3dpdGNoRmxhZzowfSx7cWU6NDM1MyxubXBzOjMwLG5scHM6Mjcsc3dpdGNoRmxhZzowfSx7cWU6Mjc1MyxubXBzOjMxLG5scHM6Mjgsc3dpdGNoRmxhZzowfSx7cWU6MjQ5NyxubXBzOjMyLG5scHM6Mjksc3dpdGNoRmxhZzowfSx7cWU6MjIwOSxubXBzOjMzLG5scHM6MzAsc3dpdGNoRmxhZzowfSx7cWU6MTMxMyxubXBzOjM0LG5scHM6MzEsc3dpdGNoRmxhZzowfSx7cWU6MTA4OSxubXBzOjM1LG5scHM6MzIsc3dpdGNoRmxhZzowfSx7cWU6NjczLG5tcHM6MzYsbmxwczozMyxzd2l0Y2hGbGFnOjB9LHtxZTo1NDUsbm1wczozNyxubHBzOjM0LHN3aXRjaEZsYWc6MH0se3FlOjMyMSxubXBzOjM4LG5scHM6MzUsc3dpdGNoRmxhZzowfSx7cWU6MjczLG5tcHM6MzksbmxwczozNixzd2l0Y2hGbGFnOjB9LHtxZToxMzMsbm1wczo0MCxubHBzOjM3LHN3aXRjaEZsYWc6MH0se3FlOjczLG5tcHM6NDEsbmxwczozOCxzd2l0Y2hGbGFnOjB9LHtxZTozNyxubXBzOjQyLG5scHM6Mzksc3dpdGNoRmxhZzowfSx7cWU6MjEsbm1wczo0MyxubHBzOjQwLHN3aXRjaEZsYWc6MH0se3FlOjksbm1wczo0NCxubHBzOjQxLHN3aXRjaEZsYWc6MH0se3FlOjUsbm1wczo0NSxubHBzOjQyLHN3aXRjaEZsYWc6MH0se3FlOjEsbm1wczo0NSxubHBzOjQzLHN3aXRjaEZsYWc6MH0se3FlOjIyMDE3LG5tcHM6NDYsbmxwczo0Nixzd2l0Y2hGbGFnOjB9XSxpPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSh0LHIsbil7IWZ1bmN0aW9uKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9KHRoaXMsZSksdGhpcy5kYXRhPXQsdGhpcy5icD1yLHRoaXMuZGF0YUVuZD1uLHRoaXMuY2hpZ2g9dFtyXSx0aGlzLmNsb3c9MCx0aGlzLmJ5dGVJbigpLHRoaXMuY2hpZ2g9dGhpcy5jaGlnaDw8NyY2NTUzNXx0aGlzLmNsb3c+PjkmMTI3LHRoaXMuY2xvdz10aGlzLmNsb3c8PDcmNjU1MzUsdGhpcy5jdC09Nyx0aGlzLmE9MzI3Njh9dmFyIHQscixpO3JldHVybiB0PWUsKHI9W3trZXk6ImJ5dGVJbiIsdmFsdWU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmRhdGEsdD10aGlzLmJwOzI1NT09PWVbdF0/ZVt0KzFdPjE0Mz8odGhpcy5jbG93Kz02NTI4MCx0aGlzLmN0PTgpOih0KyssdGhpcy5jbG93Kz1lW3RdPDw5LHRoaXMuY3Q9Nyx0aGlzLmJwPXQpOih0KyssdGhpcy5jbG93Kz10PHRoaXMuZGF0YUVuZD9lW3RdPDw4OjY1MjgwLHRoaXMuY3Q9OCx0aGlzLmJwPXQpLHRoaXMuY2xvdz42NTUzNSYmKHRoaXMuY2hpZ2grPXRoaXMuY2xvdz4+MTYsdGhpcy5jbG93Jj02NTUzNSl9fSx7a2V5OiJyZWFkQml0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByLG49ZVt0XT4+MSxpPTEmZVt0XSxvPWFbbl0scz1vLnFlLGw9dGhpcy5hLXM7aWYodGhpcy5jaGlnaDxzKWw8cz8obD1zLHI9aSxuPW8ubm1wcyk6KGw9cyxyPTFeaSwxPT09by5zd2l0Y2hGbGFnJiYoaT1yKSxuPW8ubmxwcyk7ZWxzZXtpZih0aGlzLmNoaWdoLT1zLDAhPSgzMjc2OCZsKSlyZXR1cm4gdGhpcy5hPWwsaTtsPHM/KHI9MV5pLDE9PT1vLnN3aXRjaEZsYWcmJihpPXIpLG49by5ubHBzKToocj1pLG49by5ubXBzKX1kb3swPT09dGhpcy5jdCYmdGhpcy5ieXRlSW4oKSxsPDw9MSx0aGlzLmNoaWdoPXRoaXMuY2hpZ2g8PDEmNjU1MzV8dGhpcy5jbG93Pj4xNSYxLHRoaXMuY2xvdz10aGlzLmNsb3c8PDEmNjU1MzUsdGhpcy5jdC0tfXdoaWxlKDA9PSgzMjc2OCZsKSk7cmV0dXJuIHRoaXMuYT1sLGVbdF09bjw8MXxpLHJ9fV0pJiZuKHQucHJvdG90eXBlLHIpLGkmJm4odCxpKSxlfSgpO3QuQXJpdGhtZXRpY0RlY29kZXI9aX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5KcGVnU3RyZWFtPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTcpLGk9cigxNTUpLG89cigxNjQpLHM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4pe2Zvcih2YXIgaTstMSE9PShpPWUuZ2V0Qnl0ZSgpKTspaWYoMjU1PT09aSl7ZS5za2lwKC0xKTticmVha310aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1uLGEuRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShhLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT17ZGVjb2RlVHJhbnNmb3JtOnZvaWQgMCxjb2xvclRyYW5zZm9ybTp2b2lkIDB9LHQ9dGhpcy5kaWN0LmdldEFycmF5KCJEZWNvZGUiLCJEIik7aWYodGhpcy5mb3JjZVJHQiYmQXJyYXkuaXNBcnJheSh0KSl7Zm9yKHZhciByPXRoaXMuZGljdC5nZXQoIkJpdHNQZXJDb21wb25lbnQiKXx8OCxuPXQubGVuZ3RoLGE9bmV3IEludDMyQXJyYXkobikscz0hMSxsPSgxPDxyKS0xLGM9MDtjPG47Yys9MilhW2NdPTI1NioodFtjKzFdLXRbY10pfDAsYVtjKzFdPXRbY10qbHwwLDI1Nj09PWFbY10mJjA9PT1hW2MrMV18fChzPSEwKTtzJiYoZS5kZWNvZGVUcmFuc2Zvcm09YSl9aWYoKDAsaS5pc0RpY3QpKHRoaXMucGFyYW1zKSl7dmFyIHU9dGhpcy5wYXJhbXMuZ2V0KCJDb2xvclRyYW5zZm9ybSIpO051bWJlci5pc0ludGVnZXIodSkmJihlLmNvbG9yVHJhbnNmb3JtPXUpfXZhciBmPW5ldyBvLkpwZWdJbWFnZShlKTtmLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciBoPWYuZ2V0RGF0YSh7d2lkdGg6dGhpcy5kcmF3V2lkdGgsaGVpZ2h0OnRoaXMuZHJhd0hlaWdodCxmb3JjZVJHQjp0aGlzLmZvcmNlUkdCLGlzU291cmNlUERGOiEwfSk7dGhpcy5idWZmZXI9aCx0aGlzLmJ1ZmZlckxlbmd0aD1oLmxlbmd0aCx0aGlzLmVvZj0hMH19LGUucHJvdG90eXBlLmdldElSPWZ1bmN0aW9uKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0mJmFyZ3VtZW50c1swXTtyZXR1cm4oMCxuLmNyZWF0ZU9iamVjdFVSTCkodGhpcy5ieXRlcywiaW1hZ2UvanBlZyIsZSl9LGV9KCk7dC5KcGVnU3RyZWFtPXN9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnBlZ0ltYWdlPXZvaWQgMDt2YXIgbj1yKDYpO2Z1bmN0aW9uIGEoZSl7cmV0dXJuKGE9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX12YXIgaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPSJKUEVHIGVycm9yOiAiK2V9cmV0dXJuIGUucHJvdG90eXBlPW5ldyBFcnJvcixlLnByb3RvdHlwZS5uYW1lPSJKcGVnRXJyb3IiLGUuY29uc3RydWN0b3I9ZSxlfSgpLG89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5tZXNzYWdlPWUsdGhpcy5zY2FuTGluZXM9dH1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkROTE1hcmtlckVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxzPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLm1lc3NhZ2U9ZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkVPSU1hcmtlckVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxsPWZ1bmN0aW9uKCl7dmFyIGU9bmV3IFVpbnQ4QXJyYXkoWzAsMSw4LDE2LDksMiwzLDEwLDE3LDI0LDMyLDI1LDE4LDExLDQsNSwxMiwxOSwyNiwzMyw0MCw0OCw0MSwzNCwyNywyMCwxMyw2LDcsMTQsMjEsMjgsMzUsNDIsNDksNTYsNTcsNTAsNDMsMzYsMjksMjIsMTUsMjMsMzAsMzcsNDQsNTEsNTgsNTksNTIsNDUsMzgsMzEsMzksNDYsNTMsNjAsNjEsNTQsNDcsNTUsNjIsNjNdKTtmdW5jdGlvbiB0KCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOnt9LHQ9ZS5kZWNvZGVUcmFuc2Zvcm0scj12b2lkIDA9PT10P251bGw6dCxuPWUuY29sb3JUcmFuc2Zvcm0sYT12b2lkIDA9PT1uPy0xOm47dGhpcy5fZGVjb2RlVHJhbnNmb3JtPXIsdGhpcy5fY29sb3JUcmFuc2Zvcm09YX1mdW5jdGlvbiByKGUsdCl7Zm9yKHZhciByLG4sYT0wLGk9W10sbz0xNjtvPjAmJiFlW28tMV07KW8tLTtpLnB1c2goe2NoaWxkcmVuOltdLGluZGV4OjB9KTt2YXIgcyxsPWlbMF07Zm9yKHI9MDtyPG87cisrKXtmb3Iobj0wO248ZVtyXTtuKyspe2ZvcigobD1pLnBvcCgpKS5jaGlsZHJlbltsLmluZGV4XT10W2FdO2wuaW5kZXg+MDspbD1pLnBvcCgpO2ZvcihsLmluZGV4KyssaS5wdXNoKGwpO2kubGVuZ3RoPD1yOylpLnB1c2gocz17Y2hpbGRyZW46W10saW5kZXg6MH0pLGwuY2hpbGRyZW5bbC5pbmRleF09cy5jaGlsZHJlbixsPXM7YSsrfXIrMTxvJiYoaS5wdXNoKHM9e2NoaWxkcmVuOltdLGluZGV4OjB9KSxsLmNoaWxkcmVuW2wuaW5kZXhdPXMuY2hpbGRyZW4sbD1zKX1yZXR1cm4gaVswXS5jaGlsZHJlbn1mdW5jdGlvbiBsKGUsdCxyKXtyZXR1cm4gNjQqKChlLmJsb2Nrc1BlckxpbmUrMSkqdCtyKX1mdW5jdGlvbiBjKHQscixjLHUsZixkLHAsbSxnKXt2YXIgdj1hcmd1bWVudHMubGVuZ3RoPjkmJnZvaWQgMCE9PWFyZ3VtZW50c1s5XSYmYXJndW1lbnRzWzldLHk9Yy5tY3VzUGVyTGluZSxiPWMucHJvZ3Jlc3NpdmUsdz1yLGs9MCxTPTA7ZnVuY3Rpb24gXygpe2lmKFM+MClyZXR1cm4gUy0tLGs+PlMmMTtpZigyNTU9PT0oaz10W3IrK10pKXt2YXIgZT10W3IrK107aWYoZSl7aWYoMjIwPT09ZSYmdil7cis9Mjt2YXIgbj10W3IrK108PDh8dFtyKytdO2lmKG4+MCYmbiE9PWMuc2NhbkxpbmVzKXRocm93IG5ldyBvKCJGb3VuZCBETkwgbWFya2VyICgweEZGREMpIHdoaWxlIHBhcnNpbmcgc2NhbiBkYXRhIixuKX1lbHNlIGlmKDIxNz09PWUpdGhyb3cgbmV3IHMoIkZvdW5kIEVPSSBtYXJrZXIgKDB4RkZEOSkgd2hpbGUgcGFyc2luZyBzY2FuIGRhdGEiKTt0aHJvdyBuZXcgaSgidW5leHBlY3RlZCBtYXJrZXIgIi5jb25jYXQoKGs8PDh8ZSkudG9TdHJpbmcoMTYpKSl9fXJldHVybiBTPTcsaz4+Pjd9ZnVuY3Rpb24geChlKXtmb3IodmFyIHQ9ZTs7KXtpZigibnVtYmVyIj09dHlwZW9mKHQ9dFtfKCldKSlyZXR1cm4gdDtpZigib2JqZWN0IiE9PWEodCkpdGhyb3cgbmV3IGkoImludmFsaWQgaHVmZm1hbiBzZXF1ZW5jZSIpfX1mdW5jdGlvbiBBKGUpe2Zvcih2YXIgdD0wO2U+MDspdD10PDwxfF8oKSxlLS07cmV0dXJuIHR9ZnVuY3Rpb24gQyhlKXtpZigxPT09ZSlyZXR1cm4gMT09PV8oKT8xOi0xO3ZhciB0PUEoZSk7cmV0dXJuIHQ+PTE8PGUtMT90OnQrKC0xPDxlKSsxfWZ1bmN0aW9uIFAodCxyKXt2YXIgbj14KHQuaHVmZm1hblRhYmxlREMpLGE9MD09PW4/MDpDKG4pO3QuYmxvY2tEYXRhW3JdPXQucHJlZCs9YTtmb3IodmFyIGk9MTtpPDY0Oyl7dmFyIG89eCh0Lmh1ZmZtYW5UYWJsZUFDKSxzPTE1Jm8sbD1vPj40O2lmKDAhPT1zKXt2YXIgYz1lW2krPWxdO3QuYmxvY2tEYXRhW3IrY109QyhzKSxpKyt9ZWxzZXtpZihsPDE1KWJyZWFrO2krPTE2fX19ZnVuY3Rpb24gRShlLHQpe3ZhciByPXgoZS5odWZmbWFuVGFibGVEQyksbj0wPT09cj8wOkMocik8PGc7ZS5ibG9ja0RhdGFbdF09ZS5wcmVkKz1ufWZ1bmN0aW9uIFQoZSx0KXtlLmJsb2NrRGF0YVt0XXw9XygpPDxnfXZhciBSPTA7ZnVuY3Rpb24gTyh0LHIpe2lmKFI+MClSLS07ZWxzZSBmb3IodmFyIG49ZCxhPXA7bjw9YTspe3ZhciBpPXgodC5odWZmbWFuVGFibGVBQyksbz0xNSZpLHM9aT4+NDtpZigwIT09byl7dmFyIGw9ZVtuKz1zXTt0LmJsb2NrRGF0YVtyK2xdPUMobykqKDE8PGcpLG4rK31lbHNle2lmKHM8MTUpe1I9QShzKSsoMTw8cyktMTticmVha31uKz0xNn19fXZhciBJLEY9MDtmdW5jdGlvbiBMKHQscil7Zm9yKHZhciBuLGEsbz1kLHM9cCxsPTA7bzw9czspe3ZhciBjPXIrZVtvXSx1PXQuYmxvY2tEYXRhW2NdPDA/LTE6MTtzd2l0Y2goRil7Y2FzZSAwOmlmKGw9KGE9eCh0Lmh1ZmZtYW5UYWJsZUFDKSk+PjQsMD09KG49MTUmYSkpbDwxNT8oUj1BKGwpKygxPDxsKSxGPTQpOihsPTE2LEY9MSk7ZWxzZXtpZigxIT09bil0aHJvdyBuZXcgaSgiaW52YWxpZCBBQ24gZW5jb2RpbmciKTtJPUMobiksRj1sPzI6M31jb250aW51ZTtjYXNlIDE6Y2FzZSAyOnQuYmxvY2tEYXRhW2NdP3QuYmxvY2tEYXRhW2NdKz11KihfKCk8PGcpOjA9PS0tbCYmKEY9Mj09PUY/MzowKTticmVhaztjYXNlIDM6dC5ibG9ja0RhdGFbY10/dC5ibG9ja0RhdGFbY10rPXUqKF8oKTw8Zyk6KHQuYmxvY2tEYXRhW2NdPUk8PGcsRj0wKTticmVhaztjYXNlIDQ6dC5ibG9ja0RhdGFbY10mJih0LmJsb2NrRGF0YVtjXSs9dSooXygpPDxnKSl9bysrfTQ9PT1GJiYwPT0tLVImJihGPTApfWZ1bmN0aW9uIEQoZSx0LHIsbixhKXt2YXIgaT1yJXk7dChlLGwoZSwoci95fDApKmUudituLGkqZS5oK2EpKX1mdW5jdGlvbiBOKGUsdCxyKXt0KGUsbChlLHIvZS5ibG9ja3NQZXJMaW5lfDAsciVlLmJsb2Nrc1BlckxpbmUpKX12YXIgTSxqLEIsVSxxLHosVz11Lmxlbmd0aDt6PWI/MD09PWQ/MD09PW0/RTpUOjA9PT1tP086TDpQO3ZhciBILEcsVixYLFk9MDtmb3IoRz0xPT09Vz91WzBdLmJsb2Nrc1BlckxpbmUqdVswXS5ibG9ja3NQZXJDb2x1bW46eSpjLm1jdXNQZXJDb2x1bW47WTxHOyl7dmFyIEs9Zj9NYXRoLm1pbihHLVksZik6Rztmb3Ioaj0wO2o8VztqKyspdVtqXS5wcmVkPTA7aWYoUj0wLDE9PT1XKWZvcihNPXVbMF0scT0wO3E8SztxKyspTihNLHosWSksWSsrO2Vsc2UgZm9yKHE9MDtxPEs7cSsrKXtmb3Ioaj0wO2o8VztqKyspZm9yKFY9KE09dVtqXSkuaCxYPU0udixCPTA7QjxYO0IrKylmb3IoVT0wO1U8VjtVKyspRChNLHosWSxCLFUpO1krK31TPTAsKEg9aCh0LHIpKSYmSC5pbnZhbGlkJiYoKDAsbi53YXJuKSgiZGVjb2RlU2NhbiAtIHVuZXhwZWN0ZWQgTUNVIGRhdGEsIGN1cnJlbnQgbWFya2VyIGlzOiAiK0guaW52YWxpZCkscj1ILm9mZnNldCk7dmFyIEo9SCYmSC5tYXJrZXI7aWYoIUp8fEo8PTY1MjgwKXRocm93IG5ldyBpKCJtYXJrZXIgd2FzIG5vdCBmb3VuZCIpO2lmKCEoSj49NjU0ODgmJko8PTY1NDk1KSlicmVhaztyKz0yfXJldHVybihIPWgodCxyKSkmJkguaW52YWxpZCYmKCgwLG4ud2FybikoImRlY29kZVNjYW4gLSB1bmV4cGVjdGVkIFNjYW4gZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrSC5pbnZhbGlkKSxyPUgub2Zmc2V0KSxyLXd9ZnVuY3Rpb24gdShlLHQscil7dmFyIG4sYSxvLHMsbCxjLHUsZixoLGQscCxtLGcsdix5LGIsdyxrPWUucXVhbnRpemF0aW9uVGFibGUsUz1lLmJsb2NrRGF0YTtpZighayl0aHJvdyBuZXcgaSgibWlzc2luZyByZXF1aXJlZCBRdWFudGl6YXRpb24gVGFibGUuIik7Zm9yKHZhciBfPTA7Xzw2NDtfKz04KWg9U1t0K19dLGQ9U1t0K18rMV0scD1TW3QrXysyXSxtPVNbdCtfKzNdLGc9U1t0K18rNF0sdj1TW3QrXys1XSx5PVNbdCtfKzZdLGI9U1t0K18rN10saCo9a1tfXSwwIT0oZHxwfG18Z3x2fHl8Yik/KGQqPWtbXysxXSxwKj1rW18rMl0sbSo9a1tfKzNdLGcqPWtbXys0XSx2Kj1rW18rNV0sYT0obj0obj01NzkzKmgrMTI4Pj44KSsoYT01NzkzKmcrMTI4Pj44KSsxPj4xKS1hLHc9Mzc4NCoobz1wKSsxNTY3KihzPXkqPWtbXys2XSkrMTI4Pj44LG89MTU2NypvLTM3ODQqcysxMjg+PjgsdT0obD0obD0yODk2KihkLShiKj1rW18rN10pKSsxMjg+PjgpKyh1PXY8PDQpKzE+PjEpLXUsYz0oZj0oZj0yODk2KihkK2IpKzEyOD4+OCkrKGM9bTw8NCkrMT4+MSktYyxzPShuPW4rKHM9dykrMT4+MSktcyxvPShhPWErbysxPj4xKS1vLHc9MjI3NipsKzM0MDYqZisyMDQ4Pj4xMixsPTM0MDYqbC0yMjc2KmYrMjA0OD4+MTIsZj13LHc9Nzk5KmMrNDAxNyp1KzIwNDg+PjEyLGM9NDAxNypjLTc5OSp1KzIwNDg+PjEyLHU9dyxyW19dPW4rZixyW18rN109bi1mLHJbXysxXT1hK3UscltfKzZdPWEtdSxyW18rMl09bytjLHJbXys1XT1vLWMscltfKzNdPXMrbCxyW18rNF09cy1sKToodz01NzkzKmgrNTEyPj4xMCxyW19dPXcscltfKzFdPXcscltfKzJdPXcscltfKzNdPXcscltfKzRdPXcscltfKzVdPXcscltfKzZdPXcscltfKzddPXcpO2Zvcih2YXIgeD0wO3g8ODsrK3gpaD1yW3hdLDAhPSgoZD1yW3grOF0pfChwPXJbeCsxNl0pfChtPXJbeCsyNF0pfChnPXJbeCszMl0pfCh2PXJbeCs0MF0pfCh5PXJbeCs0OF0pfChiPXJbeCs1Nl0pKT8oYT0obj00MTEyKygobj01NzkzKmgrMjA0OD4+MTIpKyhhPTU3OTMqZysyMDQ4Pj4xMikrMT4+MSkpLWEsdz0zNzg0KihvPXApKzE1NjcqKHM9eSkrMjA0OD4+MTIsbz0xNTY3Km8tMzc4NCpzKzIwNDg+PjEyLHM9dyx1PShsPShsPTI4OTYqKGQtYikrMjA0OD4+MTIpKyh1PXYpKzE+PjEpLXUsYz0oZj0oZj0yODk2KihkK2IpKzIwNDg+PjEyKSsoYz1tKSsxPj4xKS1jLHc9MjI3NipsKzM0MDYqZisyMDQ4Pj4xMixsPTM0MDYqbC0yMjc2KmYrMjA0OD4+MTIsZj13LHc9Nzk5KmMrNDAxNyp1KzIwNDg+PjEyLGM9NDAxNypjLTc5OSp1KzIwNDg+PjEyLGg9KGg9KG49bitzKzE+PjEpK2YpPDE2PzA6aD49NDA4MD8yNTU6aD4+NCxkPShkPShhPWErbysxPj4xKSsodT13KSk8MTY/MDpkPj00MDgwPzI1NTpkPj40LHA9KHA9KG89YS1vKStjKTwxNj8wOnA+PTQwODA/MjU1OnA+PjQsbT0obT0ocz1uLXMpK2wpPDE2PzA6bT49NDA4MD8yNTU6bT4+NCxnPShnPXMtbCk8MTY/MDpnPj00MDgwPzI1NTpnPj40LHY9KHY9by1jKTwxNj8wOnY+PTQwODA/MjU1OnY+PjQseT0oeT1hLXUpPDE2PzA6eT49NDA4MD8yNTU6eT4+NCxiPShiPW4tZik8MTY/MDpiPj00MDgwPzI1NTpiPj40LFNbdCt4XT1oLFNbdCt4KzhdPWQsU1t0K3grMTZdPXAsU1t0K3grMjRdPW0sU1t0K3grMzJdPWcsU1t0K3grNDBdPXYsU1t0K3grNDhdPXksU1t0K3grNTZdPWIpOih3PSh3PTU3OTMqaCs4MTkyPj4xNCk8LTIwNDA/MDp3Pj0yMDI0PzI1NTp3KzIwNTY+PjQsU1t0K3hdPXcsU1t0K3grOF09dyxTW3QreCsxNl09dyxTW3QreCsyNF09dyxTW3QreCszMl09dyxTW3QreCs0MF09dyxTW3QreCs0OF09dyxTW3QreCs1Nl09dyl9ZnVuY3Rpb24gZihlLHQpe2Zvcih2YXIgcj10LmJsb2Nrc1BlckxpbmUsbj10LmJsb2Nrc1BlckNvbHVtbixhPW5ldyBJbnQxNkFycmF5KDY0KSxpPTA7aTxuO2krKylmb3IodmFyIG89MDtvPHI7bysrKXUodCxsKHQsaSxvKSxhKTtyZXR1cm4gdC5ibG9ja0RhdGF9ZnVuY3Rpb24gaChlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTp0O2Z1bmN0aW9uIG4odCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfXZhciBhPWUubGVuZ3RoLTEsaT1yPHQ/cjp0O2lmKHQ+PWEpcmV0dXJuIG51bGw7dmFyIG89bih0KTtpZihvPj02NTQ3MiYmbzw9NjU1MzQpcmV0dXJue2ludmFsaWQ6bnVsbCxtYXJrZXI6byxvZmZzZXQ6dH07Zm9yKHZhciBzPW4oaSk7IShzPj02NTQ3MiYmczw9NjU1MzQpOyl7aWYoKytpPj1hKXJldHVybiBudWxsO3M9bihpKX1yZXR1cm57aW52YWxpZDpvLnRvU3RyaW5nKDE2KSxtYXJrZXI6cyxvZmZzZXQ6aX19cmV0dXJuIHQucHJvdG90eXBlPXtwYXJzZTpmdW5jdGlvbih0KXt2YXIgYT1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06e30sbD1hLmRubFNjYW5MaW5lcyx1PXZvaWQgMD09PWw/bnVsbDpsO2Z1bmN0aW9uIGQoKXt2YXIgZT10W3ldPDw4fHRbeSsxXTtyZXR1cm4geSs9MixlfWZ1bmN0aW9uIHAoKXt2YXIgZT1kKCkscj15K2UtMixhPWgodCxyLHkpO2EmJmEuaW52YWxpZCYmKCgwLG4ud2FybikoInJlYWREYXRhQmxvY2sgLSBpbmNvcnJlY3QgbGVuZ3RoLCBjdXJyZW50IG1hcmtlciBpczogIithLmludmFsaWQpLHI9YS5vZmZzZXQpO3ZhciBpPXQuc3ViYXJyYXkoeSxyKTtyZXR1cm4geSs9aS5sZW5ndGgsaX1mdW5jdGlvbiBtKGUpe2Zvcih2YXIgdD1NYXRoLmNlaWwoZS5zYW1wbGVzUGVyTGluZS84L2UubWF4SCkscj1NYXRoLmNlaWwoZS5zY2FuTGluZXMvOC9lLm1heFYpLG49MDtuPGUuY29tcG9uZW50cy5sZW5ndGg7bisrKXtZPWUuY29tcG9uZW50c1tuXTt2YXIgYT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2FtcGxlc1BlckxpbmUvOCkqWS5oL2UubWF4SCksaT1NYXRoLmNlaWwoTWF0aC5jZWlsKGUuc2NhbkxpbmVzLzgpKlkudi9lLm1heFYpLG89dCpZLmgscz1yKlkudio2NCoobysxKTtZLmJsb2NrRGF0YT1uZXcgSW50MTZBcnJheShzKSxZLmJsb2Nrc1BlckxpbmU9YSxZLmJsb2Nrc1BlckNvbHVtbj1pfWUubWN1c1BlckxpbmU9dCxlLm1jdXNQZXJDb2x1bW49cn12YXIgZyx2LHk9MCxiPW51bGwsdz1udWxsLGs9MCxTPVtdLF89W10seD1bXSxBPWQoKTtpZig2NTQ5NiE9PUEpdGhyb3cgbmV3IGkoIlNPSSBub3QgZm91bmQiKTtBPWQoKTtlOmZvcig7NjU0OTchPT1BOyl7dmFyIEMsUCxFO3N3aXRjaChBKXtjYXNlIDY1NTA0OmNhc2UgNjU1MDU6Y2FzZSA2NTUwNjpjYXNlIDY1NTA3OmNhc2UgNjU1MDg6Y2FzZSA2NTUwOTpjYXNlIDY1NTEwOmNhc2UgNjU1MTE6Y2FzZSA2NTUxMjpjYXNlIDY1NTEzOmNhc2UgNjU1MTQ6Y2FzZSA2NTUxNTpjYXNlIDY1NTE2OmNhc2UgNjU1MTc6Y2FzZSA2NTUxODpjYXNlIDY1NTE5OmNhc2UgNjU1MzQ6dmFyIFQ9cCgpOzY1NTA0PT09QSYmNzQ9PT1UWzBdJiY3MD09PVRbMV0mJjczPT09VFsyXSYmNzA9PT1UWzNdJiYwPT09VFs0XSYmKGI9e3ZlcnNpb246e21ham9yOlRbNV0sbWlub3I6VFs2XX0sZGVuc2l0eVVuaXRzOlRbN10seERlbnNpdHk6VFs4XTw8OHxUWzldLHlEZW5zaXR5OlRbMTBdPDw4fFRbMTFdLHRodW1iV2lkdGg6VFsxMl0sdGh1bWJIZWlnaHQ6VFsxM10sdGh1bWJEYXRhOlQuc3ViYXJyYXkoMTQsMTQrMypUWzEyXSpUWzEzXSl9KSw2NTUxOD09PUEmJjY1PT09VFswXSYmMTAwPT09VFsxXSYmMTExPT09VFsyXSYmOTg9PT1UWzNdJiYxMDE9PT1UWzRdJiYodz17dmVyc2lvbjpUWzVdPDw4fFRbNl0sZmxhZ3MwOlRbN108PDh8VFs4XSxmbGFnczE6VFs5XTw8OHxUWzEwXSx0cmFuc2Zvcm1Db2RlOlRbMTFdfSk7YnJlYWs7Y2FzZSA2NTQ5OTpmb3IodmFyIFI9ZCgpLE89Uit5LTI7eTxPOyl7dmFyIEk9dFt5KytdLEY9bmV3IFVpbnQxNkFycmF5KDY0KTtpZihJPj40PT0wKWZvcihQPTA7UDw2NDtQKyspRltlW1BdXT10W3krK107ZWxzZXtpZihJPj40IT0xKXRocm93IG5ldyBpKCJEUVQgLSBpbnZhbGlkIHRhYmxlIHNwZWMiKTtmb3IoUD0wO1A8NjQ7UCsrKUZbZVtQXV09ZCgpfVNbMTUmSV09Rn1icmVhaztjYXNlIDY1NDcyOmNhc2UgNjU0NzM6Y2FzZSA2NTQ3NDppZihnKXRocm93IG5ldyBpKCJPbmx5IHNpbmdsZSBmcmFtZSBKUEVHcyBzdXBwb3J0ZWQiKTtkKCksKGc9e30pLmV4dGVuZGVkPTY1NDczPT09QSxnLnByb2dyZXNzaXZlPTY1NDc0PT09QSxnLnByZWNpc2lvbj10W3krK107dmFyIEw9ZCgpO2cuc2NhbkxpbmVzPXV8fEwsZy5zYW1wbGVzUGVyTGluZT1kKCksZy5jb21wb25lbnRzPVtdLGcuY29tcG9uZW50SWRzPXt9O3ZhciBELE49dFt5KytdLE09MCxqPTA7Zm9yKEM9MDtDPE47QysrKXtEPXRbeV07dmFyIEI9dFt5KzFdPj40LFU9MTUmdFt5KzFdO008QiYmKE09QiksajxVJiYoaj1VKTt2YXIgcT10W3krMl07RT1nLmNvbXBvbmVudHMucHVzaCh7aDpCLHY6VSxxdWFudGl6YXRpb25JZDpxLHF1YW50aXphdGlvblRhYmxlOm51bGx9KSxnLmNvbXBvbmVudElkc1tEXT1FLTEseSs9M31nLm1heEg9TSxnLm1heFY9aixtKGcpO2JyZWFrO2Nhc2UgNjU0NzY6dmFyIHo9ZCgpO2ZvcihDPTI7Qzx6Oyl7dmFyIFc9dFt5KytdLEg9bmV3IFVpbnQ4QXJyYXkoMTYpLEc9MDtmb3IoUD0wO1A8MTY7UCsrLHkrKylHKz1IW1BdPXRbeV07dmFyIFY9bmV3IFVpbnQ4QXJyYXkoRyk7Zm9yKFA9MDtQPEc7UCsrLHkrKylWW1BdPXRbeV07Qys9MTcrRywoVz4+ND09MD94Ol8pWzE1JlddPXIoSCxWKX1icmVhaztjYXNlIDY1NTAxOmQoKSx2PWQoKTticmVhaztjYXNlIDY1NDk4OnZhciBYPTE9PSsrayYmIXU7ZCgpO3ZhciBZLEs9dFt5KytdLEo9W107Zm9yKEM9MDtDPEs7QysrKXt2YXIgUT1nLmNvbXBvbmVudElkc1t0W3krK11dO1k9Zy5jb21wb25lbnRzW1FdO3ZhciBaPXRbeSsrXTtZLmh1ZmZtYW5UYWJsZURDPXhbWj4+NF0sWS5odWZmbWFuVGFibGVBQz1fWzE1JlpdLEoucHVzaChZKX12YXIgJD10W3krK10sZWU9dFt5KytdLHRlPXRbeSsrXTt0cnl7dmFyIHJlPWModCx5LGcsSix2LCQsZWUsdGU+PjQsMTUmdGUsWCk7eSs9cmV9Y2F0Y2goZSl7aWYoZSBpbnN0YW5jZW9mIG8pcmV0dXJuKDAsbi53YXJuKSgiIi5jb25jYXQoZS5tZXNzYWdlLCIgLS0gYXR0ZW1wdGluZyB0byByZS1wYXJzZSB0aGUgSlBFRyBpbWFnZS4iKSksdGhpcy5wYXJzZSh0LHtkbmxTY2FuTGluZXM6ZS5zY2FuTGluZXN9KTtpZihlIGluc3RhbmNlb2Ygcyl7KDAsbi53YXJuKSgiIi5jb25jYXQoZS5tZXNzYWdlLCIgLS0gaWdub3JpbmcgdGhlIHJlc3Qgb2YgdGhlIGltYWdlIGRhdGEuIikpO2JyZWFrIGV9dGhyb3cgZX1icmVhaztjYXNlIDY1NTAwOnkrPTQ7YnJlYWs7Y2FzZSA2NTUzNToyNTUhPT10W3ldJiZ5LS07YnJlYWs7ZGVmYXVsdDppZigyNTU9PT10W3ktM10mJnRbeS0yXT49MTkyJiZ0W3ktMl08PTI1NCl7eS09MzticmVha312YXIgbmU9aCh0LHktMik7aWYobmUmJm5lLmludmFsaWQpeygwLG4ud2FybikoIkpwZWdJbWFnZS5wYXJzZSAtIHVuZXhwZWN0ZWQgZGF0YSwgY3VycmVudCBtYXJrZXIgaXM6ICIrbmUuaW52YWxpZCkseT1uZS5vZmZzZXQ7YnJlYWt9dGhyb3cgbmV3IGkoInVua25vd24gbWFya2VyICIrQS50b1N0cmluZygxNikpfUE9ZCgpfWZvcih0aGlzLndpZHRoPWcuc2FtcGxlc1BlckxpbmUsdGhpcy5oZWlnaHQ9Zy5zY2FuTGluZXMsdGhpcy5qZmlmPWIsdGhpcy5hZG9iZT13LHRoaXMuY29tcG9uZW50cz1bXSxDPTA7QzxnLmNvbXBvbmVudHMubGVuZ3RoO0MrKyl7dmFyIGFlPVNbKFk9Zy5jb21wb25lbnRzW0NdKS5xdWFudGl6YXRpb25JZF07YWUmJihZLnF1YW50aXphdGlvblRhYmxlPWFlKSx0aGlzLmNvbXBvbmVudHMucHVzaCh7b3V0cHV0OmYoMCxZKSxzY2FsZVg6WS5oL2cubWF4SCxzY2FsZVk6WS52L2cubWF4VixibG9ja3NQZXJMaW5lOlkuYmxvY2tzUGVyTGluZSxibG9ja3NQZXJDb2x1bW46WS5ibG9ja3NQZXJDb2x1bW59KX10aGlzLm51bUNvbXBvbmVudHM9dGhpcy5jb21wb25lbnRzLmxlbmd0aH0sX2dldExpbmVhcml6ZWRCbG9ja0RhdGE6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaSxvLHMsbCxjLHUsZixoLGQ9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0mJmFyZ3VtZW50c1syXSxwPXRoaXMud2lkdGgvZSxtPXRoaXMuaGVpZ2h0L3QsZz0wLHY9dGhpcy5jb21wb25lbnRzLmxlbmd0aCx5PWUqdCp2LGI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHkpLHc9bmV3IFVpbnQzMkFycmF5KGUpLGs9NDI5NDk2NzI4ODtmb3IobD0wO2w8djtsKyspe2ZvcihuPShyPXRoaXMuY29tcG9uZW50c1tsXSkuc2NhbGVYKnAsYT1yLnNjYWxlWSptLGc9bCxoPXIub3V0cHV0LGk9ci5ibG9ja3NQZXJMaW5lKzE8PDMsbz0wO288ZTtvKyspYz0wfG8qbix3W29dPShjJmspPDwzfDcmYztmb3Iocz0wO3M8dDtzKyspZm9yKGY9aSooKGM9MHxzKmEpJmspfCg3JmMpPDwzLG89MDtvPGU7bysrKWJbZ109aFtmK3dbb11dLGcrPXZ9dmFyIFM9dGhpcy5fZGVjb2RlVHJhbnNmb3JtO2lmKGR8fDQhPT12fHxTfHwoUz1uZXcgSW50MzJBcnJheShbLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTUsLTI1NiwyNTVdKSksUylmb3IobD0wO2w8eTspZm9yKGM9MCx1PTA7Yzx2O2MrKyxsKyssdSs9MiliW2xdPShiW2xdKlNbdV0+PjgpK1NbdSsxXTtyZXR1cm4gYn0sZ2V0IF9pc0NvbG9yQ29udmVyc2lvbk5lZWRlZCgpe3JldHVybiB0aGlzLmFkb2JlPyEhdGhpcy5hZG9iZS50cmFuc2Zvcm1Db2RlOjM9PT10aGlzLm51bUNvbXBvbmVudHM/MCE9PXRoaXMuX2NvbG9yVHJhbnNmb3JtOjE9PT10aGlzLl9jb2xvclRyYW5zZm9ybX0sX2NvbnZlcnRZY2NUb1JnYjpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz0zKXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPXQtMTc5LjQ1NisxLjQwMipuLGVbYSsxXT10KzEzNS40NTktLjM0NCpyLS43MTQqbixlW2ErMl09dC0yMjYuODE2KzEuNzcyKnI7cmV0dXJuIGV9LF9jb252ZXJ0WWNja1RvUmdiOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpPTAsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTQpdD1lW29dLHI9ZVtvKzFdLG49ZVtvKzJdLGE9ZVtvKzNdLGVbaSsrXT1yKigtNjYwNjM1NjY5NDIwMzY0ZS0xOSpyKy4wMDA0MzcxMzA0NzU5MjYyMzIqbi01NDA4MDYxMDA2NDU5OWUtMTgqdCsuMDAwNDg0NDk3OTcxMjAyODEqYS0uMTU0MzYyMTUxODcxMTI2KS0xMjIuNjcxOTU0MDY4OTQrbiooLS4wMDA5NTc5NjQzNzg0NDU3NzMqbisuMDAwODE3MDc2OTExMzQ2NjI1KnQtLjAwNDc3MjcxNDA1NDA4NzQ3KmErMS41MzM4MDI1MzIyMTczNCkrdCooLjAwMDk2MTI1MDE4NDEzMDY4OCp0LS4wMDI2NjI1NzMzMjI4MzkzMyphKy40ODM1NzA4ODQ1MTI2NSkrYSooLS4wMDAzMzYxOTcxNzc2MTgzOTQqYSsuNDg0NzkxNTYxNDkwNzc2KSxlW2krK109MTA3LjI2ODAzOTM5NzcyNCtyKigyMTk5MjcxMDQ1MjU3NDFlLTE5KnItLjAwMDY0MDk5MjAxODI5Nzk0NSpuKy4wMDA2NTkzOTcwMDEyNDU1NzcqdCsuMDAwNDI2MTA1NjUyOTM4ODM3KmEtLjE3NjQ5MTc5MjQ2Mjg3NSkrbiooLS4wMDA3NzgyNjk5NDE1MTM2ODMqbisuMDAxMzA4NzIyNjE0MDgyNzUqdCsuMDAwNzcwNDgyNjMxODAxMTMyKmEtLjE1MTA1MTQ5Mjc3NTU2MikrdCooLjAwMTI2OTM1MzY4MTE0ODQzKnQtLjAwMjY1MDkwMTg5MDEwODk4KmErLjI1ODAyOTEwMjA2ODQ1KSthKigtLjAwMDMxODkxMzExNzU4ODMyOCphLS4yMTM3NDI0MDAzMjM2NjUpLGVbaSsrXT1yKigtLjAwMDU3MDExNTE5Njk3MzY3NypyLTI2MzQwOTA1MTAwNDU4OWUtMTkqbisuMDAyMDc0MTA4ODExNTAxMip0LS4wMDI4ODI2MDIzNjg1MzQ0MiphKy44MTQyNzI5NjgzNTkyOTUpLTIwLjgxMDAxMjU0Njk0NytuKigtMTUzNDk2MDU3NDQwOTc1ZS0xOSpuLS4wMDAxMzI2ODkwNDM5NjE0NDYqdCsuMDAwNTYwODMzNjkxMjQyODEyKmEtLjE5NTE1MjAyNzUzNDA0OSkrdCooLjAwMTc0NDE4MTMyOTI3NTgyKnQtLjAwMjU1MjQzMzIxNDM5MzQ3KmErLjExNjkzNTAyMDQ2NTE0NSkrYSooLS4wMDAzNDM1MzE5OTY1MTA1NTUqYSsuMjQxNjUyNjAyMzI0MDcpO3JldHVybiBlLnN1YmFycmF5KDAsaSl9LF9jb252ZXJ0WWNja1RvQ215azpmdW5jdGlvbihlKXtmb3IodmFyIHQscixuLGE9MCxpPWUubGVuZ3RoO2E8aTthKz00KXQ9ZVthXSxyPWVbYSsxXSxuPWVbYSsyXSxlW2FdPTQzNC40NTYtdC0xLjQwMipuLGVbYSsxXT0xMTkuNTQxLXQrLjM0NCpyKy43MTQqbixlW2ErMl09NDgxLjgxNi10LTEuNzcyKnI7cmV0dXJuIGV9LF9jb252ZXJ0Q215a1RvUmdiOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCxyLG4sYSxpPTAsbz0wLHM9ZS5sZW5ndGg7bzxzO28rPTQpdD1lW29dKigxLzI1NSkscj1lW28rMV0qKDEvMjU1KSxuPWVbbysyXSooMS8yNTUpLGE9ZVtvKzNdKigxLzI1NSksZVtpKytdPTI1NSt0KigtNC4zODczMzIzODQ2MDk5ODgqdCs1NC40ODYxNTE5NDE4OTE3NipyKzE4LjgyMjkwNTAyMTY1MzAyKm4rMjEyLjI1NjYyNDUxNjM5NTg1KmEtMjg1LjIzMzEwMjYxMzcwMDQpK3IqKDEuNzE0OTc2MzQ3NzM2MjEzNCpyLTUuNjA5NjczNjkwNDA0NzMxNSpuLTE3Ljg3Mzg3MDg2MTQxNTQ0NCphLTUuNDk3MDA2NDI3MTk2MzY2KStuKigtMi41MjE3MzQwMTMxNjgzMDMzKm4tMjEuMjQ4OTIzMzM3MzUzMDczKmErMTcuNTExOTI3MDg0MTgxMyktYSooMjEuODYxMjIxNDc0NjM2MDUqYSsxODkuNDgxODA4MzU5MjI3NDcpLGVbaSsrXT0yNTUrdCooOC44NDEwNDE0MjIwMzYxNDkqdCs2MC4xMTgwMjcwNDU1OTczNjYqcis2Ljg3MTQyNTU5MjA0OTAwNypuKzMxLjE1OTEwMDEzMDA1NTkyMiphLTc5LjI5NzA4NDQ4MTY1NDgpK3IqKC0xNS4zMTAzNjEzMDY5Njc4MTcqcisxNy41NzUyNTEyNjExMDk0ODIqbisxMzEuMzUyNTA5MTI0OTM5NzYqYS0xOTAuOTQ1MzMwMjU4ODk1MSkrbiooNC40NDQzMzkxMDI4NTI3Mzkqbis5Ljg2MzI4NjE0OTM0MDUqYS0yNC44Njc0MTU4MjU1NTg3OCktYSooMjAuNzM3MzI1NDcxMTgxMDM0KmErMTg3LjgwNDUzNzA5NzE5NTc4KSxlW2krK109MjU1K3QqKC44ODQyNTIyNDMwMDAzMjk2KnQrOC4wNzg2Nzc1MDMxMTI5MjgqciszMC44OTk3ODMwOTcwMzcyOSpuLS4yMzg4MzIzODY4OTE3ODkzNCphLTE0LjE4MzU3Njc5OTY3MzI4NikrciooMTAuNDk1OTMyNzM0MzIwNzIqcis2My4wMjM3ODQ5NDc1NDA1MipuKzUwLjYwNjk1NzY1NjM2MDczNCphLTExMi4yMzg4NDI1MzcxOTI0OCkrbiooLjAzMjk2MDQxMTE0ODczMjE3Km4rMTE1LjYwMzg0NDQ5NjQ2NjQxKmEtMTkzLjU4MjA5MzU2ODYxNTA1KS1hKigyMi4zMzgxNjgwNzMwOTg4NiphKzE4MC4xMjYxMzk3NDcwODM2Nyk7cmV0dXJuIGUuc3ViYXJyYXkoMCxpKX0sZ2V0RGF0YTpmdW5jdGlvbihlKXt2YXIgdD1lLndpZHRoLHI9ZS5oZWlnaHQsbj1lLmZvcmNlUkdCLGE9dm9pZCAwIT09biYmbixvPWUuaXNTb3VyY2VQREYscz12b2lkIDAhPT1vJiZvO2lmKHRoaXMubnVtQ29tcG9uZW50cz40KXRocm93IG5ldyBpKCJVbnN1cHBvcnRlZCBjb2xvciBtb2RlIik7dmFyIGw9dGhpcy5fZ2V0TGluZWFyaXplZEJsb2NrRGF0YSh0LHIscyk7aWYoMT09PXRoaXMubnVtQ29tcG9uZW50cyYmYSl7Zm9yKHZhciBjPWwubGVuZ3RoLHU9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMqYyksZj0wLGg9MDtoPGM7aCsrKXt2YXIgZD1sW2hdO3VbZisrXT1kLHVbZisrXT1kLHVbZisrXT1kfXJldHVybiB1fWlmKDM9PT10aGlzLm51bUNvbXBvbmVudHMmJnRoaXMuX2lzQ29sb3JDb252ZXJzaW9uTmVlZGVkKXJldHVybiB0aGlzLl9jb252ZXJ0WWNjVG9SZ2IobCk7aWYoND09PXRoaXMubnVtQ29tcG9uZW50cyl7aWYodGhpcy5faXNDb2xvckNvbnZlcnNpb25OZWVkZWQpcmV0dXJuIGE/dGhpcy5fY29udmVydFljY2tUb1JnYihsKTp0aGlzLl9jb252ZXJ0WWNja1RvQ215ayhsKTtpZihhKXJldHVybiB0aGlzLl9jb252ZXJ0Q215a1RvUmdiKGwpfXJldHVybiBsfX0sdH0oKTt0LkpwZWdJbWFnZT1sfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkpweFN0cmVhbT12b2lkIDA7dmFyIG49cigxNTcpLGE9cigxNjYpLGk9cig2KSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixhKXt0aGlzLnN0cmVhbT1lLHRoaXMubWF5YmVMZW5ndGg9dCx0aGlzLmRpY3Q9cix0aGlzLnBhcmFtcz1hLG4uRGVjb2RlU3RyZWFtLmNhbGwodGhpcyx0KX1yZXR1cm4gZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShuLkRlY29kZVN0cmVhbS5wcm90b3R5cGUpLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLnByb3RvdHlwZSwiYnl0ZXMiLHtnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxpLnNoYWRvdykodGhpcywiYnl0ZXMiLHRoaXMuc3RyZWFtLmdldEJ5dGVzKHRoaXMubWF5YmVMZW5ndGgpKX0sY29uZmlndXJhYmxlOiEwfSksZS5wcm90b3R5cGUuZW5zdXJlQnVmZmVyPWZ1bmN0aW9uKGUpe30sZS5wcm90b3R5cGUucmVhZEJsb2NrPWZ1bmN0aW9uKCl7aWYoIXRoaXMuZW9mKXt2YXIgZT1uZXcgYS5KcHhJbWFnZTtlLnBhcnNlKHRoaXMuYnl0ZXMpO3ZhciB0PWUud2lkdGgscj1lLmhlaWdodCxuPWUuY29tcG9uZW50c0NvdW50LGk9ZS50aWxlcy5sZW5ndGg7aWYoMT09PWkpdGhpcy5idWZmZXI9ZS50aWxlc1swXS5pdGVtcztlbHNle2Zvcih2YXIgbz1uZXcgVWludDhDbGFtcGVkQXJyYXkodCpyKm4pLHM9MDtzPGk7cysrKWZvcih2YXIgbD1lLnRpbGVzW3NdLGM9bC53aWR0aCx1PWwuaGVpZ2h0LGY9bC5sZWZ0LGg9bC50b3AsZD1sLml0ZW1zLHA9MCxtPSh0KmgrZikqbixnPXQqbix2PWMqbix5PTA7eTx1O3krKyl7dmFyIGI9ZC5zdWJhcnJheShwLHArdik7by5zZXQoYixtKSxwKz12LG0rPWd9dGhpcy5idWZmZXI9b310aGlzLmJ1ZmZlckxlbmd0aD10aGlzLmJ1ZmZlci5sZW5ndGgsdGhpcy5lb2Y9ITB9fSxlfSgpO3QuSnB4U3RyZWFtPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuSnB4SW1hZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE2MiksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5tZXNzYWdlPSJKUFggZXJyb3I6ICIrZX1yZXR1cm4gZS5wcm90b3R5cGU9bmV3IEVycm9yLGUucHJvdG90eXBlLm5hbWU9IkpweEVycm9yIixlLmNvbnN0cnVjdG9yPWUsZX0oKSxvPWZ1bmN0aW9uKCl7dmFyIGU9e0xMOjAsTEg6MSxITDoxLEhIOjJ9O2Z1bmN0aW9uIHQoKXt0aGlzLmZhaWxPbkNvcnJ1cHRlZEltYWdlPSExfWZ1bmN0aW9uIHIoZSx0KXtlLngwPU1hdGguY2VpbCh0LlhPc2l6L2UuWFJzaXopLGUueDE9TWF0aC5jZWlsKHQuWHNpei9lLlhSc2l6KSxlLnkwPU1hdGguY2VpbCh0LllPc2l6L2UuWVJzaXopLGUueTE9TWF0aC5jZWlsKHQuWXNpei9lLllSc2l6KSxlLndpZHRoPWUueDEtZS54MCxlLmhlaWdodD1lLnkxLWUueTB9ZnVuY3Rpb24gbyhlLHQpe2Zvcih2YXIgcixuPWUuU0laLGE9W10saT1NYXRoLmNlaWwoKG4uWHNpei1uLlhUT3Npeikvbi5YVHNpeiksbz1NYXRoLmNlaWwoKG4uWXNpei1uLllUT3Npeikvbi5ZVHNpeikscz0wO3M8bztzKyspZm9yKHZhciBsPTA7bDxpO2wrKykocj17fSkudHgwPU1hdGgubWF4KG4uWFRPc2l6K2wqbi5YVHNpeixuLlhPc2l6KSxyLnR5MD1NYXRoLm1heChuLllUT3NpeitzKm4uWVRzaXosbi5ZT3Npeiksci50eDE9TWF0aC5taW4obi5YVE9zaXorKGwrMSkqbi5YVHNpeixuLlhzaXopLHIudHkxPU1hdGgubWluKG4uWVRPc2l6KyhzKzEpKm4uWVRzaXosbi5Zc2l6KSxyLndpZHRoPXIudHgxLXIudHgwLHIuaGVpZ2h0PXIudHkxLXIudHkwLHIuY29tcG9uZW50cz1bXSxhLnB1c2gocik7ZS50aWxlcz1hO2Zvcih2YXIgYz0wLHU9bi5Dc2l6O2M8dTtjKyspZm9yKHZhciBmPXRbY10saD0wLGQ9YS5sZW5ndGg7aDxkO2grKyl7dmFyIHA9e307cj1hW2hdLHAudGN4MD1NYXRoLmNlaWwoci50eDAvZi5YUnNpeikscC50Y3kwPU1hdGguY2VpbChyLnR5MC9mLllSc2l6KSxwLnRjeDE9TWF0aC5jZWlsKHIudHgxL2YuWFJzaXopLHAudGN5MT1NYXRoLmNlaWwoci50eTEvZi5ZUnNpeikscC53aWR0aD1wLnRjeDEtcC50Y3gwLHAuaGVpZ2h0PXAudGN5MS1wLnRjeTAsci5jb21wb25lbnRzW2NdPXB9fWZ1bmN0aW9uIHMoZSx0LHIpe3ZhciBuPXQuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLGE9e307cmV0dXJuIG4uZW50cm9weUNvZGVyV2l0aEN1c3RvbVByZWNpbmN0cz8oYS5QUHg9bi5wcmVjaW5jdHNTaXplc1tyXS5QUHgsYS5QUHk9bi5wcmVjaW5jdHNTaXplc1tyXS5QUHkpOihhLlBQeD0xNSxhLlBQeT0xNSksYS54Y2JfPXI+MD9NYXRoLm1pbihuLnhjYixhLlBQeC0xKTpNYXRoLm1pbihuLnhjYixhLlBQeCksYS55Y2JfPXI+MD9NYXRoLm1pbihuLnljYixhLlBQeS0xKTpNYXRoLm1pbihuLnljYixhLlBQeSksYX1mdW5jdGlvbiBsKGUsdCxyKXt2YXIgbj0xPDxyLlBQeCxhPTE8PHIuUFB5LGk9MD09PXQucmVzTGV2ZWwsbz0xPDxyLlBQeCsoaT8wOi0xKSxzPTE8PHIuUFB5KyhpPzA6LTEpLGw9dC50cngxPnQudHJ4MD9NYXRoLmNlaWwodC50cngxL24pLU1hdGguZmxvb3IodC50cngwL24pOjAsYz10LnRyeTE+dC50cnkwP01hdGguY2VpbCh0LnRyeTEvYSktTWF0aC5mbG9vcih0LnRyeTAvYSk6MCx1PWwqYzt0LnByZWNpbmN0UGFyYW1ldGVycz17cHJlY2luY3RXaWR0aDpuLHByZWNpbmN0SGVpZ2h0OmEsbnVtcHJlY2luY3Rzd2lkZTpsLG51bXByZWNpbmN0c2hpZ2g6YyxudW1wcmVjaW5jdHM6dSxwcmVjaW5jdFdpZHRoSW5TdWJiYW5kOm8scHJlY2luY3RIZWlnaHRJblN1YmJhbmQ6c319ZnVuY3Rpb24gYyhlLHQscil7dmFyIG4sYSxpLG8scz1yLnhjYl8sbD1yLnljYl8sYz0xPDxzLHU9MTw8bCxmPXQudGJ4MD4+cyxoPXQudGJ5MD4+bCxkPXQudGJ4MStjLTE+PnMscD10LnRieTErdS0xPj5sLG09dC5yZXNvbHV0aW9uLnByZWNpbmN0UGFyYW1ldGVycyxnPVtdLHY9W107Zm9yKGE9aDthPHA7YSsrKWZvcihuPWY7bjxkO24rKylpZigoaT17Y2J4Om4sY2J5OmEsdGJ4MDpjKm4sdGJ5MDp1KmEsdGJ4MTpjKihuKzEpLHRieTE6dSooYSsxKX0pLnRieDBfPU1hdGgubWF4KHQudGJ4MCxpLnRieDApLGkudGJ5MF89TWF0aC5tYXgodC50YnkwLGkudGJ5MCksaS50YngxXz1NYXRoLm1pbih0LnRieDEsaS50YngxKSxpLnRieTFfPU1hdGgubWluKHQudGJ5MSxpLnRieTEpLG89TWF0aC5mbG9vcigoaS50YngwXy10LnRieDApL20ucHJlY2luY3RXaWR0aEluU3ViYmFuZCkrTWF0aC5mbG9vcigoaS50YnkwXy10LnRieTApL20ucHJlY2luY3RIZWlnaHRJblN1YmJhbmQpKm0ubnVtcHJlY2luY3Rzd2lkZSxpLnByZWNpbmN0TnVtYmVyPW8saS5zdWJiYW5kVHlwZT10LnR5cGUsaS5MYmxvY2s9MywhKGkudGJ4MV88PWkudGJ4MF98fGkudGJ5MV88PWkudGJ5MF8pKXtnLnB1c2goaSk7dmFyIHk9dltvXTt2b2lkIDAhPT15PyhuPHkuY2J4TWluP3kuY2J4TWluPW46bj55LmNieE1heCYmKHkuY2J4TWF4PW4pLGE8eS5jYnlNaW4/eS5jYnhNaW49YTphPnkuY2J5TWF4JiYoeS5jYnlNYXg9YSkpOnZbb109eT17Y2J4TWluOm4sY2J5TWluOmEsY2J4TWF4Om4sY2J5TWF4OmF9LGkucHJlY2luY3Q9eX10LmNvZGVibG9ja1BhcmFtZXRlcnM9e2NvZGVibG9ja1dpZHRoOnMsY29kZWJsb2NrSGVpZ2h0OmwsbnVtY29kZWJsb2Nrd2lkZTpkLWYrMSxudW1jb2RlYmxvY2toaWdoOnAtaCsxfSx0LmNvZGVibG9ja3M9Zyx0LnByZWNpbmN0cz12fWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgbj1bXSxhPWUuc3ViYmFuZHMsaT0wLG89YS5sZW5ndGg7aTxvO2krKylmb3IodmFyIHM9YVtpXS5jb2RlYmxvY2tzLGw9MCxjPXMubGVuZ3RoO2w8YztsKyspe3ZhciB1PXNbbF07dS5wcmVjaW5jdE51bWJlcj09PXQmJm4ucHVzaCh1KX1yZXR1cm57bGF5ZXJOdW1iZXI6cixjb2RlYmxvY2tzOm59fWZ1bmN0aW9uIGYoZSl7Zm9yKHZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz0wLGw9MDtsPG87bCsrKXM9TWF0aC5tYXgocyxuLmNvbXBvbmVudHNbbF0uY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCk7dmFyIGM9MCxmPTAsaD0wLGQ9MDt0aGlzLm5leHRQYWNrZXQ9ZnVuY3Rpb24oKXtmb3IoO2M8YTtjKyspe2Zvcig7Zjw9cztmKyspe2Zvcig7aDxvO2grKyl7dmFyIGU9bi5jb21wb25lbnRzW2hdO2lmKCEoZj5lLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpKXtmb3IodmFyIHQ9ZS5yZXNvbHV0aW9uc1tmXSxyPXQucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztkPHI7KXt2YXIgbD11KHQsZCxjKTtyZXR1cm4gZCsrLGx9ZD0wfX1oPTB9Zj0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBoKGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY3VycmVudFRpbGUuaW5kZXgsbj1lLnRpbGVzW3JdLGE9bi5jb2RpbmdTdHlsZURlZmF1bHRQYXJhbWV0ZXJzLmxheWVyc0NvdW50LG89dC5Dc2l6LHM9MCxsPTA7bDxvO2wrKylzPU1hdGgubWF4KHMsbi5jb21wb25lbnRzW2xdLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpO3ZhciBjPTAsZj0wLGg9MCxkPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtjPD1zO2MrKyl7Zm9yKDtmPGE7ZisrKXtmb3IoO2g8bztoKyspe3ZhciBlPW4uY29tcG9uZW50c1toXTtpZighKGM+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7Zm9yKHZhciB0PWUucmVzb2x1dGlvbnNbY10scj10LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHM7ZDxyOyl7dmFyIGw9dSh0LGQsZik7cmV0dXJuIGQrKyxsfWQ9MH19aD0wfWY9MH10aHJvdyBuZXcgaSgiT3V0IG9mIHBhY2tldHMiKX19ZnVuY3Rpb24gZChlKXt2YXIgdCxyLG4sYSxvPWUuU0laLHM9ZS5jdXJyZW50VGlsZS5pbmRleCxsPWUudGlsZXNbc10sYz1sLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsZj1vLkNzaXosaD0wO2ZvcihuPTA7bjxmO24rKyl7dmFyIGQ9bC5jb21wb25lbnRzW25dO2g9TWF0aC5tYXgoaCxkLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQpfXZhciBwPW5ldyBJbnQzMkFycmF5KGgrMSk7Zm9yKHI9MDtyPD1oOysrcil7dmFyIG09MDtmb3Iobj0wO248ZjsrK24pe3ZhciBnPWwuY29tcG9uZW50c1tuXS5yZXNvbHV0aW9ucztyPGcubGVuZ3RoJiYobT1NYXRoLm1heChtLGdbcl0ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cykpfXBbcl09bX10PTAscj0wLG49MCxhPTAsdGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtyPD1oO3IrKyl7Zm9yKDthPHBbcl07YSsrKXtmb3IoO248ZjtuKyspe3ZhciBlPWwuY29tcG9uZW50c1tuXTtpZighKHI+ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50KSl7dmFyIG89ZS5yZXNvbHV0aW9uc1tyXSxzPW8ucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0cztpZighKGE+PXMpKXtmb3IoO3Q8Yzspe3ZhciBkPXUobyxhLHQpO3JldHVybiB0KyssZH10PTB9fX1uPTB9YT0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBwKGUpe3ZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz12KG4pLGw9cyxjPTAsZj0wLGg9MCxkPTAscD0wO3RoaXMubmV4dFBhY2tldD1mdW5jdGlvbigpe2Zvcig7cDxsLm1heE51bUhpZ2g7cCsrKXtmb3IoO2Q8bC5tYXhOdW1XaWRlO2QrKyl7Zm9yKDtoPG87aCsrKXtmb3IodmFyIGU9bi5jb21wb25lbnRzW2hdLHQ9ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O2Y8PXQ7ZisrKXt2YXIgcj1lLnJlc29sdXRpb25zW2ZdLG09cy5jb21wb25lbnRzW2hdLnJlc29sdXRpb25zW2ZdLHY9ZyhkLHAsbSxsLHIpO2lmKG51bGwhPT12KXtmb3IoO2M8YTspe3ZhciB5PXUocix2LGMpO3JldHVybiBjKysseX1jPTB9fWY9MH1oPTB9ZD0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBtKGUpe3ZhciB0PWUuU0laLHI9ZS5jdXJyZW50VGlsZS5pbmRleCxuPWUudGlsZXNbcl0sYT1uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnMubGF5ZXJzQ291bnQsbz10LkNzaXoscz12KG4pLGw9MCxjPTAsZj0wLGg9MCxkPTA7dGhpcy5uZXh0UGFja2V0PWZ1bmN0aW9uKCl7Zm9yKDtmPG87KytmKXtmb3IodmFyIGU9bi5jb21wb25lbnRzW2ZdLHQ9cy5jb21wb25lbnRzW2ZdLHI9ZS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMuZGVjb21wb3NpdGlvbkxldmVsc0NvdW50O2Q8dC5tYXhOdW1IaWdoO2QrKyl7Zm9yKDtoPHQubWF4TnVtV2lkZTtoKyspe2Zvcig7Yzw9cjtjKyspe3ZhciBwPWUucmVzb2x1dGlvbnNbY10sbT10LnJlc29sdXRpb25zW2NdLHY9ZyhoLGQsbSx0LHApO2lmKG51bGwhPT12KXtmb3IoO2w8YTspe3ZhciB5PXUocCx2LGwpO3JldHVybiBsKysseX1sPTB9fWM9MH1oPTB9ZD0wfXRocm93IG5ldyBpKCJPdXQgb2YgcGFja2V0cyIpfX1mdW5jdGlvbiBnKGUsdCxyLG4sYSl7dmFyIGk9ZSpuLm1pbldpZHRoLG89dCpuLm1pbkhlaWdodDtpZihpJXIud2lkdGghPTB8fG8lci5oZWlnaHQhPTApcmV0dXJuIG51bGw7dmFyIHM9by9yLndpZHRoKmEucHJlY2luY3RQYXJhbWV0ZXJzLm51bXByZWNpbmN0c3dpZGU7cmV0dXJuIGkvci5oZWlnaHQrc31mdW5jdGlvbiB2KGUpe2Zvcih2YXIgdD1lLmNvbXBvbmVudHMubGVuZ3RoLHI9TnVtYmVyLk1BWF9WQUxVRSxuPU51bWJlci5NQVhfVkFMVUUsYT0wLGk9MCxvPW5ldyBBcnJheSh0KSxzPTA7czx0O3MrKyl7Zm9yKHZhciBsPWUuY29tcG9uZW50c1tzXSxjPWwuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCx1PW5ldyBBcnJheShjKzEpLGY9TnVtYmVyLk1BWF9WQUxVRSxoPU51bWJlci5NQVhfVkFMVUUsZD0wLHA9MCxtPTEsZz1jO2c+PTA7LS1nKXt2YXIgdj1sLnJlc29sdXRpb25zW2ddLHk9bSp2LnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdFdpZHRoLGI9bSp2LnByZWNpbmN0UGFyYW1ldGVycy5wcmVjaW5jdEhlaWdodDtmPU1hdGgubWluKGYseSksaD1NYXRoLm1pbihoLGIpLGQ9TWF0aC5tYXgoZCx2LnByZWNpbmN0UGFyYW1ldGVycy5udW1wcmVjaW5jdHN3aWRlKSxwPU1hdGgubWF4KHAsdi5wcmVjaW5jdFBhcmFtZXRlcnMubnVtcHJlY2luY3RzaGlnaCksdVtnXT17d2lkdGg6eSxoZWlnaHQ6Yn0sbTw8PTF9cj1NYXRoLm1pbihyLGYpLG49TWF0aC5taW4obixoKSxhPU1hdGgubWF4KGEsZCksaT1NYXRoLm1heChpLHApLG9bc109e3Jlc29sdXRpb25zOnUsbWluV2lkdGg6ZixtaW5IZWlnaHQ6aCxtYXhOdW1XaWRlOmQsbWF4TnVtSGlnaDpwfX1yZXR1cm57Y29tcG9uZW50czpvLG1pbldpZHRoOnIsbWluSGVpZ2h0Om4sbWF4TnVtV2lkZTphLG1heE51bUhpZ2g6aX19ZnVuY3Rpb24geShlKXtmb3IodmFyIHQ9ZS5TSVoscj1lLmN1cnJlbnRUaWxlLmluZGV4LG49ZS50aWxlc1tyXSxhPXQuQ3NpeixvPTA7bzxhO28rKyl7Zm9yKHZhciB1PW4uY29tcG9uZW50c1tvXSxnPXUuY29kaW5nU3R5bGVQYXJhbWV0ZXJzLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCx2PVtdLHk9W10sYj0wO2I8PWc7YisrKXt2YXIgdyxrPXMoMCx1LGIpLFM9e30sXz0xPDxnLWI7aWYoUy50cngwPU1hdGguY2VpbCh1LnRjeDAvXyksUy50cnkwPU1hdGguY2VpbCh1LnRjeTAvXyksUy50cngxPU1hdGguY2VpbCh1LnRjeDEvXyksUy50cnkxPU1hdGguY2VpbCh1LnRjeTEvXyksUy5yZXNMZXZlbD1iLGwoMCxTLGspLHYucHVzaChTKSwwPT09Yikodz17fSkudHlwZT0iTEwiLHcudGJ4MD1NYXRoLmNlaWwodS50Y3gwL18pLHcudGJ5MD1NYXRoLmNlaWwodS50Y3kwL18pLHcudGJ4MT1NYXRoLmNlaWwodS50Y3gxL18pLHcudGJ5MT1NYXRoLmNlaWwodS50Y3kxL18pLHcucmVzb2x1dGlvbj1TLGMoMCx3LGspLHkucHVzaCh3KSxTLnN1YmJhbmRzPVt3XTtlbHNle3ZhciB4PTE8PGctYisxLEE9W107KHc9e30pLnR5cGU9IkhMIix3LnRieDA9TWF0aC5jZWlsKHUudGN4MC94LS41KSx3LnRieTA9TWF0aC5jZWlsKHUudGN5MC94KSx3LnRieDE9TWF0aC5jZWlsKHUudGN4MS94LS41KSx3LnRieTE9TWF0aC5jZWlsKHUudGN5MS94KSx3LnJlc29sdXRpb249UyxjKDAsdyxrKSx5LnB1c2godyksQS5wdXNoKHcpLCh3PXt9KS50eXBlPSJMSCIsdy50YngwPU1hdGguY2VpbCh1LnRjeDAveCksdy50YnkwPU1hdGguY2VpbCh1LnRjeTAveC0uNSksdy50YngxPU1hdGguY2VpbCh1LnRjeDEveCksdy50YnkxPU1hdGguY2VpbCh1LnRjeTEveC0uNSksdy5yZXNvbHV0aW9uPVMsYygwLHcsaykseS5wdXNoKHcpLEEucHVzaCh3KSwodz17fSkudHlwZT0iSEgiLHcudGJ4MD1NYXRoLmNlaWwodS50Y3gwL3gtLjUpLHcudGJ5MD1NYXRoLmNlaWwodS50Y3kwL3gtLjUpLHcudGJ4MT1NYXRoLmNlaWwodS50Y3gxL3gtLjUpLHcudGJ5MT1NYXRoLmNlaWwodS50Y3kxL3gtLjUpLHcucmVzb2x1dGlvbj1TLGMoMCx3LGspLHkucHVzaCh3KSxBLnB1c2godyksUy5zdWJiYW5kcz1BfX11LnJlc29sdXRpb25zPXYsdS5zdWJiYW5kcz15fXZhciBDPW4uY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5wcm9ncmVzc2lvbk9yZGVyO3N3aXRjaChDKXtjYXNlIDA6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IGYoZSk7YnJlYWs7Y2FzZSAxOm4ucGFja2V0c0l0ZXJhdG9yPW5ldyBoKGUpO2JyZWFrO2Nhc2UgMjpuLnBhY2tldHNJdGVyYXRvcj1uZXcgZChlKTticmVhaztjYXNlIDM6bi5wYWNrZXRzSXRlcmF0b3I9bmV3IHAoZSk7YnJlYWs7Y2FzZSA0Om4ucGFja2V0c0l0ZXJhdG9yPW5ldyBtKGUpO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IGkoIlVuc3VwcG9ydGVkIHByb2dyZXNzaW9uIG9yZGVyICIuY29uY2F0KEMpKX19ZnVuY3Rpb24gYihlLHQscixhKXt2YXIgaSxvPTAscz0wLGw9ITE7ZnVuY3Rpb24gYyhlKXtmb3IoO3M8ZTspe3ZhciBuPXRbcitvXTtvKyssbD8oaT1pPDw3fG4scys9NyxsPSExKTooaT1pPDw4fG4scys9OCksMjU1PT09biYmKGw9ITApfXJldHVybiBpPj4+KHMtPWUpJigxPDxlKS0xfWZ1bmN0aW9uIHUoZSl7cmV0dXJuIDI1NT09PXRbcitvLTFdJiZ0W3Irb109PT1lPyhmKDEpLCEwKToyNTU9PT10W3Irb10mJnRbcitvKzFdPT09ZSYmKGYoMiksITApfWZ1bmN0aW9uIGYoZSl7bys9ZX1mdW5jdGlvbiBoKCl7cz0wLGwmJihvKyssbD0hMSl9ZnVuY3Rpb24gZCgpe2lmKDA9PT1jKDEpKXJldHVybiAxO2lmKDA9PT1jKDEpKXJldHVybiAyO3ZhciBlPWMoMik7cmV0dXJuIGU8Mz9lKzM6KGU9Yyg1KSk8MzE/ZSs2OihlPWMoNykpKzM3fWZvcih2YXIgcD1lLmN1cnJlbnRUaWxlLmluZGV4LG09ZS50aWxlc1twXSxnPWUuQ09ELnNvcE1hcmtlclVzZWQsdj1lLkNPRC5lcGhNYXJrZXJVc2VkLHk9bS5wYWNrZXRzSXRlcmF0b3I7bzxhOyl7aCgpLGcmJnUoMTQ1KSYmZig0KTt2YXIgYj15Lm5leHRQYWNrZXQoKTtpZihjKDEpKXtmb3IodmFyIHcsaz1iLmxheWVyTnVtYmVyLFM9W10sQT0wLEM9Yi5jb2RlYmxvY2tzLmxlbmd0aDtBPEM7QSsrKXt2YXIgUD0odz1iLmNvZGVibG9ja3NbQV0pLnByZWNpbmN0LEU9dy5jYngtUC5jYnhNaW4sVD13LmNieS1QLmNieU1pbixSPSExLE89ITE7aWYodm9pZCAwIT09dy5pbmNsdWRlZClSPSEhYygxKTtlbHNle3ZhciBJLEY7aWYodm9pZCAwIT09KFA9dy5wcmVjaW5jdCkuaW5jbHVzaW9uVHJlZSlJPVAuaW5jbHVzaW9uVHJlZTtlbHNle3ZhciBMPVAuY2J4TWF4LVAuY2J4TWluKzEsRD1QLmNieU1heC1QLmNieU1pbisxO0k9bmV3IHgoTCxELGspLEY9bmV3IF8oTCxEKSxQLmluY2x1c2lvblRyZWU9SSxQLnplcm9CaXRQbGFuZXNUcmVlPUZ9aWYoSS5yZXNldChFLFQsaykpZm9yKDs7KXtpZighYygxKSl7SS5pbmNyZW1lbnRWYWx1ZShrKTticmVha31pZighSS5uZXh0TGV2ZWwoKSl7dy5pbmNsdWRlZD0hMCxSPU89ITA7YnJlYWt9fX1pZihSKXtpZihPKXtmb3IoKEY9UC56ZXJvQml0UGxhbmVzVHJlZSkucmVzZXQoRSxUKTs7KWlmKGMoMSkpe2lmKCFGLm5leHRMZXZlbCgpKWJyZWFrfWVsc2UgRi5pbmNyZW1lbnRWYWx1ZSgpO3cuemVyb0JpdFBsYW5lcz1GLnZhbHVlfWZvcih2YXIgTj1kKCk7YygxKTspdy5MYmxvY2srKzt2YXIgTT0oMCxuLmxvZzIpKE4pLGo9YygoTjwxPDxNP00tMTpNKSt3LkxibG9jayk7Uy5wdXNoKHtjb2RlYmxvY2s6dyxjb2RpbmdwYXNzZXM6TixkYXRhTGVuZ3RoOmp9KX19Zm9yKGgoKSx2JiZ1KDE0Nik7Uy5sZW5ndGg+MDspe3ZhciBCPVMuc2hpZnQoKTt2b2lkIDA9PT0odz1CLmNvZGVibG9jaykuZGF0YSYmKHcuZGF0YT1bXSksdy5kYXRhLnB1c2goe2RhdGE6dCxzdGFydDpyK28sZW5kOnIrbytCLmRhdGFMZW5ndGgsY29kaW5ncGFzc2VzOkIuY29kaW5ncGFzc2VzfSksbys9Qi5kYXRhTGVuZ3RofX19cmV0dXJuIG99ZnVuY3Rpb24gdyhlLHQscixuLGksbyxzLGwpe2Zvcih2YXIgYz1uLnRieDAsdT1uLnRieTAsZj1uLnRieDEtbi50YngwLGg9bi5jb2RlYmxvY2tzLGQ9IkgiPT09bi50eXBlLmNoYXJBdCgwKT8xOjAscD0iSCI9PT1uLnR5cGUuY2hhckF0KDEpP3Q6MCxtPTAsZz1oLmxlbmd0aDttPGc7KyttKXt2YXIgdj1oW21dLHk9di50YngxXy12LnRieDBfLGI9di50YnkxXy12LnRieTBfO2lmKDAhPT15JiYwIT09YiYmdm9pZCAwIT09di5kYXRhKXt2YXIgdyxrO3c9bmV3IEEoeSxiLHYuc3ViYmFuZFR5cGUsdi56ZXJvQml0UGxhbmVzLG8pLGs9Mjt2YXIgUyxfLHgsQz12LmRhdGEsUD0wLEU9MDtmb3IoUz0wLF89Qy5sZW5ndGg7UzxfO1MrKylQKz0oeD1DW1NdKS5lbmQteC5zdGFydCxFKz14LmNvZGluZ3Bhc3Nlczt2YXIgVD1uZXcgVWludDhBcnJheShQKSxSPTA7Zm9yKFM9MCxfPUMubGVuZ3RoO1M8XztTKyspe3ZhciBPPSh4PUNbU10pLmRhdGEuc3ViYXJyYXkoeC5zdGFydCx4LmVuZCk7VC5zZXQoTyxSKSxSKz1PLmxlbmd0aH12YXIgST1uZXcgYS5Bcml0aG1ldGljRGVjb2RlcihULDAsUCk7Zm9yKHcuc2V0RGVjb2RlcihJKSxTPTA7UzxFO1MrKyl7c3dpdGNoKGspe2Nhc2UgMDp3LnJ1blNpZ25pZmljYW5jZVByb3BhZ2F0aW9uUGFzcygpO2JyZWFrO2Nhc2UgMTp3LnJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzKCk7YnJlYWs7Y2FzZSAyOncucnVuQ2xlYW51cFBhc3MoKSxsJiZ3LmNoZWNrU2VnbWVudGF0aW9uU3ltYm9sKCl9az0oaysxKSUzfXZhciBGLEwsRCxOPXYudGJ4MF8tYysodi50YnkwXy11KSpmLE09dy5jb2VmZmljZW50c1NpZ24saj13LmNvZWZmaWNlbnRzTWFnbml0dWRlLEI9dy5iaXRzRGVjb2RlZCxVPXM/MDouNTtSPTA7dmFyIHE9IkxMIiE9PW4udHlwZTtmb3IoUz0wO1M8YjtTKyspe3ZhciB6PTIqKE4vZnwwKSoodC1mKStkK3A7Zm9yKEY9MDtGPHk7RisrKXtpZigwIT09KEw9altSXSkpe0w9KEwrVSkqaSwwIT09TVtSXSYmKEw9LUwpLEQ9QltSXTt2YXIgVz1xP3orKE48PDEpOk47ZVtXXT1zJiZEPj1vP0w6TCooMTw8by1EKX1OKyssUisrfU4rPWYteX19fX1mdW5jdGlvbiBrKHQscixuKXtmb3IodmFyIGE9ci5jb21wb25lbnRzW25dLGk9YS5jb2RpbmdTdHlsZVBhcmFtZXRlcnMsbz1hLnF1YW50aXphdGlvblBhcmFtZXRlcnMscz1pLmRlY29tcG9zaXRpb25MZXZlbHNDb3VudCxsPW8uU1BxY2RzLGM9by5zY2FsYXJFeHBvdW5kZWQsdT1vLmd1YXJkQml0cyxmPWkuc2VnbWVudGF0aW9uU3ltYm9sVXNlZCxoPXQuY29tcG9uZW50c1tuXS5wcmVjaXNpb24sZD1pLnJldmVyc2libGVUcmFuc2Zvcm1hdGlvbixwPWQ/bmV3IEU6bmV3IFAsbT1bXSxnPTAsdj0wO3Y8PXM7disrKXtmb3IodmFyIHk9YS5yZXNvbHV0aW9uc1t2XSxiPXkudHJ4MS15LnRyeDAsaz15LnRyeTEteS50cnkwLFM9bmV3IEZsb2F0MzJBcnJheShiKmspLF89MCx4PXkuc3ViYmFuZHMubGVuZ3RoO188eDtfKyspe3ZhciBBLEM7Yz8oQT1sW2ddLm11LEM9bFtnXS5lcHNpbG9uLGcrKyk6KEE9bFswXS5tdSxDPWxbMF0uZXBzaWxvbisodj4wPzEtdjowKSk7dmFyIFQ9eS5zdWJiYW5kc1tfXSxSPWVbVC50eXBlXTt3KFMsYiwwLFQsZD8xOk1hdGgucG93KDIsaCtSLUMpKigxK0EvMjA0OCksdStDLTEsZCxmKX1tLnB1c2goe3dpZHRoOmIsaGVpZ2h0OmssaXRlbXM6U30pfXZhciBPPXAuY2FsY3VsYXRlKG0sYS50Y3gwLGEudGN5MCk7cmV0dXJue2xlZnQ6YS50Y3gwLHRvcDphLnRjeTAsd2lkdGg6Ty53aWR0aCxoZWlnaHQ6Ty5oZWlnaHQsaXRlbXM6Ty5pdGVtc319ZnVuY3Rpb24gUyhlLHQpe2Zvcih2YXIgcj1lLlNJWi5Dc2l6LG49ZS50aWxlc1t0XSxhPTA7YTxyO2ErKyl7dmFyIGk9bi5jb21wb25lbnRzW2FdLG89dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5RQ0NbYV0/ZS5jdXJyZW50VGlsZS5RQ0NbYV06ZS5jdXJyZW50VGlsZS5RQ0Q7aS5xdWFudGl6YXRpb25QYXJhbWV0ZXJzPW87dmFyIHM9dm9pZCAwIT09ZS5jdXJyZW50VGlsZS5DT0NbYV0/ZS5jdXJyZW50VGlsZS5DT0NbYV06ZS5jdXJyZW50VGlsZS5DT0Q7aS5jb2RpbmdTdHlsZVBhcmFtZXRlcnM9c31uLmNvZGluZ1N0eWxlRGVmYXVsdFBhcmFtZXRlcnM9ZS5jdXJyZW50VGlsZS5DT0R9dC5wcm90b3R5cGU9e3BhcnNlOmZ1bmN0aW9uKGUpe2lmKDY1MzU5IT09KDAsbi5yZWFkVWludDE2KShlLDApKWZvcih2YXIgdD0wLHI9ZS5sZW5ndGg7dDxyOyl7dmFyIGE9OCxvPSgwLG4ucmVhZFVpbnQzMikoZSx0KSxzPSgwLG4ucmVhZFVpbnQzMikoZSx0KzQpO2lmKHQrPWEsMT09PW8mJihvPTQyOTQ5NjcyOTYqKDAsbi5yZWFkVWludDMyKShlLHQpKygwLG4ucmVhZFVpbnQzMikoZSx0KzQpLHQrPTgsYSs9OCksMD09PW8mJihvPXItdCthKSxvPGEpdGhyb3cgbmV3IGkoIkludmFsaWQgYm94IGZpZWxkIHNpemUiKTt2YXIgbD1vLWEsYz0hMDtzd2l0Y2gocyl7Y2FzZSAxNzg1NzM3ODMyOmM9ITE7YnJlYWs7Y2FzZSAxNjY4MjQ2NjQyOnZhciB1PWVbdF07aWYoMT09PXUpe3ZhciBmPSgwLG4ucmVhZFVpbnQzMikoZSx0KzMpO3N3aXRjaChmKXtjYXNlIDE2OmNhc2UgMTc6Y2FzZSAxODpicmVhaztkZWZhdWx0OigwLG4ud2FybikoIlVua25vd24gY29sb3JzcGFjZSAiK2YpfX1lbHNlIDI9PT11JiYoMCxuLmluZm8pKCJJQ0MgcHJvZmlsZSBub3Qgc3VwcG9ydGVkIik7YnJlYWs7Y2FzZSAxNzg1NzM3ODI3OnRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsdCx0K2wpO2JyZWFrO2Nhc2UgMTc4MzYzNmUzOjIxODc5MzczOCE9PSgwLG4ucmVhZFVpbnQzMikoZSx0KSYmKDAsbi53YXJuKSgiSW52YWxpZCBKUDIgc2lnbmF0dXJlIik7YnJlYWs7Y2FzZSAxNzgzNjM0NDU4OmNhc2UgMTcxODkwOTI5NjpjYXNlIDE5MjAwOTk2OTc6Y2FzZSAxOTE5MjUxMjMyOmNhc2UgMTc2ODQ0OTEzODpicmVhaztkZWZhdWx0OnZhciBoPVN0cmluZy5mcm9tQ2hhckNvZGUocz4+MjQmMjU1LHM+PjE2JjI1NSxzPj44JjI1NSwyNTUmcyk7KDAsbi53YXJuKSgiVW5zdXBwb3J0ZWQgaGVhZGVyIHR5cGUgIitzKyIgKCIraCsiKSIpfWMmJih0Kz1sKX1lbHNlIHRoaXMucGFyc2VDb2Rlc3RyZWFtKGUsMCxlLmxlbmd0aCl9LHBhcnNlSW1hZ2VQcm9wZXJ0aWVzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmdldEJ5dGUoKTt0Pj0wOylpZig2NTM2MT09KHQ8PDh8KHQ9ZS5nZXRCeXRlKCkpKSl7ZS5za2lwKDQpO3ZhciByPWUuZ2V0SW50MzIoKT4+PjAsbj1lLmdldEludDMyKCk+Pj4wLGE9ZS5nZXRJbnQzMigpPj4+MCxvPWUuZ2V0SW50MzIoKT4+PjA7ZS5za2lwKDE2KTt2YXIgcz1lLmdldFVpbnQxNigpO3JldHVybiB0aGlzLndpZHRoPXItYSx0aGlzLmhlaWdodD1uLW8sdGhpcy5jb21wb25lbnRzQ291bnQ9cyx2b2lkKHRoaXMuYml0c1BlckNvbXBvbmVudD04KX10aHJvdyBuZXcgaSgiTm8gc2l6ZSBtYXJrZXIgZm91bmQgaW4gSlBYIHN0cmVhbSIpfSxwYXJzZUNvZGVzdHJlYW06ZnVuY3Rpb24oZSx0LGEpe3ZhciBzPXt9LGw9ITE7dHJ5e2Zvcih2YXIgYz10O2MrMTxhOyl7dmFyIHU9KDAsbi5yZWFkVWludDE2KShlLGMpO2MrPTI7dmFyIGYsaCxkLHAsbSxnLHY9MDtzd2l0Y2godSl7Y2FzZSA2NTM1OTpzLm1haW5IZWFkZXI9ITA7YnJlYWs7Y2FzZSA2NTQ5NzpicmVhaztjYXNlIDY1MzYxOnY9KDAsbi5yZWFkVWludDE2KShlLGMpO3ZhciB3PXt9O3cuWHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYys0KSx3LllzaXo9KDAsbi5yZWFkVWludDMyKShlLGMrOCksdy5YT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsYysxMiksdy5ZT3Npej0oMCxuLnJlYWRVaW50MzIpKGUsYysxNiksdy5YVHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYysyMCksdy5ZVHNpej0oMCxuLnJlYWRVaW50MzIpKGUsYysyNCksdy5YVE9zaXo9KDAsbi5yZWFkVWludDMyKShlLGMrMjgpLHcuWVRPc2l6PSgwLG4ucmVhZFVpbnQzMikoZSxjKzMyKTt2YXIgXz0oMCxuLnJlYWRVaW50MTYpKGUsYyszNik7dy5Dc2l6PV87dmFyIHg9W107Zj1jKzM4O2Zvcih2YXIgQT0wO0E8XztBKyspe3ZhciBDPXtwcmVjaXNpb246MSsoMTI3JmVbZl0pLGlzU2lnbmVkOiEhKDEyOCZlW2ZdKSxYUnNpejplW2YrMV0sWVJzaXo6ZVtmKzJdfTtmKz0zLHIoQyx3KSx4LnB1c2goQyl9cy5TSVo9dyxzLmNvbXBvbmVudHM9eCxvKHMseCkscy5RQ0M9W10scy5DT0M9W107YnJlYWs7Y2FzZSA2NTM3Mjp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTt2YXIgUD17fTtzd2l0Y2goZj1jKzIsMzEmKGg9ZVtmKytdKSl7Y2FzZSAwOnA9OCxtPSEwO2JyZWFrO2Nhc2UgMTpwPTE2LG09ITE7YnJlYWs7Y2FzZSAyOnA9MTYsbT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIraCl9Zm9yKFAubm9RdWFudGl6YXRpb249OD09PXAsUC5zY2FsYXJFeHBvdW5kZWQ9bSxQLmd1YXJkQml0cz1oPj41LGQ9W107Zjx2K2M7KXt2YXIgRT17fTs4PT09cD8oRS5lcHNpbG9uPWVbZisrXT4+MyxFLm11PTApOihFLmVwc2lsb249ZVtmXT4+MyxFLm11PSg3JmVbZl0pPDw4fGVbZisxXSxmKz0yKSxkLnB1c2goRSl9UC5TUHFjZHM9ZCxzLm1haW5IZWFkZXI/cy5RQ0Q9UDoocy5jdXJyZW50VGlsZS5RQ0Q9UCxzLmN1cnJlbnRUaWxlLlFDQz1bXSk7YnJlYWs7Y2FzZSA2NTM3Mzp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTt2YXIgVCxSPXt9O3N3aXRjaChmPWMrMixzLlNJWi5Dc2l6PDI1Nz9UPWVbZisrXTooVD0oMCxuLnJlYWRVaW50MTYpKGUsZiksZis9MiksMzEmKGg9ZVtmKytdKSl7Y2FzZSAwOnA9OCxtPSEwO2JyZWFrO2Nhc2UgMTpwPTE2LG09ITE7YnJlYWs7Y2FzZSAyOnA9MTYsbT0hMDticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSW52YWxpZCBTUWNkIHZhbHVlICIraCl9Zm9yKFIubm9RdWFudGl6YXRpb249OD09PXAsUi5zY2FsYXJFeHBvdW5kZWQ9bSxSLmd1YXJkQml0cz1oPj41LGQ9W107Zjx2K2M7KUU9e30sOD09PXA/KEUuZXBzaWxvbj1lW2YrK10+PjMsRS5tdT0wKTooRS5lcHNpbG9uPWVbZl0+PjMsRS5tdT0oNyZlW2ZdKTw8OHxlW2YrMV0sZis9MiksZC5wdXNoKEUpO1IuU1BxY2RzPWQscy5tYWluSGVhZGVyP3MuUUNDW1RdPVI6cy5jdXJyZW50VGlsZS5RQ0NbVF09UjticmVhaztjYXNlIDY1MzYyOnY9KDAsbi5yZWFkVWludDE2KShlLGMpO3ZhciBPPXt9O2Y9YysyO3ZhciBJPWVbZisrXTtPLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHM9ISEoMSZJKSxPLnNvcE1hcmtlclVzZWQ9ISEoMiZJKSxPLmVwaE1hcmtlclVzZWQ9ISEoNCZJKSxPLnByb2dyZXNzaW9uT3JkZXI9ZVtmKytdLE8ubGF5ZXJzQ291bnQ9KDAsbi5yZWFkVWludDE2KShlLGYpLGYrPTIsTy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybT1lW2YrK10sTy5kZWNvbXBvc2l0aW9uTGV2ZWxzQ291bnQ9ZVtmKytdLE8ueGNiPTIrKDE1JmVbZisrXSksTy55Y2I9MisoMTUmZVtmKytdKTt2YXIgRj1lW2YrK107aWYoTy5zZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzPSEhKDEmRiksTy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzPSEhKDImRiksTy50ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3M9ISEoNCZGKSxPLnZlcnRpY2FsbHlTdHJpcGU9ISEoOCZGKSxPLnByZWRpY3RhYmxlVGVybWluYXRpb249ISEoMTYmRiksTy5zZWdtZW50YXRpb25TeW1ib2xVc2VkPSEhKDMyJkYpLE8ucmV2ZXJzaWJsZVRyYW5zZm9ybWF0aW9uPWVbZisrXSxPLmVudHJvcHlDb2RlcldpdGhDdXN0b21QcmVjaW5jdHMpe2Zvcih2YXIgTD1bXTtmPHYrYzspe3ZhciBEPWVbZisrXTtMLnB1c2goe1BQeDoxNSZELFBQeTpEPj40fSl9Ty5wcmVjaW5jdHNTaXplcz1MfXZhciBOPVtdO2lmKE8uc2VsZWN0aXZlQXJpdGhtZXRpY0NvZGluZ0J5cGFzcyYmTi5wdXNoKCJzZWxlY3RpdmVBcml0aG1ldGljQ29kaW5nQnlwYXNzIiksTy5yZXNldENvbnRleHRQcm9iYWJpbGl0aWVzJiZOLnB1c2goInJlc2V0Q29udGV4dFByb2JhYmlsaXRpZXMiKSxPLnRlcm1pbmF0aW9uT25FYWNoQ29kaW5nUGFzcyYmTi5wdXNoKCJ0ZXJtaW5hdGlvbk9uRWFjaENvZGluZ1Bhc3MiKSxPLnZlcnRpY2FsbHlTdHJpcGUmJk4ucHVzaCgidmVydGljYWxseVN0cmlwZSIpLE8ucHJlZGljdGFibGVUZXJtaW5hdGlvbiYmTi5wdXNoKCJwcmVkaWN0YWJsZVRlcm1pbmF0aW9uIiksTi5sZW5ndGg+MCl0aHJvdyBsPSEwLG5ldyBFcnJvcigiVW5zdXBwb3J0ZWQgQ09EIG9wdGlvbnMgKCIrTi5qb2luKCIsICIpKyIpIik7cy5tYWluSGVhZGVyP3MuQ09EPU86KHMuY3VycmVudFRpbGUuQ09EPU8scy5jdXJyZW50VGlsZS5DT0M9W10pO2JyZWFrO2Nhc2UgNjU0MjQ6dj0oMCxuLnJlYWRVaW50MTYpKGUsYyksKGc9e30pLmluZGV4PSgwLG4ucmVhZFVpbnQxNikoZSxjKzIpLGcubGVuZ3RoPSgwLG4ucmVhZFVpbnQzMikoZSxjKzQpLGcuZGF0YUVuZD1nLmxlbmd0aCtjLTIsZy5wYXJ0SW5kZXg9ZVtjKzhdLGcucGFydHNDb3VudD1lW2MrOV0scy5tYWluSGVhZGVyPSExLDA9PT1nLnBhcnRJbmRleCYmKGcuQ09EPXMuQ09ELGcuQ09DPXMuQ09DLnNsaWNlKDApLGcuUUNEPXMuUUNELGcuUUNDPXMuUUNDLnNsaWNlKDApKSxzLmN1cnJlbnRUaWxlPWc7YnJlYWs7Y2FzZSA2NTQyNzowPT09KGc9cy5jdXJyZW50VGlsZSkucGFydEluZGV4JiYoUyhzLGcuaW5kZXgpLHkocykpLGIocyxlLGMsdj1nLmRhdGFFbmQtYyk7YnJlYWs7Y2FzZSA2NTM2NTpjYXNlIDY1MzY3OmNhc2UgNjUzNjg6Y2FzZSA2NTM4MDp2PSgwLG4ucmVhZFVpbnQxNikoZSxjKTticmVhaztjYXNlIDY1MzYzOnRocm93IG5ldyBFcnJvcigiQ29kZXN0cmVhbSBjb2RlIDB4RkY1MyAoQ09DKSBpcyBub3QgaW1wbGVtZW50ZWQiKTtkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiVW5rbm93biBjb2Rlc3RyZWFtIGNvZGU6ICIrdS50b1N0cmluZygxNikpfWMrPXZ9fWNhdGNoKGUpe2lmKGx8fHRoaXMuZmFpbE9uQ29ycnVwdGVkSW1hZ2UpdGhyb3cgbmV3IGkoZS5tZXNzYWdlKTsoMCxuLndhcm4pKCJKUFg6IFRyeWluZyB0byByZWNvdmVyIGZyb206ICIrZS5tZXNzYWdlKX10aGlzLnRpbGVzPWZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLlNJWixyPWUuY29tcG9uZW50cyxuPXQuQ3NpeixhPVtdLGk9MCxvPWUudGlsZXMubGVuZ3RoO2k8bztpKyspe3ZhciBzLGw9ZS50aWxlc1tpXSxjPVtdO2ZvcihzPTA7czxuO3MrKyljW3NdPWsoZSxsLHMpO3ZhciB1LGYsaCxkLHAsbSxnLHY9Y1swXSx5PW5ldyBVaW50OENsYW1wZWRBcnJheSh2Lml0ZW1zLmxlbmd0aCpuKSxiPXtsZWZ0OnYubGVmdCx0b3A6di50b3Asd2lkdGg6di53aWR0aCxoZWlnaHQ6di5oZWlnaHQsaXRlbXM6eX0sdz0wO2lmKGwuY29kaW5nU3R5bGVEZWZhdWx0UGFyYW1ldGVycy5tdWx0aXBsZUNvbXBvbmVudFRyYW5zZm9ybSl7dmFyIFM9ND09PW4sXz1jWzBdLml0ZW1zLHg9Y1sxXS5pdGVtcyxBPWNbMl0uaXRlbXMsQz1TP2NbM10uaXRlbXM6bnVsbDt1PXJbMF0ucHJlY2lzaW9uLTgsZj0uNSsoMTI4PDx1KTt2YXIgUD1sLmNvbXBvbmVudHNbMF0sRT1uLTM7aWYoZD1fLmxlbmd0aCxQLmNvZGluZ1N0eWxlUGFyYW1ldGVycy5yZXZlcnNpYmxlVHJhbnNmb3JtYXRpb24pZm9yKGg9MDtoPGQ7aCsrLHcrPUUpe3A9X1toXStmLG09eFtoXSxnPUFbaF07dmFyIFQ9cC0oZyttPj4yKTt5W3crK109VCtnPj51LHlbdysrXT1UPj51LHlbdysrXT1UK20+PnV9ZWxzZSBmb3IoaD0wO2g8ZDtoKyssdys9RSlwPV9baF0rZixtPXhbaF0sZz1BW2hdLHlbdysrXT1wKzEuNDAyKmc+PnUseVt3KytdPXAtLjM0NDEzKm0tLjcxNDE0Kmc+PnUseVt3KytdPXArMS43NzIqbT4+dTtpZihTKWZvcihoPTAsdz0zO2g8ZDtoKyssdys9NCl5W3ddPUNbaF0rZj4+dX1lbHNlIGZvcihzPTA7czxuO3MrKyl7dmFyIFI9Y1tzXS5pdGVtcztmb3IodT1yW3NdLnByZWNpc2lvbi04LGY9LjUrKDEyODw8dSksdz1zLGg9MCxkPVIubGVuZ3RoO2g8ZDtoKyspeVt3XT1SW2hdK2Y+PnUsdys9bn1hLnB1c2goYil9cmV0dXJuIGF9KHMpLHRoaXMud2lkdGg9cy5TSVouWHNpei1zLlNJWi5YT3Npeix0aGlzLmhlaWdodD1zLlNJWi5Zc2l6LXMuU0laLllPc2l6LHRoaXMuY29tcG9uZW50c0NvdW50PXMuU0laLkNzaXp9fTt2YXIgXz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt2YXIgcj0oMCxuLmxvZzIpKE1hdGgubWF4KGUsdCkpKzE7dGhpcy5sZXZlbHM9W107Zm9yKHZhciBhPTA7YTxyO2ErKyl7dmFyIGk9e3dpZHRoOmUsaGVpZ2h0OnQsaXRlbXM6W119O3RoaXMubGV2ZWxzLnB1c2goaSksZT1NYXRoLmNlaWwoZS8yKSx0PU1hdGguY2VpbCh0LzIpfX1yZXR1cm4gZS5wcm90b3R5cGU9e3Jlc2V0OmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByLG49MCxhPTA7bjx0aGlzLmxldmVscy5sZW5ndGg7KXt2YXIgaT1lK3QqKHI9dGhpcy5sZXZlbHNbbl0pLndpZHRoO2lmKHZvaWQgMCE9PXIuaXRlbXNbaV0pe2E9ci5pdGVtc1tpXTticmVha31yLmluZGV4PWksZT4+PTEsdD4+PTEsbisrfW4tLSwocj10aGlzLmxldmVsc1tuXSkuaXRlbXNbci5pbmRleF09YSx0aGlzLmN1cnJlbnRMZXZlbD1uLGRlbGV0ZSB0aGlzLnZhbHVlfSxpbmNyZW1lbnRWYWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTtlLml0ZW1zW2UuaW5kZXhdKyt9LG5leHRMZXZlbDpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudExldmVsLHQ9dGhpcy5sZXZlbHNbZV0scj10Lml0ZW1zW3QuaW5kZXhdO3JldHVybi0tZTwwPyh0aGlzLnZhbHVlPXIsITEpOih0aGlzLmN1cnJlbnRMZXZlbD1lLCh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yLCEwKX19LGV9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBhPSgwLG4ubG9nMikoTWF0aC5tYXgoZSx0KSkrMTt0aGlzLmxldmVscz1bXTtmb3IodmFyIGk9MDtpPGE7aSsrKXtmb3IodmFyIG89bmV3IFVpbnQ4QXJyYXkoZSp0KSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKW9bc109cjt2YXIgYz17d2lkdGg6ZSxoZWlnaHQ6dCxpdGVtczpvfTt0aGlzLmxldmVscy5wdXNoKGMpLGU9TWF0aC5jZWlsKGUvMiksdD1NYXRoLmNlaWwodC8yKX19cmV0dXJuIGUucHJvdG90eXBlPXtyZXNldDpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTA7bjx0aGlzLmxldmVscy5sZW5ndGg7KXt2YXIgYT10aGlzLmxldmVsc1tuXSxpPWUrdCphLndpZHRoO2EuaW5kZXg9aTt2YXIgbz1hLml0ZW1zW2ldO2lmKDI1NT09PW8pYnJlYWs7aWYobz5yKXJldHVybiB0aGlzLmN1cnJlbnRMZXZlbD1uLHRoaXMucHJvcGFnYXRlVmFsdWVzKCksITE7ZT4+PTEsdD4+PTEsbisrfXJldHVybiB0aGlzLmN1cnJlbnRMZXZlbD1uLTEsITB9LGluY3JlbWVudFZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubGV2ZWxzW3RoaXMuY3VycmVudExldmVsXTt0Lml0ZW1zW3QuaW5kZXhdPWUrMSx0aGlzLnByb3BhZ2F0ZVZhbHVlcygpfSxwcm9wYWdhdGVWYWx1ZXM6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07LS1lPj0wOykodD10aGlzLmxldmVsc1tlXSkuaXRlbXNbdC5pbmRleF09cn0sbmV4dExldmVsOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jdXJyZW50TGV2ZWwsdD10aGlzLmxldmVsc1tlXSxyPXQuaXRlbXNbdC5pbmRleF07cmV0dXJuIHQuaXRlbXNbdC5pbmRleF09MjU1LCEoLS1lPDB8fCh0aGlzLmN1cnJlbnRMZXZlbD1lLCh0PXRoaXMubGV2ZWxzW2VdKS5pdGVtc1t0LmluZGV4XT1yLDApKX19LGV9KCksQT1mdW5jdGlvbigpe3ZhciBlPW5ldyBVaW50OEFycmF5KFswLDUsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDEsNiw4LDAsMyw3LDgsMCw0LDcsOCwwLDAsMCwwLDAsMiw2LDgsMCwzLDcsOCwwLDQsNyw4LDAsMCwwLDAsMCwyLDYsOCwwLDMsNyw4LDAsNCw3LDgsMCwwLDAsMCwwLDIsNiw4LDAsMyw3LDgsMCw0LDcsOF0pLHQ9bmV3IFVpbnQ4QXJyYXkoWzAsMyw0LDAsNSw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMSwzLDQsMCw2LDcsNywwLDgsOCw4LDAsMCwwLDAsMCwyLDMsNCwwLDYsNyw3LDAsOCw4LDgsMCwwLDAsMCwwLDIsMyw0LDAsNiw3LDcsMCw4LDgsOCwwLDAsMCwwLDAsMiwzLDQsMCw2LDcsNywwLDgsOCw4XSkscj1uZXcgVWludDhBcnJheShbMCwxLDIsMCwxLDIsMiwwLDIsMiwyLDAsMCwwLDAsMCwzLDQsNSwwLDQsNSw1LDAsNSw1LDUsMCwwLDAsMCwwLDYsNyw3LDAsNyw3LDcsMCw3LDcsNywwLDAsMCwwLDAsOCw4LDgsMCw4LDgsOCwwLDgsOCw4LDAsMCwwLDAsMCw4LDgsOCwwLDgsOCw4LDAsOCw4LDhdKTtmdW5jdGlvbiBuKG4sYSxpLG8scyl7dGhpcy53aWR0aD1uLHRoaXMuaGVpZ2h0PWEsdGhpcy5jb250ZXh0TGFiZWxUYWJsZT0iSEgiPT09aT9yOiJITCI9PT1pP3Q6ZTt2YXIgbD1uKmE7dGhpcy5uZWlnaGJvcnNTaWduaWZpY2FuY2U9bmV3IFVpbnQ4QXJyYXkobCksdGhpcy5jb2VmZmljZW50c1NpZ249bmV3IFVpbnQ4QXJyYXkobCksdGhpcy5jb2VmZmljZW50c01hZ25pdHVkZT1zPjE0P25ldyBVaW50MzJBcnJheShsKTpzPjY/bmV3IFVpbnQxNkFycmF5KGwpOm5ldyBVaW50OEFycmF5KGwpLHRoaXMucHJvY2Vzc2luZ0ZsYWdzPW5ldyBVaW50OEFycmF5KGwpO3ZhciBjPW5ldyBVaW50OEFycmF5KGwpO2lmKDAhPT1vKWZvcih2YXIgdT0wO3U8bDt1KyspY1t1XT1vO3RoaXMuYml0c0RlY29kZWQ9Yyx0aGlzLnJlc2V0KCl9cmV0dXJuIG4ucHJvdG90eXBlPXtzZXREZWNvZGVyOmZ1bmN0aW9uKGUpe3RoaXMuZGVjb2Rlcj1lfSxyZXNldDpmdW5jdGlvbigpe3RoaXMuY29udGV4dHM9bmV3IEludDhBcnJheSgxOSksdGhpcy5jb250ZXh0c1swXT04LHRoaXMuY29udGV4dHNbMTddPTkyLHRoaXMuY29udGV4dHNbMThdPTZ9LHNldE5laWdoYm9yc1NpZ25pZmljYW5jZTpmdW5jdGlvbihlLHQscil7dmFyIG4sYT10aGlzLm5laWdoYm9yc1NpZ25pZmljYW5jZSxpPXRoaXMud2lkdGgsbz10aGlzLmhlaWdodCxzPXQ+MCxsPXQrMTxpO2U+MCYmKG49ci1pLHMmJihhW24tMV0rPTE2KSxsJiYoYVtuKzFdKz0xNiksYVtuXSs9NCksZSsxPG8mJihuPXIraSxzJiYoYVtuLTFdKz0xNiksbCYmKGFbbisxXSs9MTYpLGFbbl0rPTQpLHMmJihhW3ItMV0rPTEpLGwmJihhW3IrMV0rPTEpLGFbcl18PTEyOH0scnVuU2lnbmlmaWNhbmNlUHJvcGFnYXRpb25QYXNzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPXRoaXMuZGVjb2Rlcix0PXRoaXMud2lkdGgscj10aGlzLmhlaWdodCxuPXRoaXMuY29lZmZpY2VudHNNYWduaXR1ZGUsYT10aGlzLmNvZWZmaWNlbnRzU2lnbixpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5wcm9jZXNzaW5nRmxhZ3Mscz10aGlzLmNvbnRleHRzLGw9dGhpcy5jb250ZXh0TGFiZWxUYWJsZSxjPXRoaXMuYml0c0RlY29kZWQsdT0wO3U8cjt1Kz00KWZvcih2YXIgZj0wO2Y8dDtmKyspZm9yKHZhciBoPXUqdCtmLGQ9MDtkPDQ7ZCsrLGgrPXQpe3ZhciBwPXUrZDtpZihwPj1yKWJyZWFrO2lmKG9baF0mPS0yLCFuW2hdJiZpW2hdKXt2YXIgbT1sW2lbaF1dO2lmKGUucmVhZEJpdChzLG0pKXt2YXIgZz10aGlzLmRlY29kZVNpZ25CaXQocCxmLGgpO2FbaF09ZyxuW2hdPTEsdGhpcy5zZXROZWlnaGJvcnNTaWduaWZpY2FuY2UocCxmLGgpLG9baF18PTJ9Y1toXSsrLG9baF18PTF9fX0sZGVjb2RlU2lnbkJpdDpmdW5jdGlvbihlLHQscil7dmFyIG4sYSxpLG8scyxsLGM9dGhpcy53aWR0aCx1PXRoaXMuaGVpZ2h0LGY9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxoPXRoaXMuY29lZmZpY2VudHNTaWduO289dD4wJiYwIT09ZltyLTFdLHQrMTxjJiYwIT09ZltyKzFdPyhpPWhbcisxXSxuPW8/MS1pLShhPWhbci0xXSk6MS1pLWkpOm49bz8xLShhPWhbci0xXSktYTowO3ZhciBkPTMqbjtyZXR1cm4gbz1lPjAmJjAhPT1mW3ItY10sZSsxPHUmJjAhPT1mW3IrY10/KGk9aFtyK2NdLG49bz8xLWktKGE9aFtyLWNdKStkOjEtaS1pK2QpOm49bz8xLShhPWhbci1jXSktYStkOmQsbj49MD8ocz05K24sbD10aGlzLmRlY29kZXIucmVhZEJpdCh0aGlzLmNvbnRleHRzLHMpKToocz05LW4sbD0xXnRoaXMuZGVjb2Rlci5yZWFkQml0KHRoaXMuY29udGV4dHMscykpLGx9LHJ1bk1hZ25pdHVkZVJlZmluZW1lbnRQYXNzOmZ1bmN0aW9uKCl7Zm9yKHZhciBlLHQ9dGhpcy5kZWNvZGVyLHI9dGhpcy53aWR0aCxuPXRoaXMuaGVpZ2h0LGE9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxpPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLG89dGhpcy5jb250ZXh0cyxzPXRoaXMuYml0c0RlY29kZWQsbD10aGlzLnByb2Nlc3NpbmdGbGFncyxjPXIqbix1PTQqcixmPTA7ZjxjO2Y9ZSl7ZT1NYXRoLm1pbihjLGYrdSk7Zm9yKHZhciBoPTA7aDxyO2grKylmb3IodmFyIGQ9ZitoO2Q8ZTtkKz1yKWlmKGFbZF0mJjA9PSgxJmxbZF0pKXt2YXIgcD0xNjswIT0oMiZsW2RdKSYmKGxbZF1ePTIscD0wPT0oMTI3JmlbZF0pPzE1OjE0KTt2YXIgbT10LnJlYWRCaXQobyxwKTthW2RdPWFbZF08PDF8bSxzW2RdKyssbFtkXXw9MX19fSxydW5DbGVhbnVwUGFzczpmdW5jdGlvbigpe2Zvcih2YXIgZSx0PXRoaXMuZGVjb2RlcixyPXRoaXMud2lkdGgsbj10aGlzLmhlaWdodCxhPXRoaXMubmVpZ2hib3JzU2lnbmlmaWNhbmNlLGk9dGhpcy5jb2VmZmljZW50c01hZ25pdHVkZSxvPXRoaXMuY29lZmZpY2VudHNTaWduLHM9dGhpcy5jb250ZXh0cyxsPXRoaXMuY29udGV4dExhYmVsVGFibGUsYz10aGlzLmJpdHNEZWNvZGVkLHU9dGhpcy5wcm9jZXNzaW5nRmxhZ3MsZj1yLGg9MipyLGQ9MypyLHA9MDtwPG47cD1lKXtlPU1hdGgubWluKHArNCxuKTtmb3IodmFyIG09cCpyLGc9cCszPG4sdj0wO3Y8cjt2Kyspe3ZhciB5LGI9bSt2LHc9MCxrPWIsUz1wO2lmKGcmJjA9PT11W2JdJiYwPT09dVtiK2ZdJiYwPT09dVtiK2hdJiYwPT09dVtiK2RdJiYwPT09YVtiXSYmMD09PWFbYitmXSYmMD09PWFbYitoXSYmMD09PWFbYitkXSl7aWYoIXQucmVhZEJpdChzLDE4KSl7Y1tiXSsrLGNbYitmXSsrLGNbYitoXSsrLGNbYitkXSsrO2NvbnRpbnVlfTAhPSh3PXQucmVhZEJpdChzLDE3KTw8MXx0LnJlYWRCaXQocywxNykpJiYoUz1wK3csays9dypyKSx5PXRoaXMuZGVjb2RlU2lnbkJpdChTLHYsayksb1trXT15LGlba109MSx0aGlzLnNldE5laWdoYm9yc1NpZ25pZmljYW5jZShTLHYsayksdVtrXXw9MixrPWI7Zm9yKHZhciBfPXA7Xzw9UztfKyssays9ciljW2tdKys7dysrfWZvcihTPXArdztTPGU7UysrLGsrPXIpaWYoIWlba10mJjA9PSgxJnVba10pKXt2YXIgeD1sW2Fba11dOzE9PT10LnJlYWRCaXQocyx4KSYmKHk9dGhpcy5kZWNvZGVTaWduQml0KFMsdixrKSxvW2tdPXksaVtrXT0xLHRoaXMuc2V0TmVpZ2hib3JzU2lnbmlmaWNhbmNlKFMsdixrKSx1W2tdfD0yKSxjW2tdKyt9fX19LGNoZWNrU2VnbWVudGF0aW9uU3ltYm9sOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5kZWNvZGVyLHQ9dGhpcy5jb250ZXh0cztpZigxMCE9KGUucmVhZEJpdCh0LDE3KTw8M3xlLnJlYWRCaXQodCwxNyk8PDJ8ZS5yZWFkQml0KHQsMTcpPDwxfGUucmVhZEJpdCh0LDE3KSkpdGhyb3cgbmV3IGkoIkludmFsaWQgc2VnbWVudGF0aW9uIHN5bWJvbCIpfX0sbn0oKSxDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe31yZXR1cm4gZS5wcm90b3R5cGUuY2FsY3VsYXRlPWZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49ZVswXSxhPTEsaT1lLmxlbmd0aDthPGk7YSsrKW49dGhpcy5pdGVyYXRlKG4sZVthXSx0LHIpO3JldHVybiBufSxlLnByb3RvdHlwZS5leHRlbmQ9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXQtMSxhPXQrMSxpPXQrci0yLG89dCtyO2Vbbi0tXT1lW2ErK10sZVtvKytdPWVbaS0tXSxlW24tLV09ZVthKytdLGVbbysrXT1lW2ktLV0sZVtuLS1dPWVbYSsrXSxlW28rK109ZVtpLS1dLGVbbl09ZVthXSxlW29dPWVbaV19LGUucHJvdG90eXBlLml0ZXJhdGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGEsaSxvLHMsbCxjLHU9ZS53aWR0aCxmPWUuaGVpZ2h0LGg9ZS5pdGVtcyxkPXQud2lkdGgscD10LmhlaWdodCxtPXQuaXRlbXM7Zm9yKG89MCxhPTA7YTxmO2ErKylmb3Iocz0yKmEqZCxpPTA7aTx1O2krKyxvKysscys9MiltW3NdPWhbb107aD1lLml0ZW1zPW51bGw7dmFyIGc9bmV3IEZsb2F0MzJBcnJheShkKzgpO2lmKDE9PT1kKXtpZigwIT0oMSZyKSlmb3IoYz0wLG89MDtjPHA7YysrLG8rPWQpbVtvXSo9LjV9ZWxzZSBmb3IoYz0wLG89MDtjPHA7YysrLG8rPWQpZy5zZXQobS5zdWJhcnJheShvLG8rZCksNCksdGhpcy5leHRlbmQoZyw0LGQpLHRoaXMuZmlsdGVyKGcsNCxkKSxtLnNldChnLnN1YmFycmF5KDQsNCtkKSxvKTt2YXIgdj0xNix5PVtdO2ZvcihhPTA7YTx2O2ErKyl5LnB1c2gobmV3IEZsb2F0MzJBcnJheShwKzgpKTt2YXIgYix3PTA7aWYoZT00K3AsMT09PXApe2lmKDAhPSgxJm4pKWZvcihsPTA7bDxkO2wrKyltW2xdKj0uNX1lbHNlIGZvcihsPTA7bDxkO2wrKyl7aWYoMD09PXcpe2Zvcih2PU1hdGgubWluKGQtbCx2KSxvPWwscz00O3M8ZTtvKz1kLHMrKylmb3IoYj0wO2I8djtiKyspeVtiXVtzXT1tW28rYl07dz12fXZhciBrPXlbLS13XTtpZih0aGlzLmV4dGVuZChrLDQscCksdGhpcy5maWx0ZXIoayw0LHApLDA9PT13KWZvcihvPWwtdisxLHM9NDtzPGU7bys9ZCxzKyspZm9yKGI9MDtiPHY7YisrKW1bbytiXT15W2JdW3NdfXJldHVybnt3aWR0aDpkLGhlaWdodDpwLGl0ZW1zOm19fSxlfSgpLFA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Qy5jYWxsKHRoaXMpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHM9cj4+MSxsPS0xLjU4NjEzNDM0MjA1OTkyNCxjPS0uMDUyOTgwMTE4NTcyOTYxLHU9Ljg4MjkxMTA3NTUzMDkzNCxmPS40NDM1MDY4NTIwNDM5NzEsaD0xLjIzMDE3NDEwNDkxNDAwMTtmb3Iobj0odHw9MCktMyxhPXMrNDthLS07bis9MillW25dKj0uODEyODkzMDY2MTE1OTYwOTtmb3IoaT1mKmVbKG49dC0yKS0xXSxhPXMrMzthLS0mJihvPWYqZVtuKzFdLGVbbl09aCplW25dLWktbyxhLS0pO24rPTIpaT1mKmVbKG4rPTIpKzFdLGVbbl09aCplW25dLWktbztmb3IoaT11KmVbKG49dC0xKS0xXSxhPXMrMjthLS0mJihvPXUqZVtuKzFdLGVbbl0tPWkrbyxhLS0pO24rPTIpaT11KmVbKG4rPTIpKzFdLGVbbl0tPWkrbztmb3IoaT1jKmVbKG49dCktMV0sYT1zKzE7YS0tJiYobz1jKmVbbisxXSxlW25dLT1pK28sYS0tKTtuKz0yKWk9YyplWyhuKz0yKSsxXSxlW25dLT1pK287aWYoMCE9PXMpZm9yKGk9bCplWyhuPXQrMSktMV0sYT1zO2EtLSYmKG89bCplW24rMV0sZVtuXS09aStvLGEtLSk7bis9MilpPWwqZVsobis9MikrMV0sZVtuXS09aStvfSxlfSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7Qy5jYWxsKHRoaXMpfXJldHVybiBlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKEMucHJvdG90eXBlKSxlLnByb3RvdHlwZS5maWx0ZXI9ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaT1yPj4xO2ZvcihuPXR8PTAsYT1pKzE7YS0tO24rPTIpZVtuXS09ZVtuLTFdK2VbbisxXSsyPj4yO2ZvcihuPXQrMSxhPWk7YS0tO24rPTIpZVtuXSs9ZVtuLTFdK2VbbisxXT4+MX0sZX0oKTtyZXR1cm4gdH0oKTt0LkpweEltYWdlPW99LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuY2FsY3VsYXRlU0hBNTEyPXQuY2FsY3VsYXRlU0hBMzg0PXQuY2FsY3VsYXRlU0hBMjU2PXQuY2FsY3VsYXRlTUQ1PXQuUERGMjA9dC5QREYxNz10LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9dC5BUkNGb3VyQ2lwaGVyPXQuQUVTMjU2Q2lwaGVyPXQuQUVTMTI4Q2lwaGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpLGk9cigxNTcpO2Z1bmN0aW9uIG8oZSl7cmV0dXJuKG89ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBzKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09byh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIGwoZSl7cmV0dXJuKGw9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGMoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdShlLHQpfWZ1bmN0aW9uIHUoZSx0KXtyZXR1cm4odT1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gZihlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBkKGUsdCxyKXtyZXR1cm4gdCYmaChlLnByb3RvdHlwZSx0KSxyJiZoKGUsciksZX12YXIgcD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5hPTAsdGhpcy5iPTA7dmFyIHQscixuPW5ldyBVaW50OEFycmF5KDI1NiksYT0wLGk9ZS5sZW5ndGg7Zm9yKHQ9MDt0PDI1NjsrK3Qpblt0XT10O2Zvcih0PTA7dDwyNTY7Kyt0KWE9YSsocj1uW3RdKStlW3QlaV0mMjU1LG5bdF09blthXSxuW2FdPXI7dGhpcy5zPW59cmV0dXJuIGUucHJvdG90eXBlPXtlbmNyeXB0QmxvY2s6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9ZS5sZW5ndGgsaT10aGlzLmEsbz10aGlzLmIscz10aGlzLnMsbD1uZXcgVWludDhBcnJheShhKTtmb3IodD0wO3Q8YTsrK3Qpbj1zW289bysocj1zW2k9aSsxJjI1NV0pJjI1NV0sc1tpXT1uLHNbb109cixsW3RdPWVbdF1ec1tyK24mMjU1XTtyZXR1cm4gdGhpcy5hPWksdGhpcy5iPW8sbH19LGUucHJvdG90eXBlLmRlY3J5cHRCbG9jaz1lLnByb3RvdHlwZS5lbmNyeXB0QmxvY2ssZX0oKTt0LkFSQ0ZvdXJDaXBoZXI9cDt2YXIgbSxnLHY9KG09bmV3IFVpbnQ4QXJyYXkoWzcsMTIsMTcsMjIsNywxMiwxNywyMiw3LDEyLDE3LDIyLDcsMTIsMTcsMjIsNSw5LDE0LDIwLDUsOSwxNCwyMCw1LDksMTQsMjAsNSw5LDE0LDIwLDQsMTEsMTYsMjMsNCwxMSwxNiwyMyw0LDExLDE2LDIzLDQsMTEsMTYsMjMsNiwxMCwxNSwyMSw2LDEwLDE1LDIxLDYsMTAsMTUsMjEsNiwxMCwxNSwyMV0pLGc9bmV3IEludDMyQXJyYXkoWy02ODA4NzY5MzYsLTM4OTU2NDU4Niw2MDYxMDU4MTksLTEwNDQ1MjUzMzAsLTE3NjQxODg5NywxMjAwMDgwNDI2LC0xNDczMjMxMzQxLC00NTcwNTk4MywxNzcwMDM1NDE2LC0xOTU4NDE0NDE3LC00MjA2MywtMTk5MDQwNDE2MiwxODA0NjAzNjgyLC00MDM0MTEwMSwtMTUwMjAwMjI5MCwxMjM2NTM1MzI5LC0xNjU3OTY1MTAsLTEwNjk1MDE2MzIsNjQzNzE3NzEzLC0zNzM4OTczMDIsLTcwMTU1ODY5MSwzODAxNjA4MywtNjYwNDc4MzM1LC00MDU1Mzc4NDgsNTY4NDQ2NDM4LC0xMDE5ODAzNjkwLC0xODczNjM5NjEsMTE2MzUzMTUwMSwtMTQ0NDY4MTQ2NywtNTE0MDM3ODQsMTczNTMyODQ3MywtMTkyNjYwNzczNCwtMzc4NTU4LC0yMDIyNTc0NDYzLDE4MzkwMzA1NjIsLTM1MzA5NTU2LC0xNTMwOTkyMDYwLDEyNzI4OTMzNTMsLTE1NTQ5NzYzMiwtMTA5NDczMDY0MCw2ODEyNzkxNzQsLTM1ODUzNzIyMiwtNzIyNTIxOTc5LDc2MDI5MTg5LC02NDAzNjQ0ODcsLTQyMTgxNTgzNSw1MzA3NDI1MjAsLTk5NTMzODY1MSwtMTk4NjMwODQ0LDExMjY4OTE0MTUsLTE0MTYzNTQ5MDUsLTU3NDM0MDU1LDE3MDA0ODU1NzEsLTE4OTQ5ODY2MDYsLTEwNTE1MjMsLTIwNTQ5MjI3OTksMTg3MzMxMzM1OSwtMzA2MTE3NDQsLTE1NjAxOTgzODAsMTMwOTE1MTY0OSwtMTQ1NTIzMDcwLC0xMTIwMjEwMzc5LDcxODc4NzI1OSwtMzQzNDg1NTUxXSksZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvPTE3MzI1ODQxOTMscz0tMjcxNzMzODc5LGw9LTE3MzI1ODQxOTQsYz0yNzE3MzM4NzgsdT1yKzcyJi02NCxmPW5ldyBVaW50OEFycmF5KHUpO2ZvcihuPTA7bjxyOysrbilmW25dPWVbdCsrXTtmb3IoZltuKytdPTEyOCxpPXUtODtuPGk7KWZbbisrXT0wO2ZbbisrXT1yPDwzJjI1NSxmW24rK109cj4+NSYyNTUsZltuKytdPXI+PjEzJjI1NSxmW24rK109cj4+MjEmMjU1LGZbbisrXT1yPj4+MjkmMjU1LGZbbisrXT0wLGZbbisrXT0wLGZbbisrXT0wO3ZhciBoPW5ldyBJbnQzMkFycmF5KDE2KTtmb3Iobj0wO248dTspe2ZvcihhPTA7YTwxNjsrK2Esbis9NCloW2FdPWZbbl18ZltuKzFdPDw4fGZbbisyXTw8MTZ8ZltuKzNdPDwyNDt2YXIgZCxwLHY9byx5PXMsYj1sLHc9Yztmb3IoYT0wO2E8NjQ7KythKXthPDE2PyhkPXkmYnx+eSZ3LHA9YSk6YTwzMj8oZD13Jnl8fncmYixwPTUqYSsxJjE1KTphPDQ4PyhkPXleYl53LHA9MyphKzUmMTUpOihkPWJeKHl8fncpLHA9NyphJjE1KTt2YXIgaz13LFM9ditkK2dbYV0raFtwXXwwLF89bVthXTt3PWIsYj15LHk9eSsoUzw8X3xTPj4+MzItXyl8MCx2PWt9bz1vK3Z8MCxzPXMreXwwLGw9bCtifDAsYz1jK3d8MH1yZXR1cm4gbmV3IFVpbnQ4QXJyYXkoWzI1NSZvLG8+PjgmMjU1LG8+PjE2JjI1NSxvPj4+MjQmMjU1LDI1NSZzLHM+PjgmMjU1LHM+PjE2JjI1NSxzPj4+MjQmMjU1LDI1NSZsLGw+PjgmMjU1LGw+PjE2JjI1NSxsPj4+MjQmMjU1LDI1NSZjLGM+PjgmMjU1LGM+PjE2JjI1NSxjPj4+MjQmMjU1XSl9KTt0LmNhbGN1bGF0ZU1ENT12O3ZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuaGlnaD0wfGUsdGhpcy5sb3c9MHx0fXJldHVybiBlLnByb3RvdHlwZT17YW5kOmZ1bmN0aW9uKGUpe3RoaXMuaGlnaCY9ZS5oaWdoLHRoaXMubG93Jj1lLmxvd30seG9yOmZ1bmN0aW9uKGUpe3RoaXMuaGlnaF49ZS5oaWdoLHRoaXMubG93Xj1lLmxvd30sb3I6ZnVuY3Rpb24oZSl7dGhpcy5oaWdofD1lLmhpZ2gsdGhpcy5sb3d8PWUubG93fSxzaGlmdFJpZ2h0OmZ1bmN0aW9uKGUpe2U+PTMyPyh0aGlzLmxvdz10aGlzLmhpZ2g+Pj5lLTMyfDAsdGhpcy5oaWdoPTApOih0aGlzLmxvdz10aGlzLmxvdz4+PmV8dGhpcy5oaWdoPDwzMi1lLHRoaXMuaGlnaD10aGlzLmhpZ2g+Pj5lfDApfSxzaGlmdExlZnQ6ZnVuY3Rpb24oZSl7ZT49MzI/KHRoaXMuaGlnaD10aGlzLmxvdzw8ZS0zMix0aGlzLmxvdz0wKToodGhpcy5oaWdoPXRoaXMuaGlnaDw8ZXx0aGlzLmxvdz4+PjMyLWUsdGhpcy5sb3c9dGhpcy5sb3c8PGUpfSxyb3RhdGVSaWdodDpmdW5jdGlvbihlKXt2YXIgdCxyOzMyJmU/KHI9dGhpcy5sb3csdD10aGlzLmhpZ2gpOih0PXRoaXMubG93LHI9dGhpcy5oaWdoKSxlJj0zMSx0aGlzLmxvdz10Pj4+ZXxyPDwzMi1lLHRoaXMuaGlnaD1yPj4+ZXx0PDwzMi1lfSxub3Q6ZnVuY3Rpb24oKXt0aGlzLmhpZ2g9fnRoaXMuaGlnaCx0aGlzLmxvdz1+dGhpcy5sb3d9LGFkZDpmdW5jdGlvbihlKXt2YXIgdD0odGhpcy5sb3c+Pj4wKSsoZS5sb3c+Pj4wKSxyPSh0aGlzLmhpZ2g+Pj4wKSsoZS5oaWdoPj4+MCk7dD40Mjk0OTY3Mjk1JiYocis9MSksdGhpcy5sb3c9MHx0LHRoaXMuaGlnaD0wfHJ9LGNvcHlUbzpmdW5jdGlvbihlLHQpe2VbdF09dGhpcy5oaWdoPj4+MjQmMjU1LGVbdCsxXT10aGlzLmhpZ2g+PjE2JjI1NSxlW3QrMl09dGhpcy5oaWdoPj44JjI1NSxlW3QrM109MjU1JnRoaXMuaGlnaCxlW3QrNF09dGhpcy5sb3c+Pj4yNCYyNTUsZVt0KzVdPXRoaXMubG93Pj4xNiYyNTUsZVt0KzZdPXRoaXMubG93Pj44JjI1NSxlW3QrN109MjU1JnRoaXMubG93fSxhc3NpZ246ZnVuY3Rpb24oZSl7dGhpcy5oaWdoPWUuaGlnaCx0aGlzLmxvdz1lLmxvd319LGV9KCksYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXtyZXR1cm4gZT4+PnR8ZTw8MzItdH1mdW5jdGlvbiB0KGUsdCxyKXtyZXR1cm4gZSZ0Xn5lJnJ9ZnVuY3Rpb24gcihlLHQscil7cmV0dXJuIGUmdF5lJnJedCZyfWZ1bmN0aW9uIG4odCl7cmV0dXJuIGUodCwyKV5lKHQsMTMpXmUodCwyMil9ZnVuY3Rpb24gYSh0KXtyZXR1cm4gZSh0LDYpXmUodCwxMSleZSh0LDI1KX1mdW5jdGlvbiBpKHQpe3JldHVybiBlKHQsNyleZSh0LDE4KV50Pj4+M312YXIgbz1bMTExNjM1MjQwOCwxODk5NDQ3NDQxLDMwNDkzMjM0NzEsMzkyMTAwOTU3Myw5NjE5ODcxNjMsMTUwODk3MDk5MywyNDUzNjM1NzQ4LDI4NzA3NjMyMjEsMzYyNDM4MTA4MCwzMTA1OTg0MDEsNjA3MjI1Mjc4LDE0MjY4ODE5ODcsMTkyNTA3ODM4OCwyMTYyMDc4MjA2LDI2MTQ4ODgxMDMsMzI0ODIyMjU4MCwzODM1MzkwNDAxLDQwMjIyMjQ3NzQsMjY0MzQ3MDc4LDYwNDgwNzYyOCw3NzAyNTU5ODMsMTI0OTE1MDEyMiwxNTU1MDgxNjkyLDE5OTYwNjQ5ODYsMjU1NDIyMDg4MiwyODIxODM0MzQ5LDI5NTI5OTY4MDgsMzIxMDMxMzY3MSwzMzM2NTcxODkxLDM1ODQ1Mjg3MTEsMTEzOTI2OTkzLDMzODI0MTg5NSw2NjYzMDcyMDUsNzczNTI5OTEyLDEyOTQ3NTczNzIsMTM5NjE4MjI5MSwxNjk1MTgzNzAwLDE5ODY2NjEwNTEsMjE3NzAyNjM1MCwyNDU2OTU2MDM3LDI3MzA0ODU5MjEsMjgyMDMwMjQxMSwzMjU5NzMwODAwLDMzNDU3NjQ3NzEsMzUxNjA2NTgxNywzNjAwMzUyODA0LDQwOTQ1NzE5MDksMjc1NDIzMzQ0LDQzMDIyNzczNCw1MDY5NDg2MTYsNjU5MDYwNTU2LDg4Mzk5Nzg3Nyw5NTgxMzk1NzEsMTMyMjgyMjIxOCwxNTM3MDAyMDYzLDE3NDc4NzM3NzksMTk1NTU2MjIyMiwyMDI0MTA0ODE1LDIyMjc3MzA0NTIsMjM2MTg1MjQyNCwyNDI4NDM2NDc0LDI3NTY3MzQxODcsMzIwNDAzMTQ3OSwzMzI5MzI1Mjk4XTtyZXR1cm4gZnVuY3Rpb24ocyxsLGMpe3ZhciB1LGYsaCxkPTE3NzkwMzM3MDMscD0zMTQ0MTM0Mjc3LG09MTAxMzkwNDI0MixnPTI3NzM0ODA3NjIsdj0xMzU5ODkzMTE5LHk9MjYwMDgyMjkyNCxiPTUyODczNDYzNSx3PTE1NDE0NTkyMjUsaz02NCpNYXRoLmNlaWwoKGMrOSkvNjQpLFM9bmV3IFVpbnQ4QXJyYXkoayk7Zm9yKHU9MDt1PGM7Kyt1KVNbdV09c1tsKytdO2ZvcihTW3UrK109MTI4LGg9ay04O3U8aDspU1t1KytdPTA7U1t1KytdPTAsU1t1KytdPTAsU1t1KytdPTAsU1t1KytdPWM+Pj4yOSYyNTUsU1t1KytdPWM+PjIxJjI1NSxTW3UrK109Yz4+MTMmMjU1LFNbdSsrXT1jPj41JjI1NSxTW3UrK109Yzw8MyYyNTU7dmFyIF8seD1uZXcgVWludDMyQXJyYXkoNjQpO2Zvcih1PTA7dTxrOyl7Zm9yKGY9MDtmPDE2OysrZil4W2ZdPVNbdV08PDI0fFNbdSsxXTw8MTZ8U1t1KzJdPDw4fFNbdSszXSx1Kz00O2ZvcihmPTE2O2Y8NjQ7KytmKXhbZl09MHwoZShfPXhbZi0yXSwxNyleZShfLDE5KV5fPj4+MTApK3hbZi03XStpKHhbZi0xNV0pK3hbZi0xNl07dmFyIEEsQyxQPWQsRT1wLFQ9bSxSPWcsTz12LEk9eSxGPWIsTD13O2ZvcihmPTA7Zjw2NDsrK2YpQT1MK2EoTykrdChPLEksRikrb1tmXSt4W2ZdLEM9bihQKStyKFAsRSxUKSxMPUYsRj1JLEk9TyxPPVIrQXwwLFI9VCxUPUUsRT1QLFA9QStDfDA7ZD1kK1B8MCxwPXArRXwwLG09bStUfDAsZz1nK1J8MCx2PXYrT3wwLHk9eStJfDAsYj1iK0Z8MCx3PXcrTHwwfXJldHVybiBuZXcgVWludDhBcnJheShbZD4+MjQmMjU1LGQ+PjE2JjI1NSxkPj44JjI1NSwyNTUmZCxwPj4yNCYyNTUscD4+MTYmMjU1LHA+PjgmMjU1LDI1NSZwLG0+PjI0JjI1NSxtPj4xNiYyNTUsbT4+OCYyNTUsMjU1Jm0sZz4+MjQmMjU1LGc+PjE2JjI1NSxnPj44JjI1NSwyNTUmZyx2Pj4yNCYyNTUsdj4+MTYmMjU1LHY+PjgmMjU1LDI1NSZ2LHk+PjI0JjI1NSx5Pj4xNiYyNTUseT4+OCYyNTUsMjU1JnksYj4+MjQmMjU1LGI+PjE2JjI1NSxiPj44JjI1NSwyNTUmYix3Pj4yNCYyNTUsdz4+MTYmMjU1LHc+PjgmMjU1LDI1NSZ3XSl9fSgpO3QuY2FsY3VsYXRlU0hBMjU2PWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5ub3QoKSxhLmFuZChuKSxlLnhvcihhKX1mdW5jdGlvbiB0KGUsdCxyLG4sYSl7ZS5hc3NpZ24odCksZS5hbmQociksYS5hc3NpZ24odCksYS5hbmQobiksZS54b3IoYSksYS5hc3NpZ24ociksYS5hbmQobiksZS54b3IoYSl9ZnVuY3Rpb24gcihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgyOCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzNCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgzOSksZS54b3Iocil9ZnVuY3Rpb24gbihlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxNCksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCgxOCksZS54b3Iociksci5hc3NpZ24odCksci5yb3RhdGVSaWdodCg0MSksZS54b3Iocil9ZnVuY3Rpb24gYShlLHQscil7ZS5hc3NpZ24odCksZS5yb3RhdGVSaWdodCgxKSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDgpLGUueG9yKHIpLHIuYXNzaWduKHQpLHIuc2hpZnRSaWdodCg3KSxlLnhvcihyKX1mdW5jdGlvbiBpKGUsdCxyKXtlLmFzc2lnbih0KSxlLnJvdGF0ZVJpZ2h0KDE5KSxyLmFzc2lnbih0KSxyLnJvdGF0ZVJpZ2h0KDYxKSxlLnhvcihyKSxyLmFzc2lnbih0KSxyLnNoaWZ0UmlnaHQoNiksZS54b3Iocil9dmFyIG89W25ldyB5KDExMTYzNTI0MDgsMzYwOTc2NzQ1OCksbmV3IHkoMTg5OTQ0NzQ0MSw2MDI4OTE3MjUpLG5ldyB5KDMwNDkzMjM0NzEsMzk2NDQ4NDM5OSksbmV3IHkoMzkyMTAwOTU3MywyMTczMjk1NTQ4KSxuZXcgeSg5NjE5ODcxNjMsNDA4MTYyODQ3MiksbmV3IHkoMTUwODk3MDk5MywzMDUzODM0MjY1KSxuZXcgeSgyNDUzNjM1NzQ4LDI5Mzc2NzE1NzkpLG5ldyB5KDI4NzA3NjMyMjEsMzY2NDYwOTU2MCksbmV3IHkoMzYyNDM4MTA4MCwyNzM0ODgzMzk0KSxuZXcgeSgzMTA1OTg0MDEsMTE2NDk5NjU0MiksbmV3IHkoNjA3MjI1Mjc4LDEzMjM2MTA3NjQpLG5ldyB5KDE0MjY4ODE5ODcsMzU5MDMwNDk5NCksbmV3IHkoMTkyNTA3ODM4OCw0MDY4MTgyMzgzKSxuZXcgeSgyMTYyMDc4MjA2LDk5MTMzNjExMyksbmV3IHkoMjYxNDg4ODEwMyw2MzM4MDMzMTcpLG5ldyB5KDMyNDgyMjI1ODAsMzQ3OTc3NDg2OCksbmV3IHkoMzgzNTM5MDQwMSwyNjY2NjEzNDU4KSxuZXcgeSg0MDIyMjI0Nzc0LDk0NDcxMTEzOSksbmV3IHkoMjY0MzQ3MDc4LDIzNDEyNjI3NzMpLG5ldyB5KDYwNDgwNzYyOCwyMDA3ODAwOTMzKSxuZXcgeSg3NzAyNTU5ODMsMTQ5NTk5MDkwMSksbmV3IHkoMTI0OTE1MDEyMiwxODU2NDMxMjM1KSxuZXcgeSgxNTU1MDgxNjkyLDMxNzUyMTgxMzIpLG5ldyB5KDE5OTYwNjQ5ODYsMjE5ODk1MDgzNyksbmV3IHkoMjU1NDIyMDg4MiwzOTk5NzE5MzM5KSxuZXcgeSgyODIxODM0MzQ5LDc2Njc4NDAxNiksbmV3IHkoMjk1Mjk5NjgwOCwyNTY2NTk0ODc5KSxuZXcgeSgzMjEwMzEzNjcxLDMyMDMzMzc5NTYpLG5ldyB5KDMzMzY1NzE4OTEsMTAzNDQ1NzAyNiksbmV3IHkoMzU4NDUyODcxMSwyNDY2OTQ4OTAxKSxuZXcgeSgxMTM5MjY5OTMsMzc1ODMyNjM4MyksbmV3IHkoMzM4MjQxODk1LDE2ODcxNzkzNiksbmV3IHkoNjY2MzA3MjA1LDExODgxNzk5NjQpLG5ldyB5KDc3MzUyOTkxMiwxNTQ2MDQ1NzM0KSxuZXcgeSgxMjk0NzU3MzcyLDE1MjI4MDU0ODUpLG5ldyB5KDEzOTYxODIyOTEsMjY0MzgzMzgyMyksbmV3IHkoMTY5NTE4MzcwMCwyMzQzNTI3MzkwKSxuZXcgeSgxOTg2NjYxMDUxLDEwMTQ0Nzc0ODApLG5ldyB5KDIxNzcwMjYzNTAsMTIwNjc1OTE0MiksbmV3IHkoMjQ1Njk1NjAzNywzNDQwNzc2MjcpLG5ldyB5KDI3MzA0ODU5MjEsMTI5MDg2MzQ2MCksbmV3IHkoMjgyMDMwMjQxMSwzMTU4NDU0MjczKSxuZXcgeSgzMjU5NzMwODAwLDM1MDU5NTI2NTcpLG5ldyB5KDMzNDU3NjQ3NzEsMTA2MjE3MDA4KSxuZXcgeSgzNTE2MDY1ODE3LDM2MDYwMDgzNDQpLG5ldyB5KDM2MDAzNTI4MDQsMTQzMjcyNTc3NiksbmV3IHkoNDA5NDU3MTkwOSwxNDY3MDMxNTk0KSxuZXcgeSgyNzU0MjMzNDQsODUxMTY5NzIwKSxuZXcgeSg0MzAyMjc3MzQsMzEwMDgyMzc1MiksbmV3IHkoNTA2OTQ4NjE2LDEzNjMyNTgxOTUpLG5ldyB5KDY1OTA2MDU1NiwzNzUwNjg1NTkzKSxuZXcgeSg4ODM5OTc4NzcsMzc4NTA1MDI4MCksbmV3IHkoOTU4MTM5NTcxLDMzMTgzMDc0MjcpLG5ldyB5KDEzMjI4MjIyMTgsMzgxMjcyMzQwMyksbmV3IHkoMTUzNzAwMjA2MywyMDAzMDM0OTk1KSxuZXcgeSgxNzQ3ODczNzc5LDM2MDIwMzY4OTkpLG5ldyB5KDE5NTU1NjIyMjIsMTU3NTk5MDAxMiksbmV3IHkoMjAyNDEwNDgxNSwxMTI1NTkyOTI4KSxuZXcgeSgyMjI3NzMwNDUyLDI3MTY5MDQzMDYpLG5ldyB5KDIzNjE4NTI0MjQsNDQyNzc2MDQ0KSxuZXcgeSgyNDI4NDM2NDc0LDU5MzY5ODM0NCksbmV3IHkoMjc1NjczNDE4NywzNzMzMTEwMjQ5KSxuZXcgeSgzMjA0MDMxNDc5LDI5OTkzNTE1NzMpLG5ldyB5KDMzMjkzMjUyOTgsMzgxNTkyMDQyNyksbmV3IHkoMzM5MTU2OTYxNCwzOTI4MzgzOTAwKSxuZXcgeSgzNTE1MjY3MjcxLDU2NjI4MDcxMSksbmV3IHkoMzk0MDE4NzYwNiwzNDU0MDY5NTM0KSxuZXcgeSg0MTE4NjMwMjcxLDQwMDAyMzk5OTIpLG5ldyB5KDExNjQxODQ3NCwxOTE0MTM4NTU0KSxuZXcgeSgxNzQyOTI0MjEsMjczMTA1NTI3MCksbmV3IHkoMjg5MzgwMzU2LDMyMDM5OTMwMDYpLG5ldyB5KDQ2MDM5MzI2OSwzMjA2MjAzMTUpLG5ldyB5KDY4NTQ3MTczMyw1ODc0OTY4MzYpLG5ldyB5KDg1MjE0Mjk3MSwxMDg2NzkyODUxKSxuZXcgeSgxMDE3MDM2Mjk4LDM2NTU0MzEwMCksbmV3IHkoMTEyNjAwMDU4MCwyNjE4Mjk3Njc2KSxuZXcgeSgxMjg4MDMzNDcwLDM0MDk4NTUxNTgpLG5ldyB5KDE1MDE1MDU5NDgsNDIzNDUwOTg2NiksbmV3IHkoMTYwNzE2NzkxNSw5ODcxNjc0NjgpLG5ldyB5KDE4MTY0MDIzMTYsMTI0NjE4OTU5MSldO3JldHVybiBmdW5jdGlvbihzLGwsYyx1KXt2YXIgZixoLGQscCxtLGcsdixiOyh1PSEhdSk/KGY9bmV3IHkoMzQxODA3MDM2NSwzMjM4MzcxMDMyKSxoPW5ldyB5KDE2NTQyNzAyNTAsOTE0MTUwNjYzKSxkPW5ldyB5KDI0Mzg1MjkzNzAsODEyNzAyOTk5KSxwPW5ldyB5KDM1NTQ2MjM2MCw0MTQ0OTEyNjk3KSxtPW5ldyB5KDE3MzE0MDU0MTUsNDI5MDc3NTg1NyksZz1uZXcgeSgyMzk0MTgwMjMxLDE3NTA2MDMwMjUpLHY9bmV3IHkoMzY3NTAwODUyNSwxNjk0MDc2ODM5KSxiPW5ldyB5KDEyMDMwNjI4MTMsMzIwNDA3NTQyOCkpOihmPW5ldyB5KDE3NzkwMzM3MDMsNDA4OTIzNTcyMCksaD1uZXcgeSgzMTQ0MTM0Mjc3LDIyMjc4NzM1OTUpLGQ9bmV3IHkoMTAxMzkwNDI0Miw0MjcxMTc1NzIzKSxwPW5ldyB5KDI3NzM0ODA3NjIsMTU5NTc1MDEyOSksbT1uZXcgeSgxMzU5ODkzMTE5LDI5MTc1NjUxMzcpLGc9bmV3IHkoMjYwMDgyMjkyNCw3MjU1MTExOTkpLHY9bmV3IHkoNTI4NzM0NjM1LDQyMTUzODk1NDcpLGI9bmV3IHkoMTU0MTQ1OTIyNSwzMjcwMzMyMDkpKTt2YXIgdyxrLFMsXz0xMjgqTWF0aC5jZWlsKChjKzE3KS8xMjgpLHg9bmV3IFVpbnQ4QXJyYXkoXyk7Zm9yKHc9MDt3PGM7Kyt3KXhbd109c1tsKytdO2Zvcih4W3crK109MTI4LFM9Xy0xNjt3PFM7KXhbdysrXT0wO3hbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT0wLHhbdysrXT1jPj4+MjkmMjU1LHhbdysrXT1jPj4yMSYyNTUseFt3KytdPWM+PjEzJjI1NSx4W3crK109Yz4+NSYyNTUseFt3KytdPWM8PDMmMjU1O3ZhciBBPW5ldyBBcnJheSg4MCk7Zm9yKHc9MDt3PDgwO3crKylBW3ddPW5ldyB5KDAsMCk7dmFyIEMsUCxFPW5ldyB5KDAsMCksVD1uZXcgeSgwLDApLFI9bmV3IHkoMCwwKSxPPW5ldyB5KDAsMCksST1uZXcgeSgwLDApLEY9bmV3IHkoMCwwKSxMPW5ldyB5KDAsMCksRD1uZXcgeSgwLDApLE49bmV3IHkoMCwwKSxNPW5ldyB5KDAsMCksaj1uZXcgeSgwLDApLEI9bmV3IHkoMCwwKTtmb3Iodz0wO3c8Xzspe2ZvcihrPTA7azwxNjsrK2spQVtrXS5oaWdoPXhbd108PDI0fHhbdysxXTw8MTZ8eFt3KzJdPDw4fHhbdyszXSxBW2tdLmxvdz14W3crNF08PDI0fHhbdys1XTw8MTZ8eFt3KzZdPDw4fHhbdys3XSx3Kz04O2ZvcihrPTE2O2s8ODA7KytrKWkoQz1BW2tdLEFbay0yXSxCKSxDLmFkZChBW2stN10pLGEoaixBW2stMTVdLEIpLEMuYWRkKGopLEMuYWRkKEFbay0xNl0pO2ZvcihFLmFzc2lnbihmKSxULmFzc2lnbihoKSxSLmFzc2lnbihkKSxPLmFzc2lnbihwKSxJLmFzc2lnbihtKSxGLmFzc2lnbihnKSxMLmFzc2lnbih2KSxELmFzc2lnbihiKSxrPTA7azw4MDsrK2spTi5hc3NpZ24oRCksbihqLEksQiksTi5hZGQoaiksZShqLEksRixMLEIpLE4uYWRkKGopLE4uYWRkKG9ba10pLE4uYWRkKEFba10pLHIoTSxFLEIpLHQoaixFLFQsUixCKSxNLmFkZChqKSxDPUQsRD1MLEw9RixGPUksTy5hZGQoTiksST1PLE89UixSPVQsVD1FLEMuYXNzaWduKE4pLEMuYWRkKE0pLEU9QztmLmFkZChFKSxoLmFkZChUKSxkLmFkZChSKSxwLmFkZChPKSxtLmFkZChJKSxnLmFkZChGKSx2LmFkZChMKSxiLmFkZChEKX1yZXR1cm4gdT8oUD1uZXcgVWludDhBcnJheSg0OCksZi5jb3B5VG8oUCwwKSxoLmNvcHlUbyhQLDgpLGQuY29weVRvKFAsMTYpLHAuY29weVRvKFAsMjQpLG0uY29weVRvKFAsMzIpLGcuY29weVRvKFAsNDApKTooUD1uZXcgVWludDhBcnJheSg2NCksZi5jb3B5VG8oUCwwKSxoLmNvcHlUbyhQLDgpLGQuY29weVRvKFAsMTYpLHAuY29weVRvKFAsMjQpLG0uY29weVRvKFAsMzIpLGcuY29weVRvKFAsNDApLHYuY29weVRvKFAsNDgpLGIuY29weVRvKFAsNTYpKSxQfX0oKTt0LmNhbGN1bGF0ZVNIQTUxMj13O3ZhciBrPWZ1bmN0aW9uKGUsdCxyKXtyZXR1cm4gdyhlLHQsciwhMCl9O3QuY2FsY3VsYXRlU0hBMzg0PWs7dmFyIFM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7fXJldHVybiBlLnByb3RvdHlwZT17ZGVjcnlwdEJsb2NrOmZ1bmN0aW9uKGUpe3JldHVybiBlfX0sZX0oKSxfPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe2YodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIEFFU0Jhc2VDaXBoZXIuIiksdGhpcy5fcz1uZXcgVWludDhBcnJheShbOTksMTI0LDExOSwxMjMsMjQyLDEwNywxMTEsMTk3LDQ4LDEsMTAzLDQzLDI1NCwyMTUsMTcxLDExOCwyMDIsMTMwLDIwMSwxMjUsMjUwLDg5LDcxLDI0MCwxNzMsMjEyLDE2MiwxNzUsMTU2LDE2NCwxMTQsMTkyLDE4MywyNTMsMTQ3LDM4LDU0LDYzLDI0NywyMDQsNTIsMTY1LDIyOSwyNDEsMTEzLDIxNiw0OSwyMSw0LDE5OSwzNSwxOTUsMjQsMTUwLDUsMTU0LDcsMTgsMTI4LDIyNiwyMzUsMzksMTc4LDExNyw5LDEzMSw0NCwyNiwyNywxMTAsOTAsMTYwLDgyLDU5LDIxNCwxNzksNDEsMjI3LDQ3LDEzMiw4MywyMDksMCwyMzcsMzIsMjUyLDE3Nyw5MSwxMDYsMjAzLDE5MCw1Nyw3NCw3Niw4OCwyMDcsMjA4LDIzOSwxNzAsMjUxLDY3LDc3LDUxLDEzMyw2OSwyNDksMiwxMjcsODAsNjAsMTU5LDE2OCw4MSwxNjMsNjQsMTQzLDE0NiwxNTcsNTYsMjQ1LDE4OCwxODIsMjE4LDMzLDE2LDI1NSwyNDMsMjEwLDIwNSwxMiwxOSwyMzYsOTUsMTUxLDY4LDIzLDE5NiwxNjcsMTI2LDYxLDEwMCw5MywyNSwxMTUsOTYsMTI5LDc5LDIyMCwzNCw0MiwxNDQsMTM2LDcwLDIzOCwxODQsMjAsMjIyLDk0LDExLDIxOSwyMjQsNTAsNTgsMTAsNzMsNiwzNiw5MiwxOTQsMjExLDE3Miw5OCwxNDUsMTQ5LDIyOCwxMjEsMjMxLDIwMCw1NSwxMDksMTQxLDIxMyw3OCwxNjksMTA4LDg2LDI0NCwyMzQsMTAxLDEyMiwxNzQsOCwxODYsMTIwLDM3LDQ2LDI4LDE2NiwxODAsMTk4LDIzMiwyMjEsMTE2LDMxLDc1LDE4OSwxMzksMTM4LDExMiw2MiwxODEsMTAyLDcyLDMsMjQ2LDE0LDk3LDUzLDg3LDE4NSwxMzQsMTkzLDI5LDE1OCwyMjUsMjQ4LDE1MiwxNywxMDUsMjE3LDE0MiwxNDgsMTU1LDMwLDEzNSwyMzMsMjA2LDg1LDQwLDIyMywxNDAsMTYxLDEzNywxMywxOTEsMjMwLDY2LDEwNCw2NSwxNTMsNDUsMTUsMTc2LDg0LDE4NywyMl0pLHRoaXMuX2ludl9zPW5ldyBVaW50OEFycmF5KFs4Miw5LDEwNiwyMTMsNDgsNTQsMTY1LDU2LDE5MSw2NCwxNjMsMTU4LDEyOSwyNDMsMjE1LDI1MSwxMjQsMjI3LDU3LDEzMCwxNTUsNDcsMjU1LDEzNSw1MiwxNDIsNjcsNjgsMTk2LDIyMiwyMzMsMjAzLDg0LDEyMywxNDgsNTAsMTY2LDE5NCwzNSw2MSwyMzgsNzYsMTQ5LDExLDY2LDI1MCwxOTUsNzgsOCw0NiwxNjEsMTAyLDQwLDIxNywzNiwxNzgsMTE4LDkxLDE2Miw3MywxMDksMTM5LDIwOSwzNywxMTQsMjQ4LDI0NiwxMDAsMTM0LDEwNCwxNTIsMjIsMjEyLDE2NCw5MiwyMDQsOTMsMTAxLDE4MiwxNDYsMTA4LDExMiw3Miw4MCwyNTMsMjM3LDE4NSwyMTgsOTQsMjEsNzAsODcsMTY3LDE0MSwxNTcsMTMyLDE0NCwyMTYsMTcxLDAsMTQwLDE4OCwyMTEsMTAsMjQ3LDIyOCw4OCw1LDE4NCwxNzksNjksNiwyMDgsNDQsMzAsMTQzLDIwMiw2MywxNSwyLDE5MywxNzUsMTg5LDMsMSwxOSwxMzgsMTA3LDU4LDE0NSwxNyw2NSw3OSwxMDMsMjIwLDIzNCwxNTEsMjQyLDIwNywyMDYsMjQwLDE4MCwyMzAsMTE1LDE1MCwxNzIsMTE2LDM0LDIzMSwxNzMsNTMsMTMzLDIyNiwyNDksNTUsMjMyLDI4LDExNywyMjMsMTEwLDcxLDI0MSwyNiwxMTMsMjksNDEsMTk3LDEzNywxMTEsMTgzLDk4LDE0LDE3MCwyNCwxOTAsMjcsMjUyLDg2LDYyLDc1LDE5OCwyMTAsMTIxLDMyLDE1NCwyMTksMTkyLDI1NCwxMjAsMjA1LDkwLDI0NCwzMSwyMjEsMTY4LDUxLDEzNiw3LDE5OSw0OSwxNzcsMTgsMTYsODksMzksMTI4LDIzNiw5NSw5Niw4MSwxMjcsMTY5LDI1LDE4MSw3NCwxMyw0NSwyMjksMTIyLDE1OSwxNDcsMjAxLDE1NiwyMzksMTYwLDIyNCw1OSw3NywxNzQsNDIsMjQ1LDE3NiwyMDAsMjM1LDE4Nyw2MCwxMzEsODMsMTUzLDk3LDIzLDQzLDQsMTI2LDE4NiwxMTksMjE0LDM4LDIyNSwxMDUsMjAsOTksODUsMzMsMTIsMTI1XSksdGhpcy5fbWl4PW5ldyBVaW50MzJBcnJheShbMCwyMzU0NzQxODcsNDcwOTQ4Mzc0LDMwMzc2NTI3Nyw5NDE4OTY3NDgsOTA4OTMzNDE1LDYwNzUzMDU1NCw3MDg3ODA4NDksMTg4Mzc5MzQ5NiwyMTE4MjE0OTk1LDE4MTc4NjY4MzAsMTY0OTYzOTIzNywxMjE1MDYxMTA4LDExODEwNDUxMTksMTQxNzU2MTY5OCwxNTE3NzY3NTI5LDM3Njc1ODY5OTIsNDAwMzA2MTE3OSw0MjM2NDI5OTkwLDQwNjkyNDY4OTMsMzYzNTczMzY2MCwzNjAyNzcwMzI3LDMyOTkyNzg0NzQsMzQwMDUyODc2OSwyNDMwMTIyMjE2LDI2NjQ1NDM3MTUsMjM2MjA5MDIzOCwyMTkzODYyNjQ1LDI4MzUxMjMzOTYsMjgwMTEwNzQwNywzMDM1NTM1MDU4LDMxMzU3NDA4ODksMzY3ODEyNDkyMywzNTc2ODcwNTEyLDMzNDEzOTQyODUsMzM3NDM2MTcwMiwzODEwNDk2MzQzLDM5Nzc2NzUzNTYsNDI3OTA4MDI1Nyw0MDQzNjEwMTg2LDI4NzY0OTQ2MjcsMjc3NjI5MjkwNCwzMDc2NjM5MDI5LDMxMTA2NTA5NDIsMjQ3MjAxMTUzNSwyNjQwMjQzMjA0LDI0MDM3Mjg2NjUsMjE2OTMwMzA1OCwxMDAxMDg5OTk1LDg5OTgzNTU4NCw2NjY0NjQ3MzMsNjk5NDMyMTUwLDU5NzI3ODQ3LDIyNjkwNjg2MCw1MzA0MDA3NTMsMjk0OTMwNjgyLDEyNzMxNjg3ODcsMTE3Mjk2NzA2NCwxNDc1NDE4NTAxLDE1MDk0MzA0MTQsMTk0MjQzNTc3NSwyMTEwNjY3NDQ0LDE4NzYyNDE4MzMsMTY0MTgxNjIyNiwyOTEwMjE5NzY2LDI3NDMwMzQxMDksMjk3NjE1MTUyMCwzMjExNjIzMTQ3LDI1MDUyMDIxMzgsMjYwNjQ1Mzk2OSwyMzAyNjkwMjUyLDIyNjk3Mjg0NTUsMzcxMTgyOTQyMiwzNTQzNTk5MjY5LDMyNDA4OTQzOTIsMzQ3NTMxMzMzMSwzODQzNjk5MDc0LDM5NDM5MDY0NDEsNDE3ODA2MjIyOCw0MTQ0MDQ3Nzc1LDEzMDY5NjczNjYsMTEzOTc4MTcwOSwxMzc0OTg4MTEyLDE2MTA0NTk3MzksMTk3NTY4MzQzNCwyMDc2OTM1MjY1LDE3NzUyNzY5MjQsMTc0MjMxNTEyNywxMDM0ODY3OTk4LDg2NjYzNzg0NSw1NjYwMjE4OTYsODAwNDQwODM1LDkyOTg3Njk4LDE5MzE5NTA2NSw0Mjk0NTYxNjQsMzk1NDQxNzExLDE5ODQ4MTI2ODUsMjAxNzc3ODU2NiwxNzg0NjYzMTk1LDE2ODM0MDcyNDgsMTMxNTU2MjE0NSwxMDgwMDk0NjM0LDEzODM4NTYzMTEsMTU1MTAzNzg4NCwxMDEwMzk4MjksMTM1MDUwMjA2LDQzNzc1NzEyMywzMzc1NTM4NjQsMTA0MjM4NTY1Nyw4MDc5NjI2MTAsNTczODA0NzgzLDc0MjAzOTAxMiwyNTMxMDY3NDUzLDI1NjQwMzMzMzQsMjMyODgyODk3MSwyMjI3NTczMDI0LDI5MzU1NjY4NjUsMjcwMDA5OTM1NCwzMDAxNzU1NjU1LDMxNjg5MzcyMjgsMzg2ODU1MjgwNSwzOTAyNTYzMTgyLDQyMDMxODExNzEsNDEwMjk3NzkxMiwzNzM2MTY0OTM3LDM1MDE3NDE4OTAsMzI2NTQ3ODc1MSwzNDMzNzEyOTgwLDExMDYwNDE1OTEsMTM0MDQ2MzEwMCwxNTc2OTc2NjA5LDE0MDg3NDkwMzQsMjA0MzIxMTQ4MywyMDA5MTk1NDcyLDE3MDg4NDgzMzMsMTgwOTA1NDE1MCw4MzI4NzcyMzEsMTA2ODM1MTM5Niw3NjY5NDU0NjUsNTk5NzYyMzU0LDE1OTQxNzk4NywxMjY0NTQ2NjQsMzYxOTI5ODc3LDQ2MzE4MDE5MCwyNzA5MjYwODcxLDI5NDM2ODIzODAsMzE3ODEwNjk2MSwzMDA5ODc5Mzg2LDI1NzI2OTcxOTUsMjUzODY4MTE4NCwyMjM2MjI4NzMzLDIzMzY0MzQ1NTAsMzUwOTg3MTEzNSwzNzQ1MzQ1MzAwLDM0NDE4NTAzNzcsMzI3NDY2NzI2NiwzOTEwMTYxOTcxLDM4NzcxOTg2NDgsNDExMDU2ODQ4NSw0MjExODE4Nzk4LDI1OTc4MDY0NzYsMjQ5NzYwNDc0MywyMjYxMDg5MTc4LDIyOTUxMDEwNzMsMjczMzg1NjE2MCwyOTAyMDg3ODUxLDMyMDI0MzcwNDYsMjk2ODAxMTQ1MywzOTM2MjkxMjg0LDM4MzUwMzY4OTUsNDEzNjQ0MDc3MCw0MTY5NDA4MjAxLDM1MzU0ODY0NTYsMzcwMjY2NTQ1OSwzNDY3MTkyMzAyLDMyMzE3MjIyMTMsMjA1MTUxODc4MCwxOTUxMzE3MDQ3LDE3MTY4OTA0MTAsMTc1MDkwMjMwNSwxMTEzODE4Mzg0LDEyODIwNTAwNzUsMTU4NDUwNDU4MiwxMzUwMDc4OTg5LDE2ODgxMDg1Miw2NzU1NjQ2MywzNzEwNDkzMzAsNDA0MDE2NzYxLDg0MTczOTU5MiwxMDA4OTE4NTk1LDc3NTU1MDgxNCw1NDAwODA3MjUsMzk2OTU2MjM2OSwzODAxMzMyMjM0LDQwMzU0ODkwNDcsNDI2OTkwNzk5NiwzNTY5MjU1MjEzLDM2Njk0NjI1NjYsMzM2Njc1NDYxOSwzMzMyNzQwMTQ0LDI2MzEwNjU0MzMsMjQ2Mzg3OTc2MiwyMTYwMTE3MDcxLDIzOTU1ODg2NzYsMjc2NzY0NTU1NywyODY4ODk3NDA2LDMxMDIwMTE3NDcsMzA2OTA0OTk2MCwyMDIwMDg0OTcsMzM3NzgzNjIsMjcwMDQwNDg3LDUwNDQ1OTQzNiw4NzU0NTEyOTMsOTc1NjU4NjQ2LDY3NTAzOTYyNyw2NDEwMjUxNTIsMjA4NDcwNDIzMywxOTE3NTE4NTYyLDE2MTU4NjEyNDcsMTg1MTMzMjg1MiwxMTQ3NTUwNjYxLDEyNDg4MDI1MTAsMTQ4NDAwNTg0MywxNDUxMDQ0MDU2LDkzMzMwMTM3MCw5NjczMTE3MjksNzMzMTU2OTcyLDYzMjk1MzcwMywyNjAzODg5NTAsMjU5NjU5MTcsMzI4NjcxODA4LDQ5NjkwNjA1OSwxMjA2NDc3ODU4LDEyMzk0NDM3NTMsMTU0MzIwODUwMCwxNDQxOTUyNTc1LDIxNDQxNjE4MDYsMTkwODY5NDI3NywxNjc1NTc3ODgwLDE4NDI3NTk0NDMsMzYxMDM2OTIyNiwzNjQ0Mzc5NTg1LDM0MDgxMTk1MTYsMzMwNzkxNjI0Nyw0MDExMTkwNTAyLDM3NzY3Njc0NjksNDA3NzM4NDQzMiw0MjQ1NjE4NjgzLDI4MDk3NzExNTQsMjg0MjczNzA0OSwzMTQ0Mzk2NDIwLDMwNDMxNDA0OTUsMjY3MzcwNTE1MCwyNDM4MjM3NjIxLDIyMDMwMzIyMzIsMjM3MDIxMzc5NV0pLHRoaXMuX21peENvbD1uZXcgVWludDhBcnJheSgyNTYpO2Zvcih2YXIgdD0wO3Q8MjU2O3QrKyl0aGlzLl9taXhDb2xbdF09dDwxMjg/dDw8MTp0PDwxXjI3O3RoaXMuYnVmZmVyPW5ldyBVaW50OEFycmF5KDE2KSx0aGlzLmJ1ZmZlclBvc2l0aW9uPTB9cmV0dXJuIGQoZSxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBjYWxsIGBfZXhwYW5kS2V5YCBvbiB0aGUgYmFzZSBjbGFzcyIpfX0se2tleToiX2RlY3J5cHQiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9bmV3IFVpbnQ4QXJyYXkoMTYpO2kuc2V0KGUpO2Zvcih2YXIgbz0wLHM9dGhpcy5fa2V5U2l6ZTtvPDE2OysrbywrK3MpaVtvXV49dFtzXTtmb3IodmFyIGw9dGhpcy5fY3ljbGVzT2ZSZXBldGl0aW9uLTE7bD49MTstLWwpe3I9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIGM9MDtjPDE2OysrYylpW2NdPXRoaXMuX2ludl9zW2lbY11dO2Zvcih2YXIgdT0wLGY9MTYqbDt1PDE2OysrdSwrK2YpaVt1XV49dFtmXTtmb3IodmFyIGg9MDtoPDE2O2grPTQpe3ZhciBkPXRoaXMuX21peFtpW2hdXSxwPXRoaXMuX21peFtpW2grMV1dLG09dGhpcy5fbWl4W2lbaCsyXV0sZz10aGlzLl9taXhbaVtoKzNdXTtyPWRecD4+PjhecDw8MjRebT4+PjE2Xm08PDE2Xmc+Pj4yNF5nPDw4LGlbaF09cj4+PjI0JjI1NSxpW2grMV09cj4+MTYmMjU1LGlbaCsyXT1yPj44JjI1NSxpW2grM109MjU1JnJ9fXI9aVsxM10saVsxM109aVs5XSxpWzldPWlbNV0saVs1XT1pWzFdLGlbMV09cixyPWlbMTRdLG49aVsxMF0saVsxNF09aVs2XSxpWzEwXT1pWzJdLGlbNl09cixpWzJdPW4scj1pWzE1XSxuPWlbMTFdLGE9aVs3XSxpWzE1XT1pWzNdLGlbMTFdPXIsaVs3XT1uLGlbM109YTtmb3IodmFyIHY9MDt2PDE2OysrdilpW3ZdPXRoaXMuX2ludl9zW2lbdl1dLGlbdl1ePXRbdl07cmV0dXJuIGl9fSx7a2V5OiJfZW5jcnlwdCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt2YXIgcixuLGEsaT10aGlzLl9zLG89bmV3IFVpbnQ4QXJyYXkoMTYpO28uc2V0KGUpO2Zvcih2YXIgcz0wO3M8MTY7KytzKW9bc11ePXRbc107Zm9yKHZhciBsPTE7bDx0aGlzLl9jeWNsZXNPZlJlcGV0aXRpb247bCsrKXtmb3IodmFyIGM9MDtjPDE2OysrYylvW2NdPWlbb1tjXV07YT1vWzFdLG9bMV09b1s1XSxvWzVdPW9bOV0sb1s5XT1vWzEzXSxvWzEzXT1hLGE9b1syXSxuPW9bNl0sb1syXT1vWzEwXSxvWzZdPW9bMTRdLG9bMTBdPWEsb1sxNF09bixhPW9bM10sbj1vWzddLHI9b1sxMV0sb1szXT1vWzE1XSxvWzddPWEsb1sxMV09bixvWzE1XT1yO2Zvcih2YXIgdT0wO3U8MTY7dSs9NCl7dmFyIGY9b1t1KzBdLGg9b1t1KzFdLGQ9b1t1KzJdLHA9b1t1KzNdO3I9Zl5oXmRecCxvW3UrMF1ePXJedGhpcy5fbWl4Q29sW2ZeaF0sb1t1KzFdXj1yXnRoaXMuX21peENvbFtoXmRdLG9bdSsyXV49cl50aGlzLl9taXhDb2xbZF5wXSxvW3UrM11ePXJedGhpcy5fbWl4Q29sW3BeZl19Zm9yKHZhciBtPTAsZz0xNipsO208MTY7KyttLCsrZylvW21dXj10W2ddfWZvcih2YXIgdj0wO3Y8MTY7Kyt2KW9bdl09aVtvW3ZdXTthPW9bMV0sb1sxXT1vWzVdLG9bNV09b1s5XSxvWzldPW9bMTNdLG9bMTNdPWEsYT1vWzJdLG49b1s2XSxvWzJdPW9bMTBdLG9bNl09b1sxNF0sb1sxMF09YSxvWzE0XT1uLGE9b1szXSxuPW9bN10scj1vWzExXSxvWzNdPW9bMTVdLG9bN109YSxvWzExXT1uLG9bMTVdPXI7Zm9yKHZhciB5PTAsYj10aGlzLl9rZXlTaXplO3k8MTY7Kyt5LCsrYilvW3ldXj10W2JdO3JldHVybiBvfX0se2tleToiX2RlY3J5cHRCbG9jazIiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W10sbz10aGlzLml2LHM9MDtzPHI7KytzKWlmKG5bYV09ZVtzXSwhKCsrYTwxNikpe2Zvcih2YXIgbD10aGlzLl9kZWNyeXB0KG4sdGhpcy5fa2V5KSxjPTA7YzwxNjsrK2MpbFtjXV49b1tjXTtvPW4saS5wdXNoKGwpLG49bmV3IFVpbnQ4QXJyYXkoMTYpLGE9MH1pZih0aGlzLmJ1ZmZlcj1uLHRoaXMuYnVmZmVyTGVuZ3RoPWEsdGhpcy5pdj1vLDA9PT1pLmxlbmd0aClyZXR1cm4gbmV3IFVpbnQ4QXJyYXkoMCk7dmFyIHU9MTYqaS5sZW5ndGg7aWYodCl7dmFyIGY9aVtpLmxlbmd0aC0xXSxoPWZbMTVdO2lmKGg8PTE2KXtmb3IodmFyIGQ9MTUscD0xNi1oO2Q+PXA7LS1kKWlmKGZbZF0hPT1oKXtoPTA7YnJlYWt9dS09aCxpW2kubGVuZ3RoLTFdPWYuc3ViYXJyYXkoMCwxNi1oKX19Zm9yKHZhciBtPW5ldyBVaW50OEFycmF5KHUpLGc9MCx2PTAseT1pLmxlbmd0aDtnPHk7KytnLHYrPTE2KW0uc2V0KGlbZ10sdik7cmV0dXJuIG19fSx7a2V5OiJkZWNyeXB0QmxvY2siLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9YXJndW1lbnRzLmxlbmd0aD4yJiZ2b2lkIDAhPT1hcmd1bWVudHNbMl0/YXJndW1lbnRzWzJdOm51bGwsbj1lLmxlbmd0aCxhPXRoaXMuYnVmZmVyLGk9dGhpcy5idWZmZXJQb3NpdGlvbjtpZihyKXRoaXMuaXY9cjtlbHNle2Zvcih2YXIgbz0wO2k8MTYmJm88bjsrK28sKytpKWFbaV09ZVtvXTtpZihpPDE2KXJldHVybiB0aGlzLmJ1ZmZlckxlbmd0aD1pLG5ldyBVaW50OEFycmF5KDApO3RoaXMuaXY9YSxlPWUuc3ViYXJyYXkoMTYpfXJldHVybiB0aGlzLmJ1ZmZlcj1uZXcgVWludDhBcnJheSgxNiksdGhpcy5idWZmZXJMZW5ndGg9MCx0aGlzLmRlY3J5cHRCbG9jaz10aGlzLl9kZWNyeXB0QmxvY2syLHRoaXMuZGVjcnlwdEJsb2NrKGUsdCl9fSx7a2V5OiJlbmNyeXB0Iix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWUubGVuZ3RoLG49dGhpcy5idWZmZXIsYT10aGlzLmJ1ZmZlclBvc2l0aW9uLGk9W107dHx8KHQ9bmV3IFVpbnQ4QXJyYXkoMTYpKTtmb3IodmFyIG89MDtvPHI7KytvKWlmKG5bYV09ZVtvXSwhKCsrYTwxNikpe2Zvcih2YXIgcz0wO3M8MTY7KytzKW5bc11ePXRbc107dmFyIGw9dGhpcy5fZW5jcnlwdChuLHRoaXMuX2tleSk7dD1sLGkucHVzaChsKSxuPW5ldyBVaW50OEFycmF5KDE2KSxhPTB9aWYodGhpcy5idWZmZXI9bix0aGlzLmJ1ZmZlckxlbmd0aD1hLHRoaXMuaXY9dCwwPT09aS5sZW5ndGgpcmV0dXJuIG5ldyBVaW50OEFycmF5KDApO2Zvcih2YXIgYz0xNippLmxlbmd0aCx1PW5ldyBVaW50OEFycmF5KGMpLGY9MCxoPTAsZD1pLmxlbmd0aDtmPGQ7KytmLGgrPTE2KXUuc2V0KGlbZl0saCk7cmV0dXJuIHV9fV0pLGV9KCkseD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBmKHRoaXMsdCksKHI9cyh0aGlzLGwodCkuY2FsbCh0aGlzKSkpLl9jeWNsZXNPZlJlcGV0aXRpb249MTAsci5fa2V5U2l6ZT0xNjAsci5fcmNvbj1uZXcgVWludDhBcnJheShbMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MSwxLDIsNCw4LDE2LDMyLDY0LDEyOCwyNyw1NCwxMDgsMjE2LDE3MSw3NywxNTQsNDcsOTQsMTg4LDk5LDE5OCwxNTEsNTMsMTA2LDIxMiwxNzksMTI1LDI1MCwyMzksMTk3LDE0NSw1NywxMTQsMjI4LDIxMSwxODksOTcsMTk0LDE1OSwzNyw3NCwxNDgsNTEsMTAyLDIwNCwxMzEsMjksNTgsMTE2LDIzMiwyMDMsMTQxLDEsMiw0LDgsMTYsMzIsNjQsMTI4LDI3LDU0LDEwOCwyMTYsMTcxLDc3LDE1NCw0Nyw5NCwxODgsOTksMTk4LDE1MSw1MywxMDYsMjEyLDE3OSwxMjUsMjUwLDIzOSwxOTcsMTQ1LDU3LDExNCwyMjgsMjExLDE4OSw5NywxOTQsMTU5LDM3LDc0LDE0OCw1MSwxMDIsMjA0LDEzMSwyOSw1OCwxMTYsMjMyLDIwMywxNDEsMSwyLDQsOCwxNiwzMiw2NCwxMjgsMjcsNTQsMTA4LDIxNiwxNzEsNzcsMTU0LDQ3LDk0LDE4OCw5OSwxOTgsMTUxLDUzLDEwNiwyMTIsMTc5LDEyNSwyNTAsMjM5LDE5NywxNDUsNTcsMTE0LDIyOCwyMTEsMTg5LDk3LDE5NCwxNTksMzcsNzQsMTQ4LDUxLDEwMiwyMDQsMTMxLDI5LDU4LDExNiwyMzIsMjAzLDE0MV0pLHIuX2tleT1yLl9leHBhbmRLZXkoZSkscn1yZXR1cm4gYyh0LGUpLGQodCxbe2tleToiX2V4cGFuZEtleSIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fcyxyPXRoaXMuX3Jjb24sbj1uZXcgVWludDhBcnJheSgxNzYpO24uc2V0KGUpO2Zvcih2YXIgYT0xNixpPTE7YTwxNzY7KytpKXt2YXIgbz1uW2EtM10scz1uW2EtMl0sbD1uW2EtMV0sYz1uW2EtNF07bz10W29dLHM9dFtzXSxsPXRbbF0sYz10W2NdLG9ePXJbaV07Zm9yKHZhciB1PTA7dTw0OysrdSluW2FdPW9ePW5bYS0xNl0sblsrK2FdPXNePW5bYS0xNl0sblsrK2FdPWxePW5bYS0xNl0sblsrK2FdPWNePW5bYS0xNl0sYSsrfXJldHVybiBufX1dKSx0fShfKTt0LkFFUzEyOENpcGhlcj14O3ZhciBBPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIGYodGhpcyx0KSwocj1zKHRoaXMsbCh0KS5jYWxsKHRoaXMpKSkuX2N5Y2xlc09mUmVwZXRpdGlvbj0xNCxyLl9rZXlTaXplPTIyNCxyLl9rZXk9ci5fZXhwYW5kS2V5KGUpLHJ9cmV0dXJuIGModCxlKSxkKHQsW3trZXk6Il9leHBhbmRLZXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX3Mscj1uZXcgVWludDhBcnJheSgyNDApO3Iuc2V0KGUpO2Zvcih2YXIgbixhLGksbyxzPTEsbD0zMixjPTE7bDwyNDA7KytjKXtsJTMyPT0xNj8obj10W25dLGE9dFthXSxpPXRbaV0sbz10W29dKTpsJTMyPT0wJiYobj1yW2wtM10sYT1yW2wtMl0saT1yW2wtMV0sbz1yW2wtNF0sbj10W25dLGE9dFthXSxpPXRbaV0sbz10W29dLG5ePXMsKHM8PD0xKT49MjU2JiYocz0yNTUmKDI3XnMpKSk7Zm9yKHZhciB1PTA7dTw0OysrdSlyW2xdPW5ePXJbbC0zMl0sclsrK2xdPWFePXJbbC0zMl0sclsrK2xdPWlePXJbbC0zMl0sclsrK2xdPW9ePXJbbC0zMl0sbCsrfXJldHVybiByfX1dKSx0fShfKTt0LkFFUzI1NkNpcGhlcj1BO3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2lmKGUubGVuZ3RoIT09dC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciByPTA7cjxlLmxlbmd0aDtyKyspaWYoZVtyXSE9PXRbcl0pcmV0dXJuITE7cmV0dXJuITB9ZnVuY3Rpb24gdCgpe31yZXR1cm4gdC5wcm90b3R5cGU9e2NoZWNrT3duZXJQYXNzd29yZDpmdW5jdGlvbih0LHIsbixhKXt2YXIgaT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs1Nik7cmV0dXJuIGkuc2V0KHQsMCksaS5zZXQocix0Lmxlbmd0aCksaS5zZXQobix0Lmxlbmd0aCtyLmxlbmd0aCksZShiKGksMCxpLmxlbmd0aCksYSl9LGNoZWNrVXNlclBhc3N3b3JkOmZ1bmN0aW9uKHQscixuKXt2YXIgYT1uZXcgVWludDhBcnJheSh0Lmxlbmd0aCs4KTtyZXR1cm4gYS5zZXQodCwwKSxhLnNldChyLHQubGVuZ3RoKSxlKGIoYSwwLGEubGVuZ3RoKSxuKX0sZ2V0T3duZXJLZXk6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrNTYpO2Euc2V0KGUsMCksYS5zZXQodCxlLmxlbmd0aCksYS5zZXQocixlLmxlbmd0aCt0Lmxlbmd0aCk7dmFyIGk9YihhLDAsYS5sZW5ndGgpO3JldHVybiBuZXcgQShpKS5kZWNyeXB0QmxvY2sobiwhMSxuZXcgVWludDhBcnJheSgxNikpfSxnZXRVc2VyS2V5OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTtuLnNldChlLDApLG4uc2V0KHQsZS5sZW5ndGgpO3ZhciBhPWIobiwwLG4ubGVuZ3RoKTtyZXR1cm4gbmV3IEEoYSkuZGVjcnlwdEJsb2NrKHIsITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHR9KCk7dC5QREYxNz1DO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3ZhciByPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoK3QubGVuZ3RoKTtyZXR1cm4gci5zZXQoZSwwKSxyLnNldCh0LGUubGVuZ3RoKSxyfWZ1bmN0aW9uIHQodCxyLG4pe2Zvcih2YXIgYT1iKHIsMCxyLmxlbmd0aCkuc3ViYXJyYXkoMCwzMiksaT1bMF0sbz0wO288NjR8fGlbaS5sZW5ndGgtMV0+by0zMjspe3ZhciBzPXQubGVuZ3RoK2EubGVuZ3RoK24ubGVuZ3RoLGw9bmV3IFVpbnQ4QXJyYXkoNjQqcyksYz1lKHQsYSk7Yz1lKGMsbik7Zm9yKHZhciB1PTAsZj0wO3U8NjQ7dSsrLGYrPXMpbC5zZXQoYyxmKTtpPW5ldyB4KGEuc3ViYXJyYXkoMCwxNikpLmVuY3J5cHQobCxhLnN1YmFycmF5KDE2LDMyKSk7Zm9yKHZhciBoPTAsZD0wO2Q8MTY7ZCsrKWgqPTEsaCU9MyxoKz0oaVtkXT4+PjApJTMsaCU9MzswPT09aD9hPWIoaSwwLGkubGVuZ3RoKToxPT09aD9hPWsoaSwwLGkubGVuZ3RoKToyPT09aCYmKGE9dyhpLDAsaS5sZW5ndGgpKSxvKyt9cmV0dXJuIGEuc3ViYXJyYXkoMCwzMil9ZnVuY3Rpb24gcigpe31mdW5jdGlvbiBuKGUsdCl7aWYoZS5sZW5ndGghPT10Lmxlbmd0aClyZXR1cm4hMTtmb3IodmFyIHI9MDtyPGUubGVuZ3RoO3IrKylpZihlW3JdIT09dFtyXSlyZXR1cm4hMTtyZXR1cm4hMH1yZXR1cm4gci5wcm90b3R5cGU9e2hhc2g6ZnVuY3Rpb24oZSxyLG4pe3JldHVybiB0KGUscixuKX0sY2hlY2tPd25lclBhc3N3b3JkOmZ1bmN0aW9uKGUscixhLGkpe3ZhciBvPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtyZXR1cm4gby5zZXQoZSwwKSxvLnNldChyLGUubGVuZ3RoKSxvLnNldChhLGUubGVuZ3RoK3IubGVuZ3RoKSxuKHQoZSxvLGEpLGkpfSxjaGVja1VzZXJQYXNzd29yZDpmdW5jdGlvbihlLHIsYSl7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoZS5sZW5ndGgrOCk7cmV0dXJuIGkuc2V0KGUsMCksaS5zZXQocixlLmxlbmd0aCksbih0KGUsaSxbXSksYSl9LGdldE93bmVyS2V5OmZ1bmN0aW9uKGUscixuLGEpe3ZhciBpPW5ldyBVaW50OEFycmF5KGUubGVuZ3RoKzU2KTtpLnNldChlLDApLGkuc2V0KHIsZS5sZW5ndGgpLGkuc2V0KG4sZS5sZW5ndGgrci5sZW5ndGgpO3ZhciBvPXQoZSxpLG4pO3JldHVybiBuZXcgQShvKS5kZWNyeXB0QmxvY2soYSwhMSxuZXcgVWludDhBcnJheSgxNikpfSxnZXRVc2VyS2V5OmZ1bmN0aW9uKGUscixuKXt2YXIgYT1uZXcgVWludDhBcnJheShlLmxlbmd0aCs4KTthLnNldChlLDApLGEuc2V0KHIsZS5sZW5ndGgpO3ZhciBpPXQoZSxhLFtdKTtyZXR1cm4gbmV3IEEoaSkuZGVjcnlwdEJsb2NrKG4sITEsbmV3IFVpbnQ4QXJyYXkoMTYpKX19LHJ9KCk7dC5QREYyMD1QO3ZhciBFPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3I9ZSx0aGlzLlN0cmVhbUNpcGhlckNvbnN0cnVjdG9yPXR9cmV0dXJuIGUucHJvdG90eXBlPXtjcmVhdGVTdHJlYW06ZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgdGhpcy5TdHJlYW1DaXBoZXJDb25zdHJ1Y3RvcjtyZXR1cm4gbmV3IGkuRGVjcnlwdFN0cmVhbShlLHQsKGZ1bmN0aW9uKGUsdCl7cmV0dXJuIHIuZGVjcnlwdEJsb2NrKGUsdCl9KSl9LGRlY3J5cHRTdHJpbmc6ZnVuY3Rpb24oZSl7dmFyIHQ9bmV3IHRoaXMuU3RyaW5nQ2lwaGVyQ29uc3RydWN0b3Iscj0oMCxuLnN0cmluZ1RvQnl0ZXMpKGUpO3JldHVybiByPXQuZGVjcnlwdEJsb2NrKHIsITApLCgwLG4uYnl0ZXNUb1N0cmluZykocil9fSxlfSgpLFQ9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgVWludDhBcnJheShbNDAsMTkxLDc4LDk0LDc4LDExNywxMzgsNjUsMTAwLDAsNzgsODYsMjU1LDI1MCwxLDgsNDYsNDYsMCwxODIsMjA4LDEwNCw2MiwxMjgsNDcsMTIsMTY5LDI1NCwxMDAsODMsMTA1LDEyMl0pO2Z1bmN0aW9uIHQodCxyLG4sYSxpLG8scyxsKXt2YXIgYyx1LGY9NDArbi5sZW5ndGgrdC5sZW5ndGgsaD1uZXcgVWludDhBcnJheShmKSxkPTA7aWYocilmb3IodT1NYXRoLm1pbigzMixyLmxlbmd0aCk7ZDx1OysrZCloW2RdPXJbZF07Zm9yKGM9MDtkPDMyOyloW2QrK109ZVtjKytdO2ZvcihjPTAsdT1uLmxlbmd0aDtjPHU7KytjKWhbZCsrXT1uW2NdO2ZvcihoW2QrK109MjU1JmksaFtkKytdPWk+PjgmMjU1LGhbZCsrXT1pPj4xNiYyNTUsaFtkKytdPWk+Pj4yNCYyNTUsYz0wLHU9dC5sZW5ndGg7Yzx1OysrYyloW2QrK109dFtjXTtvPj00JiYhbCYmKGhbZCsrXT0yNTUsaFtkKytdPTI1NSxoW2QrK109MjU1LGhbZCsrXT0yNTUpO3ZhciBtPXYoaCwwLGQpLGc9cz4+MztpZihvPj0zKWZvcihjPTA7Yzw1MDsrK2MpbT12KG0sMCxnKTt2YXIgeSxiPW0uc3ViYXJyYXkoMCxnKTtpZihvPj0zKXtmb3IoZD0wO2Q8MzI7KytkKWhbZF09ZVtkXTtmb3IoYz0wLHU9dC5sZW5ndGg7Yzx1OysrYyloW2QrK109dFtjXTt5PW5ldyBwKGIpLmVuY3J5cHRCbG9jayh2KGgsMCxkKSksdT1iLmxlbmd0aDt2YXIgdyxrPW5ldyBVaW50OEFycmF5KHUpO2ZvcihjPTE7Yzw9MTk7KytjKXtmb3Iodz0wO3c8dTsrK3cpa1t3XT1iW3ddXmM7eT1uZXcgcChrKS5lbmNyeXB0QmxvY2soeSl9Zm9yKGM9MCx1PXkubGVuZ3RoO2M8dTsrK2MpaWYoYVtjXSE9PXlbY10pcmV0dXJuIG51bGx9ZWxzZSBmb3IoYz0wLHU9KHk9bmV3IHAoYikuZW5jcnlwdEJsb2NrKGUpKS5sZW5ndGg7Yzx1OysrYylpZihhW2NdIT09eVtjXSlyZXR1cm4gbnVsbDtyZXR1cm4gYn12YXIgcj1hLk5hbWUuZ2V0KCJJZGVudGl0eSIpO2Z1bmN0aW9uIGkoaSxvLHMpe3ZhciBsPWkuZ2V0KCJGaWx0ZXIiKTtpZighKDAsYS5pc05hbWUpKGwsIlN0YW5kYXJkIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVua25vd24gZW5jcnlwdGlvbiBtZXRob2QiKTt0aGlzLmRpY3Q9aTt2YXIgYz1pLmdldCgiViIpO2lmKCFOdW1iZXIuaXNJbnRlZ2VyKGMpfHwxIT09YyYmMiE9PWMmJjQhPT1jJiY1IT09Yyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5zdXBwb3J0ZWQgZW5jcnlwdGlvbiBhbGdvcml0aG0iKTt0aGlzLmFsZ29yaXRobT1jO3ZhciB1PWkuZ2V0KCJMZW5ndGgiKTtpZighdSlpZihjPD0zKXU9NDA7ZWxzZXt2YXIgZj1pLmdldCgiQ0YiKSxoPWkuZ2V0KCJTdG1GIik7aWYoKDAsYS5pc0RpY3QpKGYpJiYoMCxhLmlzTmFtZSkoaCkpe2Yuc3VwcHJlc3NFbmNyeXB0aW9uPSEwO3ZhciBkPWYuZ2V0KGgubmFtZSk7KHU9ZCYmZC5nZXQoIkxlbmd0aCIpfHwxMjgpPDQwJiYodTw8PTMpfX1pZighTnVtYmVyLmlzSW50ZWdlcih1KXx8dTw0MHx8dSU4IT0wKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJpbnZhbGlkIGtleSBsZW5ndGgiKTt2YXIgbT0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPIikpLnN1YmFycmF5KDAsMzIpLGc9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgwLDMyKSx5PWkuZ2V0KCJQIiksYj1pLmdldCgiUiIpLHc9KDQ9PT1jfHw1PT09YykmJiExIT09aS5nZXQoIkVuY3J5cHRNZXRhZGF0YSIpO3RoaXMuZW5jcnlwdE1ldGFkYXRhPXc7dmFyIGssUyxfPSgwLG4uc3RyaW5nVG9CeXRlcykobyk7aWYocyl7aWYoNj09PWIpdHJ5e3M9KDAsbi51dGY4U3RyaW5nVG9TdHJpbmcpKHMpfWNhdGNoKGUpeygwLG4ud2FybikoIkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk6IFVuYWJsZSB0byBjb252ZXJ0IFVURjggZW5jb2RlZCBwYXNzd29yZC4iKX1rPSgwLG4uc3RyaW5nVG9CeXRlcykocyl9aWYoNSE9PWMpUz10KF8sayxtLGcseSxiLHUsdyk7ZWxzZXt2YXIgeD0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPIikpLnN1YmFycmF5KDMyLDQwKSxBPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIk8iKSkuc3ViYXJyYXkoNDAsNDgpLEU9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSgwLDQ4KSxUPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlUiKSkuc3ViYXJyYXkoMzIsNDApLFI9KDAsbi5zdHJpbmdUb0J5dGVzKShpLmdldCgiVSIpKS5zdWJhcnJheSg0MCw0OCksTz0oMCxuLnN0cmluZ1RvQnl0ZXMpKGkuZ2V0KCJPRSIpKSxJPSgwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlVFIikpOygwLG4uc3RyaW5nVG9CeXRlcykoaS5nZXQoIlBlcm1zIikpLFM9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyxzLGwsYyx1LGYpe2lmKHQpe3ZhciBoPU1hdGgubWluKDEyNyx0Lmxlbmd0aCk7dD10LnN1YmFycmF5KDAsaCl9ZWxzZSB0PVtdO3ZhciBkO3JldHVybihkPTY9PT1lP25ldyBQOm5ldyBDKS5jaGVja1VzZXJQYXNzd29yZCh0LHMsbyk/ZC5nZXRVc2VyS2V5KHQsbCx1KTp0Lmxlbmd0aCYmZC5jaGVja093bmVyUGFzc3dvcmQodCxuLGkscik/ZC5nZXRPd25lcktleSh0LGEsaSxjKTpudWxsfShiLGssbSx4LEEsRSxnLFQsUixPLEkpfWlmKCFTJiYhcyl0aHJvdyBuZXcgbi5QYXNzd29yZEV4Y2VwdGlvbigiTm8gcGFzc3dvcmQgZ2l2ZW4iLG4uUGFzc3dvcmRSZXNwb25zZXMuTkVFRF9QQVNTV09SRCk7aWYoIVMmJnMmJihTPXQoXyxmdW5jdGlvbih0LHIsbixhKXt2YXIgaSxvLHM9bmV3IFVpbnQ4QXJyYXkoMzIpLGw9MDtmb3Iobz1NYXRoLm1pbigzMix0Lmxlbmd0aCk7bDxvOysrbClzW2xdPXRbbF07Zm9yKGk9MDtsPDMyOylzW2wrK109ZVtpKytdO3ZhciBjLHU9dihzLDAsbCksZj1hPj4zO2lmKG4+PTMpZm9yKGk9MDtpPDUwOysraSl1PXYodSwwLHUubGVuZ3RoKTtpZihuPj0zKXtjPXI7dmFyIGgsZD1uZXcgVWludDhBcnJheShmKTtmb3IoaT0xOTtpPj0wO2ktLSl7Zm9yKGg9MDtoPGY7KytoKWRbaF09dVtoXV5pO2M9bmV3IHAoZCkuZW5jcnlwdEJsb2NrKGMpfX1lbHNlIGM9bmV3IHAodS5zdWJhcnJheSgwLGYpKS5lbmNyeXB0QmxvY2socik7cmV0dXJuIGN9KGssbSxiLHUpLG0sZyx5LGIsdSx3KSksIVMpdGhyb3cgbmV3IG4uUGFzc3dvcmRFeGNlcHRpb24oIkluY29ycmVjdCBQYXNzd29yZCIsbi5QYXNzd29yZFJlc3BvbnNlcy5JTkNPUlJFQ1RfUEFTU1dPUkQpO2lmKHRoaXMuZW5jcnlwdGlvbktleT1TLGM+PTQpe3ZhciBGPWkuZ2V0KCJDRiIpOygwLGEuaXNEaWN0KShGKSYmKEYuc3VwcHJlc3NFbmNyeXB0aW9uPSEwKSx0aGlzLmNmPUYsdGhpcy5zdG1mPWkuZ2V0KCJTdG1GIil8fHIsdGhpcy5zdHJmPWkuZ2V0KCJTdHJGIil8fHIsdGhpcy5lZmY9aS5nZXQoIkVGRiIpfHx0aGlzLnN0bWZ9fWZ1bmN0aW9uIG8oZSx0LHIsbil7dmFyIGEsaSxvPW5ldyBVaW50OEFycmF5KHIubGVuZ3RoKzkpO2ZvcihhPTAsaT1yLmxlbmd0aDthPGk7KythKW9bYV09clthXTtyZXR1cm4gb1thKytdPTI1NSZlLG9bYSsrXT1lPj44JjI1NSxvW2ErK109ZT4+MTYmMjU1LG9bYSsrXT0yNTUmdCxvW2ErK109dD4+OCYyNTUsbiYmKG9bYSsrXT0xMTUsb1thKytdPTY1LG9bYSsrXT0xMDgsb1thKytdPTg0KSx2KG8sMCxhKS5zdWJhcnJheSgwLE1hdGgubWluKHIubGVuZ3RoKzUsMTYpKX1mdW5jdGlvbiBzKGUsdCxyLGkscyl7aWYoISgwLGEuaXNOYW1lKSh0KSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBjcnlwdCBmaWx0ZXIgbmFtZS4iKTt2YXIgbCxjPWUuZ2V0KHQubmFtZSk7aWYobnVsbCE9YyYmKGw9Yy5nZXQoIkNGTSIpKSwhbHx8Ik5vbmUiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgU307aWYoIlYyIj09PWwubmFtZSlyZXR1cm4gZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAobyhyLGkscywhMSkpfTtpZigiQUVTVjIiPT09bC5uYW1lKXJldHVybiBmdW5jdGlvbigpe3JldHVybiBuZXcgeChvKHIsaSxzLCEwKSl9O2lmKCJBRVNWMyI9PT1sLm5hbWUpcmV0dXJuIGZ1bmN0aW9uKCl7cmV0dXJuIG5ldyBBKHMpfTt0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5rbm93biBjcnlwdG8gbWV0aG9kIil9cmV0dXJuIGkucHJvdG90eXBlPXtjcmVhdGVDaXBoZXJUcmFuc2Zvcm06ZnVuY3Rpb24oZSx0KXtpZig0PT09dGhpcy5hbGdvcml0aG18fDU9PT10aGlzLmFsZ29yaXRobSlyZXR1cm4gbmV3IEUocyh0aGlzLmNmLHRoaXMuc3RtZixlLHQsdGhpcy5lbmNyeXB0aW9uS2V5KSxzKHRoaXMuY2YsdGhpcy5zdHJmLGUsdCx0aGlzLmVuY3J5cHRpb25LZXkpKTt2YXIgcj1vKGUsdCx0aGlzLmVuY3J5cHRpb25LZXksITEpLG49ZnVuY3Rpb24oKXtyZXR1cm4gbmV3IHAocil9O3JldHVybiBuZXcgRShuLG4pfX0saX0oKTt0LkNpcGhlclRyYW5zZm9ybUZhY3Rvcnk9VH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Db2xvclNwYWNlPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpO2Z1bmN0aW9uIGkoZSl7cmV0dXJuKGk9ImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmInN5bWJvbCI9PXR5cGVvZiBTeW1ib2wuaXRlcmF0b3I/ZnVuY3Rpb24oZSl7cmV0dXJuIHR5cGVvZiBlfTpmdW5jdGlvbihlKXtyZXR1cm4gZSYmImZ1bmN0aW9uIj09dHlwZW9mIFN5bWJvbCYmZS5jb25zdHJ1Y3Rvcj09PVN5bWJvbCYmZSE9PVN5bWJvbC5wcm90b3R5cGU/InN5bWJvbCI6dHlwZW9mIGV9KShlKX1mdW5jdGlvbiBvKGUsdCl7cmV0dXJuIXR8fCJvYmplY3QiIT09aSh0KSYmImZ1bmN0aW9uIiE9dHlwZW9mIHQ/ZnVuY3Rpb24oZSl7aWYodm9pZCAwPT09ZSl0aHJvdyBuZXcgUmVmZXJlbmNlRXJyb3IoInRoaXMgaGFzbid0IGJlZW4gaW5pdGlhbGlzZWQgLSBzdXBlcigpIGhhc24ndCBiZWVuIGNhbGxlZCIpO3JldHVybiBlfShlKTp0fWZ1bmN0aW9uIHMoZSl7cmV0dXJuKHM9T2JqZWN0LnNldFByb3RvdHlwZU9mP09iamVjdC5nZXRQcm90b3R5cGVPZjpmdW5jdGlvbihlKXtyZXR1cm4gZS5fX3Byb3RvX198fE9iamVjdC5nZXRQcm90b3R5cGVPZihlKX0pKGUpfWZ1bmN0aW9uIGwoZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmYyhlLHQpfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4oYz1PYmplY3Quc2V0UHJvdG90eXBlT2Z8fGZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUuX19wcm90b19fPXQsZX0pKGUsdCl9ZnVuY3Rpb24gdShlLHQpe2lmKCEoZSBpbnN0YW5jZW9mIHQpKXRocm93IG5ldyBUeXBlRXJyb3IoIkNhbm5vdCBjYWxsIGEgY2xhc3MgYXMgYSBmdW5jdGlvbiIpfWZ1bmN0aW9uIGYoZSx0KXtmb3IodmFyIHI9MDtyPHQubGVuZ3RoO3IrKyl7dmFyIG49dFtyXTtuLmVudW1lcmFibGU9bi5lbnVtZXJhYmxlfHwhMSxuLmNvbmZpZ3VyYWJsZT0hMCwidmFsdWUiaW4gbiYmKG4ud3JpdGFibGU9ITApLE9iamVjdC5kZWZpbmVQcm9wZXJ0eShlLG4ua2V5LG4pfX1mdW5jdGlvbiBoKGUsdCxyKXtyZXR1cm4gdCYmZihlLnByb3RvdHlwZSx0KSxyJiZmKGUsciksZX12YXIgZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCxyKXt1KHRoaXMsZSksdGhpcy5jb25zdHJ1Y3Rvcj09PWUmJigwLG4udW5yZWFjaGFibGUpKCJDYW5ub3QgaW5pdGlhbGl6ZSBDb2xvclNwYWNlLiIpLHRoaXMubmFtZT10LHRoaXMubnVtQ29tcHM9cn1yZXR1cm4gaChlLFt7a2V5OiJnZXRSZ2IiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7dmFyIHI9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KDMpO3JldHVybiB0aGlzLmdldFJnYkl0ZW0oZSx0LHIsMCkscn19LHtrZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JJdGVtIil9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLGEsaSxvLHMpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgQ29sb3JTcGFjZS5nZXRSZ2JCdWZmZXIiKX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgiU2hvdWxkIG5vdCBjYWxsIENvbG9yU3BhY2UuZ2V0T3V0cHV0TGVuZ3RoIil9fSx7a2V5OiJpc1Bhc3N0aHJvdWdoIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4hMX19LHtrZXk6ImlzRGVmYXVsdERlY29kZSIsdmFsdWU6ZnVuY3Rpb24odCxyKXtyZXR1cm4gZS5pc0RlZmF1bHREZWNvZGUodCx0aGlzLm51bUNvbXBzKX19LHtrZXk6ImZpbGxSZ2IiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8scyxsKXt2YXIgYz10KnIsdT1udWxsLGY9MTw8byxoPXIhPT1hfHx0IT09bjtpZih0aGlzLmlzUGFzc3Rocm91Z2gobykpdT1zO2Vsc2UgaWYoMT09PXRoaXMubnVtQ29tcHMmJmM+ZiYmIkRldmljZUdyYXkiIT09dGhpcy5uYW1lJiYiRGV2aWNlUkdCIiE9PXRoaXMubmFtZSl7Zm9yKHZhciBkPW88PTg/bmV3IFVpbnQ4QXJyYXkoZik6bmV3IFVpbnQxNkFycmF5KGYpLHA9MDtwPGY7cCsrKWRbcF09cDt2YXIgbT1uZXcgVWludDhDbGFtcGVkQXJyYXkoMypmKTtpZih0aGlzLmdldFJnYkJ1ZmZlcihkLDAsZixtLDAsbywwKSxoKXt1PW5ldyBVaW50OEFycmF5KDMqYyk7Zm9yKHZhciBnPTAsdj0wO3Y8YzsrK3Ype3ZhciB5PTMqc1t2XTt1W2crK109bVt5XSx1W2crK109bVt5KzFdLHVbZysrXT1tW3krMl19fWVsc2UgZm9yKHZhciBiPTAsdz0wO3c8YzsrK3cpe3ZhciBrPTMqc1t3XTtlW2IrK109bVtrXSxlW2IrK109bVtrKzFdLGVbYisrXT1tW2srMl0sYis9bH19ZWxzZSBoPyh1PW5ldyBVaW50OENsYW1wZWRBcnJheSgzKmMpLHRoaXMuZ2V0UmdiQnVmZmVyKHMsMCxjLHUsMCxvLDApKTp0aGlzLmdldFJnYkJ1ZmZlcihzLDAsbippLGUsMCxvLGwpO2lmKHUpaWYoaCkhZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7bz0xIT09bz8wOm87Zm9yKHZhciBzLGw9ci9hLGM9bi9pLHU9MCxmPW5ldyBVaW50MTZBcnJheShhKSxoPTMqcixkPTA7ZDxhO2QrKylmW2RdPTMqTWF0aC5mbG9vcihkKmwpO2Zvcih2YXIgcD0wO3A8aTtwKyspZm9yKHZhciBtPU1hdGguZmxvb3IocCpjKSpoLGc9MDtnPGE7ZysrKXM9bStmW2ddLHRbdSsrXT1lW3MrK10sdFt1KytdPWVbcysrXSx0W3UrK109ZVtzKytdLHUrPW99KHUsZSx0LHIsbixhLGwpO2Vsc2UgZm9yKHZhciBTPTAsXz0wLHg9MCxBPW4qaTt4PEE7eCsrKWVbUysrXT11W18rK10sZVtTKytdPXVbXysrXSxlW1MrK109dVtfKytdLFMrPWx9fSx7a2V5OiJ1c2VzWmVyb1RvT25lUmFuZ2UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJ1c2VzWmVyb1RvT25lUmFuZ2UiLCEwKX19XSxbe2tleToicGFyc2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhPXRoaXMucGFyc2VUb0lSKGUsdCxyLG4pO3JldHVybiB0aGlzLmZyb21JUihhKX19LHtrZXk6ImZyb21JUiIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQscixhLGk9QXJyYXkuaXNBcnJheShlKT9lWzBdOmU7c3dpdGNoKGkpe2Nhc2UiRGV2aWNlR3JheUNTIjpyZXR1cm4gdGhpcy5zaW5nbGV0b25zLmdyYXk7Y2FzZSJEZXZpY2VSZ2JDUyI6cmV0dXJuIHRoaXMuc2luZ2xldG9ucy5yZ2I7Y2FzZSJEZXZpY2VDbXlrQ1MiOnJldHVybiB0aGlzLnNpbmdsZXRvbnMuY215aztjYXNlIkNhbEdyYXlDUyI6cmV0dXJuIHQ9ZVsxXSxyPWVbMl0sYT1lWzNdLG5ldyB3KHQscixhKTtjYXNlIkNhbFJHQkNTIjp0PWVbMV0scj1lWzJdLGE9ZVszXTt2YXIgbz1lWzRdO3JldHVybiBuZXcgayh0LHIsYSxvKTtjYXNlIlBhdHRlcm5DUyI6dmFyIHM9ZVsxXTtyZXR1cm4gcyYmKHM9dGhpcy5mcm9tSVIocykpLG5ldyBtKHMpO2Nhc2UiSW5kZXhlZENTIjp2YXIgbD1lWzFdLGM9ZVsyXSx1PWVbM107cmV0dXJuIG5ldyBnKHRoaXMuZnJvbUlSKGwpLGMsdSk7Y2FzZSJBbHRlcm5hdGVDUyI6dmFyIGY9ZVsxXSxoPWVbMl0sZD1lWzNdO3JldHVybiBuZXcgcChmLHRoaXMuZnJvbUlSKGgpLGQpO2Nhc2UiTGFiQ1MiOnQ9ZVsxXSxyPWVbMl07dmFyIHY9ZVszXTtyZXR1cm4gbmV3IFModCxyLHYpO2RlZmF1bHQ6dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gY29sb3JzcGFjZSBuYW1lOiAiLmNvbmNhdChpKSl9fX0se2tleToicGFyc2VUb0lSIix2YWx1ZTpmdW5jdGlvbihlLHQpe3ZhciByPWFyZ3VtZW50cy5sZW5ndGg+MiYmdm9pZCAwIT09YXJndW1lbnRzWzJdP2FyZ3VtZW50c1syXTpudWxsLGk9YXJndW1lbnRzLmxlbmd0aD4zP2FyZ3VtZW50c1szXTp2b2lkIDA7aWYoZT10LmZldGNoSWZSZWYoZSksKDAsYS5pc05hbWUpKGUpKXN3aXRjaChlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6Y2FzZSJHIjpyZXR1cm4iRGV2aWNlR3JheUNTIjtjYXNlIkRldmljZVJHQiI6Y2FzZSJSR0IiOnJldHVybiJEZXZpY2VSZ2JDUyI7Y2FzZSJEZXZpY2VDTVlLIjpjYXNlIkNNWUsiOnJldHVybiJEZXZpY2VDbXlrQ1MiO2Nhc2UiUGF0dGVybiI6cmV0dXJuWyJQYXR0ZXJuQ1MiLG51bGxdO2RlZmF1bHQ6aWYoKDAsYS5pc0RpY3QpKHIpKXt2YXIgbz1yLmdldCgiQ29sb3JTcGFjZSIpO2lmKCgwLGEuaXNEaWN0KShvKSl7dmFyIHM9by5nZXQoZS5uYW1lKTtpZihzKXtpZigoMCxhLmlzTmFtZSkocykpcmV0dXJuIHRoaXMucGFyc2VUb0lSKHMsdCxyLGkpO2U9czticmVha319fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bnJlY29nbml6ZWQgY29sb3JzcGFjZSAiLmNvbmNhdChlLm5hbWUpKX1pZihBcnJheS5pc0FycmF5KGUpKXt2YXIgbCxjLHUsZixoLGQscD10LmZldGNoSWZSZWYoZVswXSkubmFtZTtzd2l0Y2gocCl7Y2FzZSJEZXZpY2VHcmF5IjpjYXNlIkciOnJldHVybiJEZXZpY2VHcmF5Q1MiO2Nhc2UiRGV2aWNlUkdCIjpjYXNlIlJHQiI6cmV0dXJuIkRldmljZVJnYkNTIjtjYXNlIkRldmljZUNNWUsiOmNhc2UiQ01ZSyI6cmV0dXJuIkRldmljZUNteWtDUyI7Y2FzZSJDYWxHcmF5IjpyZXR1cm5bIkNhbEdyYXlDUyIsZj0oYz10LmZldGNoSWZSZWYoZVsxXSkpLmdldEFycmF5KCJXaGl0ZVBvaW50IiksaD1jLmdldEFycmF5KCJCbGFja1BvaW50IiksZD1jLmdldCgiR2FtbWEiKV07Y2FzZSJDYWxSR0IiOmY9KGM9dC5mZXRjaElmUmVmKGVbMV0pKS5nZXRBcnJheSgiV2hpdGVQb2ludCIpLGg9Yy5nZXRBcnJheSgiQmxhY2tQb2ludCIpLGQ9Yy5nZXRBcnJheSgiR2FtbWEiKTt2YXIgbT1jLmdldEFycmF5KCJNYXRyaXgiKTtyZXR1cm5bIkNhbFJHQkNTIixmLGgsZCxtXTtjYXNlIklDQ0Jhc2VkIjp2YXIgZz10LmZldGNoSWZSZWYoZVsxXSksdj1nLmRpY3Q7aWYobD12LmdldCgiTiIpLHU9di5nZXQoIkFsdGVybmF0ZSIpKXt2YXIgeT10aGlzLnBhcnNlVG9JUih1LHQscixpKSxiPXRoaXMuZnJvbUlSKHksaSk7aWYoYi5udW1Db21wcz09PWwpcmV0dXJuIHk7KDAsbi53YXJuKSgiSUNDQmFzZWQgY29sb3Igc3BhY2U6IElnbm9yaW5nIGluY29ycmVjdCAvQWx0ZXJuYXRlIGVudHJ5LiIpfWlmKDE9PT1sKXJldHVybiJEZXZpY2VHcmF5Q1MiO2lmKDM9PT1sKXJldHVybiJEZXZpY2VSZ2JDUyI7aWYoND09PWwpcmV0dXJuIkRldmljZUNteWtDUyI7YnJlYWs7Y2FzZSJQYXR0ZXJuIjp2YXIgdz1lWzFdfHxudWxsO3JldHVybiB3JiYodz10aGlzLnBhcnNlVG9JUih3LHQscixpKSksWyJQYXR0ZXJuQ1MiLHddO2Nhc2UiSW5kZXhlZCI6Y2FzZSJJIjp2YXIgaz10aGlzLnBhcnNlVG9JUihlWzFdLHQscixpKSxTPXQuZmV0Y2hJZlJlZihlWzJdKSsxLF89dC5mZXRjaElmUmVmKGVbM10pO3JldHVybigwLGEuaXNTdHJlYW0pKF8pJiYoXz1fLmdldEJ5dGVzKCkpLFsiSW5kZXhlZENTIixrLFMsX107Y2FzZSJTZXBhcmF0aW9uIjpjYXNlIkRldmljZU4iOnZhciB4PXQuZmV0Y2hJZlJlZihlWzFdKTtsPUFycmF5LmlzQXJyYXkoeCk/eC5sZW5ndGg6MSx1PXRoaXMucGFyc2VUb0lSKGVbMl0sdCxyLGkpO3ZhciBBPWkuY3JlYXRlKHQuZmV0Y2hJZlJlZihlWzNdKSk7cmV0dXJuWyJBbHRlcm5hdGVDUyIsbCx1LEFdO2Nhc2UiTGFiIjpmPShjPXQuZmV0Y2hJZlJlZihlWzFdKSkuZ2V0QXJyYXkoIldoaXRlUG9pbnQiKSxoPWMuZ2V0QXJyYXkoIkJsYWNrUG9pbnQiKTt2YXIgQz1jLmdldEFycmF5KCJSYW5nZSIpO3JldHVyblsiTGFiQ1MiLGYsaCxDXTtkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCd1bmltcGxlbWVudGVkIGNvbG9yIHNwYWNlIG9iamVjdCAiJy5jb25jYXQocCwnIicpKX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ3VucmVjb2duaXplZCBjb2xvciBzcGFjZSBvYmplY3Q6ICInLmNvbmNhdChlLCciJykpfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFBcnJheS5pc0FycmF5KGUpKXJldHVybiEwO2lmKDIqdCE9PWUubGVuZ3RoKXJldHVybigwLG4ud2FybikoIlRoZSBkZWNvZGUgbWFwIGlzIG5vdCB0aGUgY29ycmVjdCBsZW5ndGgiKSwhMDtmb3IodmFyIHI9MCxhPWUubGVuZ3RoO3I8YTtyKz0yKWlmKDAhPT1lW3JdfHwxIT09ZVtyKzFdKXJldHVybiExO3JldHVybiEwfX0se2tleToic2luZ2xldG9ucyIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInNpbmdsZXRvbnMiLHtnZXQgZ3JheSgpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJncmF5IixuZXcgdil9LGdldCByZ2IoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywicmdiIixuZXcgeSl9LGdldCBjbXlrKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsImNteWsiLG5ldyBiKX19KX19XSksZX0oKTt0LkNvbG9yU3BhY2U9ZDt2YXIgcD1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscixuKXt2YXIgYTtyZXR1cm4gdSh0aGlzLHQpLChhPW8odGhpcyxzKHQpLmNhbGwodGhpcywiQWx0ZXJuYXRlIixlKSkpLmJhc2U9cixhLnRpbnRGbj1uLGEudG1wQnVmPW5ldyBGbG9hdDMyQXJyYXkoci5udW1Db21wcyksYX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy50bXBCdWY7dGhpcy50aW50Rm4oZSx0LGEsMCksdGhpcy5iYXNlLmdldFJnYkl0ZW0oYSwwLHIsbil9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe3ZhciBzLGwsYz10aGlzLnRpbnRGbix1PXRoaXMuYmFzZSxmPTEvKCgxPDxpKS0xKSxoPXUubnVtQ29tcHMsZD11LnVzZXNaZXJvVG9PbmVSYW5nZSxwPSh1LmlzUGFzc3Rocm91Z2goOCl8fCFkKSYmMD09PW8sbT1wP2E6MCxnPXA/bjpuZXcgVWludDhDbGFtcGVkQXJyYXkoaCpyKSx2PXRoaXMubnVtQ29tcHMseT1uZXcgRmxvYXQzMkFycmF5KHYpLGI9bmV3IEZsb2F0MzJBcnJheShoKTtmb3Iocz0wO3M8cjtzKyspe2ZvcihsPTA7bDx2O2wrKyl5W2xdPWVbdCsrXSpmO2lmKGMoeSwwLGIsMCksZClmb3IobD0wO2w8aDtsKyspZ1ttKytdPTI1NSpiW2xdO2Vsc2UgdS5nZXRSZ2JJdGVtKGIsMCxnLG0pLG0rPWh9cHx8dS5nZXRSZ2JCdWZmZXIoZywwLHIsbixhLDgsbyl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMvdGhpcy5udW1Db21wcyx0KX19XSksdH0oZCksbT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiB1KHRoaXMsdCksKHI9byh0aGlzLHModCkuY2FsbCh0aGlzLCJQYXR0ZXJuIixudWxsKSkpLmJhc2U9ZSxyfXJldHVybiBsKHQsZSksaCh0LFt7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuQ1MuaXNEZWZhdWx0RGVjb2RlIil9fV0pLHR9KGQpLGc9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsaSl7dmFyIGw7dSh0aGlzLHQpLChsPW8odGhpcyxzKHQpLmNhbGwodGhpcywiSW5kZXhlZCIsMSkpKS5iYXNlPWUsbC5oaWdoVmFsPXI7dmFyIGM9ZS5udW1Db21wcypyO2lmKCgwLGEuaXNTdHJlYW0pKGkpKXtsLmxvb2t1cD1uZXcgVWludDhBcnJheShjKTt2YXIgZj1pLmdldEJ5dGVzKGMpO2wubG9va3VwLnNldChmKX1lbHNlIGlmKCgwLG4uaXNTdHJpbmcpKGkpKXtsLmxvb2t1cD1uZXcgVWludDhBcnJheShjKTtmb3IodmFyIGg9MDtoPGM7KytoKWwubG9va3VwW2hdPWkuY2hhckNvZGVBdChoKX1lbHNle2lmKCEoaSBpbnN0YW5jZW9mIFVpbnQ4QXJyYXkpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbnJlY29nbml6ZWQgbG9va3VwIHRhYmxlOiAiLmNvbmNhdChpKSk7bC5sb29rdXA9aX1yZXR1cm4gbH1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcy5iYXNlLm51bUNvbXBzLGk9ZVt0XSphO3RoaXMuYmFzZS5nZXRSZ2JCdWZmZXIodGhpcy5sb29rdXAsaSwxLHIsbiw4LDApfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9dGhpcy5iYXNlLGw9cy5udW1Db21wcyxjPXMuZ2V0T3V0cHV0TGVuZ3RoKGwsbyksdT10aGlzLmxvb2t1cCxmPTA7ZjxyOysrZil7dmFyIGg9ZVt0KytdKmw7cy5nZXRSZ2JCdWZmZXIodSxoLDEsbixhLDgsbyksYSs9Y319fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIHRoaXMuYmFzZS5nZXRPdXRwdXRMZW5ndGgoZSp0aGlzLmJhc2UubnVtQ29tcHMsdCl9fSx7a2V5OiJpc0RlZmF1bHREZWNvZGUiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIUFycmF5LmlzQXJyYXkoZSl8fCgyIT09ZS5sZW5ndGg/KCgwLG4ud2FybikoIkRlY29kZSBtYXAgbGVuZ3RoIGlzIG5vdCBjb3JyZWN0IiksITApOiFOdW1iZXIuaXNJbnRlZ2VyKHQpfHx0PDE/KCgwLG4ud2FybikoIkJpdHMgcGVyIGNvbXBvbmVudCBpcyBub3QgY29ycmVjdCIpLCEwKTowPT09ZVswXSYmZVsxXT09PSgxPDx0KS0xKX19XSksdH0oZCksdj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHUodGhpcyx0KSxvKHRoaXMscyh0KS5jYWxsKHRoaXMsIkRldmljZUdyYXkiLDEpKX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9MjU1KmVbdF07cltuXT1yW24rMV09cltuKzJdPWF9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4sYSxpLG8pe2Zvcih2YXIgcz0yNTUvKCgxPDxpKS0xKSxsPXQsYz1hLHU9MDt1PHI7Kyt1KXt2YXIgZj1zKmVbbCsrXTtuW2MrK109ZixuW2MrK109ZixuW2MrK109ZixjKz1vfX19LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZSooMyt0KX19XSksdH0oZCkseT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KCl7cmV0dXJuIHUodGhpcyx0KSxvKHRoaXMscyh0KS5jYWxsKHRoaXMsIkRldmljZVJHQiIsMykpfXJldHVybiBsKHQsZSksaCh0LFt7a2V5OiJnZXRSZ2JJdGVtIix2YWx1ZTpmdW5jdGlvbihlLHQscixuKXtyW25dPTI1NSplW3RdLHJbbisxXT0yNTUqZVt0KzFdLHJbbisyXT0yNTUqZVt0KzJdfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtpZig4IT09aXx8MCE9PW8pZm9yKHZhciBzPTI1NS8oKDE8PGkpLTEpLGw9dCxjPWEsdT0wO3U8cjsrK3UpbltjKytdPXMqZVtsKytdLG5bYysrXT1zKmVbbCsrXSxuW2MrK109cyplW2wrK10sYys9bztlbHNlIG4uc2V0KGUuc3ViYXJyYXkodCx0KzMqciksYSl9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNQYXNzdGhyb3VnaCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIDg9PT1lfX1dKSx0fShkKSxiPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscixuLGEpe3ZhciBpPWVbdF0qcixvPWVbdCsxXSpyLHM9ZVt0KzJdKnIsbD1lW3QrM10qcjtuW2FdPTI1NStpKigtNC4zODczMzIzODQ2MDk5ODgqaSs1NC40ODYxNTE5NDE4OTE3NipvKzE4LjgyMjkwNTAyMTY1MzAyKnMrMjEyLjI1NjYyNDUxNjM5NTg1KmwtMjg1LjIzMzEwMjYxMzcwMDQpK28qKDEuNzE0OTc2MzQ3NzM2MjEzNCpvLTUuNjA5NjczNjkwNDA0NzMxNSpzKy0xNy44NzM4NzA4NjE0MTU0NDQqbC01LjQ5NzAwNjQyNzE5NjM2NikrcyooLTIuNTIxNzM0MDEzMTY4MzAzMypzLTIxLjI0ODkyMzMzNzM1MzA3MypsKzE3LjUxMTkyNzA4NDE4MTMpK2wqKC0yMS44NjEyMjE0NzQ2MzYwNSpsLTE4OS40ODE4MDgzNTkyMjc0NyksblthKzFdPTI1NStpKig4Ljg0MTA0MTQyMjAzNjE0OSppKzYwLjExODAyNzA0NTU5NzM2NipvKzYuODcxNDI1NTkyMDQ5MDA3KnMrMzEuMTU5MTAwMTMwMDU1OTIyKmwtNzkuMjk3MDg0NDgxNjU0OCkrbyooLTE1LjMxMDM2MTMwNjk2NzgxNypvKzE3LjU3NTI1MTI2MTEwOTQ4MipzKzEzMS4zNTI1MDkxMjQ5Mzk3NipsLTE5MC45NDUzMzAyNTg4OTUxKStzKig0LjQ0NDMzOTEwMjg1MjczOSpzKzkuODYzMjg2MTQ5MzQwNSpsLTI0Ljg2NzQxNTgyNTU1ODc4KStsKigtMjAuNzM3MzI1NDcxMTgxMDM0KmwtMTg3LjgwNDUzNzA5NzE5NTc4KSxuW2ErMl09MjU1K2kqKC44ODQyNTIyNDMwMDAzMjk2KmkrOC4wNzg2Nzc1MDMxMTI5MjgqbyszMC44OTk3ODMwOTcwMzcyOSpzLS4yMzg4MzIzODY4OTE3ODkzNCpsLTE0LjE4MzU3Njc5OTY3MzI4NikrbyooMTAuNDk1OTMyNzM0MzIwNzIqbys2My4wMjM3ODQ5NDc1NDA1MipzKzUwLjYwNjk1NzY1NjM2MDczNCpsLTExMi4yMzg4NDI1MzcxOTI0OCkrcyooLjAzMjk2MDQxMTE0ODczMjE3KnMrMTE1LjYwMzg0NDQ5NjQ2NjQxKmwtMTkzLjU4MjA5MzU2ODYxNTA1KStsKigtMjIuMzM4MTY4MDczMDk4ODYqbC0xODAuMTI2MTM5NzQ3MDgzNjcpfXJldHVybiBmdW5jdGlvbih0KXtmdW5jdGlvbiByKCl7cmV0dXJuIHUodGhpcyxyKSxvKHRoaXMscyhyKS5jYWxsKHRoaXMsIkRldmljZUNNWUsiLDQpKX1yZXR1cm4gbChyLHQpLGgocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0LHIsMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbih0LHIsbixhLGksbyxzKXtmb3IodmFyIGw9MS8oKDE8PG8pLTEpLGM9MDtjPG47YysrKWUodCxyLGwsYSxpKSxyKz00LGkrPTMrc319LHtrZXk6ImdldE91dHB1dExlbmd0aCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS80KigzK3QpfDB9fV0pLHJ9KGQpfSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpKXt2YXIgbz10W3JdKmkscz1NYXRoLnBvdyhvLGUuRyksbD1lLllXKnMsYz1NYXRoLm1heCgyOTUuOCpNYXRoLnBvdyhsLC4zMzMzMzMzMzMzMzMzMzMzKS00MC44LDApO25bYV09YyxuW2ErMV09YyxuW2ErMl09Y31yZXR1cm4gZnVuY3Rpb24odCl7ZnVuY3Rpb24gcihlLHQsYSl7dmFyIGk7aWYodSh0aGlzLHIpLGk9byh0aGlzLHMocikuY2FsbCh0aGlzLCJDYWxHcmF5IiwxKSksIWUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIldoaXRlUG9pbnQgbWlzc2luZyAtIHJlcXVpcmVkIGZvciBjb2xvciBzcGFjZSBDYWxHcmF5Iik7aWYodD10fHxbMCwwLDBdLGE9YXx8MSxpLlhXPWVbMF0saS5ZVz1lWzFdLGkuWlc9ZVsyXSxpLlhCPXRbMF0saS5ZQj10WzFdLGkuWkI9dFsyXSxpLkc9YSxpLlhXPDB8fGkuWlc8MHx8MSE9PWkuWVcpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdChpLm5hbWUpKyIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihpLlhCPDB8fGkuWUI8MHx8aS5aQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQoaS5uYW1lLCIsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0LiIpKSxpLlhCPWkuWUI9aS5aQj0wKSwwPT09aS5YQiYmMD09PWkuWUImJjA9PT1pLlpCfHwoMCxuLndhcm4pKCIiLmNvbmNhdChpLm5hbWUsIiwgQmxhY2tQb2ludDogWEI6ICIpLmNvbmNhdChpLlhCLCIsIFlCOiAiKS5jb25jYXQoaS5ZQiwiLCAiKSsiWkI6ICIuY29uY2F0KGkuWkIsIiwgb25seSBkZWZhdWx0IHZhbHVlcyBhcmUgc3VwcG9ydGVkLiIpKSxpLkc8MSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWE6ICIuY29uY2F0KGkuRywiIGZvciAiKS5jb25jYXQoaS5uYW1lLCIsICIpKyJmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdC4iKSxpLkc9MSksaX1yZXR1cm4gbChyLHQpLGgocixbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24odCxyLG4sYSl7ZSh0aGlzLHQscixuLGEsMSl9fSx7a2V5OiJnZXRSZ2JCdWZmZXIiLHZhbHVlOmZ1bmN0aW9uKHQscixuLGEsaSxvLHMpe2Zvcih2YXIgbD0xLygoMTw8byktMSksYz0wO2M8bjsrK2MpZSh0aGlzLHQscixhLGksbCkscis9MSxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCl9fV0pLHJ9KGQpfSgpLGs9ZnVuY3Rpb24oKXt2YXIgZT1uZXcgRmxvYXQzMkFycmF5KFsuODk1MSwuMjY2NCwtLjE2MTQsLS43NTAyLDEuNzEzNSwuMDM2NywuMDM4OSwtLjA2ODUsMS4wMjk2XSksdD1uZXcgRmxvYXQzMkFycmF5KFsuOTg2OTkyOSwtLjE0NzA1NDMsLjE1OTk2MjcsLjQzMjMwNTMsLjUxODM2MDMsLjA0OTI5MTIsLS4wMDg1Mjg3LC4wNDAwNDI4LC45Njg0ODY3XSkscj1uZXcgRmxvYXQzMkFycmF5KFszLjI0MDQ1NDIsLTEuNTM3MTM4NSwtLjQ5ODUzMTQsLS45NjkyNjYsMS44NzYwMTA4LC4wNDE1NTYsLjA1NTY0MzQsLS4yMDQwMjU5LDEuMDU3MjI1Ml0pLGE9bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPW5ldyBGbG9hdDMyQXJyYXkoMyksYz1uZXcgRmxvYXQzMkFycmF5KDMpLGY9bmV3IEZsb2F0MzJBcnJheSgzKSxwPU1hdGgucG93KDI0LzExNiwzKS84O2Z1bmN0aW9uIG0oZSx0LHIpe3JbMF09ZVswXSp0WzBdK2VbMV0qdFsxXStlWzJdKnRbMl0sclsxXT1lWzNdKnRbMF0rZVs0XSp0WzFdK2VbNV0qdFsyXSxyWzJdPWVbNl0qdFswXStlWzddKnRbMV0rZVs4XSp0WzJdfWZ1bmN0aW9uIGcoZSl7cmV0dXJuIHYoMCwxLGU8PS4wMDMxMzA4PzEyLjkyKmU6MS4wNTUqTWF0aC5wb3coZSwxLzIuNCktLjA1NSl9ZnVuY3Rpb24gdihlLHQscil7cmV0dXJuIE1hdGgubWF4KGUsTWF0aC5taW4odCxyKSl9ZnVuY3Rpb24geShlKXtyZXR1cm4gZTwwPy15KC1lKTplPjg/TWF0aC5wb3coKGUrMTYpLzExNiwzKTplKnB9ZnVuY3Rpb24gYihuLG8scyxsLHUsaCl7dmFyIGQ9digwLDEsb1tzXSpoKSxwPXYoMCwxLG9bcysxXSpoKSxiPXYoMCwxLG9bcysyXSpoKSx3PU1hdGgucG93KGQsbi5HUiksaz1NYXRoLnBvdyhwLG4uR0cpLFM9TWF0aC5wb3coYixuLkdCKSxfPW4uTVhBKncrbi5NWEIqaytuLk1YQypTLHg9bi5NWUEqdytuLk1ZQiprK24uTVlDKlMsQT1uLk1aQSp3K24uTVpCKmsrbi5NWkMqUyxDPWM7Q1swXT1fLENbMV09eCxDWzJdPUE7dmFyIFA9ZjshZnVuY3Rpb24ocixuLGEpe2lmKDE9PT1yWzBdJiYxPT09clsyXSlyZXR1cm4gYVswXT1uWzBdLGFbMV09blsxXSx2b2lkKGFbMl09blsyXSk7dmFyIG89YTttKGUsbixvKTt2YXIgcz1pOyFmdW5jdGlvbihlLHQscil7clswXT0xKnRbMF0vZVswXSxyWzFdPTEqdFsxXS9lWzFdLHJbMl09MSp0WzJdL2VbMl19KHIsbyxzKSxtKHQscyxhKX0obi53aGl0ZVBvaW50LEMsUCk7dmFyIEU9YzshZnVuY3Rpb24oZSx0LHIpe2lmKDA9PT1lWzBdJiYwPT09ZVsxXSYmMD09PWVbMl0pcmV0dXJuIHJbMF09dFswXSxyWzFdPXRbMV0sdm9pZChyWzJdPXRbMl0pO3ZhciBuPXkoMCksYT0oMS1uKS8oMS15KGVbMF0pKSxpPTEtYSxvPSgxLW4pLygxLXkoZVsxXSkpLHM9MS1vLGw9KDEtbikvKDEteShlWzJdKSksYz0xLWw7clswXT10WzBdKmEraSxyWzFdPXRbMV0qbytzLHJbMl09dFsyXSpsK2N9KG4uYmxhY2tQb2ludCxQLEUpO3ZhciBUPWY7IWZ1bmN0aW9uKHIsbixhKXt2YXIgbz1hO20oZSxuLG8pO3ZhciBzPWk7IWZ1bmN0aW9uKGUsdCxyKXtyWzBdPS45NTA0Nyp0WzBdL2VbMF0sclsxXT0xKnRbMV0vZVsxXSxyWzJdPTEuMDg4ODMqdFsyXS9lWzJdfShyLG8scyksbSh0LHMsYSl9KGEsRSxUKTt2YXIgUj1jO20ocixULFIpLGxbdV09MjU1KmcoUlswXSksbFt1KzFdPTI1NSpnKFJbMV0pLGxbdSsyXT0yNTUqZyhSWzJdKX1yZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsYSxpKXt2YXIgbDtpZih1KHRoaXMsdCksbD1vKHRoaXMscyh0KS5jYWxsKHRoaXMsIkNhbFJHQiIsMykpLCFlKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJXaGl0ZVBvaW50IG1pc3NpbmcgLSByZXF1aXJlZCBmb3IgY29sb3Igc3BhY2UgQ2FsUkdCIik7cj1yfHxuZXcgRmxvYXQzMkFycmF5KDMpLGE9YXx8bmV3IEZsb2F0MzJBcnJheShbMSwxLDFdKSxpPWl8fG5ldyBGbG9hdDMyQXJyYXkoWzEsMCwwLDAsMSwwLDAsMCwxXSk7dmFyIGM9ZVswXSxmPWVbMV0saD1lWzJdO2wud2hpdGVQb2ludD1lO3ZhciBkPXJbMF0scD1yWzFdLG09clsyXTtpZihsLmJsYWNrUG9pbnQ9cixsLkdSPWFbMF0sbC5HRz1hWzFdLGwuR0I9YVsyXSxsLk1YQT1pWzBdLGwuTVlBPWlbMV0sbC5NWkE9aVsyXSxsLk1YQj1pWzNdLGwuTVlCPWlbNF0sbC5NWkI9aVs1XSxsLk1YQz1pWzZdLGwuTVlDPWlbN10sbC5NWkM9aVs4XSxjPDB8fGg8MHx8MSE9PWYpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgV2hpdGVQb2ludCBjb21wb25lbnRzIGZvciAiLmNvbmNhdChsLm5hbWUpKyIsIG5vIGZhbGxiYWNrIGF2YWlsYWJsZSIpO3JldHVybihkPDB8fHA8MHx8bTwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgQmxhY2tQb2ludCBmb3IgIi5jb25jYXQobC5uYW1lLCIgWyIpLmNvbmNhdChkLCIsICIpLmNvbmNhdChwLCIsICIpLmNvbmNhdChtLCJdLCAiKSsiZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIiksbC5ibGFja1BvaW50PW5ldyBGbG9hdDMyQXJyYXkoMykpLChsLkdSPDB8fGwuR0c8MHx8bC5HQjwwKSYmKCgwLG4uaW5mbykoIkludmFsaWQgR2FtbWEgWyIuY29uY2F0KGwuR1IsIiwgIikuY29uY2F0KGwuR0csIiwgIikuY29uY2F0KGwuR0IsIl0gZm9yICIpKyIiLmNvbmNhdChsLm5hbWUsIiwgZmFsbGluZyBiYWNrIHRvIGRlZmF1bHQuIikpLGwuR1I9bC5HRz1sLkdCPTEpLGx9cmV0dXJuIGwodCxlKSxoKHQsW3trZXk6ImdldFJnYkl0ZW0iLHZhbHVlOmZ1bmN0aW9uKGUsdCxyLG4pe2IodGhpcyxlLHQscixuLDEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQscixuLGEsaSxvKXtmb3IodmFyIHM9MS8oKDE8PGkpLTEpLGw9MDtsPHI7KytsKWIodGhpcyxlLHQsbixhLHMpLHQrPTMsYSs9MytvfX0se2tleToiZ2V0T3V0cHV0TGVuZ3RoIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiBlKigzK3QpLzN8MH19XSksdH0oZCl9KCksUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PTYvMjk/ZSplKmU6MTA4Lzg0MSooZS00LzI5KX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybiByK2UqKG4tcikvdH1mdW5jdGlvbiByKHIsbixhLGksbyxzKXt2YXIgbD1uW2FdLGM9blthKzFdLHU9blthKzJdOyExIT09aSYmKGw9dChsLGksMCwxMDApLGM9dChjLGksci5hbWluLHIuYW1heCksdT10KHUsaSxyLmJtaW4sci5ibWF4KSk7dmFyIGYsaCxkLHA9KGwrMTYpLzExNixtPXArKGM9Yz5yLmFtYXg/ci5hbWF4OmM8ci5hbWluP3IuYW1pbjpjKS81MDAsZz1wLSh1PXU+ci5ibWF4P3IuYm1heDp1PHIuYm1pbj9yLmJtaW46dSkvMjAwLHY9ci5YVyplKG0pLHk9ci5ZVyplKHApLGI9ci5aVyplKGcpO3IuWlc8MT8oZj0zLjEzMzkqdistMS42MTcqeSstLjQ5MDYqYixoPS0uOTc4NSp2KzEuOTE2KnkrLjAzMzMqYixkPS4wNzIqdistLjIyOSp5KzEuNDA1NypiKTooZj0zLjI0MDYqdistMS41MzcyKnkrLS40OTg2KmIsaD0tLjk2ODkqdisxLjg3NTgqeSsuMDQxNSpiLGQ9LjA1NTcqdistLjIwNCp5KzEuMDU3KmIpLG9bc109MjU1Kk1hdGguc3FydChmKSxvW3MrMV09MjU1Kk1hdGguc3FydChoKSxvW3MrMl09MjU1Kk1hdGguc3FydChkKX1yZXR1cm4gZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsYSl7dmFyIGk7aWYodSh0aGlzLHQpLGk9byh0aGlzLHModCkuY2FsbCh0aGlzLCJMYWIiLDMpKSwhZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiV2hpdGVQb2ludCBtaXNzaW5nIC0gcmVxdWlyZWQgZm9yIGNvbG9yIHNwYWNlIExhYiIpO2lmKHI9cnx8WzAsMCwwXSxhPWF8fFstMTAwLDEwMCwtMTAwLDEwMF0saS5YVz1lWzBdLGkuWVc9ZVsxXSxpLlpXPWVbMl0saS5hbWluPWFbMF0saS5hbWF4PWFbMV0saS5ibWluPWFbMl0saS5ibWF4PWFbM10saS5YQj1yWzBdLGkuWUI9clsxXSxpLlpCPXJbMl0saS5YVzwwfHxpLlpXPDB8fDEhPT1pLllXKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIFdoaXRlUG9pbnQgY29tcG9uZW50cywgbm8gZmFsbGJhY2sgYXZhaWxhYmxlIik7cmV0dXJuKGkuWEI8MHx8aS5ZQjwwfHxpLlpCPDApJiYoKDAsbi5pbmZvKSgiSW52YWxpZCBCbGFja1BvaW50LCBmYWxsaW5nIGJhY2sgdG8gZGVmYXVsdCIpLGkuWEI9aS5ZQj1pLlpCPTApLChpLmFtaW4+aS5hbWF4fHxpLmJtaW4+aS5ibWF4KSYmKCgwLG4uaW5mbykoIkludmFsaWQgUmFuZ2UsIGZhbGxpbmcgYmFjayB0byBkZWZhdWx0cyIpLGkuYW1pbj0tMTAwLGkuYW1heD0xMDAsaS5ibWluPS0xMDAsaS5ibWF4PTEwMCksaX1yZXR1cm4gbCh0LGUpLGgodCxbe2tleToiZ2V0UmdiSXRlbSIsdmFsdWU6ZnVuY3Rpb24oZSx0LG4sYSl7cih0aGlzLGUsdCwhMSxuLGEpfX0se2tleToiZ2V0UmdiQnVmZmVyIix2YWx1ZTpmdW5jdGlvbihlLHQsbixhLGksbyxzKXtmb3IodmFyIGw9KDE8PG8pLTEsYz0wO2M8bjtjKyspcih0aGlzLGUsdCxsLGEsaSksdCs9MyxpKz0zK3N9fSx7a2V5OiJnZXRPdXRwdXRMZW5ndGgiLHZhbHVlOmZ1bmN0aW9uKGUsdCl7cmV0dXJuIGUqKDMrdCkvM3wwfX0se2tleToiaXNEZWZhdWx0RGVjb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQpe3JldHVybiEwfX0se2tleToidXNlc1plcm9Ub09uZVJhbmdlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidXNlc1plcm9Ub09uZVJhbmdlIiwhMSl9fV0pLHR9KGQpfSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkFubm90YXRpb25GYWN0b3J5PXQuQW5ub3RhdGlvbkJvcmRlclN0eWxlPXQuQW5ub3RhdGlvbj12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU0KSxpPXIoMTU1KSxvPXIoMTY4KSxzPXIoMTcwKSxsPXIoMTU3KTtmdW5jdGlvbiBjKGUpe3JldHVybihjPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gdShlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWModCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBmKGUsdCxyKXtyZXR1cm4oZj0idW5kZWZpbmVkIiE9dHlwZW9mIFJlZmxlY3QmJlJlZmxlY3QuZ2V0P1JlZmxlY3QuZ2V0OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1mdW5jdGlvbihlLHQpe2Zvcig7IU9iamVjdC5wcm90b3R5cGUuaGFzT3duUHJvcGVydHkuY2FsbChlLHQpJiZudWxsIT09KGU9aChlKSk7KTtyZXR1cm4gZX0oZSx0KTtpZihuKXt2YXIgYT1PYmplY3QuZ2V0T3duUHJvcGVydHlEZXNjcmlwdG9yKG4sdCk7cmV0dXJuIGEuZ2V0P2EuZ2V0LmNhbGwocik6YS52YWx1ZX19KShlLHQscnx8ZSl9ZnVuY3Rpb24gaChlKXtyZXR1cm4oaD1PYmplY3Quc2V0UHJvdG90eXBlT2Y/T2JqZWN0LmdldFByb3RvdHlwZU9mOmZ1bmN0aW9uKGUpe3JldHVybiBlLl9fcHJvdG9fX3x8T2JqZWN0LmdldFByb3RvdHlwZU9mKGUpfSkoZSl9ZnVuY3Rpb24gZChlLHQpe2lmKCJmdW5jdGlvbiIhPXR5cGVvZiB0JiZudWxsIT09dCl0aHJvdyBuZXcgVHlwZUVycm9yKCJTdXBlciBleHByZXNzaW9uIG11c3QgZWl0aGVyIGJlIG51bGwgb3IgYSBmdW5jdGlvbiIpO2UucHJvdG90eXBlPU9iamVjdC5jcmVhdGUodCYmdC5wcm90b3R5cGUse2NvbnN0cnVjdG9yOnt2YWx1ZTplLHdyaXRhYmxlOiEwLGNvbmZpZ3VyYWJsZTohMH19KSx0JiZwKGUsdCl9ZnVuY3Rpb24gcChlLHQpe3JldHVybihwPU9iamVjdC5zZXRQcm90b3R5cGVPZnx8ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5fX3Byb3RvX189dCxlfSkoZSx0KX1mdW5jdGlvbiBtKGUsdCl7aWYoIShlIGluc3RhbmNlb2YgdCkpdGhyb3cgbmV3IFR5cGVFcnJvcigiQ2Fubm90IGNhbGwgYSBjbGFzcyBhcyBhIGZ1bmN0aW9uIil9ZnVuY3Rpb24gZyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fWZ1bmN0aW9uIHYoZSx0LHIpe3JldHVybiB0JiZnKGUucHJvdG90eXBlLHQpLHImJmcoZSxyKSxlfXZhciB5PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe20odGhpcyxlKX1yZXR1cm4gdihlLG51bGwsW3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIsbil7cmV0dXJuIHIuZW5zdXJlKHRoaXMsIl9jcmVhdGUiLFtlLHQscixuXSl9fSx7a2V5OiJfY3JlYXRlIix2YWx1ZTpmdW5jdGlvbihlLHQscixhKXt2YXIgbz1lLmZldGNoSWZSZWYodCk7aWYoKDAsaS5pc0RpY3QpKG8pKXt2YXIgcz0oMCxpLmlzUmVmKSh0KT90LnRvU3RyaW5nKCk6ImFubm90XyIrYS5jcmVhdGVPYmpJZCgpLGw9by5nZXQoIlN1YnR5cGUiKTtsPSgwLGkuaXNOYW1lKShsKT9sLm5hbWU6bnVsbDt2YXIgYz17eHJlZjplLGRpY3Q6byxyZWY6KDAsaS5pc1JlZikodCk/dDpudWxsLHN1YnR5cGU6bCxpZDpzLHBkZk1hbmFnZXI6cn07c3dpdGNoKGwpe2Nhc2UiTGluayI6cmV0dXJuIG5ldyBDKGMpO2Nhc2UiVGV4dCI6cmV0dXJuIG5ldyBBKGMpO2Nhc2UiV2lkZ2V0Ijp2YXIgdT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0Om8sa2V5OiJGVCJ9KTtzd2l0Y2godT0oMCxpLmlzTmFtZSkodSk/dS5uYW1lOm51bGwpe2Nhc2UiVHgiOnJldHVybiBuZXcgUyhjKTtjYXNlIkJ0biI6cmV0dXJuIG5ldyBfKGMpO2Nhc2UiQ2giOnJldHVybiBuZXcgeChjKX1yZXR1cm4oMCxuLndhcm4pKCdVbmltcGxlbWVudGVkIHdpZGdldCBmaWVsZCB0eXBlICInK3UrJyIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGZpZWxkIHR5cGUuJyksbmV3IGsoYyk7Y2FzZSJQb3B1cCI6cmV0dXJuIG5ldyBQKGMpO2Nhc2UiTGluZSI6cmV0dXJuIG5ldyBFKGMpO2Nhc2UiU3F1YXJlIjpyZXR1cm4gbmV3IFQoYyk7Y2FzZSJDaXJjbGUiOnJldHVybiBuZXcgUihjKTtjYXNlIlBvbHlMaW5lIjpyZXR1cm4gbmV3IE8oYyk7Y2FzZSJQb2x5Z29uIjpyZXR1cm4gbmV3IEkoYyk7Y2FzZSJJbmsiOnJldHVybiBuZXcgRihjKTtjYXNlIkhpZ2hsaWdodCI6cmV0dXJuIG5ldyBMKGMpO2Nhc2UiVW5kZXJsaW5lIjpyZXR1cm4gbmV3IEQoYyk7Y2FzZSJTcXVpZ2dseSI6cmV0dXJuIG5ldyBOKGMpO2Nhc2UiU3RyaWtlT3V0IjpyZXR1cm4gbmV3IE0oYyk7Y2FzZSJTdGFtcCI6cmV0dXJuIG5ldyBqKGMpO2Nhc2UiRmlsZUF0dGFjaG1lbnQiOnJldHVybiBuZXcgQihjKTtkZWZhdWx0OnJldHVybiBsPygwLG4ud2FybikoJ1VuaW1wbGVtZW50ZWQgYW5ub3RhdGlvbiB0eXBlICInK2wrJyIsIGZhbGxpbmcgYmFjayB0byBiYXNlIGFubm90YXRpb24uJyk6KDAsbi53YXJuKSgiQW5ub3RhdGlvbiBpcyBtaXNzaW5nIHRoZSByZXF1aXJlZCAvU3VidHlwZS4iKSxuZXcgYihjKX19fX1dKSxlfSgpO3QuQW5ub3RhdGlvbkZhY3Rvcnk9eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUodCl7bSh0aGlzLGUpO3ZhciByPXQuZGljdDt0aGlzLnNldEZsYWdzKHIuZ2V0KCJGIikpLHRoaXMuc2V0UmVjdGFuZ2xlKHIuZ2V0QXJyYXkoIlJlY3QiKSksdGhpcy5zZXRDb2xvcihyLmdldEFycmF5KCJDIikpLHRoaXMuc2V0Qm9yZGVyU3R5bGUociksdGhpcy5zZXRBcHBlYXJhbmNlKHIpLHRoaXMuZGF0YT17YW5ub3RhdGlvbkZsYWdzOnRoaXMuZmxhZ3MsYm9yZGVyU3R5bGU6dGhpcy5ib3JkZXJTdHlsZSxjb2xvcjp0aGlzLmNvbG9yLGhhc0FwcGVhcmFuY2U6ISF0aGlzLmFwcGVhcmFuY2UsaWQ6dC5pZCxyZWN0OnRoaXMucmVjdGFuZ2xlLHN1YnR5cGU6dC5zdWJ0eXBlfX1yZXR1cm4gdihlLFt7a2V5OiJfaGFzRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSx0KXtyZXR1cm4hIShlJnQpfX0se2tleToiX2lzVmlld2FibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpJiYhdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSElEREVOKSYmIXRoaXMuX2hhc0ZsYWcoZSxuLkFubm90YXRpb25GbGFnLk5PVklFVyl9fSx7a2V5OiJfaXNQcmludGFibGUiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5QUklOVCkmJiF0aGlzLl9oYXNGbGFnKGUsbi5Bbm5vdGF0aW9uRmxhZy5JTlZJU0lCTEUpJiYhdGhpcy5faGFzRmxhZyhlLG4uQW5ub3RhdGlvbkZsYWcuSElEREVOKX19LHtrZXk6InNldEZsYWdzIix2YWx1ZTpmdW5jdGlvbihlKXt0aGlzLmZsYWdzPU51bWJlci5pc0ludGVnZXIoZSkmJmU+MD9lOjB9fSx7a2V5OiJoYXNGbGFnIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5faGFzRmxhZyh0aGlzLmZsYWdzLGUpfX0se2tleToic2V0UmVjdGFuZ2xlIix2YWx1ZTpmdW5jdGlvbihlKXtBcnJheS5pc0FycmF5KGUpJiY0PT09ZS5sZW5ndGg/dGhpcy5yZWN0YW5nbGU9bi5VdGlsLm5vcm1hbGl6ZVJlY3QoZSk6dGhpcy5yZWN0YW5nbGU9WzAsMCwwLDBdfX0se2tleToic2V0Q29sb3IiLHZhbHVlOmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBVaW50OENsYW1wZWRBcnJheSgzKTtpZihBcnJheS5pc0FycmF5KGUpKXN3aXRjaChlLmxlbmd0aCl7Y2FzZSAwOnRoaXMuY29sb3I9bnVsbDticmVhaztjYXNlIDE6by5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheS5nZXRSZ2JJdGVtKGUsMCx0LDApLHRoaXMuY29sb3I9dDticmVhaztjYXNlIDM6by5Db2xvclNwYWNlLnNpbmdsZXRvbnMucmdiLmdldFJnYkl0ZW0oZSwwLHQsMCksdGhpcy5jb2xvcj10O2JyZWFrO2Nhc2UgNDpvLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLmdldFJnYkl0ZW0oZSwwLHQsMCksdGhpcy5jb2xvcj10O2JyZWFrO2RlZmF1bHQ6dGhpcy5jb2xvcj10fWVsc2UgdGhpcy5jb2xvcj10fX0se2tleToic2V0Qm9yZGVyU3R5bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKHRoaXMuYm9yZGVyU3R5bGU9bmV3IHcsKDAsaS5pc0RpY3QpKGUpKWlmKGUuaGFzKCJCUyIpKXt2YXIgdD1lLmdldCgiQlMiKSxyPXQuZ2V0KCJUeXBlIik7ciYmISgwLGkuaXNOYW1lKShyLCJCb3JkZXIiKXx8KHRoaXMuYm9yZGVyU3R5bGUuc2V0V2lkdGgodC5nZXQoIlciKSksdGhpcy5ib3JkZXJTdHlsZS5zZXRTdHlsZSh0LmdldCgiUyIpKSx0aGlzLmJvcmRlclN0eWxlLnNldERhc2hBcnJheSh0LmdldEFycmF5KCJEIikpKX1lbHNlIGlmKGUuaGFzKCJCb3JkZXIiKSl7dmFyIG49ZS5nZXRBcnJheSgiQm9yZGVyIik7QXJyYXkuaXNBcnJheShuKSYmbi5sZW5ndGg+PTMmJih0aGlzLmJvcmRlclN0eWxlLnNldEhvcml6b250YWxDb3JuZXJSYWRpdXMoblswXSksdGhpcy5ib3JkZXJTdHlsZS5zZXRWZXJ0aWNhbENvcm5lclJhZGl1cyhuWzFdKSx0aGlzLmJvcmRlclN0eWxlLnNldFdpZHRoKG5bMl0pLDQ9PT1uLmxlbmd0aCYmdGhpcy5ib3JkZXJTdHlsZS5zZXREYXNoQXJyYXkoblszXSkpfWVsc2UgdGhpcy5ib3JkZXJTdHlsZS5zZXRXaWR0aCgwKX19LHtrZXk6InNldEFwcGVhcmFuY2UiLHZhbHVlOmZ1bmN0aW9uKGUpe3RoaXMuYXBwZWFyYW5jZT1udWxsO3ZhciB0PWUuZ2V0KCJBUCIpO2lmKCgwLGkuaXNEaWN0KSh0KSl7dmFyIHI9dC5nZXQoIk4iKTtpZigoMCxpLmlzU3RyZWFtKShyKSl0aGlzLmFwcGVhcmFuY2U9cjtlbHNlIGlmKCgwLGkuaXNEaWN0KShyKSl7dmFyIG49ZS5nZXQoIkFTIik7KDAsaS5pc05hbWUpKG4pJiZyLmhhcyhuLm5hbWUpJiYodGhpcy5hcHBlYXJhbmNlPXIuZ2V0KG4ubmFtZSkpfX19fSx7a2V5OiJfcHJlcGFyZVBvcHVwIix2YWx1ZTpmdW5jdGlvbihlKXtlLmhhcygiQyIpfHwodGhpcy5kYXRhLmNvbG9yPW51bGwpLHRoaXMuZGF0YS5oYXNQb3B1cD1lLmhhcygiUG9wdXAiKSx0aGlzLmRhdGEudGl0bGU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKXx8IiIpLHRoaXMuZGF0YS5jb250ZW50cz0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShlLmdldCgiQ29udGVudHMiKXx8IiIpfX0se2tleToibG9hZFJlc291cmNlcyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuYXBwZWFyYW5jZS5kaWN0LmdldEFzeW5jKCJSZXNvdXJjZXMiKS50aGVuKChmdW5jdGlvbih0KXtpZih0KXJldHVybiBuZXcgYS5PYmplY3RMb2FkZXIodCxlLHQueHJlZikubG9hZCgpLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIHR9KSl9KSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXt2YXIgYT10aGlzO2lmKCF0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIFByb21pc2UucmVzb2x2ZShuZXcgcy5PcGVyYXRvckxpc3QpO3ZhciBpPXRoaXMuZGF0YSxvPXRoaXMuYXBwZWFyYW5jZS5kaWN0LGw9dGhpcy5sb2FkUmVzb3VyY2VzKFsiRXh0R1N0YXRlIiwiQ29sb3JTcGFjZSIsIlBhdHRlcm4iLCJTaGFkaW5nIiwiWE9iamVjdCIsIkZvbnQiXSksYz1vLmdldEFycmF5KCJCQm94Iil8fFswLDAsMSwxXSx1PW8uZ2V0QXJyYXkoIk1hdHJpeCIpfHxbMSwwLDAsMSwwLDBdLGY9ZnVuY3Rpb24oZSx0LHIpe3ZhciBhPW4uVXRpbC5nZXRBeGlhbEFsaWduZWRCb3VuZGluZ0JveCh0LHIpLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9YVszXTtpZihpPT09c3x8bz09PWwpcmV0dXJuWzEsMCwwLDEsZVswXSxlWzFdXTt2YXIgYz0oZVsyXS1lWzBdKS8ocy1pKSx1PShlWzNdLWVbMV0pLyhsLW8pO3JldHVybltjLDAsMCx1LGVbMF0taSpjLGVbMV0tbyp1XX0oaS5yZWN0LGMsdSk7cmV0dXJuIGwudGhlbigoZnVuY3Rpb24ocil7dmFyIG89bmV3IHMuT3BlcmF0b3JMaXN0O3JldHVybiBvLmFkZE9wKG4uT1BTLmJlZ2luQW5ub3RhdGlvbixbaS5yZWN0LGYsdV0pLGUuZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06YS5hcHBlYXJhbmNlLHRhc2s6dCxyZXNvdXJjZXM6cixvcGVyYXRvckxpc3Q6b30pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuIG8uYWRkT3Aobi5PUFMuZW5kQW5ub3RhdGlvbixbXSksYS5hcHBlYXJhbmNlLnJlc2V0KCksb30pKX0pKX19LHtrZXk6InZpZXdhYmxlIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gMD09PXRoaXMuZmxhZ3N8fHRoaXMuX2lzVmlld2FibGUodGhpcy5mbGFncyl9fSx7a2V5OiJwcmludGFibGUiLGdldDpmdW5jdGlvbigpe3JldHVybiAwIT09dGhpcy5mbGFncyYmdGhpcy5faXNQcmludGFibGUodGhpcy5mbGFncyl9fV0pLGV9KCk7dC5Bbm5vdGF0aW9uPWI7dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7bSh0aGlzLGUpLHRoaXMud2lkdGg9MSx0aGlzLnN0eWxlPW4uQW5ub3RhdGlvbkJvcmRlclN0eWxlVHlwZS5TT0xJRCx0aGlzLmRhc2hBcnJheT1bM10sdGhpcy5ob3Jpem9udGFsQ29ybmVyUmFkaXVzPTAsdGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz0wfXJldHVybiB2KGUsW3trZXk6InNldFdpZHRoIix2YWx1ZTpmdW5jdGlvbihlKXsoMCxpLmlzTmFtZSkoZSk/dGhpcy53aWR0aD0wOk51bWJlci5pc0ludGVnZXIoZSkmJih0aGlzLndpZHRoPWUpfX0se2tleToic2V0U3R5bGUiLHZhbHVlOmZ1bmN0aW9uKGUpe2lmKCgwLGkuaXNOYW1lKShlKSlzd2l0Y2goZS5uYW1lKXtjYXNlIlMiOnRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLlNPTElEO2JyZWFrO2Nhc2UiRCI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuREFTSEVEO2JyZWFrO2Nhc2UiQiI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuQkVWRUxFRDticmVhaztjYXNlIkkiOnRoaXMuc3R5bGU9bi5Bbm5vdGF0aW9uQm9yZGVyU3R5bGVUeXBlLklOU0VUO2JyZWFrO2Nhc2UiVSI6dGhpcy5zdHlsZT1uLkFubm90YXRpb25Cb3JkZXJTdHlsZVR5cGUuVU5ERVJMSU5FfX19LHtrZXk6InNldERhc2hBcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSYmZS5sZW5ndGg+MCl7Zm9yKHZhciB0PSEwLHI9ITAsbj0wLGE9ZS5sZW5ndGg7bjxhO24rKyl7dmFyIGk9ZVtuXTtpZighKCtpPj0wKSl7dD0hMTticmVha31pPjAmJihyPSExKX10JiYhcj90aGlzLmRhc2hBcnJheT1lOnRoaXMud2lkdGg9MH1lbHNlIGUmJih0aGlzLndpZHRoPTApfX0se2tleToic2V0SG9yaXpvbnRhbENvcm5lclJhZGl1cyIsdmFsdWU6ZnVuY3Rpb24oZSl7TnVtYmVyLmlzSW50ZWdlcihlKSYmKHRoaXMuaG9yaXpvbnRhbENvcm5lclJhZGl1cz1lKX19LHtrZXk6InNldFZlcnRpY2FsQ29ybmVyUmFkaXVzIix2YWx1ZTpmdW5jdGlvbihlKXtOdW1iZXIuaXNJbnRlZ2VyKGUpJiYodGhpcy52ZXJ0aWNhbENvcm5lclJhZGl1cz1lKX19XSksZX0oKTt0LkFubm90YXRpb25Cb3JkZXJTdHlsZT13O3ZhciBrPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKTt2YXIgYT1lLmRpY3Qsbz1yLmRhdGE7by5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLldJREdFVCxvLmZpZWxkTmFtZT1yLl9jb25zdHJ1Y3RGaWVsZE5hbWUoYSksby5maWVsZFZhbHVlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IlYiLGdldEFycmF5OiEwfSksby5hbHRlcm5hdGl2ZVRleHQ9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYS5nZXQoIlRVIil8fCIiKSxvLmRlZmF1bHRBcHBlYXJhbmNlPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IkRBIn0pfHwiIjt2YXIgcz0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmEsa2V5OiJGVCJ9KTtyZXR1cm4gby5maWVsZFR5cGU9KDAsaS5pc05hbWUpKHMpP3MubmFtZTpudWxsLHIuZmllbGRSZXNvdXJjZXM9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiRFIifSl8fGkuRGljdC5lbXB0eSxvLmZpZWxkRmxhZ3M9KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiRmYifSksKCFOdW1iZXIuaXNJbnRlZ2VyKG8uZmllbGRGbGFncyl8fG8uZmllbGRGbGFnczwwKSYmKG8uZmllbGRGbGFncz0wKSxvLnJlYWRPbmx5PXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5SRUFET05MWSksIlNpZyI9PT1vLmZpZWxkVHlwZSYmKG8uZmllbGRWYWx1ZT1udWxsLHIuc2V0RmxhZ3Mobi5Bbm5vdGF0aW9uRmxhZy5ISURERU4pKSxyfXJldHVybiBkKHQsZSksdih0LFt7a2V5OiJfY29uc3RydWN0RmllbGROYW1lIix2YWx1ZTpmdW5jdGlvbihlKXtpZighZS5oYXMoIlQiKSYmIWUuaGFzKCJQYXJlbnQiKSlyZXR1cm4oMCxuLndhcm4pKCJVbmtub3duIGZpZWxkIG5hbWUsIGZhbGxpbmcgYmFjayB0byBlbXB0eSBmaWVsZCBuYW1lLiIpLCIiO2lmKCFlLmhhcygiUGFyZW50IikpcmV0dXJuKDAsbi5zdHJpbmdUb1BERlN0cmluZykoZS5nZXQoIlQiKSk7dmFyIHQ9W107ZS5oYXMoIlQiKSYmdC51bnNoaWZ0KCgwLG4uc3RyaW5nVG9QREZTdHJpbmcpKGUuZ2V0KCJUIikpKTtmb3IodmFyIHI9ZTtyLmhhcygiUGFyZW50IikmJihyPXIuZ2V0KCJQYXJlbnQiKSwoMCxpLmlzRGljdCkocikpOylyLmhhcygiVCIpJiZ0LnVuc2hpZnQoKDAsbi5zdHJpbmdUb1BERlN0cmluZykoci5nZXQoIlQiKSkpO3JldHVybiB0LmpvaW4oIi4iKX19LHtrZXk6Imhhc0ZpZWxkRmxhZyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuISEodGhpcy5kYXRhLmZpZWxkRmxhZ3MmZSl9fSx7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUscixuKXtyZXR1cm4gbj9Qcm9taXNlLnJlc29sdmUobmV3IHMuT3BlcmF0b3JMaXN0KTpmKGgodC5wcm90b3R5cGUpLCJnZXRPcGVyYXRvckxpc3QiLHRoaXMpLmNhbGwodGhpcyxlLHIsbil9fV0pLHR9KGIpLFM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCkscj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpO3ZhciBhPWUuZGljdDtyLmRhdGEuZmllbGRWYWx1ZT0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShyLmRhdGEuZmllbGRWYWx1ZXx8IiIpO3ZhciBpPSgwLG4uZ2V0SW5oZXJpdGFibGVQcm9wZXJ0eSkoe2RpY3Q6YSxrZXk6IlEifSk7KCFOdW1iZXIuaXNJbnRlZ2VyKGkpfHxpPDB8fGk+MikmJihpPW51bGwpLHIuZGF0YS50ZXh0QWxpZ25tZW50PWk7dmFyIG89KDAsbi5nZXRJbmhlcml0YWJsZVByb3BlcnR5KSh7ZGljdDphLGtleToiTWF4TGVuIn0pO3JldHVybighTnVtYmVyLmlzSW50ZWdlcihvKXx8bzwwKSYmKG89bnVsbCksci5kYXRhLm1heExlbj1vLHIuZGF0YS5tdWx0aUxpbmU9ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSksci5kYXRhLmNvbWI9ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLkNPTUIpJiYhci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLk1VTFRJTElORSkmJiFyLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUEFTU1dPUkQpJiYhci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLkZJTEVTRUxFQ1QpJiZudWxsIT09ci5kYXRhLm1heExlbixyfXJldHVybiBkKHQsZSksdih0LFt7a2V5OiJnZXRPcGVyYXRvckxpc3QiLHZhbHVlOmZ1bmN0aW9uKGUscixhKXtpZihhfHx0aGlzLmFwcGVhcmFuY2UpcmV0dXJuIGYoaCh0LnByb3RvdHlwZSksImdldE9wZXJhdG9yTGlzdCIsdGhpcykuY2FsbCh0aGlzLGUscixhKTt2YXIgaT1uZXcgcy5PcGVyYXRvckxpc3Q7aWYoIXRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZSlyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKGkpO3ZhciBvPW5ldyBsLlN0cmVhbSgoMCxuLnN0cmluZ1RvQnl0ZXMpKHRoaXMuZGF0YS5kZWZhdWx0QXBwZWFyYW5jZSkpO3JldHVybiBlLmdldE9wZXJhdG9yTGlzdCh7c3RyZWFtOm8sdGFzazpyLHJlc291cmNlczp0aGlzLmZpZWxkUmVzb3VyY2VzLG9wZXJhdG9yTGlzdDppfSkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gaX0pKX19XSksdH0oayksXz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5jaGVja0JveD0hci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSxyLmRhdGEucmFkaW9CdXR0b249ci5oYXNGaWVsZEZsYWcobi5Bbm5vdGF0aW9uRmllbGRGbGFnLlJBRElPKSYmIXIuaGFzRmllbGRGbGFnKG4uQW5ub3RhdGlvbkZpZWxkRmxhZy5QVVNIQlVUVE9OKSxyLmRhdGEucHVzaEJ1dHRvbj1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuUFVTSEJVVFRPTiksci5kYXRhLmNoZWNrQm94P3IuX3Byb2Nlc3NDaGVja0JveChlKTpyLmRhdGEucmFkaW9CdXR0b24/ci5fcHJvY2Vzc1JhZGlvQnV0dG9uKGUpOnIuZGF0YS5wdXNoQnV0dG9uP3IuX3Byb2Nlc3NQdXNoQnV0dG9uKGUpOigwLG4ud2FybikoIkludmFsaWQgZmllbGQgZmxhZ3MgZm9yIGJ1dHRvbiB3aWRnZXQgYW5ub3RhdGlvbiIpLHJ9cmV0dXJuIGQodCxlKSx2KHQsW3trZXk6Il9wcm9jZXNzQ2hlY2tCb3giLHZhbHVlOmZ1bmN0aW9uKGUpeygwLGkuaXNOYW1lKSh0aGlzLmRhdGEuZmllbGRWYWx1ZSkmJih0aGlzLmRhdGEuZmllbGRWYWx1ZT10aGlzLmRhdGEuZmllbGRWYWx1ZS5uYW1lKTt2YXIgdD1lLmRpY3QuZ2V0KCJBUCIpO2lmKCgwLGkuaXNEaWN0KSh0KSl7dmFyIHI9dC5nZXQoIkQiKTtpZigoMCxpLmlzRGljdCkocikpe3ZhciBuPXIuZ2V0S2V5cygpOzI9PT1uLmxlbmd0aCYmKHRoaXMuZGF0YS5leHBvcnRWYWx1ZT0iT2ZmIj09PW5bMF0/blsxXTpuWzBdKX19fX0se2tleToiX3Byb2Nlc3NSYWRpb0J1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhLmZpZWxkVmFsdWU9dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW51bGw7dmFyIHQ9ZS5kaWN0LmdldCgiUGFyZW50Iik7aWYoKDAsaS5pc0RpY3QpKHQpJiZ0LmhhcygiViIpKXt2YXIgcj10LmdldCgiViIpOygwLGkuaXNOYW1lKShyKSYmKHRoaXMuZGF0YS5maWVsZFZhbHVlPXIubmFtZSl9dmFyIG49ZS5kaWN0LmdldCgiQVAiKTtpZigoMCxpLmlzRGljdCkobikpe3ZhciBhPW4uZ2V0KCJOIik7aWYoKDAsaS5pc0RpY3QpKGEpKWZvcih2YXIgbz1hLmdldEtleXMoKSxzPTAsbD1vLmxlbmd0aDtzPGw7cysrKWlmKCJPZmYiIT09b1tzXSl7dGhpcy5kYXRhLmJ1dHRvblZhbHVlPW9bc107YnJlYWt9fX19LHtrZXk6Il9wcm9jZXNzUHVzaEJ1dHRvbiIsdmFsdWU6ZnVuY3Rpb24oZSl7ZS5kaWN0LmhhcygiQSIpP2EuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnRoaXMuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsfSk6KDAsbi53YXJuKSgiUHVzaCBidXR0b25zIHdpdGhvdXQgYWN0aW9uIGRpY3Rpb25hcmllcyBhcmUgbm90IHN1cHBvcnRlZCIpfX1dKSx0fShrKSx4PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEub3B0aW9ucz1bXTt2YXIgYT0oMCxuLmdldEluaGVyaXRhYmxlUHJvcGVydHkpKHtkaWN0OmUuZGljdCxrZXk6Ik9wdCJ9KTtpZihBcnJheS5pc0FycmF5KGEpKWZvcih2YXIgaT1lLnhyZWYsbz0wLHM9YS5sZW5ndGg7bzxzO28rKyl7dmFyIGw9aS5mZXRjaElmUmVmKGFbb10pLGM9QXJyYXkuaXNBcnJheShsKTtyLmRhdGEub3B0aW9uc1tvXT17ZXhwb3J0VmFsdWU6Yz9pLmZldGNoSWZSZWYobFswXSk6bCxkaXNwbGF5VmFsdWU6KDAsbi5zdHJpbmdUb1BERlN0cmluZykoYz9pLmZldGNoSWZSZWYobFsxXSk6bCl9fXJldHVybiBBcnJheS5pc0FycmF5KHIuZGF0YS5maWVsZFZhbHVlKXx8KHIuZGF0YS5maWVsZFZhbHVlPVtyLmRhdGEuZmllbGRWYWx1ZV0pLHIuZGF0YS5jb21ibz1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuQ09NQk8pLHIuZGF0YS5tdWx0aVNlbGVjdD1yLmhhc0ZpZWxkRmxhZyhuLkFubm90YXRpb25GaWVsZEZsYWcuTVVMVElTRUxFQ1QpLHJ9cmV0dXJuIGQodCxlKSx0fShrKSxBPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuVEVYVCxyLmRhdGEuaGFzQXBwZWFyYW5jZT9yLmRhdGEubmFtZT0iTm9JY29uIjooci5kYXRhLnJlY3RbMV09ci5kYXRhLnJlY3RbM10tMjIsci5kYXRhLnJlY3RbMl09ci5kYXRhLnJlY3RbMF0rMjIsci5kYXRhLm5hbWU9ZS5kaWN0LmhhcygiTmFtZSIpP2UuZGljdC5nZXQoIk5hbWUiKS5uYW1lOiJOb3RlIiksci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEM9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5MSU5LLGEuQ2F0YWxvZy5wYXJzZURlc3REaWN0aW9uYXJ5KHtkZXN0RGljdDplLmRpY3QscmVzdWx0T2JqOnIuZGF0YSxkb2NCYXNlVXJsOmUucGRmTWFuYWdlci5kb2NCYXNlVXJsfSkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLFA9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlBPUFVQO3ZhciBhPWUuZGljdCxvPWEuZ2V0KCJQYXJlbnQiKTtpZighbylyZXR1cm4oMCxuLndhcm4pKCJQb3B1cCBhbm5vdGF0aW9uIGhhcyBhIG1pc3Npbmcgb3IgaW52YWxpZCBwYXJlbnQgYW5ub3RhdGlvbi4iKSx1KHIpO3ZhciBzPW8uZ2V0KCJTdWJ0eXBlIik7aWYoci5kYXRhLnBhcmVudFR5cGU9KDAsaS5pc05hbWUpKHMpP3MubmFtZTpudWxsLHIuZGF0YS5wYXJlbnRJZD1hLmdldFJhdygiUGFyZW50IikudG9TdHJpbmcoKSxyLmRhdGEudGl0bGU9KDAsbi5zdHJpbmdUb1BERlN0cmluZykoby5nZXQoIlQiKXx8IiIpLHIuZGF0YS5jb250ZW50cz0oMCxuLnN0cmluZ1RvUERGU3RyaW5nKShvLmdldCgiQ29udGVudHMiKXx8IiIpLG8uaGFzKCJDIik/KHIuc2V0Q29sb3Ioby5nZXRBcnJheSgiQyIpKSxyLmRhdGEuY29sb3I9ci5jb2xvcik6ci5kYXRhLmNvbG9yPW51bGwsIXIudmlld2FibGUpe3ZhciBsPW8uZ2V0KCJGIik7ci5faXNWaWV3YWJsZShsKSYmci5zZXRGbGFncyhsKX1yZXR1cm4gcn1yZXR1cm4gZCh0LGUpLHR9KGIpLEU9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjttKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkxJTkU7dmFyIGE9ZS5kaWN0O3JldHVybiByLmRhdGEubGluZUNvb3JkaW5hdGVzPW4uVXRpbC5ub3JtYWxpemVSZWN0KGEuZ2V0QXJyYXkoIkwiKSksci5fcHJlcGFyZVBvcHVwKGEpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxUPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuU1FVQVJFLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxSPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuQ0lSQ0xFLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxPPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5QT0xZTElORTt2YXIgYT1lLmRpY3QsaT1hLmdldEFycmF5KCJWZXJ0aWNlcyIpO3IuZGF0YS52ZXJ0aWNlcz1bXTtmb3IodmFyIG89MCxzPWkubGVuZ3RoO288cztvKz0yKXIuZGF0YS52ZXJ0aWNlcy5wdXNoKHt4Omlbb10seTppW28rMV19KTtyZXR1cm4gci5fcHJlcGFyZVBvcHVwKGEpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxJPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7cmV0dXJuIG0odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuUE9MWUdPTixyfXJldHVybiBkKHQsZSksdH0oTyksRj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO20odGhpcyx0KSwocj11KHRoaXMsaCh0KS5jYWxsKHRoaXMsZSkpKS5kYXRhLmFubm90YXRpb25UeXBlPW4uQW5ub3RhdGlvblR5cGUuSU5LO3ZhciBhPWUuZGljdCxpPWUueHJlZixvPWEuZ2V0QXJyYXkoIklua0xpc3QiKTtyLmRhdGEuaW5rTGlzdHM9W107Zm9yKHZhciBzPTAsbD1vLmxlbmd0aDtzPGw7KytzKXtyLmRhdGEuaW5rTGlzdHMucHVzaChbXSk7Zm9yKHZhciBjPTAsZj1vW3NdLmxlbmd0aDtjPGY7Yys9MilyLmRhdGEuaW5rTGlzdHNbc10ucHVzaCh7eDppLmZldGNoSWZSZWYob1tzXVtjXSkseTppLmZldGNoSWZSZWYob1tzXVtjKzFdKX0pfXJldHVybiByLl9wcmVwYXJlUG9wdXAoYSkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEw9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5ISUdITElHSFQsci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLEQ9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5VTkRFUkxJTkUsci5fcHJlcGFyZVBvcHVwKGUuZGljdCkscn1yZXR1cm4gZCh0LGUpLHR9KGIpLE49ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt2YXIgcjtyZXR1cm4gbSh0aGlzLHQpLChyPXUodGhpcyxoKHQpLmNhbGwodGhpcyxlKSkpLmRhdGEuYW5ub3RhdGlvblR5cGU9bi5Bbm5vdGF0aW9uVHlwZS5TUVVJR0dMWSxyLl9wcmVwYXJlUG9wdXAoZS5kaWN0KSxyfXJldHVybiBkKHQsZSksdH0oYiksTT1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUUklLRU9VVCxyLl9wcmVwYXJlUG9wdXAoZS5kaWN0KSxyfXJldHVybiBkKHQsZSksdH0oYiksaj1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUpe3ZhciByO3JldHVybiBtKHRoaXMsdCksKHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKSkuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLlNUQU1QLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKSxCPWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSl7dmFyIHI7bSh0aGlzLHQpLHI9dSh0aGlzLGgodCkuY2FsbCh0aGlzLGUpKTt2YXIgaT1uZXcgYS5GaWxlU3BlYyhlLmRpY3QuZ2V0KCJGUyIpLGUueHJlZik7cmV0dXJuIHIuZGF0YS5hbm5vdGF0aW9uVHlwZT1uLkFubm90YXRpb25UeXBlLkZJTEVBVFRBQ0hNRU5ULHIuZGF0YS5maWxlPWkuc2VyaWFsaXphYmxlLHIuX3ByZXBhcmVQb3B1cChlLmRpY3QpLHJ9cmV0dXJuIGQodCxlKSx0fShiKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5PcGVyYXRvckxpc3Q9dm9pZCAwO3ZhciBuPXIoNiksYT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIsbixhKXtmb3IodmFyIGk9ZSxvPTAscz10Lmxlbmd0aC0xO288cztvKyspe3ZhciBsPXRbb107aT1pW2xdfHwoaVtsXT1bXSl9aVt0W3QubGVuZ3RoLTFdXT17Y2hlY2tGbjpyLGl0ZXJhdGVGbjpuLHByb2Nlc3NGbjphfX12YXIgdD1bXTtmdW5jdGlvbiByKGUpe3RoaXMucXVldWU9ZSx0aGlzLnN0YXRlPW51bGwsdGhpcy5jb250ZXh0PXtpQ3VycjowLGZuQXJyYXk6ZS5mbkFycmF5LGFyZ3NBcnJheTplLmFyZ3NBcnJheX0sdGhpcy5tYXRjaD1udWxsLHRoaXMubGFzdFByb2Nlc3NlZD0wfXJldHVybiBlKHQsW24uT1BTLnNhdmUsbi5PUFMudHJhbnNmb3JtLG4uT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0LG4uT1BTLnJlc3RvcmVdLG51bGwsKGZ1bmN0aW9uKGUsdCl7dmFyIHI9ZS5mbkFycmF5O3N3aXRjaCgodC0oZS5pQ3Vyci0zKSklNCl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuc2F2ZTtjYXNlIDE6cmV0dXJuIHJbdF09PT1uLk9QUy50cmFuc2Zvcm07Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3Q7Y2FzZSAzOnJldHVybiByW3RdPT09bi5PUFMucmVzdG9yZX19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPWUuaUN1cnIsbz1pLTMscz1pLTIsbD1pLTEsYz1NYXRoLm1pbihNYXRoLmZsb29yKCh0LW8pLzQpLDIwMCk7aWYoYzwxMClyZXR1cm4gdC0odC1vKSU0O3ZhciB1LGY9MCxoPVtdLGQ9MCxwPTEsbT0xO2Zvcih1PTA7dTxjO3UrKyl7dmFyIGc9YVtzKyh1PDwyKV0sdj1hW2wrKHU8PDIpXVswXTtwK3Yud2lkdGg+MWUzJiYoZj1NYXRoLm1heChmLHApLG0rPWQrMixwPTAsZD0wKSxoLnB1c2goe3RyYW5zZm9ybTpnLHg6cCx5Om0sdzp2LndpZHRoLGg6di5oZWlnaHR9KSxwKz12LndpZHRoKzIsZD1NYXRoLm1heChkLHYuaGVpZ2h0KX12YXIgeT1NYXRoLm1heChmLHApKzEsYj1tK2QrMSx3PW5ldyBVaW50OENsYW1wZWRBcnJheSh5KmIqNCksaz15PDwyO2Zvcih1PTA7dTxjO3UrKyl7dmFyIFM9YVtsKyh1PDwyKV1bMF0uZGF0YSxfPWhbdV0udzw8Mix4PTAsQT1oW3VdLngraFt1XS55Knk8PDI7dy5zZXQoUy5zdWJhcnJheSgwLF8pLEEtayk7Zm9yKHZhciBDPTAsUD1oW3VdLmg7QzxQO0MrKyl3LnNldChTLnN1YmFycmF5KHgseCtfKSxBKSx4Kz1fLEErPWs7Zm9yKHcuc2V0KFMuc3ViYXJyYXkoeC1fLHgpLEEpO0E+PTA7KVNbQS00XT1TW0FdLFNbQS0zXT1TW0ErMV0sU1tBLTJdPVNbQSsyXSxTW0EtMV09U1tBKzNdLFNbQStfXT1TW0ErXy00XSxTW0ErXysxXT1TW0ErXy0zXSxTW0ErXysyXT1TW0ErXy0yXSxTW0ErXyszXT1TW0ErXy0xXSxBLT1rfXJldHVybiByLnNwbGljZShvLDQqYyxuLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdEdyb3VwKSxhLnNwbGljZShvLDQqYyxbe3dpZHRoOnksaGVpZ2h0OmIsa2luZDpuLkltYWdlS2luZC5SR0JBXzMyQlBQLGRhdGE6d30saF0pLG8rMX0pKSxlKHQsW24uT1BTLnNhdmUsbi5PUFMudHJhbnNmb3JtLG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxuLk9QUy5yZXN0b3JlXSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheTtzd2l0Y2goKHQtKGUuaUN1cnItMykpJTQpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLnNhdmU7Y2FzZSAxOnJldHVybiByW3RdPT09bi5PUFMudHJhbnNmb3JtO2Nhc2UgMjpyZXR1cm4gclt0XT09PW4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfX0pLChmdW5jdGlvbihlLHQpe3ZhciByLGE9ZS5mbkFycmF5LGk9ZS5hcmdzQXJyYXksbz1lLmlDdXJyLHM9by0zLGw9by0yLGM9by0xLHU9TWF0aC5mbG9vcigodC1zKS80KTtpZigodT1mdW5jdGlvbihlLHQscixhKXtmb3IodmFyIGk9ZSsyLG89MDtvPHQ7bysrKXt2YXIgcz1hW2krNCpvXSxsPTE9PT1zLmxlbmd0aCYmc1swXTtpZighbHx8MSE9PWwud2lkdGh8fDEhPT1sLmhlaWdodHx8bC5kYXRhLmxlbmd0aCYmKDEhPT1sLmRhdGEubGVuZ3RofHwwIT09bC5kYXRhWzBdKSlicmVhaztyW2krNCpvXT1uLk9QUy5wYWludFNvbGlkQ29sb3JJbWFnZU1hc2t9cmV0dXJuIHQtb30ocyx1LGEsaSkpPDEwKXJldHVybiB0LSh0LXMpJTQ7dmFyIGYsaCxkPSExLHA9aVtjXVswXTtpZigwPT09aVtsXVsxXSYmMD09PWlbbF1bMl0pe2Q9ITA7dmFyIG09aVtsXVswXSxnPWlbbF1bM107Zj1sKzQ7dmFyIHY9Yys0O2ZvcihyPTE7cjx1O3IrKyxmKz00LHYrPTQpaWYoaD1pW2ZdLGlbdl1bMF0hPT1wfHxoWzBdIT09bXx8MCE9PWhbMV18fDAhPT1oWzJdfHxoWzNdIT09Zyl7cjwxMD9kPSExOnU9cjticmVha319aWYoZCl7dT1NYXRoLm1pbih1LDFlMyk7dmFyIHk9bmV3IEZsb2F0MzJBcnJheSgyKnUpO2ZvcihmPWwscj0wO3I8dTtyKyssZis9NCloPWlbZl0seVtyPDwxXT1oWzRdLHlbMSsocjw8MSldPWhbNV07YS5zcGxpY2Uocyw0KnUsbi5PUFMucGFpbnRJbWFnZU1hc2tYT2JqZWN0UmVwZWF0KSxpLnNwbGljZShzLDQqdSxbcCxtLGcseV0pfWVsc2V7dT1NYXRoLm1pbih1LDEwMCk7dmFyIGI9W107Zm9yKHI9MDtyPHU7cisrKXtoPWlbbCsocjw8MildO3ZhciB3PWlbYysocjw8MildWzBdO2IucHVzaCh7ZGF0YTp3LmRhdGEsd2lkdGg6dy53aWR0aCxoZWlnaHQ6dy5oZWlnaHQsdHJhbnNmb3JtOmh9KX1hLnNwbGljZShzLDQqdSxuLk9QUy5wYWludEltYWdlTWFza1hPYmplY3RHcm91cCksaS5zcGxpY2Uocyw0KnUsW2JdKX1yZXR1cm4gcysxfSkpLGUodCxbbi5PUFMuc2F2ZSxuLk9QUy50cmFuc2Zvcm0sbi5PUFMucGFpbnRJbWFnZVhPYmplY3Qsbi5PUFMucmVzdG9yZV0sKGZ1bmN0aW9uKGUpe3ZhciB0PWUuYXJnc0FycmF5LHI9ZS5pQ3Vyci0yO3JldHVybiAwPT09dFtyXVsxXSYmMD09PXRbcl1bMl19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheTtzd2l0Y2goKHQtKGUuaUN1cnItMykpJTQpe2Nhc2UgMDpyZXR1cm4gclt0XT09PW4uT1BTLnNhdmU7Y2FzZSAxOmlmKHJbdF0hPT1uLk9QUy50cmFuc2Zvcm0pcmV0dXJuITE7dmFyIGk9ZS5pQ3Vyci0yLG89YVtpXVswXSxzPWFbaV1bM107cmV0dXJuIGFbdF1bMF09PT1vJiYwPT09YVt0XVsxXSYmMD09PWFbdF1bMl0mJmFbdF1bM109PT1zO2Nhc2UgMjppZihyW3RdIT09bi5PUFMucGFpbnRJbWFnZVhPYmplY3QpcmV0dXJuITE7dmFyIGw9YVtlLmlDdXJyLTFdWzBdO3JldHVybiBhW3RdWzBdPT09bDtjYXNlIDM6cmV0dXJuIHJbdF09PT1uLk9QUy5yZXN0b3JlfX0pLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5LGk9ZS5pQ3VycixvPWktMyxzPWktMixsPWFbaS0xXVswXSxjPWFbc11bMF0sdT1hW3NdWzNdLGY9TWF0aC5taW4oTWF0aC5mbG9vcigodC1vKS80KSwxZTMpO2lmKGY8MylyZXR1cm4gdC0odC1vKSU0O2Zvcih2YXIgaD1uZXcgRmxvYXQzMkFycmF5KDIqZiksZD1zLHA9MDtwPGY7cCsrLGQrPTQpe3ZhciBtPWFbZF07aFtwPDwxXT1tWzRdLGhbMSsocDw8MSldPW1bNV19dmFyIGc9W2wsYyx1LGhdO3JldHVybiByLnNwbGljZShvLDQqZixuLk9QUy5wYWludEltYWdlWE9iamVjdFJlcGVhdCksYS5zcGxpY2Uobyw0KmYsZyksbysxfSkpLGUodCxbbi5PUFMuYmVnaW5UZXh0LG4uT1BTLnNldEZvbnQsbi5PUFMuc2V0VGV4dE1hdHJpeCxuLk9QUy5zaG93VGV4dCxuLk9QUy5lbmRUZXh0XSxudWxsLChmdW5jdGlvbihlLHQpe3ZhciByPWUuZm5BcnJheSxhPWUuYXJnc0FycmF5O3N3aXRjaCgodC0oZS5pQ3Vyci00KSklNSl7Y2FzZSAwOnJldHVybiByW3RdPT09bi5PUFMuYmVnaW5UZXh0O2Nhc2UgMTpyZXR1cm4gclt0XT09PW4uT1BTLnNldEZvbnQ7Y2FzZSAyOnJldHVybiByW3RdPT09bi5PUFMuc2V0VGV4dE1hdHJpeDtjYXNlIDM6aWYoclt0XSE9PW4uT1BTLnNob3dUZXh0KXJldHVybiExO3ZhciBpPWUuaUN1cnItMyxvPWFbaV1bMF0scz1hW2ldWzFdO3JldHVybiBhW3RdWzBdPT09byYmYVt0XVsxXT09PXM7Y2FzZSA0OnJldHVybiByW3RdPT09bi5PUFMuZW5kVGV4dH19KSwoZnVuY3Rpb24oZSx0KXt2YXIgcj1lLmZuQXJyYXksbj1lLmFyZ3NBcnJheSxhPWUuaUN1cnIsaT1hLTQsbz1hLTMscz1hLTIsbD1hLTEsYz1hLHU9bltvXVswXSxmPW5bb11bMV0saD1NYXRoLm1pbihNYXRoLmZsb29yKCh0LWkpLzUpLDFlMyk7aWYoaDwzKXJldHVybiB0LSh0LWkpJTU7dmFyIGQ9aTtpPj00JiZyW2ktNF09PT1yW29dJiZyW2ktM109PT1yW3NdJiZyW2ktMl09PT1yW2xdJiZyW2ktMV09PT1yW2NdJiZuW2ktNF1bMF09PT11JiZuW2ktNF1bMV09PT1mJiYoaCsrLGQtPTUpO2Zvcih2YXIgcD1kKzQsbT0xO208aDttKyspci5zcGxpY2UocCwzKSxuLnNwbGljZShwLDMpLHArPTI7cmV0dXJuIHArMX0pKSxyLnByb3RvdHlwZT17X29wdGltaXplOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5xdWV1ZS5mbkFycmF5LHI9dGhpcy5sYXN0UHJvY2Vzc2VkLG49ZS5sZW5ndGgsYT10aGlzLnN0YXRlLGk9dGhpcy5tYXRjaDtpZihhfHxpfHxyKzEhPT1ufHx0W2Vbcl1dKXtmb3IodmFyIG89dGhpcy5jb250ZXh0O3I8bjspe2lmKGkpe2lmKCgwLGkuaXRlcmF0ZUZuKShvLHIpKXtyKys7Y29udGludWV9aWYocj0oMCxpLnByb2Nlc3NGbikobyxyKzEpLGk9bnVsbCxhPW51bGwscj49KG49ZS5sZW5ndGgpKWJyZWFrfShhPShhfHx0KVtlW3JdXSkmJiFBcnJheS5pc0FycmF5KGEpPyhvLmlDdXJyPXIscisrLCFhLmNoZWNrRm58fCgwLGEuY2hlY2tGbikobyk/KGk9YSxhPW51bGwpOmE9bnVsbCk6cisrfXRoaXMuc3RhdGU9YSx0aGlzLm1hdGNoPWksdGhpcy5sYXN0UHJvY2Vzc2VkPXJ9ZWxzZSB0aGlzLmxhc3RQcm9jZXNzZWQ9bn0scHVzaDpmdW5jdGlvbihlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpLHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCksdGhpcy5fb3B0aW1pemUoKX0sZmx1c2g6ZnVuY3Rpb24oKXtmb3IoO3RoaXMubWF0Y2g7KXt2YXIgZT10aGlzLnF1ZXVlLmZuQXJyYXkubGVuZ3RoO3RoaXMubGFzdFByb2Nlc3NlZD0oMCx0aGlzLm1hdGNoLnByb2Nlc3NGbikodGhpcy5jb250ZXh0LGUpLHRoaXMubWF0Y2g9bnVsbCx0aGlzLnN0YXRlPW51bGwsdGhpcy5fb3B0aW1pemUoKX19LHJlc2V0OmZ1bmN0aW9uKCl7dGhpcy5zdGF0ZT1udWxsLHRoaXMubWF0Y2g9bnVsbCx0aGlzLmxhc3RQcm9jZXNzZWQ9MH19LHJ9KCksaT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5xdWV1ZT1lfXJldHVybiBlLnByb3RvdHlwZT17cHVzaDpmdW5jdGlvbihlLHQpe3RoaXMucXVldWUuZm5BcnJheS5wdXNoKGUpLHRoaXMucXVldWUuYXJnc0FycmF5LnB1c2godCl9LGZsdXNoOmZ1bmN0aW9uKCl7fX0sZX0oKSxvPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5tZXNzYWdlSGFuZGxlcj10LHRoaXMuZm5BcnJheT1bXSx0aGlzLmFyZ3NBcnJheT1bXSx0JiYib3BsaXN0IiE9PXRoaXMuaW50ZW50P3RoaXMub3B0aW1pemVyPW5ldyBhKHRoaXMpOnRoaXMub3B0aW1pemVyPW5ldyBpKHRoaXMpLHRoaXMuZGVwZW5kZW5jaWVzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5fdG90YWxMZW5ndGg9MCx0aGlzLnBhZ2VJbmRleD1yLHRoaXMuaW50ZW50PWUsdGhpcy53ZWlnaHQ9MH1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5hcmdzQXJyYXkubGVuZ3RofSxnZXQgdG90YWxMZW5ndGgoKXtyZXR1cm4gdGhpcy5fdG90YWxMZW5ndGgrdGhpcy5sZW5ndGh9LGFkZE9wOmZ1bmN0aW9uKGUsdCl7dGhpcy5vcHRpbWl6ZXIucHVzaChlLHQpLHRoaXMud2VpZ2h0KyssdGhpcy5tZXNzYWdlSGFuZGxlciYmKHRoaXMud2VpZ2h0Pj0xZTM/dGhpcy5mbHVzaCgpOnRoaXMud2VpZ2h0Pj05OTUmJihlPT09bi5PUFMucmVzdG9yZXx8ZT09PW4uT1BTLmVuZFRleHQpJiZ0aGlzLmZsdXNoKCkpfSxhZGREZXBlbmRlbmN5OmZ1bmN0aW9uKGUpe2UgaW4gdGhpcy5kZXBlbmRlbmNpZXN8fCh0aGlzLmRlcGVuZGVuY2llc1tlXT0hMCx0aGlzLmFkZE9wKG4uT1BTLmRlcGVuZGVuY3ksW2VdKSl9LGFkZERlcGVuZGVuY2llczpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl0aGlzLmFkZERlcGVuZGVuY3kodCl9LGFkZE9wTGlzdDpmdW5jdGlvbihlKXtPYmplY3QuYXNzaWduKHRoaXMuZGVwZW5kZW5jaWVzLGUuZGVwZW5kZW5jaWVzKTtmb3IodmFyIHQ9MCxyPWUubGVuZ3RoO3Q8cjt0KyspdGhpcy5hZGRPcChlLmZuQXJyYXlbdF0sZS5hcmdzQXJyYXlbdF0pfSxnZXRJUjpmdW5jdGlvbigpe3JldHVybntmbkFycmF5OnRoaXMuZm5BcnJheSxhcmdzQXJyYXk6dGhpcy5hcmdzQXJyYXksbGVuZ3RoOnRoaXMubGVuZ3RofX0sZmx1c2g6ZnVuY3Rpb24oZSl7dGhpcy5vcHRpbWl6ZXIuZmx1c2goKTt2YXIgdD1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj1lLmZuQXJyYXksYT1lLmFyZ3NBcnJheSxpPTAsbz1lLmxlbmd0aDtpPG87aSsrKXN3aXRjaChyW2ldKXtjYXNlIG4uT1BTLnBhaW50SW5saW5lSW1hZ2VYT2JqZWN0OmNhc2Ugbi5PUFMucGFpbnRJbmxpbmVJbWFnZVhPYmplY3RHcm91cDpjYXNlIG4uT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdDp2YXIgcz1hW2ldWzBdO3MuY2FjaGVkfHx0LnB1c2gocy5kYXRhLmJ1ZmZlcil9cmV0dXJuIHR9KHRoaXMpLHI9dGhpcy5sZW5ndGg7dGhpcy5fdG90YWxMZW5ndGgrPXIsdGhpcy5tZXNzYWdlSGFuZGxlci5zZW5kKCJSZW5kZXJQYWdlQ2h1bmsiLHtvcGVyYXRvckxpc3Q6e2ZuQXJyYXk6dGhpcy5mbkFycmF5LGFyZ3NBcnJheTp0aGlzLmFyZ3NBcnJheSxsYXN0Q2h1bms6ZSxsZW5ndGg6cn0scGFnZUluZGV4OnRoaXMucGFnZUluZGV4LGludGVudDp0aGlzLmludGVudH0sdCksdGhpcy5kZXBlbmRlbmNpZXM9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmZuQXJyYXkubGVuZ3RoPTAsdGhpcy5hcmdzQXJyYXkubGVuZ3RoPTAsdGhpcy53ZWlnaHQ9MCx0aGlzLm9wdGltaXplci5yZXNldCgpfX0sZX0oKTt0Lk9wZXJhdG9yTGlzdD1vfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlBhcnRpYWxFdmFsdWF0b3I9dm9pZCAwO3ZhciBuLGE9KG49cigyKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cig2KSxvPXIoMTcyKSxzPXIoMTU3KSxsPXIoMTU1KSxjPXIoMTczKSx1PXIoMTc2KSxmPXIoMTc5KSxoPXIoMTc4KSxkPXIoMTgyKSxwPXIoMTU2KSxtPXIoMTgzKSxnPXIoMTY4KSx2PXIoMTc3KSx5PXIoMTg0KSxiPXIoMTg1KSx3PXIoMTYzKSxrPXIoMTg3KSxTPXIoMTcwKSxfPXIoMTg4KTtmdW5jdGlvbiB4KGUsdCxyLG4sYSxpLG8pe3RyeXt2YXIgcz1lW2ldKG8pLGw9cy52YWx1ZX1jYXRjaChlKXtyZXR1cm4gdm9pZCByKGUpfXMuZG9uZT90KGwpOlByb21pc2UucmVzb2x2ZShsKS50aGVuKG4sYSl9dmFyIEE9ZnVuY3Rpb24oKXt2YXIgZT17Zm9yY2VEYXRhU2NoZW1hOiExLG1heEltYWdlU2l6ZTotMSxkaXNhYmxlRm9udEZhY2U6ITEsbmF0aXZlSW1hZ2VEZWNvZGVyU3VwcG9ydDppLk5hdGl2ZUltYWdlRGVjb2RpbmcuREVDT0RFLGlnbm9yZUVycm9yczohMSxpc0V2YWxTdXBwb3J0ZWQ6ITB9O2Z1bmN0aW9uIHQoZSl7dmFyIHQ9ZS54cmVmLHI9ZS5yZXNvdXJjZXMsbj1lLmhhbmRsZXIsYT1lLmZvcmNlRGF0YVNjaGVtYSxpPXZvaWQgMCE9PWEmJmEsbz1lLnBkZkZ1bmN0aW9uRmFjdG9yeTt0aGlzLnhyZWY9dCx0aGlzLnJlc291cmNlcz1yLHRoaXMuaGFuZGxlcj1uLHRoaXMuZm9yY2VEYXRhU2NoZW1hPWksdGhpcy5wZGZGdW5jdGlvbkZhY3Rvcnk9b31mdW5jdGlvbiByKHQpe3ZhciByPXRoaXMsbj10LnBkZk1hbmFnZXIsbz10LnhyZWYscz10LmhhbmRsZXIsbD10LnBhZ2VJbmRleCxjPXQuaWRGYWN0b3J5LHU9dC5mb250Q2FjaGUsZj10LmJ1aWx0SW5DTWFwQ2FjaGUsaD10Lm9wdGlvbnMsZD12b2lkIDA9PT1oP251bGw6aCxwPXQucGRmRnVuY3Rpb25GYWN0b3J5O3RoaXMucGRmTWFuYWdlcj1uLHRoaXMueHJlZj1vLHRoaXMuaGFuZGxlcj1zLHRoaXMucGFnZUluZGV4PWwsdGhpcy5pZEZhY3Rvcnk9Yyx0aGlzLmZvbnRDYWNoZT11LHRoaXMuYnVpbHRJbkNNYXBDYWNoZT1mLHRoaXMub3B0aW9ucz1kfHxlLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5PXAsdGhpcy5mZXRjaEJ1aWx0SW5DTWFwPWZ1bmN0aW9uKCl7dmFyIGUsdD0oZT1hLmRlZmF1bHQubWFyaygoZnVuY3Rpb24gZSh0KXt2YXIgbjtyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKCFyLmJ1aWx0SW5DTWFwQ2FjaGUuaGFzKHQpKXtlLm5leHQ9MjticmVha31yZXR1cm4gZS5hYnJ1cHQoInJldHVybiIsci5idWlsdEluQ01hcENhY2hlLmdldCh0KSk7Y2FzZSAyOnJldHVybiBlLm5leHQ9NCxyLmhhbmRsZXIuc2VuZFdpdGhQcm9taXNlKCJGZXRjaEJ1aWx0SW5DTWFwIix7bmFtZTp0fSk7Y2FzZSA0OnJldHVybihuPWUuc2VudCkuY29tcHJlc3Npb25UeXBlIT09aS5DTWFwQ29tcHJlc3Npb25UeXBlLk5PTkUmJnIuYnVpbHRJbkNNYXBDYWNoZS5zZXQodCxuKSxlLmFicnVwdCgicmV0dXJuIixuKTtjYXNlIDc6Y2FzZSJlbmQiOnJldHVybiBlLnN0b3AoKX19KSxlLHRoaXMpfSkpLGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7eChpLG4sYSxvLHMsIm5leHQiLGUpfWZ1bmN0aW9uIHMoZSl7eChpLG4sYSxvLHMsInRocm93IixlKX1vKHZvaWQgMCl9KSl9KTtyZXR1cm4gZnVuY3Rpb24oZSl7cmV0dXJuIHQuYXBwbHkodGhpcyxhcmd1bWVudHMpfX0oKX1mdW5jdGlvbiBuKCl7dGhpcy5yZXNldCgpfWZ1bmN0aW9uIHAoZSl7aWYoISgwLGwuaXNOYW1lKShlKSlyZXR1cm4ic291cmNlLW92ZXIiO3N3aXRjaChlLm5hbWUpe2Nhc2UiTm9ybWFsIjpjYXNlIkNvbXBhdGlibGUiOnJldHVybiJzb3VyY2Utb3ZlciI7Y2FzZSJNdWx0aXBseSI6cmV0dXJuIm11bHRpcGx5IjtjYXNlIlNjcmVlbiI6cmV0dXJuInNjcmVlbiI7Y2FzZSJPdmVybGF5IjpyZXR1cm4ib3ZlcmxheSI7Y2FzZSJEYXJrZW4iOnJldHVybiJkYXJrZW4iO2Nhc2UiTGlnaHRlbiI6cmV0dXJuImxpZ2h0ZW4iO2Nhc2UiQ29sb3JEb2RnZSI6cmV0dXJuImNvbG9yLWRvZGdlIjtjYXNlIkNvbG9yQnVybiI6cmV0dXJuImNvbG9yLWJ1cm4iO2Nhc2UiSGFyZExpZ2h0IjpyZXR1cm4iaGFyZC1saWdodCI7Y2FzZSJTb2Z0TGlnaHQiOnJldHVybiJzb2Z0LWxpZ2h0IjtjYXNlIkRpZmZlcmVuY2UiOnJldHVybiJkaWZmZXJlbmNlIjtjYXNlIkV4Y2x1c2lvbiI6cmV0dXJuImV4Y2x1c2lvbiI7Y2FzZSJIdWUiOnJldHVybiJodWUiO2Nhc2UiU2F0dXJhdGlvbiI6cmV0dXJuInNhdHVyYXRpb24iO2Nhc2UiQ29sb3IiOnJldHVybiJjb2xvciI7Y2FzZSJMdW1pbm9zaXR5IjpyZXR1cm4ibHVtaW5vc2l0eSJ9cmV0dXJuKDAsaS53YXJuKSgiVW5zdXBwb3J0ZWQgYmxlbmQgbW9kZTogIitlLm5hbWUpLCJzb3VyY2Utb3ZlciJ9dC5wcm90b3R5cGU9e2NhbkRlY29kZTpmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIHcuSnBlZ1N0cmVhbSYmdC5pc0RlY29kYWJsZShlLHRoaXMueHJlZix0aGlzLnJlc291cmNlcyx0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeSl9LGRlY29kZTpmdW5jdGlvbihlKXt2YXIgdD1lLmRpY3QuZ2V0KCJDb2xvclNwYWNlIiwiQ1MiKTtyZXR1cm4gdD1nLkNvbG9yU3BhY2UucGFyc2UodCx0aGlzLnhyZWYsdGhpcy5yZXNvdXJjZXMsdGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkpLHRoaXMuaGFuZGxlci5zZW5kV2l0aFByb21pc2UoIkpwZWdEZWNvZGUiLFtlLmdldElSKHRoaXMuZm9yY2VEYXRhU2NoZW1hKSx0Lm51bUNvbXBzXSkudGhlbigoZnVuY3Rpb24odCl7dmFyIHI9dC5kYXRhO3JldHVybiB0LndpZHRoLHQuaGVpZ2h0LG5ldyBzLlN0cmVhbShyLDAsci5sZW5ndGgsZS5kaWN0KX0pKX19LHQuaXNTdXBwb3J0ZWQ9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5kaWN0O2lmKGEuaGFzKCJEZWNvZGVQYXJtcyIpfHxhLmhhcygiRFAiKSlyZXR1cm4hMTt2YXIgaT1nLkNvbG9yU3BhY2UucGFyc2UoYS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpLHQscixuKTtyZXR1cm4oIkRldmljZUdyYXkiPT09aS5uYW1lfHwiRGV2aWNlUkdCIj09PWkubmFtZSkmJmkuaXNEZWZhdWx0RGVjb2RlKGEuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKSl9LHQuaXNEZWNvZGFibGU9ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9ZS5kaWN0O2lmKGEuaGFzKCJEZWNvZGVQYXJtcyIpfHxhLmhhcygiRFAiKSlyZXR1cm4hMTt2YXIgaT1nLkNvbG9yU3BhY2UucGFyc2UoYS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpLHQscixuKSxvPWEuZ2V0KCJCaXRzUGVyQ29tcG9uZW50IiwiQlBDIil8fDE7cmV0dXJuKDE9PT1pLm51bUNvbXBzfHwzPT09aS5udW1Db21wcykmJmkuaXNEZWZhdWx0RGVjb2RlKGEuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKSxvKX0sbi5wcm90b3R5cGU9e2NoZWNrOmZ1bmN0aW9uKCl7cmV0dXJuISgrK3RoaXMuY2hlY2tlZDwxMDApJiYodGhpcy5jaGVja2VkPTAsdGhpcy5lbmRUaW1lPD1EYXRlLm5vdygpKX0scmVzZXQ6ZnVuY3Rpb24oKXt0aGlzLmVuZFRpbWU9RGF0ZS5ub3coKSsyMCx0aGlzLmNoZWNrZWQ9MH19O3ZhciBBPVByb21pc2UucmVzb2x2ZSgpO3JldHVybiByLnByb3RvdHlwZT17Y2xvbmU6ZnVuY3Rpb24oKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjAmJnZvaWQgMCE9PWFyZ3VtZW50c1swXT9hcmd1bWVudHNbMF06ZSxyPU9iamVjdC5jcmVhdGUodGhpcyk7cmV0dXJuIHIub3B0aW9ucz10LHJ9LGhhc0JsZW5kTW9kZXM6ZnVuY3Rpb24oZSl7aWYoISgwLGwuaXNEaWN0KShlKSlyZXR1cm4hMTt2YXIgdD1PYmplY3QuY3JlYXRlKG51bGwpO2Uub2JqSWQmJih0W2Uub2JqSWRdPSEwKTtmb3IodmFyIHI9W2VdLG49dGhpcy54cmVmO3IubGVuZ3RoOyl7dmFyIGEsaSxvLHM9ci5zaGlmdCgpLGM9cy5nZXQoIkV4dEdTdGF0ZSIpO2lmKCgwLGwuaXNEaWN0KShjKSl7dmFyIHU9Yy5nZXRLZXlzKCk7Zm9yKGk9MCxvPXUubGVuZ3RoO2k8bztpKyspe2E9dVtpXTt2YXIgZj1jLmdldChhKS5nZXQoIkJNIik7aWYoKDAsbC5pc05hbWUpKGYpJiYiTm9ybWFsIiE9PWYubmFtZSlyZXR1cm4hMH19dmFyIGg9cy5nZXQoIlhPYmplY3QiKTtpZigoMCxsLmlzRGljdCkoaCkpe3ZhciBkPWguZ2V0S2V5cygpO2ZvcihpPTAsbz1kLmxlbmd0aDtpPG87aSsrKXthPWRbaV07dmFyIHA9aC5nZXRSYXcoYSk7aWYoKDAsbC5pc1JlZikocCkpe2lmKHRbcC50b1N0cmluZygpXSljb250aW51ZTtwPW4uZmV0Y2gocCl9aWYoKDAsbC5pc1N0cmVhbSkocCkpe2lmKHAuZGljdC5vYmpJZCl7aWYodFtwLmRpY3Qub2JqSWRdKWNvbnRpbnVlO3RbcC5kaWN0Lm9iaklkXT0hMH12YXIgbT1wLmRpY3QuZ2V0KCJSZXNvdXJjZXMiKTshKDAsbC5pc0RpY3QpKG0pfHxtLm9iaklkJiZ0W20ub2JqSWRdfHwoci5wdXNoKG0pLG0ub2JqSWQmJih0W20ub2JqSWRdPSEwKSl9fX19cmV0dXJuITF9LGJ1aWxkRm9ybVhPYmplY3Q6ZnVuY3Rpb24oZSx0LHIsbixhLG8pe3ZhciBzPXQuZGljdCxjPXMuZ2V0QXJyYXkoIk1hdHJpeCIpLHU9cy5nZXRBcnJheSgiQkJveCIpO3U9QXJyYXkuaXNBcnJheSh1KSYmND09PXUubGVuZ3RoP2kuVXRpbC5ub3JtYWxpemVSZWN0KHUpOm51bGw7dmFyIGY9cy5nZXQoIkdyb3VwIik7aWYoZil7dmFyIGg9e21hdHJpeDpjLGJib3g6dSxzbWFzazpyLGlzb2xhdGVkOiExLGtub2Nrb3V0OiExfSxkPWYuZ2V0KCJTIikscD1udWxsOygwLGwuaXNOYW1lKShkLCJUcmFuc3BhcmVuY3kiKSYmKGguaXNvbGF0ZWQ9Zi5nZXQoIkkiKXx8ITEsaC5rbm9ja291dD1mLmdldCgiSyIpfHwhMSxmLmhhcygiQ1MiKSYmKHA9Zy5Db2xvclNwYWNlLnBhcnNlKGYuZ2V0KCJDUyIpLHRoaXMueHJlZixlLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSkpLHImJnIuYmFja2Ryb3AmJihwPXB8fGcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixyLmJhY2tkcm9wPXAuZ2V0UmdiKHIuYmFja2Ryb3AsMCkpLG4uYWRkT3AoaS5PUFMuYmVnaW5Hcm91cCxbaF0pfXJldHVybiBuLmFkZE9wKGkuT1BTLnBhaW50Rm9ybVhPYmplY3RCZWdpbixbYyx1XSksdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTp0LHRhc2s6YSxyZXNvdXJjZXM6cy5nZXQoIlJlc291cmNlcyIpfHxlLG9wZXJhdG9yTGlzdDpuLGluaXRpYWxTdGF0ZTpvfSkudGhlbigoZnVuY3Rpb24oKXtuLmFkZE9wKGkuT1BTLnBhaW50Rm9ybVhPYmplY3RFbmQsW10pLGYmJm4uYWRkT3AoaS5PUFMuZW5kR3JvdXAsW2hdKX0pKX0sYnVpbGRQYWludEltYWdlWE9iamVjdDpmdW5jdGlvbihlKXt2YXIgcj10aGlzLG49ZS5yZXNvdXJjZXMsYT1lLmltYWdlLG89ZS5pc0lubGluZSxsPXZvaWQgMCE9PW8mJm8sYz1lLm9wZXJhdG9yTGlzdCx1PWUuY2FjaGVLZXksZj1lLmltYWdlQ2FjaGUsaD1lLmZvcmNlRGlzYWJsZU5hdGl2ZUltYWdlRGVjb2RlcixkPXZvaWQgMCE9PWgmJmgscD1hLmRpY3QsbT1wLmdldCgiV2lkdGgiLCJXIiksZz1wLmdldCgiSGVpZ2h0IiwiSCIpO2lmKCEobSYmKDAsaS5pc051bSkobSkmJmcmJigwLGkuaXNOdW0pKGcpKSlyZXR1cm4oMCxpLndhcm4pKCJJbWFnZSBkaW1lbnNpb25zIGFyZSBtaXNzaW5nLCBvciBub3QgbnVtYmVycy4iKSxQcm9taXNlLnJlc29sdmUoKTt2YXIgdix5LGI9dGhpcy5vcHRpb25zLm1heEltYWdlU2l6ZTtpZigtMSE9PWImJm0qZz5iKXJldHVybigwLGkud2FybikoIkltYWdlIGV4Y2VlZGVkIG1heGltdW0gYWxsb3dlZCBzaXplIGFuZCB3YXMgcmVtb3ZlZC4iKSxQcm9taXNlLnJlc29sdmUoKTtpZihwLmdldCgiSW1hZ2VNYXNrIiwiSU0iKSl7dmFyIGs9cC5nZXQoIldpZHRoIiwiVyIpLFM9cC5nZXQoIkhlaWdodCIsIkgiKSx4PWsrNz4+MyxBPWEuZ2V0Qnl0ZXMoeCpTLCEwKSxDPXAuZ2V0QXJyYXkoIkRlY29kZSIsIkQiKTtyZXR1cm4odj1fLlBERkltYWdlLmNyZWF0ZU1hc2soe2ltZ0FycmF5OkEsd2lkdGg6ayxoZWlnaHQ6UyxpbWFnZUlzRnJvbURlY29kZVN0cmVhbTphIGluc3RhbmNlb2Ygcy5EZWNvZGVTdHJlYW0saW52ZXJzZURlY29kZTohIUMmJkNbMF0+MH0pKS5jYWNoZWQ9ITAseT1bdl0sYy5hZGRPcChpLk9QUy5wYWludEltYWdlTWFza1hPYmplY3QseSksdSYmKGZbdV09e2ZuOmkuT1BTLnBhaW50SW1hZ2VNYXNrWE9iamVjdCxhcmdzOnl9KSxQcm9taXNlLnJlc29sdmUoKX12YXIgUD1wLmdldCgiU01hc2siLCJTTSIpfHwhMSxFPXAuZ2V0KCJNYXNrIil8fCExO2lmKGwmJiFQJiYhRSYmIShhIGluc3RhbmNlb2Ygdy5KcGVnU3RyZWFtKSYmbStnPDIwMClyZXR1cm4gdj1uZXcgXy5QREZJbWFnZSh7eHJlZjp0aGlzLnhyZWYscmVzOm4saW1hZ2U6YSxpc0lubGluZTpsLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeX0pLmNyZWF0ZUltYWdlRGF0YSghMCksYy5hZGRPcChpLk9QUy5wYWludElubGluZUltYWdlWE9iamVjdCxbdl0pLFByb21pc2UucmVzb2x2ZSgpO3ZhciBUPWQ/aS5OYXRpdmVJbWFnZURlY29kaW5nLk5PTkU6dGhpcy5vcHRpb25zLm5hdGl2ZUltYWdlRGVjb2RlclN1cHBvcnQsUj0iaW1nXyIrdGhpcy5pZEZhY3RvcnkuY3JlYXRlT2JqSWQoKTtpZihUIT09aS5OYXRpdmVJbWFnZURlY29kaW5nLk5PTkUmJiFQJiYhRSYmYSBpbnN0YW5jZW9mIHcuSnBlZ1N0cmVhbSYmdC5pc1N1cHBvcnRlZChhLHRoaXMueHJlZixuLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSlyZXR1cm4gdGhpcy5oYW5kbGVyLnNlbmRXaXRoUHJvbWlzZSgib2JqIixbUix0aGlzLnBhZ2VJbmRleCwiSnBlZ1N0cmVhbSIsYS5nZXRJUih0aGlzLm9wdGlvbnMuZm9yY2VEYXRhU2NoZW1hKV0pLnRoZW4oKGZ1bmN0aW9uKCl7Yy5hZGREZXBlbmRlbmN5KFIpLHk9W1IsbSxnXSxjLmFkZE9wKGkuT1BTLnBhaW50SnBlZ1hPYmplY3QseSksdSYmKGZbdV09e2ZuOmkuT1BTLnBhaW50SnBlZ1hPYmplY3QsYXJnczp5fSl9KSwoZnVuY3Rpb24oZSl7cmV0dXJuKDAsaS53YXJuKSgiTmF0aXZlIEpQRUcgZGVjb2RpbmcgZmFpbGVkIC0tIHRyeWluZyB0byByZWNvdmVyOiAiKyhlJiZlLm1lc3NhZ2UpKSxyLmJ1aWxkUGFpbnRJbWFnZVhPYmplY3Qoe3Jlc291cmNlczpuLGltYWdlOmEsaXNJbmxpbmU6bCxvcGVyYXRvckxpc3Q6YyxjYWNoZUtleTp1LGltYWdlQ2FjaGU6Zixmb3JjZURpc2FibGVOYXRpdmVJbWFnZURlY29kZXI6ITB9KX0pKTt2YXIgTz1udWxsO3JldHVybiBUPT09aS5OYXRpdmVJbWFnZURlY29kaW5nLkRFQ09ERSYmKGEgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW18fEUgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW18fFAgaW5zdGFuY2VvZiB3LkpwZWdTdHJlYW0pJiYoTz1uZXcgdCh7eHJlZjp0aGlzLnhyZWYscmVzb3VyY2VzOm4saGFuZGxlcjp0aGlzLmhhbmRsZXIsZm9yY2VEYXRhU2NoZW1hOnRoaXMub3B0aW9ucy5mb3JjZURhdGFTY2hlbWEscGRmRnVuY3Rpb25GYWN0b3J5OnRoaXMucGRmRnVuY3Rpb25GYWN0b3J5fSkpLGMuYWRkRGVwZW5kZW5jeShSKSx5PVtSLG0sZ10sXy5QREZJbWFnZS5idWlsZEltYWdlKHtoYW5kbGVyOnRoaXMuaGFuZGxlcix4cmVmOnRoaXMueHJlZixyZXM6bixpbWFnZTphLGlzSW5saW5lOmwsbmF0aXZlRGVjb2RlcjpPLHBkZkZ1bmN0aW9uRmFjdG9yeTp0aGlzLnBkZkZ1bmN0aW9uRmFjdG9yeX0pLnRoZW4oKGZ1bmN0aW9uKGUpe3ZhciB0PWUuY3JlYXRlSW1hZ2VEYXRhKCExKTtyLmhhbmRsZXIuc2VuZCgib2JqIixbUixyLnBhZ2VJbmRleCwiSW1hZ2UiLHRdLFt0LmRhdGEuYnVmZmVyXSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpeygwLGkud2FybikoIlVuYWJsZSB0byBkZWNvZGUgaW1hZ2U6ICIrZSksci5oYW5kbGVyLnNlbmQoIm9iaiIsW1Isci5wYWdlSW5kZXgsIkltYWdlIixudWxsXSl9KSksYy5hZGRPcChpLk9QUy5wYWludEltYWdlWE9iamVjdCx5KSx1JiYoZlt1XT17Zm46aS5PUFMucGFpbnRJbWFnZVhPYmplY3QsYXJnczp5fSksUHJvbWlzZS5yZXNvbHZlKCl9LGhhbmRsZVNNYXNrOmZ1bmN0aW9uKGUsdCxyLG4sYSl7dmFyIGk9ZS5nZXQoIkciKSxvPXtzdWJ0eXBlOmUuZ2V0KCJTIikubmFtZSxiYWNrZHJvcDplLmdldCgiQkMiKX0scz1lLmdldCgiVFIiKTtpZigoMCxiLmlzUERGRnVuY3Rpb24pKHMpKXtmb3IodmFyIGw9dGhpcy5wZGZGdW5jdGlvbkZhY3RvcnkuY3JlYXRlKHMpLGM9bmV3IFVpbnQ4QXJyYXkoMjU2KSx1PW5ldyBGbG9hdDMyQXJyYXkoMSksZj0wO2Y8MjU2O2YrKyl1WzBdPWYvMjU1LGwodSwwLHUsMCksY1tmXT0yNTUqdVswXXwwO28udHJhbnNmZXJNYXA9Y31yZXR1cm4gdGhpcy5idWlsZEZvcm1YT2JqZWN0KHQsaSxvLHIsbixhLnN0YXRlLmNsb25lKCkpfSxoYW5kbGVUaWxpbmdUeXBlOmZ1bmN0aW9uKGUsdCxyLG4sYSxvLHMpe3ZhciBjPXRoaXMsdT1uZXcgUy5PcGVyYXRvckxpc3QsZj1bYS5nZXQoIlJlc291cmNlcyIpLHJdLGg9bC5EaWN0Lm1lcmdlKHRoaXMueHJlZixmKTtyZXR1cm4gdGhpcy5nZXRPcGVyYXRvckxpc3Qoe3N0cmVhbTpuLHRhc2s6cyxyZXNvdXJjZXM6aCxvcGVyYXRvckxpc3Q6dX0pLnRoZW4oKGZ1bmN0aW9uKCl7cmV0dXJuKDAsZC5nZXRUaWxpbmdQYXR0ZXJuSVIpKHtmbkFycmF5OnUuZm5BcnJheSxhcmdzQXJyYXk6dS5hcmdzQXJyYXl9LGEsdCl9KSkudGhlbigoZnVuY3Rpb24odCl7by5hZGREZXBlbmRlbmNpZXModS5kZXBlbmRlbmNpZXMpLG8uYWRkT3AoZSx0KX0pLChmdW5jdGlvbihlKXtpZihjLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBjLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93bn0pLHZvaWQoMCxpLndhcm4pKCdoYW5kbGVUaWxpbmdUeXBlIC0gaWdub3JpbmcgcGF0dGVybjogIicuY29uY2F0KGUsJyIuJykpO3Rocm93IGV9KSl9LGhhbmRsZVNldEZvbnQ6ZnVuY3Rpb24oZSx0LHIsbixhLG8pe3ZhciBzLGw9dGhpcztyZXR1cm4gdCYmKHM9KHQ9dC5zbGljZSgpKVswXS5uYW1lKSx0aGlzLmxvYWRGb250KHMscixlKS50aGVuKChmdW5jdGlvbih0KXtyZXR1cm4gdC5mb250LmlzVHlwZTNGb250P3QubG9hZFR5cGUzRGF0YShsLGUsbixhKS50aGVuKChmdW5jdGlvbigpe3JldHVybiB0fSkpLmNhdGNoKChmdW5jdGlvbihlKXtyZXR1cm4gbC5oYW5kbGVyLnNlbmQoIlVuc3VwcG9ydGVkRmVhdHVyZSIse2ZlYXR1cmVJZDppLlVOU1VQUE9SVEVEX0ZFQVRVUkVTLmZvbnR9KSxuZXcgQygiZ19mb250X2Vycm9yIixuZXcgYy5FcnJvckZvbnQoIlR5cGUzIGZvbnQgbG9hZCBlcnJvcjogIitlKSx0LmZvbnQpfSkpOnR9KSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIG8uZm9udD1lLmZvbnQsZS5zZW5kKGwuaGFuZGxlciksZS5sb2FkZWROYW1lfSkpfSxoYW5kbGVUZXh0OmZ1bmN0aW9uKGUsdCl7dmFyIG49dC5mb250LGE9bi5jaGFyc1RvR2x5cGhzKGUpO3JldHVybiBuLmRhdGEmJih0LnRleHRSZW5kZXJpbmdNb2RlJmkuVGV4dFJlbmRlcmluZ01vZGUuQUREX1RPX1BBVEhfRkxBR3x8IlBhdHRlcm4iPT09dC5maWxsQ29sb3JTcGFjZS5uYW1lfHxuLmRpc2FibGVGb250RmFjZXx8dGhpcy5vcHRpb25zLmRpc2FibGVGb250RmFjZSkmJnIuYnVpbGRGb250UGF0aHMobixhLHRoaXMuaGFuZGxlciksYX0sc2V0R1N0YXRlOmZ1bmN0aW9uKGUsdCxyLG4sYSl7Zm9yKHZhciBvPXRoaXMscz1bXSxjPXQuZ2V0S2V5cygpLHU9UHJvbWlzZS5yZXNvbHZlKCksZj1mdW5jdGlvbigpe3ZhciBmPWNbaF0sZD10LmdldChmKTtzd2l0Y2goZil7Y2FzZSJUeXBlIjpicmVhaztjYXNlIkxXIjpjYXNlIkxDIjpjYXNlIkxKIjpjYXNlIk1MIjpjYXNlIkQiOmNhc2UiUkkiOmNhc2UiRkwiOmNhc2UiQ0EiOmNhc2UiY2EiOnMucHVzaChbZixkXSk7YnJlYWs7Y2FzZSJGb250Ijp1PXUudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gby5oYW5kbGVTZXRGb250KGUsbnVsbCxkWzBdLHIsbixhLnN0YXRlKS50aGVuKChmdW5jdGlvbihlKXtyLmFkZERlcGVuZGVuY3koZSkscy5wdXNoKFtmLFtlLGRbMV1dXSl9KSl9KSk7YnJlYWs7Y2FzZSJCTSI6cy5wdXNoKFtmLHAoZCldKTticmVhaztjYXNlIlNNYXNrIjppZigoMCxsLmlzTmFtZSkoZCwiTm9uZSIpKXtzLnB1c2goW2YsITFdKTticmVha30oMCxsLmlzRGljdCkoZCk/KHU9dS50aGVuKChmdW5jdGlvbigpe3JldHVybiBvLmhhbmRsZVNNYXNrKGQsZSxyLG4sYSl9KSkscy5wdXNoKFtmLCEwXSkpOigwLGkud2FybikoIlVuc3VwcG9ydGVkIFNNYXNrIHR5cGUiKTticmVhaztjYXNlIk9QIjpjYXNlIm9wIjpjYXNlIk9QTSI6Y2FzZSJCRyI6Y2FzZSJCRzIiOmNhc2UiVUNSIjpjYXNlIlVDUjIiOmNhc2UiVFIiOmNhc2UiVFIyIjpjYXNlIkhUIjpjYXNlIlNNIjpjYXNlIlNBIjpjYXNlIkFJUyI6Y2FzZSJUSyI6KDAsaS5pbmZvKSgiZ3JhcGhpYyBzdGF0ZSBvcGVyYXRvciAiK2YpO2JyZWFrO2RlZmF1bHQ6KDAsaS5pbmZvKSgiVW5rbm93biBncmFwaGljIHN0YXRlIG9wZXJhdG9yICIrZil9fSxoPTAsZD1jLmxlbmd0aDtoPGQ7aCsrKWYoKTtyZXR1cm4gdS50aGVuKChmdW5jdGlvbigpe3MubGVuZ3RoPjAmJnIuYWRkT3AoaS5PUFMuc2V0R1N0YXRlLFtzXSl9KSl9LGxvYWRGb250OmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzO2Z1bmN0aW9uIGEoKXtyZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBDKCJnX2ZvbnRfZXJyb3IiLG5ldyBjLkVycm9yRm9udCgiRm9udCAiK2UrIiBpcyBub3QgYXZhaWxhYmxlIiksdCkpfXZhciBvLHM9dGhpcy54cmVmO2lmKHQpe2lmKCEoMCxsLmlzUmVmKSh0KSl0aHJvdyBuZXcgRXJyb3IoJ1RoZSAiZm9udCIgb2JqZWN0IHNob3VsZCBiZSBhIHJlZmVyZW5jZS4nKTtvPXR9ZWxzZXt2YXIgdT1yLmdldCgiRm9udCIpO2lmKCF1KXJldHVybigwLGkud2FybikoImZvbnRSZXMgbm90IGF2YWlsYWJsZSIpLGEoKTtvPXUuZ2V0UmF3KGUpfWlmKCFvKXJldHVybigwLGkud2FybikoImZvbnRSZWYgbm90IGF2YWlsYWJsZSIpLGEoKTtpZih0aGlzLmZvbnRDYWNoZS5oYXMobykpcmV0dXJuIHRoaXMuZm9udENhY2hlLmdldChvKTtpZih0PXMuZmV0Y2hJZlJlZihvKSwhKDAsbC5pc0RpY3QpKHQpKXJldHVybiBhKCk7aWYodC50cmFuc2xhdGVkKXJldHVybiB0LnRyYW5zbGF0ZWQ7dmFyIGYsaCxkPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCkscD10aGlzLnByZUV2YWx1YXRlRm9udCh0KSxtPXAuZGVzY3JpcHRvcixnPSgwLGwuaXNSZWYpKG8pO2lmKGcmJihmPW8udG9TdHJpbmcoKSksKDAsbC5pc0RpY3QpKG0pKXttLmZvbnRBbGlhc2VzfHwobS5mb250QWxpYXNlcz1PYmplY3QuY3JlYXRlKG51bGwpKTt2YXIgdj1tLmZvbnRBbGlhc2VzLHk9cC5oYXNoO2lmKHZbeV0pe3ZhciBiPXZbeV0uYWxpYXNSZWY7aWYoZyYmYiYmdGhpcy5mb250Q2FjaGUuaGFzKGIpKXJldHVybiB0aGlzLmZvbnRDYWNoZS5wdXRBbGlhcyhvLGIpLHRoaXMuZm9udENhY2hlLmdldChvKX1lbHNlIHZbeV09e2ZvbnRJRDpjLkZvbnQuZ2V0Rm9udElEKCl9O2cmJih2W3ldLmFsaWFzUmVmPW8pLGY9dlt5XS5mb250SUR9Zz90aGlzLmZvbnRDYWNoZS5wdXQobyxkLnByb21pc2UpOihmfHwoZj10aGlzLmlkRmFjdG9yeS5jcmVhdGVPYmpJZCgpKSx0aGlzLmZvbnRDYWNoZS5wdXQoImlkXyIrZixkLnByb21pc2UpKSwoMCxpLmFzc2VydCkoZiwnVGhlICJmb250SUQiIG11c3QgYmUgZGVmaW5lZC4nKSx0LmxvYWRlZE5hbWU9ImdfIit0aGlzLnBkZk1hbmFnZXIuZG9jSWQrIl9mIitmLHQudHJhbnNsYXRlZD1kLnByb21pc2U7dHJ5e2g9dGhpcy50cmFuc2xhdGVGb250KHApfWNhdGNoKGUpe2g9UHJvbWlzZS5yZWplY3QoZSl9cmV0dXJuIGgudGhlbigoZnVuY3Rpb24oZSl7dm9pZCAwIT09ZS5mb250VHlwZSYmKHMuc3RhdHMuZm9udFR5cGVzW2UuZm9udFR5cGVdPSEwKSxkLnJlc29sdmUobmV3IEModC5sb2FkZWROYW1lLGUsdCkpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtuLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMuZm9udH0pO3RyeXt2YXIgcj1wLmRlc2NyaXB0b3IsYT1yJiZyLmdldCgiRm9udEZpbGUzIiksbz1hJiZhLmdldCgiU3VidHlwZSIpLGw9KDAsYy5nZXRGb250VHlwZSkocC50eXBlLG8mJm8ubmFtZSk7cy5zdGF0cy5mb250VHlwZXNbbF09ITB9Y2F0Y2goZSl7fWQucmVzb2x2ZShuZXcgQyh0LmxvYWRlZE5hbWUsbmV3IGMuRXJyb3JGb250KGUgaW5zdGFuY2VvZiBFcnJvcj9lLm1lc3NhZ2U6ZSksdCkpfSkpLGQucHJvbWlzZX0sYnVpbGRQYXRoOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1lLmxlbmd0aC0xO2lmKHJ8fChyPVtdKSxuPDB8fGUuZm5BcnJheVtuXSE9PWkuT1BTLmNvbnN0cnVjdFBhdGgpZS5hZGRPcChpLk9QUy5jb25zdHJ1Y3RQYXRoLFtbdF0scl0pO2Vsc2V7dmFyIGE9ZS5hcmdzQXJyYXlbbl07YVswXS5wdXNoKHQpLEFycmF5LnByb3RvdHlwZS5wdXNoLmFwcGx5KGFbMV0scil9fSxoYW5kbGVDb2xvck46ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsYz1yW3IubGVuZ3RoLTFdO2lmKCgwLGwuaXNOYW1lKShjKSYmKHM9YS5nZXQoYy5uYW1lKSkpe3ZhciB1PSgwLGwuaXNTdHJlYW0pKHMpP3MuZGljdDpzLGY9dS5nZXQoIlBhdHRlcm5UeXBlIik7aWYoMT09PWYpe3ZhciBoPW4uYmFzZT9uLmJhc2UuZ2V0UmdiKHIsMCk6bnVsbDtyZXR1cm4gdGhpcy5oYW5kbGVUaWxpbmdUeXBlKHQsaCxpLHMsdSxlLG8pfWlmKDI9PT1mKXt2YXIgcD11LmdldCgiU2hhZGluZyIpLG09dS5nZXRBcnJheSgiTWF0cml4Iik7cmV0dXJuIHM9ZC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhwLG0sdGhpcy54cmVmLGksdGhpcy5oYW5kbGVyLHRoaXMucGRmRnVuY3Rpb25GYWN0b3J5KSxlLmFkZE9wKHQscy5nZXRJUigpKSxQcm9taXNlLnJlc29sdmUoKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmtub3duIFBhdHRlcm5UeXBlOiAiK2YpKX1yZXR1cm4gZS5hZGRPcCh0LHIpLFByb21pc2UucmVzb2x2ZSgpfSxnZXRPcGVyYXRvckxpc3Q6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLGE9ZS50YXNrLG89ZS5yZXNvdXJjZXMscz1lLm9wZXJhdG9yTGlzdCxjPWUuaW5pdGlhbFN0YXRlLHU9dm9pZCAwPT09Yz9udWxsOmM7aWYobz1vfHxsLkRpY3QuZW1wdHksdT11fHxuZXcgVCwhcyl0aHJvdyBuZXcgRXJyb3IoJ2dldE9wZXJhdG9yTGlzdDogbWlzc2luZyAib3BlcmF0b3JMaXN0IiBwYXJhbWV0ZXInKTt2YXIgZj10aGlzLGg9dGhpcy54cmVmLHA9T2JqZWN0LmNyZWF0ZShudWxsKSxtPW8uZ2V0KCJYT2JqZWN0Iil8fGwuRGljdC5lbXB0eSx2PW8uZ2V0KCJQYXR0ZXJuIil8fGwuRGljdC5lbXB0eSx5PW5ldyBQKHUpLGI9bmV3IFIocixoLHkpLHc9bmV3IG47ZnVuY3Rpb24gayhlKXtmb3IodmFyIHQ9MCxyPWIuc2F2ZWRTdGF0ZXNEZXB0aDt0PHI7dCsrKXMuYWRkT3AoaS5PUFMucmVzdG9yZSxbXSl9cmV0dXJuIG5ldyBQcm9taXNlKChmdW5jdGlvbiBlKHQscil7dmFyIG49ZnVuY3Rpb24obil7bi50aGVuKChmdW5jdGlvbigpe3RyeXtlKHQscil9Y2F0Y2goZSl7cihlKX19KSxyKX07YS5lbnN1cmVOb3RUZXJtaW5hdGVkKCksdy5yZXNldCgpO2Zvcih2YXIgYyx1LFMsXyx4PXt9OyEoYz13LmNoZWNrKCkpJiYoeC5hcmdzPW51bGwsYi5yZWFkKHgpKTspe3ZhciBDPXguYXJncyxQPXguZm47c3dpdGNoKDB8UCl7Y2FzZSBpLk9QUy5wYWludFhPYmplY3Q6dmFyIEU9Q1swXS5uYW1lO2lmKEUmJnZvaWQgMCE9PXBbRV0pe3MuYWRkT3AocFtFXS5mbixwW0VdLmFyZ3MpLEM9bnVsbDtjb250aW51ZX1yZXR1cm4gdm9pZCBuKG5ldyBQcm9taXNlKChmdW5jdGlvbihlLHQpe2lmKCFFKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IG11c3QgYmUgcmVmZXJyZWQgdG8gYnkgbmFtZS4iKTt2YXIgcj1tLmdldChFKTtpZighcilyZXR1cm4gcy5hZGRPcChQLEMpLHZvaWQgZSgpO2lmKCEoMCxsLmlzU3RyZWFtKShyKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgYmUgYSBzdHJlYW0iKTt2YXIgbj1yLmRpY3QuZ2V0KCJTdWJ0eXBlIik7aWYoISgwLGwuaXNOYW1lKShuKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBzaG91bGQgaGF2ZSBhIE5hbWUgc3VidHlwZSIpO2lmKCJGb3JtIj09PW4ubmFtZSlyZXR1cm4geS5zYXZlKCksdm9pZCBmLmJ1aWxkRm9ybVhPYmplY3QobyxyLG51bGwscyxhLHkuc3RhdGUuY2xvbmUoKSkudGhlbigoZnVuY3Rpb24oKXt5LnJlc3RvcmUoKSxlKCl9KSx0KTtpZigiSW1hZ2UiIT09bi5uYW1lKXtpZigiUFMiIT09bi5uYW1lKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJVbmhhbmRsZWQgWE9iamVjdCBzdWJ0eXBlICIuY29uY2F0KG4ubmFtZSkpOygwLGkuaW5mbykoIklnbm9yZWQgWE9iamVjdCBzdWJ0eXBlIFBTIiksZSgpfWVsc2UgZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6byxpbWFnZTpyLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OkUsaW1hZ2VDYWNoZTpwfSkudGhlbihlLHQpfSkpLmNhdGNoKChmdW5jdGlvbihlKXtpZihmLm9wdGlvbnMuaWdub3JlRXJyb3JzKXJldHVybiBmLmhhbmRsZXIuc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOmkuVU5TVVBQT1JURURfRkVBVFVSRVMudW5rbm93bn0pLHZvaWQoMCxpLndhcm4pKCdnZXRPcGVyYXRvckxpc3QgLSBpZ25vcmluZyBYT2JqZWN0OiAiJy5jb25jYXQoZSwnIi4nKSk7dGhyb3cgZX0pKSk7Y2FzZSBpLk9QUy5zZXRGb250OnZhciBUPUNbMV07cmV0dXJuIHZvaWQgbihmLmhhbmRsZVNldEZvbnQobyxDLG51bGwscyxhLHkuc3RhdGUpLnRoZW4oKGZ1bmN0aW9uKGUpe3MuYWRkRGVwZW5kZW5jeShlKSxzLmFkZE9wKGkuT1BTLnNldEZvbnQsW2UsVF0pfSkpKTtjYXNlIGkuT1BTLmVuZElubGluZUltYWdlOnZhciBSPUNbMF0uY2FjaGVLZXk7aWYoUil7dmFyIE89cFtSXTtpZih2b2lkIDAhPT1PKXtzLmFkZE9wKE8uZm4sTy5hcmdzKSxDPW51bGw7Y29udGludWV9fXJldHVybiB2b2lkIG4oZi5idWlsZFBhaW50SW1hZ2VYT2JqZWN0KHtyZXNvdXJjZXM6byxpbWFnZTpDWzBdLGlzSW5saW5lOiEwLG9wZXJhdG9yTGlzdDpzLGNhY2hlS2V5OlIsaW1hZ2VDYWNoZTpwfSkpO2Nhc2UgaS5PUFMuc2hvd1RleHQ6Q1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKTticmVhaztjYXNlIGkuT1BTLnNob3dTcGFjZWRUZXh0OnZhciBJPUNbMF0sRj1bXSxMPUkubGVuZ3RoLEQ9eS5zdGF0ZTtmb3IodT0wO3U8TDsrK3Upe3ZhciBOPUlbdV07KDAsaS5pc1N0cmluZykoTik/QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoRixmLmhhbmRsZVRleHQoTixEKSk6KDAsaS5pc051bSkoTikmJkYucHVzaChOKX1DWzBdPUYsUD1pLk9QUy5zaG93VGV4dDticmVhaztjYXNlIGkuT1BTLm5leHRMaW5lU2hvd1RleHQ6cy5hZGRPcChpLk9QUy5uZXh0TGluZSksQ1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKSxQPWkuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6cy5hZGRPcChpLk9QUy5uZXh0TGluZSkscy5hZGRPcChpLk9QUy5zZXRXb3JkU3BhY2luZyxbQy5zaGlmdCgpXSkscy5hZGRPcChpLk9QUy5zZXRDaGFyU3BhY2luZyxbQy5zaGlmdCgpXSksQ1swXT1mLmhhbmRsZVRleHQoQ1swXSx5LnN0YXRlKSxQPWkuT1BTLnNob3dUZXh0O2JyZWFrO2Nhc2UgaS5PUFMuc2V0VGV4dFJlbmRlcmluZ01vZGU6eS5zdGF0ZS50ZXh0UmVuZGVyaW5nTW9kZT1DWzBdO2JyZWFrO2Nhc2UgaS5PUFMuc2V0RmlsbENvbG9yU3BhY2U6eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2UucGFyc2UoQ1swXSxoLG8sZi5wZGZGdW5jdGlvbkZhY3RvcnkpO2NvbnRpbnVlO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZTp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnBhcnNlKENbMF0saCxvLGYucGRmRnVuY3Rpb25GYWN0b3J5KTtjb250aW51ZTtjYXNlIGkuT1BTLnNldEZpbGxDb2xvcjpfPXkuc3RhdGUuZmlsbENvbG9yU3BhY2UsQz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3I6Xz15LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2UsQz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0U3Ryb2tlUkdCQ29sb3I7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsR3JheTp5LnN0YXRlLmZpbGxDb2xvclNwYWNlPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXksQz1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5ncmF5LmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlR3JheTp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSxDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmdyYXkuZ2V0UmdiKEMsMCksUD1pLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldEZpbGxDTVlLQ29sb3I6eS5zdGF0ZS5maWxsQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5jbXlrLEM9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ay5nZXRSZ2IoQywwKSxQPWkuT1BTLnNldEZpbGxSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldFN0cm9rZUNNWUtDb2xvcjp5LnN0YXRlLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuY215ayxDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLmNteWsuZ2V0UmdiKEMsMCksUD1pLk9QUy5zZXRTdHJva2VSR0JDb2xvcjticmVhaztjYXNlIGkuT1BTLnNldEZpbGxSR0JDb2xvcjp5LnN0YXRlLmZpbGxDb2xvclNwYWNlPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYixDPWcuQ29sb3JTcGFjZS5zaW5nbGV0b25zLnJnYi5nZXRSZ2IoQywwKTticmVhaztjYXNlIGkuT1BTLnNldFN0cm9rZVJHQkNvbG9yOnkuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZT1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IsQz1nLkNvbG9yU3BhY2Uuc2luZ2xldG9ucy5yZ2IuZ2V0UmdiKEMsMCk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRGaWxsQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShfPXkuc3RhdGUuZmlsbENvbG9yU3BhY2UpLm5hbWUpcmV0dXJuIHZvaWQgbihmLmhhbmRsZUNvbG9yTihzLGkuT1BTLnNldEZpbGxDb2xvck4sQyxfLHYsbyxhKSk7Qz1fLmdldFJnYihDLDApLFA9aS5PUFMuc2V0RmlsbFJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2V0U3Ryb2tlQ29sb3JOOmlmKCJQYXR0ZXJuIj09PShfPXkuc3RhdGUuc3Ryb2tlQ29sb3JTcGFjZSkubmFtZSlyZXR1cm4gdm9pZCBuKGYuaGFuZGxlQ29sb3JOKHMsaS5PUFMuc2V0U3Ryb2tlQ29sb3JOLEMsXyx2LG8sYSkpO0M9Xy5nZXRSZ2IoQywwKSxQPWkuT1BTLnNldFN0cm9rZVJHQkNvbG9yO2JyZWFrO2Nhc2UgaS5PUFMuc2hhZGluZ0ZpbGw6dmFyIE09by5nZXQoIlNoYWRpbmciKTtpZighTSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiTm8gc2hhZGluZyByZXNvdXJjZSBmb3VuZCIpO3ZhciBqPU0uZ2V0KENbMF0ubmFtZSk7aWYoIWopdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk5vIHNoYWRpbmcgb2JqZWN0IGZvdW5kIik7dmFyIEI9ZC5QYXR0ZXJuLnBhcnNlU2hhZGluZyhqLG51bGwsaCxvLGYuaGFuZGxlcixmLnBkZkZ1bmN0aW9uRmFjdG9yeSkuZ2V0SVIoKTtDPVtCXSxQPWkuT1BTLnNoYWRpbmdGaWxsO2JyZWFrO2Nhc2UgaS5PUFMuc2V0R1N0YXRlOnZhciBVPUNbMF0scT1vLmdldCgiRXh0R1N0YXRlIik7aWYoISgwLGwuaXNEaWN0KShxKXx8IXEuaGFzKFUubmFtZSkpYnJlYWs7dmFyIHo9cS5nZXQoVS5uYW1lKTtyZXR1cm4gdm9pZCBuKGYuc2V0R1N0YXRlKG8seixzLGEseSkpO2Nhc2UgaS5PUFMubW92ZVRvOmNhc2UgaS5PUFMubGluZVRvOmNhc2UgaS5PUFMuY3VydmVUbzpjYXNlIGkuT1BTLmN1cnZlVG8yOmNhc2UgaS5PUFMuY3VydmVUbzM6Y2FzZSBpLk9QUy5jbG9zZVBhdGg6Y2FzZSBpLk9QUy5yZWN0YW5nbGU6Zi5idWlsZFBhdGgocyxQLEMpO2NvbnRpbnVlO2Nhc2UgaS5PUFMubWFya1BvaW50OmNhc2UgaS5PUFMubWFya1BvaW50UHJvcHM6Y2FzZSBpLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQ6Y2FzZSBpLk9QUy5iZWdpbk1hcmtlZENvbnRlbnRQcm9wczpjYXNlIGkuT1BTLmVuZE1hcmtlZENvbnRlbnQ6Y2FzZSBpLk9QUy5iZWdpbkNvbXBhdDpjYXNlIGkuT1BTLmVuZENvbXBhdDpjb250aW51ZTtkZWZhdWx0OmlmKG51bGwhPT1DKXtmb3IodT0wLFM9Qy5sZW5ndGg7dTxTJiYhKENbdV1pbnN0YW5jZW9mIGwuRGljdCk7dSsrKTtpZih1PFMpeygwLGkud2FybikoImdldE9wZXJhdG9yTGlzdCAtIGlnbm9yaW5nIG9wZXJhdG9yOiAiK1ApO2NvbnRpbnVlfX19cy5hZGRPcChQLEMpfWM/bihBKTooaygpLHQoKSl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKHQub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuIHQuaGFuZGxlci5zZW5kKCJVbnN1cHBvcnRlZEZlYXR1cmUiLHtmZWF0dXJlSWQ6aS5VTlNVUFBPUlRFRF9GRUFUVVJFUy51bmtub3dufSksKDAsaS53YXJuKSgnZ2V0T3BlcmF0b3JMaXN0IC0gaWdub3JpbmcgZXJyb3JzIGR1cmluZyAiJy5jb25jYXQoYS5uYW1lLCciICcpKyd0YXNrOiAiJy5jb25jYXQoZSwnIi4nKSksdm9pZCBrKCk7dGhyb3cgZX0pKX0sZ2V0VGV4dENvbnRlbnQ6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPWUuc3RyZWFtLGE9ZS50YXNrLG89ZS5yZXNvdXJjZXMscz1lLnN0YXRlTWFuYWdlcixjPXZvaWQgMD09PXM/bnVsbDpzLHU9ZS5ub3JtYWxpemVXaGl0ZXNwYWNlLGg9dm9pZCAwIT09dSYmdSxkPWUuY29tYmluZVRleHRJdGVtcyxwPXZvaWQgMCE9PWQmJmQsZz1lLnNpbmssdj1lLnNlZW5TdHlsZXMseT12b2lkIDA9PT12P09iamVjdC5jcmVhdGUobnVsbCk6djtvPW98fGwuRGljdC5lbXB0eSxjPWN8fG5ldyBQKG5ldyBFKTt2YXIgYix3PS9ccy9nLGs9e2l0ZW1zOltdLHN0eWxlczpPYmplY3QuY3JlYXRlKG51bGwpfSxTPXtpbml0aWFsaXplZDohMSxzdHI6W10sd2lkdGg6MCxoZWlnaHQ6MCx2ZXJ0aWNhbDohMSxsYXN0QWR2YW5jZVdpZHRoOjAsbGFzdEFkdmFuY2VIZWlnaHQ6MCx0ZXh0QWR2YW5jZVNjYWxlOjAsc3BhY2VXaWR0aDowLGZha2VTcGFjZU1pbjoxLzAsZmFrZU11bHRpU3BhY2VNaW46MS8wLGZha2VNdWx0aVNwYWNlTWF4Oi0wLHRleHRSdW5CcmVha0FsbG93ZWQ6ITEsdHJhbnNmb3JtOm51bGwsZm9udE5hbWU6bnVsbH0sXz10aGlzLHg9dGhpcy54cmVmLEM9bnVsbCxUPU9iamVjdC5jcmVhdGUobnVsbCksTz1uZXcgUihyLHgsYyk7ZnVuY3Rpb24gSSgpe2lmKFMuaW5pdGlhbGl6ZWQpcmV0dXJuIFM7dmFyIGU9Yi5mb250O2UubG9hZGVkTmFtZSBpbiB5fHwoeVtlLmxvYWRlZE5hbWVdPSEwLGsuc3R5bGVzW2UubG9hZGVkTmFtZV09e2ZvbnRGYW1pbHk6ZS5mYWxsYmFja05hbWUsYXNjZW50OmUuYXNjZW50LGRlc2NlbnQ6ZS5kZXNjZW50LHZlcnRpY2FsOiEhZS52ZXJ0aWNhbH0pLFMuZm9udE5hbWU9ZS5sb2FkZWROYW1lO3ZhciB0PVtiLmZvbnRTaXplKmIudGV4dEhTY2FsZSwwLDAsYi5mb250U2l6ZSwwLGIudGV4dFJpc2VdO2lmKGUuaXNUeXBlM0ZvbnQmJmIuZm9udE1hdHJpeCE9PWkuRk9OVF9JREVOVElUWV9NQVRSSVgmJjE9PT1iLmZvbnRTaXplKXt2YXIgcj1lLmJib3hbM10tZS5iYm94WzFdO3I+MCYmKHIqPWIuZm9udE1hdHJpeFszXSx0WzNdKj1yKX12YXIgbj1pLlV0aWwudHJhbnNmb3JtKGIuY3RtLGkuVXRpbC50cmFuc2Zvcm0oYi50ZXh0TWF0cml4LHQpKTtTLnRyYW5zZm9ybT1uLGUudmVydGljYWw/KFMud2lkdGg9TWF0aC5zcXJ0KG5bMF0qblswXStuWzFdKm5bMV0pLFMuaGVpZ2h0PTAsUy52ZXJ0aWNhbD0hMCk6KFMud2lkdGg9MCxTLmhlaWdodD1NYXRoLnNxcnQoblsyXSpuWzJdK25bM10qblszXSksUy52ZXJ0aWNhbD0hMSk7dmFyIGE9Yi50ZXh0TGluZU1hdHJpeFswXSxvPWIudGV4dExpbmVNYXRyaXhbMV0scz1NYXRoLnNxcnQoYSphK28qbyk7YT1iLmN0bVswXSxvPWIuY3RtWzFdO3ZhciBsPU1hdGguc3FydChhKmErbypvKTtTLnRleHRBZHZhbmNlU2NhbGU9bCpzLFMubGFzdEFkdmFuY2VXaWR0aD0wLFMubGFzdEFkdmFuY2VIZWlnaHQ9MDt2YXIgYz1lLnNwYWNlV2lkdGgvMWUzKmIuZm9udFNpemU7cmV0dXJuIGM/KFMuc3BhY2VXaWR0aD1jLFMuZmFrZVNwYWNlTWluPS4zKmMsUy5mYWtlTXVsdGlTcGFjZU1pbj0xLjUqYyxTLmZha2VNdWx0aVNwYWNlTWF4PTQqYyxTLnRleHRSdW5CcmVha0FsbG93ZWQ9IWUuaXNNb25vc3BhY2UpOihTLnNwYWNlV2lkdGg9MCxTLmZha2VTcGFjZU1pbj0xLzAsUy5mYWtlTXVsdGlTcGFjZU1pbj0xLzAsUy5mYWtlTXVsdGlTcGFjZU1heD0wLFMudGV4dFJ1bkJyZWFrQWxsb3dlZD0hMSksUy5pbml0aWFsaXplZD0hMCxTfWZ1bmN0aW9uIEYoZSl7Zm9yKHZhciB0LHI9MCxuPWUubGVuZ3RoO3I8biYmKHQ9ZS5jaGFyQ29kZUF0KHIpKT49MzImJnQ8PTEyNzspcisrO3JldHVybiByPG4/ZS5yZXBsYWNlKHcsIiAiKTplfWZ1bmN0aW9uIEwoZSx0KXtyZXR1cm4gXy5sb2FkRm9udChlLHQsbykudGhlbigoZnVuY3Rpb24oZSl7Yi5mb250PWUuZm9udCxiLmZvbnRNYXRyaXg9ZS5mb250LmZvbnRNYXRyaXh8fGkuRk9OVF9JREVOVElUWV9NQVRSSVh9KSl9ZnVuY3Rpb24gRChlKXtmb3IodmFyIHQ9Yi5mb250LHI9SSgpLG49MCxhPTAsaT10LmNoYXJzVG9HbHlwaHMoZSksbz0wO288aS5sZW5ndGg7bysrKXt2YXIgcz1pW29dLGw9bnVsbDtsPXQudmVydGljYWwmJnMudm1ldHJpYz9zLnZtZXRyaWNbMF06cy53aWR0aDt2YXIgYz1zLnVuaWNvZGUsdT0oMCxmLmdldE5vcm1hbGl6ZWRVbmljb2RlcykoKTt2b2lkIDAhPT11W2NdJiYoYz11W2NdKSxjPSgwLGYucmV2ZXJzZUlmUnRsKShjKTt2YXIgaD1iLmNoYXJTcGFjaW5nO2lmKHMuaXNTcGFjZSl7dmFyIGQ9Yi53b3JkU3BhY2luZztoKz1kLGQ+MCYmTihkLHIuc3RyKX12YXIgcD0wLG09MDt0LnZlcnRpY2FsP2ErPW09bCpiLmZvbnRNYXRyaXhbMF0qYi5mb250U2l6ZStoOm4rPXA9KGwqYi5mb250TWF0cml4WzBdKmIuZm9udFNpemUraCkqYi50ZXh0SFNjYWxlLGIudHJhbnNsYXRlVGV4dE1hdHJpeChwLG0pLHIuc3RyLnB1c2goYyl9cmV0dXJuIHQudmVydGljYWw/KHIubGFzdEFkdmFuY2VIZWlnaHQ9YSxyLmhlaWdodCs9TWF0aC5hYnMoYSkpOihyLmxhc3RBZHZhbmNlV2lkdGg9bixyLndpZHRoKz1uKSxyfWZ1bmN0aW9uIE4oZSx0KXtpZighKGU8Uy5mYWtlU3BhY2VNaW4pKWlmKGU8Uy5mYWtlTXVsdGlTcGFjZU1pbil0LnB1c2goIiAiKTtlbHNlIGZvcih2YXIgcj1NYXRoLnJvdW5kKGUvUy5zcGFjZVdpZHRoKTtyLS0gPjA7KXQucHVzaCgiICIpfWZ1bmN0aW9uIE0oKXt2YXIgZSx0LHI7Uy5pbml0aWFsaXplZCYmKFMudmVydGljYWw/Uy5oZWlnaHQqPVMudGV4dEFkdmFuY2VTY2FsZTpTLndpZHRoKj1TLnRleHRBZHZhbmNlU2NhbGUsay5pdGVtcy5wdXNoKCh0PShlPVMpLnN0ci5qb2luKCIiKSxyPSgwLG0uYmlkaSkodCwtMSxlLnZlcnRpY2FsKSx7c3RyOmg/RihyLnN0cik6ci5zdHIsZGlyOnIuZGlyLHdpZHRoOmUud2lkdGgsaGVpZ2h0OmUuaGVpZ2h0LHRyYW5zZm9ybTplLnRyYW5zZm9ybSxmb250TmFtZTplLmZvbnROYW1lfSkpLFMuaW5pdGlhbGl6ZWQ9ITEsUy5zdHIubGVuZ3RoPTApfWZ1bmN0aW9uIGooKXt2YXIgZT1rLml0ZW1zLmxlbmd0aDtlPjAmJihnLmVucXVldWUoayxlKSxrLml0ZW1zPVtdLGsuc3R5bGVzPU9iamVjdC5jcmVhdGUobnVsbCkpfXZhciBCPW5ldyBuO3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24gZSh0LHIpe3ZhciBuPWZ1bmN0aW9uKG4pe2ooKSxQcm9taXNlLmFsbChbbixnLnJlYWR5XSkudGhlbigoZnVuY3Rpb24oKXt0cnl7ZSh0LHIpfWNhdGNoKGUpe3IoZSl9fSkscil9O2EuZW5zdXJlTm90VGVybWluYXRlZCgpLEIucmVzZXQoKTtmb3IodmFyIHMsdT17fSxmPVtdOyEocz1CLmNoZWNrKCkpJiYoZi5sZW5ndGg9MCx1LmFyZ3M9ZixPLnJlYWQodSkpOyl7Yj1jLnN0YXRlO3ZhciBkLG09dS5mbjtzd2l0Y2goZj11LmFyZ3MsMHxtKXtjYXNlIGkuT1BTLnNldEZvbnQ6dmFyIHY9ZlswXS5uYW1lLHc9ZlsxXTtpZihiLmZvbnQmJnY9PT1iLmZvbnROYW1lJiZ3PT09Yi5mb250U2l6ZSlicmVhaztyZXR1cm4gTSgpLGIuZm9udE5hbWU9dixiLmZvbnRTaXplPXcsdm9pZCBuKEwodixudWxsKSk7Y2FzZSBpLk9QUy5zZXRUZXh0UmlzZTpNKCksYi50ZXh0UmlzZT1mWzBdO2JyZWFrO2Nhc2UgaS5PUFMuc2V0SFNjYWxlOk0oKSxiLnRleHRIU2NhbGU9ZlswXS8xMDA7YnJlYWs7Y2FzZSBpLk9QUy5zZXRMZWFkaW5nOk0oKSxiLmxlYWRpbmc9ZlswXTticmVhaztjYXNlIGkuT1BTLm1vdmVUZXh0OnZhciB4PSEhYi5mb250JiYwPT09KGIuZm9udC52ZXJ0aWNhbD9mWzBdOmZbMV0pO2lmKGQ9ZlswXS1mWzFdLHAmJngmJlMuaW5pdGlhbGl6ZWQmJmQ+MCYmZDw9Uy5mYWtlTXVsdGlTcGFjZU1heCl7Yi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pLFMud2lkdGgrPWZbMF0tUy5sYXN0QWR2YW5jZVdpZHRoLFMuaGVpZ2h0Kz1mWzFdLVMubGFzdEFkdmFuY2VIZWlnaHQsTihmWzBdLVMubGFzdEFkdmFuY2VXaWR0aC0oZlsxXS1TLmxhc3RBZHZhbmNlSGVpZ2h0KSxTLnN0cik7YnJlYWt9TSgpLGIudHJhbnNsYXRlVGV4dExpbmVNYXRyaXgoZlswXSxmWzFdKSxiLnRleHRNYXRyaXg9Yi50ZXh0TGluZU1hdHJpeC5zbGljZSgpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0TGVhZGluZ01vdmVUZXh0Ok0oKSxiLmxlYWRpbmc9LWZbMV0sYi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0pLGIudGV4dE1hdHJpeD1iLnRleHRMaW5lTWF0cml4LnNsaWNlKCk7YnJlYWs7Y2FzZSBpLk9QUy5uZXh0TGluZTpNKCksYi5jYXJyaWFnZVJldHVybigpO2JyZWFrO2Nhc2UgaS5PUFMuc2V0VGV4dE1hdHJpeDppZihkPWIuY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZShmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSkscCYmbnVsbCE9PWQmJlMuaW5pdGlhbGl6ZWQmJmQudmFsdWU+MCYmZC52YWx1ZTw9Uy5mYWtlTXVsdGlTcGFjZU1heCl7Yi50cmFuc2xhdGVUZXh0TGluZU1hdHJpeChkLndpZHRoLGQuaGVpZ2h0KSxTLndpZHRoKz1kLndpZHRoLVMubGFzdEFkdmFuY2VXaWR0aCxTLmhlaWdodCs9ZC5oZWlnaHQtUy5sYXN0QWR2YW5jZUhlaWdodCxOKGQud2lkdGgtUy5sYXN0QWR2YW5jZVdpZHRoLShkLmhlaWdodC1TLmxhc3RBZHZhbmNlSGVpZ2h0KSxTLnN0cik7YnJlYWt9TSgpLGIuc2V0VGV4dE1hdHJpeChmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSksYi5zZXRUZXh0TGluZU1hdHJpeChmWzBdLGZbMV0sZlsyXSxmWzNdLGZbNF0sZls1XSk7YnJlYWs7Y2FzZSBpLk9QUy5zZXRDaGFyU3BhY2luZzpiLmNoYXJTcGFjaW5nPWZbMF07YnJlYWs7Y2FzZSBpLk9QUy5zZXRXb3JkU3BhY2luZzpiLndvcmRTcGFjaW5nPWZbMF07YnJlYWs7Y2FzZSBpLk9QUy5iZWdpblRleHQ6TSgpLGIudGV4dE1hdHJpeD1pLklERU5USVRZX01BVFJJWC5zbGljZSgpLGIudGV4dExpbmVNYXRyaXg9aS5JREVOVElUWV9NQVRSSVguc2xpY2UoKTticmVhaztjYXNlIGkuT1BTLnNob3dTcGFjZWRUZXh0OmZvcih2YXIgRSxSPWZbMF0sRj0wLFU9Ui5sZW5ndGg7RjxVO0YrKylpZigic3RyaW5nIj09dHlwZW9mIFJbRl0pRChSW0ZdKTtlbHNlIGlmKCgwLGkuaXNOdW0pKFJbRl0pKXtJKCksZD1SW0ZdKmIuZm9udFNpemUvMWUzO3ZhciBxPSExO2IuZm9udC52ZXJ0aWNhbD8oRT1kLGIudHJhbnNsYXRlVGV4dE1hdHJpeCgwLEUpLChxPVMudGV4dFJ1bkJyZWFrQWxsb3dlZCYmZD5TLmZha2VNdWx0aVNwYWNlTWF4KXx8KFMuaGVpZ2h0Kz1FKSk6KEU9KGQ9LWQpKmIudGV4dEhTY2FsZSxiLnRyYW5zbGF0ZVRleHRNYXRyaXgoRSwwKSwocT1TLnRleHRSdW5CcmVha0FsbG93ZWQmJmQ+Uy5mYWtlTXVsdGlTcGFjZU1heCl8fChTLndpZHRoKz1FKSkscT9NKCk6ZD4wJiZOKGQsUy5zdHIpfWJyZWFrO2Nhc2UgaS5PUFMuc2hvd1RleHQ6RChmWzBdKTticmVhaztjYXNlIGkuT1BTLm5leHRMaW5lU2hvd1RleHQ6TSgpLGIuY2FycmlhZ2VSZXR1cm4oKSxEKGZbMF0pO2JyZWFrO2Nhc2UgaS5PUFMubmV4dExpbmVTZXRTcGFjaW5nU2hvd1RleHQ6TSgpLGIud29yZFNwYWNpbmc9ZlswXSxiLmNoYXJTcGFjaW5nPWZbMV0sYi5jYXJyaWFnZVJldHVybigpLEQoZlsyXSk7YnJlYWs7Y2FzZSBpLk9QUy5wYWludFhPYmplY3Q6TSgpLEN8fChDPW8uZ2V0KCJYT2JqZWN0Iil8fGwuRGljdC5lbXB0eSk7dmFyIHo9ZlswXS5uYW1lO2lmKHomJnZvaWQgMCE9PVRbel0pYnJlYWs7cmV0dXJuIHZvaWQgbihuZXcgUHJvbWlzZSgoZnVuY3Rpb24oZSx0KXtpZigheil0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiWE9iamVjdCBtdXN0IGJlIHJlZmVycmVkIHRvIGJ5IG5hbWUuIik7dmFyIHI9Qy5nZXQoeik7aWYocil7aWYoISgwLGwuaXNTdHJlYW0pKHIpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBiZSBhIHN0cmVhbSIpO3ZhciBuPXIuZGljdC5nZXQoIlN1YnR5cGUiKTtpZighKDAsbC5pc05hbWUpKG4pKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJYT2JqZWN0IHNob3VsZCBoYXZlIGEgTmFtZSBzdWJ0eXBlIik7aWYoIkZvcm0iIT09bi5uYW1lKXJldHVybiBUW3pdPSEwLHZvaWQgZSgpO3ZhciBzPWMuc3RhdGUuY2xvbmUoKSx1PW5ldyBQKHMpLGY9ci5kaWN0LmdldEFycmF5KCJNYXRyaXgiKTtBcnJheS5pc0FycmF5KGYpJiY2PT09Zi5sZW5ndGgmJnUudHJhbnNmb3JtKGYpLGooKTt2YXIgZD17ZW5xdWV1ZUludm9rZWQ6ITEsZW5xdWV1ZTpmdW5jdGlvbihlLHQpe3RoaXMuZW5xdWV1ZUludm9rZWQ9ITAsZy5lbnF1ZXVlKGUsdCl9LGdldCBkZXNpcmVkU2l6ZSgpe3JldHVybiBnLmRlc2lyZWRTaXplfSxnZXQgcmVhZHkoKXtyZXR1cm4gZy5yZWFkeX19O18uZ2V0VGV4dENvbnRlbnQoe3N0cmVhbTpyLHRhc2s6YSxyZXNvdXJjZXM6ci5kaWN0LmdldCgiUmVzb3VyY2VzIil8fG8sc3RhdGVNYW5hZ2VyOnUsbm9ybWFsaXplV2hpdGVzcGFjZTpoLGNvbWJpbmVUZXh0SXRlbXM6cCxzaW5rOmQsc2VlblN0eWxlczp5fSkudGhlbigoZnVuY3Rpb24oKXtkLmVucXVldWVJbnZva2VkfHwoVFt6XT0hMCksZSgpfSksdCl9ZWxzZSBlKCl9KSkuY2F0Y2goKGZ1bmN0aW9uKGUpe2lmKCEoZSBpbnN0YW5jZW9mIGkuQWJvcnRFeGNlcHRpb24pKXtpZighXy5vcHRpb25zLmlnbm9yZUVycm9ycyl0aHJvdyBlOygwLGkud2FybikoJ2dldFRleHRDb250ZW50IC0gaWdub3JpbmcgWE9iamVjdDogIicuY29uY2F0KGUsJyIuJykpfX0pKSk7Y2FzZSBpLk9QUy5zZXRHU3RhdGU6TSgpO3ZhciBXPWZbMF0sSD1vLmdldCgiRXh0R1N0YXRlIik7aWYoISgwLGwuaXNEaWN0KShIKXx8ISgwLGwuaXNOYW1lKShXKSlicmVhazt2YXIgRz1ILmdldChXLm5hbWUpO2lmKCEoMCxsLmlzRGljdCkoRykpYnJlYWs7dmFyIFY9Ry5nZXQoIkZvbnQiKTtpZihWKXJldHVybiBiLmZvbnROYW1lPW51bGwsYi5mb250U2l6ZT1WWzFdLHZvaWQgbihMKG51bGwsVlswXSkpfWlmKGsuaXRlbXMubGVuZ3RoPj1nLmRlc2lyZWRTaXplKXtzPSEwO2JyZWFrfX1zP24oQSk6KE0oKSxqKCksdCgpKX0pKS5jYXRjaCgoZnVuY3Rpb24oZSl7aWYoIShlIGluc3RhbmNlb2YgaS5BYm9ydEV4Y2VwdGlvbikpe2lmKHQub3B0aW9ucy5pZ25vcmVFcnJvcnMpcmV0dXJuKDAsaS53YXJuKSgnZ2V0VGV4dENvbnRlbnQgLSBpZ25vcmluZyBlcnJvcnMgZHVyaW5nICInLmNvbmNhdChhLm5hbWUsJyIgJykrJ3Rhc2s6ICInLmNvbmNhdChlLCciLicpKSxNKCksdm9pZCBqKCk7dGhyb3cgZX19KSl9LGV4dHJhY3REYXRhU3RydWN0dXJlczpmdW5jdGlvbihlLHQscil7dmFyIG49dGhpcyxhPXRoaXMueHJlZixvPWUuZ2V0KCJUb1VuaWNvZGUiKXx8dC5nZXQoIlRvVW5pY29kZSIpLHM9bz90aGlzLnJlYWRUb1VuaWNvZGUobyk6UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7aWYoci5jb21wb3NpdGUpe3ZhciBmPWUuZ2V0KCJDSURTeXN0ZW1JbmZvIik7KDAsbC5pc0RpY3QpKGYpJiYoci5jaWRTeXN0ZW1JbmZvPXtyZWdpc3RyeTooMCxpLnN0cmluZ1RvUERGU3RyaW5nKShmLmdldCgiUmVnaXN0cnkiKSksb3JkZXJpbmc6KDAsaS5zdHJpbmdUb1BERlN0cmluZykoZi5nZXQoIk9yZGVyaW5nIikpLHN1cHBsZW1lbnQ6Zi5nZXQoIlN1cHBsZW1lbnQiKX0pO3ZhciBoPWUuZ2V0KCJDSURUb0dJRE1hcCIpOygwLGwuaXNTdHJlYW0pKGgpJiYoci5jaWRUb0dpZE1hcD10aGlzLnJlYWRDaWRUb0dpZE1hcChoKSl9dmFyIGQscD1bXSxtPW51bGw7aWYoZS5oYXMoIkVuY29kaW5nIikpe2lmKGQ9ZS5nZXQoIkVuY29kaW5nIiksKDAsbC5pc0RpY3QpKGQpKXtpZihtPWQuZ2V0KCJCYXNlRW5jb2RpbmciKSxtPSgwLGwuaXNOYW1lKShtKT9tLm5hbWU6bnVsbCxkLmhhcygiRGlmZmVyZW5jZXMiKSlmb3IodmFyIGc9ZC5nZXQoIkRpZmZlcmVuY2VzIiksdj0wLHk9MCxiPWcubGVuZ3RoO3k8Yjt5Kyspe3ZhciB3PWEuZmV0Y2hJZlJlZihnW3ldKTtpZigoMCxpLmlzTnVtKSh3KSl2PXc7ZWxzZXtpZighKDAsbC5pc05hbWUpKHcpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJJbnZhbGlkIGVudHJ5IGluICdEaWZmZXJlbmNlcycgYXJyYXk6ICIuY29uY2F0KHcpKTtwW3YrK109dy5uYW1lfX19ZWxzZXtpZighKDAsbC5pc05hbWUpKGQpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJFbmNvZGluZyBpcyBub3QgYSBOYW1lIG5vciBhIERpY3QiKTttPWQubmFtZX0iTWFjUm9tYW5FbmNvZGluZyIhPT1tJiYiTWFjRXhwZXJ0RW5jb2RpbmciIT09bSYmIldpbkFuc2lFbmNvZGluZyIhPT1tJiYobT1udWxsKX1pZihtKXIuZGVmYXVsdEVuY29kaW5nPSgwLHUuZ2V0RW5jb2RpbmcpKG0pLnNsaWNlKCk7ZWxzZXt2YXIgaz0hIShyLmZsYWdzJmMuRm9udEZsYWdzLlN5bWJvbGljKSxTPSEhKHIuZmxhZ3MmYy5Gb250RmxhZ3MuTm9uc3ltYm9saWMpO2Q9dS5TdGFuZGFyZEVuY29kaW5nLCJUcnVlVHlwZSIhPT1yLnR5cGV8fFN8fChkPXUuV2luQW5zaUVuY29kaW5nKSxrJiYoZD11Lk1hY1JvbWFuRW5jb2Rpbmcsci5maWxlfHwoL1N5bWJvbC9pLnRlc3Qoci5uYW1lKT9kPXUuU3ltYm9sU2V0RW5jb2Rpbmc6L0RpbmdiYXRzL2kudGVzdChyLm5hbWUpJiYoZD11LlphcGZEaW5nYmF0c0VuY29kaW5nKSkpLHIuZGVmYXVsdEVuY29kaW5nPWR9cmV0dXJuIHIuZGlmZmVyZW5jZXM9cCxyLmJhc2VFbmNvZGluZ05hbWU9bSxyLmhhc0VuY29kaW5nPSEhbXx8cC5sZW5ndGg+MCxyLmRpY3Q9ZSxzLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLnRvVW5pY29kZT1lLG4uYnVpbGRUb1VuaWNvZGUocil9KSkudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIHIudG9Vbmljb2RlPWUscn0pKX0sX2J1aWxkU2ltcGxlRm9udFRvVW5pY29kZTpmdW5jdGlvbihlKXsoMCxpLmFzc2VydCkoIWUuY29tcG9zaXRlLCJNdXN0IGJlIGEgc2ltcGxlIGZvbnQuIik7dmFyIHQscixuPVtdLGE9ZS5kZWZhdWx0RW5jb2Rpbmcuc2xpY2UoKSxvPWUuYmFzZUVuY29kaW5nTmFtZSxzPWUuZGlmZmVyZW5jZXM7Zm9yKHQgaW4gcykiLm5vdGRlZiIhPT0ocj1zW3RdKSYmKGFbdF09cik7dmFyIGw9KDAsdi5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih0IGluIGEpaWYoIiIhPT0ocj1hW3RdKSlpZih2b2lkIDAhPT1sW3JdKW5bdF09U3RyaW5nLmZyb21DaGFyQ29kZShsW3JdKTtlbHNle3ZhciBoPTA7c3dpdGNoKHJbMF0pe2Nhc2UiRyI6Mz09PXIubGVuZ3RoJiYoaD1wYXJzZUludChyLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiZyI6NT09PXIubGVuZ3RoJiYoaD1wYXJzZUludChyLnN1YnN0cmluZygxKSwxNikpO2JyZWFrO2Nhc2UiQyI6Y2FzZSJjIjpyLmxlbmd0aD49MyYmKGg9K3Iuc3Vic3RyaW5nKDEpKTticmVhaztkZWZhdWx0OnZhciBkPSgwLGYuZ2V0VW5pY29kZUZvckdseXBoKShyLGwpOy0xIT09ZCYmKGg9ZCl9aWYoaCl7aWYobyYmaD09PSt0KXt2YXIgcD0oMCx1LmdldEVuY29kaW5nKShvKTtpZihwJiYocj1wW3RdKSl7blt0XT1TdHJpbmcuZnJvbUNoYXJDb2RlKGxbcl0pO2NvbnRpbnVlfX1uW3RdPVN0cmluZy5mcm9tQ29kZVBvaW50KGgpfX1yZXR1cm4gbmV3IGMuVG9Vbmljb2RlTWFwKG4pfSxidWlsZFRvVW5pY29kZTpmdW5jdGlvbihlKXtpZihlLmhhc0luY2x1ZGVkVG9Vbmljb2RlTWFwPSEhZS50b1VuaWNvZGUmJmUudG9Vbmljb2RlLmxlbmd0aD4wLGUuaGFzSW5jbHVkZWRUb1VuaWNvZGVNYXApcmV0dXJuIWUuY29tcG9zaXRlJiZlLmhhc0VuY29kaW5nJiYoZS5mYWxsYmFja1RvVW5pY29kZT10aGlzLl9idWlsZFNpbXBsZUZvbnRUb1VuaWNvZGUoZSkpLFByb21pc2UucmVzb2x2ZShlLnRvVW5pY29kZSk7aWYoIWUuY29tcG9zaXRlKXJldHVybiBQcm9taXNlLnJlc29sdmUodGhpcy5fYnVpbGRTaW1wbGVGb250VG9Vbmljb2RlKGUpKTtpZihlLmNvbXBvc2l0ZSYmKGUuY01hcC5idWlsdEluQ01hcCYmIShlLmNNYXAgaW5zdGFuY2VvZiBvLklkZW50aXR5Q01hcCl8fCJBZG9iZSI9PT1lLmNpZFN5c3RlbUluZm8ucmVnaXN0cnkmJigiR0IxIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IkNOUzEiPT09ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nfHwiSmFwYW4xIj09PWUuY2lkU3lzdGVtSW5mby5vcmRlcmluZ3x8IktvcmVhMSI9PT1lLmNpZFN5c3RlbUluZm8ub3JkZXJpbmcpKSl7dmFyIHQ9ZS5jaWRTeXN0ZW1JbmZvLnJlZ2lzdHJ5LHI9ZS5jaWRTeXN0ZW1JbmZvLm9yZGVyaW5nLG49bC5OYW1lLmdldCh0KyItIityKyItVUNTMiIpO3JldHVybiBvLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6bixmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbih0KXt2YXIgcj1lLmNNYXAsbj1bXTtyZXR1cm4gci5mb3JFYWNoKChmdW5jdGlvbihlLHIpe2lmKHI+NjU1MzUpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTt2YXIgYT10Lmxvb2t1cChyKTthJiYobltlXT1TdHJpbmcuZnJvbUNoYXJDb2RlKChhLmNoYXJDb2RlQXQoMCk8PDgpK2EuY2hhckNvZGVBdCgxKSkpfSkpLG5ldyBjLlRvVW5pY29kZU1hcChuKX0pKX1yZXR1cm4gUHJvbWlzZS5yZXNvbHZlKG5ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKGUuZmlyc3RDaGFyLGUubGFzdENoYXIpKX0scmVhZFRvVW5pY29kZTpmdW5jdGlvbihlKXt2YXIgdD1lO3JldHVybigwLGwuaXNOYW1lKSh0KT9vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6dCxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtyZXR1cm4gZSBpbnN0YW5jZW9mIG8uSWRlbnRpdHlDTWFwP25ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpOm5ldyBjLlRvVW5pY29kZU1hcChlLmdldE1hcCgpKX0pKTooMCxsLmlzU3RyZWFtKSh0KT9vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6dCxmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXtpZihlIGluc3RhbmNlb2Ygby5JZGVudGl0eUNNYXApcmV0dXJuIG5ldyBjLklkZW50aXR5VG9Vbmljb2RlTWFwKDAsNjU1MzUpO3ZhciB0PW5ldyBBcnJheShlLmxlbmd0aCk7cmV0dXJuIGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxyKXtmb3IodmFyIG49W10sYT0wO2E8ci5sZW5ndGg7YSs9Mil7dmFyIGk9ci5jaGFyQ29kZUF0KGEpPDw4fHIuY2hhckNvZGVBdChhKzEpO2lmKDU1Mjk2PT0oNjM0ODgmaSkpe2ErPTI7dmFyIG89ci5jaGFyQ29kZUF0KGEpPDw4fHIuY2hhckNvZGVBdChhKzEpO24ucHVzaCgoKDEwMjMmaSk8PDEwKSsoMTAyMyZvKSs2NTUzNil9ZWxzZSBuLnB1c2goaSl9dFtlXT1TdHJpbmcuZnJvbUNvZGVQb2ludC5hcHBseShTdHJpbmcsbil9KSksbmV3IGMuVG9Vbmljb2RlTWFwKHQpfSkpOlByb21pc2UucmVzb2x2ZShudWxsKX0scmVhZENpZFRvR2lkTWFwOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1lLmdldEJ5dGVzKCkscj1bXSxuPTAsYT10Lmxlbmd0aDtuPGE7bisrKXt2YXIgaT10W24rK108PDh8dFtuXTswIT09aSYmKHJbbj4+MV09aSl9cmV0dXJuIHJ9LGV4dHJhY3RXaWR0aHM6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGEsaSxvLHMsdSxmLGgsZD10aGlzLnhyZWYscD1bXSxtPTAsZz1bXTtpZihyLmNvbXBvc2l0ZSl7aWYobT1lLmhhcygiRFciKT9lLmdldCgiRFciKToxZTMsaD1lLmdldCgiVyIpKWZvcihhPTAsaT1oLmxlbmd0aDthPGk7YSsrKWlmKHU9ZC5mZXRjaElmUmVmKGhbYSsrXSksZj1kLmZldGNoSWZSZWYoaFthXSksQXJyYXkuaXNBcnJheShmKSlmb3Iobz0wLHM9Zi5sZW5ndGg7bzxzO28rKylwW3UrK109ZC5mZXRjaElmUmVmKGZbb10pO2Vsc2V7dmFyIHY9ZC5mZXRjaElmUmVmKGhbKythXSk7Zm9yKG89dTtvPD1mO28rKylwW29dPXZ9aWYoci52ZXJ0aWNhbCl7dmFyIHk9ZS5nZXRBcnJheSgiRFcyIil8fFs4ODAsLTFlM107aWYobj1beVsxXSwuNSptLHlbMF1dLHk9ZS5nZXQoIlcyIikpZm9yKGE9MCxpPXkubGVuZ3RoO2E8aTthKyspaWYodT1kLmZldGNoSWZSZWYoeVthKytdKSxmPWQuZmV0Y2hJZlJlZih5W2FdKSxBcnJheS5pc0FycmF5KGYpKWZvcihvPTAscz1mLmxlbmd0aDtvPHM7bysrKWdbdSsrXT1bZC5mZXRjaElmUmVmKGZbbysrXSksZC5mZXRjaElmUmVmKGZbbysrXSksZC5mZXRjaElmUmVmKGZbb10pXTtlbHNle3ZhciBiPVtkLmZldGNoSWZSZWYoeVsrK2FdKSxkLmZldGNoSWZSZWYoeVsrK2FdKSxkLmZldGNoSWZSZWYoeVsrK2FdKV07Zm9yKG89dTtvPD1mO28rKylnW29dPWJ9fX1lbHNle3ZhciB3PXIuZmlyc3RDaGFyO2lmKGg9ZS5nZXQoIldpZHRocyIpKXtmb3Iobz13LGE9MCxpPWgubGVuZ3RoO2E8aTthKyspcFtvKytdPWQuZmV0Y2hJZlJlZihoW2FdKTttPXBhcnNlRmxvYXQodC5nZXQoIk1pc3NpbmdXaWR0aCIpKXx8MH1lbHNle3ZhciBrPWUuZ2V0KCJCYXNlRm9udCIpO2lmKCgwLGwuaXNOYW1lKShrKSl7dmFyIFM9dGhpcy5nZXRCYXNlRm9udE1ldHJpY3Moay5uYW1lKTtwPXRoaXMuYnVpbGRDaGFyQ29kZVRvV2lkdGgoUy53aWR0aHMsciksbT1TLmRlZmF1bHRXaWR0aH19fXZhciBfPSEwLHg9bTtmb3IodmFyIEEgaW4gcCl7dmFyIEM9cFtBXTtpZihDKWlmKHgpe2lmKHghPT1DKXtfPSExO2JyZWFrfX1lbHNlIHg9Q31fJiYoci5mbGFnc3w9Yy5Gb250RmxhZ3MuRml4ZWRQaXRjaCksci5kZWZhdWx0V2lkdGg9bSxyLndpZHRocz1wLHIuZGVmYXVsdFZNZXRyaWNzPW4sci52bWV0cmljcz1nfSxpc1NlcmlmRm9udDpmdW5jdGlvbihlKXt2YXIgdD1lLnNwbGl0KCItIilbMF07cmV0dXJuIHQgaW4oMCxoLmdldFNlcmlmRm9udHMpKCl8fC0xIT09dC5zZWFyY2goL3NlcmlmL2dpKX0sZ2V0QmFzZUZvbnRNZXRyaWNzOmZ1bmN0aW9uKGUpe3ZhciB0PTAscj1bXSxuPSExLGE9KDAsaC5nZXRTdGRGb250TWFwKSgpW2VdfHxlLG89KDAseS5nZXRNZXRyaWNzKSgpO2EgaW4gb3x8KGE9dGhpcy5pc1NlcmlmRm9udChlKT8iVGltZXMtUm9tYW4iOiJIZWx2ZXRpY2EiKTt2YXIgcz1vW2FdO3JldHVybigwLGkuaXNOdW0pKHMpPyh0PXMsbj0hMCk6cj1zKCkse2RlZmF1bHRXaWR0aDp0LG1vbm9zcGFjZTpuLHdpZHRoczpyfX0sYnVpbGRDaGFyQ29kZVRvV2lkdGg6ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9T2JqZWN0LmNyZWF0ZShudWxsKSxuPXQuZGlmZmVyZW5jZXMsYT10LmRlZmF1bHRFbmNvZGluZyxpPTA7aTwyNTY7aSsrKWkgaW4gbiYmZVtuW2ldXT9yW2ldPWVbbltpXV06aSBpbiBhJiZlW2FbaV1dJiYocltpXT1lW2FbaV1dKTtyZXR1cm4gcn0scHJlRXZhbHVhdGVGb250OmZ1bmN0aW9uKGUpe3ZhciB0PWUscj1lLmdldCgiU3VidHlwZSIpO2lmKCEoMCxsLmlzTmFtZSkocikpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBTdWJ0eXBlIik7dmFyIG4sYT0hMTtpZigiVHlwZTAiPT09ci5uYW1lKXt2YXIgbz1lLmdldCgiRGVzY2VuZGFudEZvbnRzIik7aWYoIW8pdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoIkRlc2NlbmRhbnQgZm9udHMgYXJlIG5vdCBzcGVjaWZpZWQiKTtpZihyPShlPUFycmF5LmlzQXJyYXkobyk/dGhpcy54cmVmLmZldGNoSWZSZWYob1swXSk6bykuZ2V0KCJTdWJ0eXBlIiksISgwLGwuaXNOYW1lKShyKSl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiaW52YWxpZCBmb250IFN1YnR5cGUiKTthPSEwfXZhciBzPWUuZ2V0KCJGb250RGVzY3JpcHRvciIpO2lmKHMpe3ZhciBjPW5ldyBrLk11cm11ckhhc2gzXzY0LHU9dC5nZXRSYXcoIkVuY29kaW5nIik7aWYoKDAsbC5pc05hbWUpKHUpKWMudXBkYXRlKHUubmFtZSk7ZWxzZSBpZigoMCxsLmlzUmVmKSh1KSljLnVwZGF0ZSh1LnRvU3RyaW5nKCkpO2Vsc2UgaWYoKDAsbC5pc0RpY3QpKHUpKWZvcih2YXIgZj11LmdldEtleXMoKSxoPTAsZD1mLmxlbmd0aDtoPGQ7aCsrKXt2YXIgcD11LmdldFJhdyhmW2hdKTtpZigoMCxsLmlzTmFtZSkocCkpYy51cGRhdGUocC5uYW1lKTtlbHNlIGlmKCgwLGwuaXNSZWYpKHApKWMudXBkYXRlKHAudG9TdHJpbmcoKSk7ZWxzZSBpZihBcnJheS5pc0FycmF5KHApKXtmb3IodmFyIG09cC5sZW5ndGgsZz1uZXcgQXJyYXkobSksdj0wO3Y8bTt2Kyspe3ZhciB5PXBbdl07KDAsbC5pc05hbWUpKHkpP2dbdl09eS5uYW1lOigoMCxpLmlzTnVtKSh5KXx8KDAsbC5pc1JlZikoeSkpJiYoZ1t2XT15LnRvU3RyaW5nKCkpfWMudXBkYXRlKGcuam9pbigpKX19dmFyIGI9ZS5nZXQoIlRvVW5pY29kZSIpfHx0LmdldCgiVG9Vbmljb2RlIik7aWYoKDAsbC5pc1N0cmVhbSkoYikpe3ZhciB3PWIuc3RyfHxiO249dy5idWZmZXI/bmV3IFVpbnQ4QXJyYXkody5idWZmZXIuYnVmZmVyLDAsdy5idWZmZXJMZW5ndGgpOm5ldyBVaW50OEFycmF5KHcuYnl0ZXMuYnVmZmVyLHcuc3RhcnQsdy5lbmQtdy5zdGFydCksYy51cGRhdGUobil9ZWxzZSgwLGwuaXNOYW1lKShiKSYmYy51cGRhdGUoYi5uYW1lKTt2YXIgUz1lLmdldCgiV2lkdGhzIil8fHQuZ2V0KCJXaWR0aHMiKTtTJiYobj1uZXcgVWludDhBcnJheShuZXcgVWludDMyQXJyYXkoUykuYnVmZmVyKSxjLnVwZGF0ZShuKSl9cmV0dXJue2Rlc2NyaXB0b3I6cyxkaWN0OmUsYmFzZURpY3Q6dCxjb21wb3NpdGU6YSx0eXBlOnIubmFtZSxoYXNoOmM/Yy5oZXhkaWdlc3QoKToiIn19LHRyYW5zbGF0ZUZvbnQ6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLG49ZS5iYXNlRGljdCxhPWUuZGljdCxzPWUuY29tcG9zaXRlLHU9ZS5kZXNjcmlwdG9yLGY9ZS50eXBlLGQ9cz82NTUzNToyNTU7aWYoIXUpe2lmKCJUeXBlMyIhPT1mKXt2YXIgcD1hLmdldCgiQmFzZUZvbnQiKTtpZighKDAsbC5pc05hbWUpKHApKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJCYXNlIGZvbnQgaXMgbm90IHNwZWNpZmllZCIpO3A9cC5uYW1lLnJlcGxhY2UoL1ssX10vZywiLSIpO3ZhciBtPXRoaXMuZ2V0QmFzZUZvbnRNZXRyaWNzKHApLGc9cC5zcGxpdCgiLSIpWzBdLHY9KHRoaXMuaXNTZXJpZkZvbnQoZyk/Yy5Gb250RmxhZ3MuU2VyaWY6MCl8KG0ubW9ub3NwYWNlP2MuRm9udEZsYWdzLkZpeGVkUGl0Y2g6MCl8KCgwLGguZ2V0U3ltYm9sc0ZvbnRzKSgpW2ddP2MuRm9udEZsYWdzLlN5bWJvbGljOmMuRm9udEZsYWdzLk5vbnN5bWJvbGljKTtyZXR1cm4gdD17dHlwZTpmLG5hbWU6cCx3aWR0aHM6bS53aWR0aHMsZGVmYXVsdFdpZHRoOm0uZGVmYXVsdFdpZHRoLGZsYWdzOnYsZmlyc3RDaGFyOjAsbGFzdENoYXI6ZH0sdGhpcy5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYSxhLHQpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiBlLndpZHRocz1yLmJ1aWxkQ2hhckNvZGVUb1dpZHRoKG0ud2lkdGhzLGUpLG5ldyBjLkZvbnQocCxudWxsLGUpfSkpfSh1PW5ldyBsLkRpY3QobnVsbCkpLnNldCgiRm9udE5hbWUiLGwuTmFtZS5nZXQoZikpLHUuc2V0KCJGb250QkJveCIsYS5nZXRBcnJheSgiRm9udEJCb3giKSl9dmFyIHk9YS5nZXQoIkZpcnN0Q2hhciIpfHwwLGI9YS5nZXQoIkxhc3RDaGFyIil8fGQsdz11LmdldCgiRm9udE5hbWUiKSxrPWEuZ2V0KCJCYXNlRm9udCIpO2lmKCgwLGkuaXNTdHJpbmcpKHcpJiYodz1sLk5hbWUuZ2V0KHcpKSwoMCxpLmlzU3RyaW5nKShrKSYmKGs9bC5OYW1lLmdldChrKSksIlR5cGUzIiE9PWYpe3ZhciBTPXcmJncubmFtZSxfPWsmJmsubmFtZTtTIT09XyYmKCgwLGkuaW5mbykoIlRoZSBGb250RGVzY3JpcHRvcidzIEZvbnROYW1lIGlzIFwiIi5jb25jYXQoUywnIiBidXQgJykrInNob3VsZCBiZSB0aGUgc2FtZSBhcyB0aGUgRm9udCdzIEJhc2VGb250IFwiIi5jb25jYXQoXywnIi4nKSksUyYmXyYmXy5zdGFydHNXaXRoKFMpJiYodz1rKSl9aWYodz13fHxrLCEoMCxsLmlzTmFtZSkodykpdGhyb3cgbmV3IGkuRm9ybWF0RXJyb3IoImludmFsaWQgZm9udCBuYW1lIik7dmFyIHgsQT11LmdldCgiRm9udEZpbGUiLCJGb250RmlsZTIiLCJGb250RmlsZTMiKTtpZihBJiZBLmRpY3Qpe3ZhciBDPUEuZGljdC5nZXQoIlN1YnR5cGUiKTtDJiYoQz1DLm5hbWUpO3ZhciBQPUEuZGljdC5nZXQoIkxlbmd0aDEiKSxFPUEuZGljdC5nZXQoIkxlbmd0aDIiKSxUPUEuZGljdC5nZXQoIkxlbmd0aDMiKX1pZih0PXt0eXBlOmYsbmFtZTp3Lm5hbWUsc3VidHlwZTpDLGZpbGU6QSxsZW5ndGgxOlAsbGVuZ3RoMjpFLGxlbmd0aDM6VCxsb2FkZWROYW1lOm4ubG9hZGVkTmFtZSxjb21wb3NpdGU6cyx3aWRlQ2hhcnM6cyxmaXhlZFBpdGNoOiExLGZvbnRNYXRyaXg6YS5nZXRBcnJheSgiRm9udE1hdHJpeCIpfHxpLkZPTlRfSURFTlRJVFlfTUFUUklYLGZpcnN0Q2hhcjp5fHwwLGxhc3RDaGFyOmJ8fGQsYmJveDp1LmdldEFycmF5KCJGb250QkJveCIpLGFzY2VudDp1LmdldCgiQXNjZW50IiksZGVzY2VudDp1LmdldCgiRGVzY2VudCIpLHhIZWlnaHQ6dS5nZXQoIlhIZWlnaHQiKSxjYXBIZWlnaHQ6dS5nZXQoIkNhcEhlaWdodCIpLGZsYWdzOnUuZ2V0KCJGbGFncyIpLGl0YWxpY0FuZ2xlOnUuZ2V0KCJJdGFsaWNBbmdsZSIpLGlzVHlwZTNGb250OiExfSxzKXt2YXIgUj1uLmdldCgiRW5jb2RpbmciKTsoMCxsLmlzTmFtZSkoUikmJih0LmNpZEVuY29kaW5nPVIubmFtZSkseD1vLkNNYXBGYWN0b3J5LmNyZWF0ZSh7ZW5jb2Rpbmc6UixmZXRjaEJ1aWx0SW5DTWFwOnRoaXMuZmV0Y2hCdWlsdEluQ01hcCx1c2VDTWFwOm51bGx9KS50aGVuKChmdW5jdGlvbihlKXt0LmNNYXA9ZSx0LnZlcnRpY2FsPXQuY01hcC52ZXJ0aWNhbH0pKX1lbHNlIHg9UHJvbWlzZS5yZXNvbHZlKHZvaWQgMCk7cmV0dXJuIHgudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gci5leHRyYWN0RGF0YVN0cnVjdHVyZXMoYSxuLHQpfSkpLnRoZW4oKGZ1bmN0aW9uKGUpe3JldHVybiByLmV4dHJhY3RXaWR0aHMoYSx1LGUpLCJUeXBlMyI9PT1mJiYoZS5pc1R5cGUzRm9udD0hMCksbmV3IGMuRm9udCh3Lm5hbWUsQSxlKX0pKX19LHIuYnVpbGRGb250UGF0aHM9ZnVuY3Rpb24oZSx0LHIpe2Z1bmN0aW9uIG4odCl7ZS5yZW5kZXJlci5oYXNCdWlsdFBhdGgodCl8fHIuc2VuZCgiY29tbW9ub2JqIixbIiIuY29uY2F0KGUubG9hZGVkTmFtZSwiX3BhdGhfIikuY29uY2F0KHQpLCJGb250UGF0aCIsZS5yZW5kZXJlci5nZXRQYXRoSnModCldKX12YXIgYT0hMCxpPSExLG89dm9pZCAwO3RyeXtmb3IodmFyIHMsbD10W1N5bWJvbC5pdGVyYXRvcl0oKTshKGE9KHM9bC5uZXh0KCkpLmRvbmUpO2E9ITApe3ZhciBjPXMudmFsdWU7bihjLmZvbnRDaGFyKTt2YXIgdT1jLmFjY2VudDt1JiZ1LmZvbnRDaGFyJiZuKHUuZm9udENoYXIpfX1jYXRjaChlKXtpPSEwLG89ZX1maW5hbGx5e3RyeXthfHxudWxsPT1sLnJldHVybnx8bC5yZXR1cm4oKX1maW5hbGx5e2lmKGkpdGhyb3cgb319fSxyfSgpO3QuUGFydGlhbEV2YWx1YXRvcj1BO3ZhciBDPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7dGhpcy5sb2FkZWROYW1lPWUsdGhpcy5mb250PXQsdGhpcy5kaWN0PXIsdGhpcy50eXBlM0xvYWRlZD1udWxsLHRoaXMuc2VudD0hMX1yZXR1cm4gZS5wcm90b3R5cGU9e3NlbmQ6ZnVuY3Rpb24oZSl7dGhpcy5zZW50fHwodGhpcy5zZW50PSEwLGUuc2VuZCgiY29tbW9ub2JqIixbdGhpcy5sb2FkZWROYW1lLCJGb250Iix0aGlzLmZvbnQuZXhwb3J0RGF0YSgpXSkpfSxmYWxsYmFjazpmdW5jdGlvbihlKXtpZih0aGlzLmZvbnQuZGF0YSl7dGhpcy5mb250LmRpc2FibGVGb250RmFjZT0hMDt2YXIgdD10aGlzLmZvbnQuZ2x5cGhDYWNoZVZhbHVlcztBLmJ1aWxkRm9udFBhdGhzKHRoaXMuZm9udCx0LGUpfX0sbG9hZFR5cGUzRGF0YTpmdW5jdGlvbihlLHQscixuKXtpZighdGhpcy5mb250LmlzVHlwZTNGb250KXRocm93IG5ldyBFcnJvcigiTXVzdCBiZSBhIFR5cGUzIGZvbnQuIik7aWYodGhpcy50eXBlM0xvYWRlZClyZXR1cm4gdGhpcy50eXBlM0xvYWRlZDt2YXIgYT1PYmplY3QuY3JlYXRlKGUub3B0aW9ucyk7YS5pZ25vcmVFcnJvcnM9ITE7Zm9yKHZhciBvPWUuY2xvbmUoYSkscz10aGlzLmZvbnQsbD1Qcm9taXNlLnJlc29sdmUoKSxjPXRoaXMuZGljdC5nZXQoIkNoYXJQcm9jcyIpLHU9dGhpcy5kaWN0LmdldCgiUmVzb3VyY2VzIil8fHQsZj1jLmdldEtleXMoKSxoPU9iamVjdC5jcmVhdGUobnVsbCksZD1mdW5jdGlvbigpe3ZhciBlPWZbcF07bD1sLnRoZW4oKGZ1bmN0aW9uKCl7dmFyIHQ9Yy5nZXQoZSksYT1uZXcgUy5PcGVyYXRvckxpc3Q7cmV0dXJuIG8uZ2V0T3BlcmF0b3JMaXN0KHtzdHJlYW06dCx0YXNrOm4scmVzb3VyY2VzOnUsb3BlcmF0b3JMaXN0OmF9KS50aGVuKChmdW5jdGlvbigpe2hbZV09YS5nZXRJUigpLHIuYWRkRGVwZW5kZW5jaWVzKGEuZGVwZW5kZW5jaWVzKX0pKS5jYXRjaCgoZnVuY3Rpb24odCl7KDAsaS53YXJuKSgnVHlwZTMgZm9udCByZXNvdXJjZSAiJy5jb25jYXQoZSwnIiBpcyBub3QgYXZhaWxhYmxlLicpKTt2YXIgcj1uZXcgUy5PcGVyYXRvckxpc3Q7aFtlXT1yLmdldElSKCl9KSl9KSl9LHA9MCxtPWYubGVuZ3RoO3A8bTsrK3ApZCgpO3JldHVybiB0aGlzLnR5cGUzTG9hZGVkPWwudGhlbigoZnVuY3Rpb24oKXtzLmNoYXJQcm9jT3BlcmF0b3JMaXN0PWh9KSksdGhpcy50eXBlM0xvYWRlZH19LGV9KCksUD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5zdGF0ZT1lLHRoaXMuc3RhdGVTdGFjaz1bXX1yZXR1cm4gZS5wcm90b3R5cGU9e3NhdmU6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0YXRlO3RoaXMuc3RhdGVTdGFjay5wdXNoKHRoaXMuc3RhdGUpLHRoaXMuc3RhdGU9ZS5jbG9uZSgpfSxyZXN0b3JlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5zdGF0ZVN0YWNrLnBvcCgpO2UmJih0aGlzLnN0YXRlPWUpfSx0cmFuc2Zvcm06ZnVuY3Rpb24oZSl7dGhpcy5zdGF0ZS5jdG09aS5VdGlsLnRyYW5zZm9ybSh0aGlzLnN0YXRlLmN0bSxlKX19LGV9KCksRT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmN0bT1uZXcgRmxvYXQzMkFycmF5KGkuSURFTlRJVFlfTUFUUklYKSx0aGlzLmZvbnROYW1lPW51bGwsdGhpcy5mb250U2l6ZT0wLHRoaXMuZm9udD1udWxsLHRoaXMuZm9udE1hdHJpeD1pLkZPTlRfSURFTlRJVFlfTUFUUklYLHRoaXMudGV4dE1hdHJpeD1pLklERU5USVRZX01BVFJJWC5zbGljZSgpLHRoaXMudGV4dExpbmVNYXRyaXg9aS5JREVOVElUWV9NQVRSSVguc2xpY2UoKSx0aGlzLmNoYXJTcGFjaW5nPTAsdGhpcy53b3JkU3BhY2luZz0wLHRoaXMubGVhZGluZz0wLHRoaXMudGV4dEhTY2FsZT0xLHRoaXMudGV4dFJpc2U9MH1yZXR1cm4gZS5wcm90b3R5cGU9e3NldFRleHRNYXRyaXg6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dE1hdHJpeDtvWzBdPWUsb1sxXT10LG9bMl09cixvWzNdPW4sb1s0XT1hLG9bNV09aX0sc2V0VGV4dExpbmVNYXRyaXg6ZnVuY3Rpb24oZSx0LHIsbixhLGkpe3ZhciBvPXRoaXMudGV4dExpbmVNYXRyaXg7b1swXT1lLG9bMV09dCxvWzJdPXIsb1szXT1uLG9bNF09YSxvWzVdPWl9LHRyYW5zbGF0ZVRleHRNYXRyaXg6ZnVuY3Rpb24oZSx0KXt2YXIgcj10aGlzLnRleHRNYXRyaXg7cls0XT1yWzBdKmUrclsyXSp0K3JbNF0scls1XT1yWzFdKmUrclszXSp0K3JbNV19LHRyYW5zbGF0ZVRleHRMaW5lTWF0cml4OmZ1bmN0aW9uKGUsdCl7dmFyIHI9dGhpcy50ZXh0TGluZU1hdHJpeDtyWzRdPXJbMF0qZStyWzJdKnQrcls0XSxyWzVdPXJbMV0qZStyWzNdKnQrcls1XX0sY2FsY1RleHRMaW5lTWF0cml4QWR2YW5jZTpmdW5jdGlvbihlLHQscixuLGEsaSl7dmFyIG89dGhpcy5mb250O2lmKCFvKXJldHVybiBudWxsO3ZhciBzPXRoaXMudGV4dExpbmVNYXRyaXg7aWYoZSE9PXNbMF18fHQhPT1zWzFdfHxyIT09c1syXXx8biE9PXNbM10pcmV0dXJuIG51bGw7dmFyIGw9YS1zWzRdLGM9aS1zWzVdO2lmKG8udmVydGljYWwmJjAhPT1sfHwhby52ZXJ0aWNhbCYmMCE9PWMpcmV0dXJuIG51bGw7dmFyIHUsZixoPWUqbi10KnI7cmV0dXJuIG8udmVydGljYWw/KHU9LWMqci9oLGY9YyplL2gpOih1PWwqbi9oLGY9LWwqdC9oKSx7d2lkdGg6dSxoZWlnaHQ6Zix2YWx1ZTpvLnZlcnRpY2FsP2Y6dX19LGNhbGNSZW5kZXJNYXRyaXg6ZnVuY3Rpb24oZSl7dmFyIHQ9W3RoaXMuZm9udFNpemUqdGhpcy50ZXh0SFNjYWxlLDAsMCx0aGlzLmZvbnRTaXplLDAsdGhpcy50ZXh0UmlzZV07cmV0dXJuIGkuVXRpbC50cmFuc2Zvcm0oZSxpLlV0aWwudHJhbnNmb3JtKHRoaXMudGV4dE1hdHJpeCx0KSl9LGNhcnJpYWdlUmV0dXJuOmZ1bmN0aW9uKCl7dGhpcy50cmFuc2xhdGVUZXh0TGluZU1hdHJpeCgwLC10aGlzLmxlYWRpbmcpLHRoaXMudGV4dE1hdHJpeD10aGlzLnRleHRMaW5lTWF0cml4LnNsaWNlKCl9LGNsb25lOmZ1bmN0aW9uKCl7dmFyIGU9T2JqZWN0LmNyZWF0ZSh0aGlzKTtyZXR1cm4gZS50ZXh0TWF0cml4PXRoaXMudGV4dE1hdHJpeC5zbGljZSgpLGUudGV4dExpbmVNYXRyaXg9dGhpcy50ZXh0TGluZU1hdHJpeC5zbGljZSgpLGUuZm9udE1hdHJpeD10aGlzLmZvbnRNYXRyaXguc2xpY2UoKSxlfX0sZX0oKSxUPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuY3RtPW5ldyBGbG9hdDMyQXJyYXkoaS5JREVOVElUWV9NQVRSSVgpLHRoaXMuZm9udD1udWxsLHRoaXMudGV4dFJlbmRlcmluZ01vZGU9aS5UZXh0UmVuZGVyaW5nTW9kZS5GSUxMLHRoaXMuZmlsbENvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheSx0aGlzLnN0cm9rZUNvbG9yU3BhY2U9Zy5Db2xvclNwYWNlLnNpbmdsZXRvbnMuZ3JheX1yZXR1cm4gZS5wcm90b3R5cGU9e2Nsb25lOmZ1bmN0aW9uKCl7cmV0dXJuIE9iamVjdC5jcmVhdGUodGhpcyl9fSxlfSgpLFI9ZnVuY3Rpb24oKXt2YXIgZT0oMCxpLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uudz17aWQ6aS5PUFMuc2V0TGluZVdpZHRoLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuSj17aWQ6aS5PUFMuc2V0TGluZUNhcCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmo9e2lkOmkuT1BTLnNldExpbmVKb2luLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuTT17aWQ6aS5PUFMuc2V0TWl0ZXJMaW1pdCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmQ9e2lkOmkuT1BTLnNldERhc2gsbnVtQXJnczoyLHZhcmlhYmxlQXJnczohMX0sZS5yaT17aWQ6aS5PUFMuc2V0UmVuZGVyaW5nSW50ZW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuaT17aWQ6aS5PUFMuc2V0RmxhdG5lc3MsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5ncz17aWQ6aS5PUFMuc2V0R1N0YXRlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUucT17aWQ6aS5PUFMuc2F2ZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlE9e2lkOmkuT1BTLnJlc3RvcmUsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5jbT17aWQ6aS5PUFMudHJhbnNmb3JtLG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGUubT17aWQ6aS5PUFMubW92ZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUubD17aWQ6aS5PUFMubGluZVRvLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuYz17aWQ6aS5PUFMuY3VydmVUbyxudW1BcmdzOjYsdmFyaWFibGVBcmdzOiExfSxlLnY9e2lkOmkuT1BTLmN1cnZlVG8yLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUueT17aWQ6aS5PUFMuY3VydmVUbzMsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5oPXtpZDppLk9QUy5jbG9zZVBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5yZT17aWQ6aS5PUFMucmVjdGFuZ2xlLG51bUFyZ3M6NCx2YXJpYWJsZUFyZ3M6ITF9LGUuUz17aWQ6aS5PUFMuc3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUucz17aWQ6aS5PUFMuY2xvc2VTdHJva2UsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5mPXtpZDppLk9QUy5maWxsLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRj17aWQ6aS5PUFMuZmlsbCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJmKiJdPXtpZDppLk9QUy5lb0ZpbGwsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5CPXtpZDppLk9QUy5maWxsU3Ryb2tlLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIkIqIl09e2lkOmkuT1BTLmVvRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLmI9e2lkOmkuT1BTLmNsb3NlRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlWyJiKiJdPXtpZDppLk9QUy5jbG9zZUVPRmlsbFN0cm9rZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLm49e2lkOmkuT1BTLmVuZFBhdGgsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5XPXtpZDppLk9QUy5jbGlwLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGVbIlcqIl09e2lkOmkuT1BTLmVvQ2xpcCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJUPXtpZDppLk9QUy5iZWdpblRleHQsbnVtQXJnczowLHZhcmlhYmxlQXJnczohMX0sZS5FVD17aWQ6aS5PUFMuZW5kVGV4dCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLlRjPXtpZDppLk9QUy5zZXRDaGFyU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR3PXtpZDppLk9QUy5zZXRXb3JkU3BhY2luZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlR6PXtpZDppLk9QUy5zZXRIU2NhbGUsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5UTD17aWQ6aS5PUFMuc2V0TGVhZGluZyxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlRmPXtpZDppLk9QUy5zZXRGb250LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVHI9e2lkOmkuT1BTLnNldFRleHRSZW5kZXJpbmdNb2RlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVHM9e2lkOmkuT1BTLnNldFRleHRSaXNlLG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVGQ9e2lkOmkuT1BTLm1vdmVUZXh0LG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuVEQ9e2lkOmkuT1BTLnNldExlYWRpbmdNb3ZlVGV4dCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLlRtPXtpZDppLk9QUy5zZXRUZXh0TWF0cml4LG51bUFyZ3M6Nix2YXJpYWJsZUFyZ3M6ITF9LGVbIlQqIl09e2lkOmkuT1BTLm5leHRMaW5lLG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuVGo9e2lkOmkuT1BTLnNob3dUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuVEo9e2lkOmkuT1BTLnNob3dTcGFjZWRUZXh0LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGVbIiciXT17aWQ6aS5PUFMubmV4dExpbmVTaG93VGV4dCxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlWyciJ109e2lkOmkuT1BTLm5leHRMaW5lU2V0U3BhY2luZ1Nob3dUZXh0LG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUuZDA9e2lkOmkuT1BTLnNldENoYXJXaWR0aCxudW1BcmdzOjIsdmFyaWFibGVBcmdzOiExfSxlLmQxPXtpZDppLk9QUy5zZXRDaGFyV2lkdGhBbmRCb3VuZHMsbnVtQXJnczo2LHZhcmlhYmxlQXJnczohMX0sZS5DUz17aWQ6aS5PUFMuc2V0U3Ryb2tlQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmNzPXtpZDppLk9QUy5zZXRGaWxsQ29sb3JTcGFjZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLlNDPXtpZDppLk9QUy5zZXRTdHJva2VDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiEwfSxlLlNDTj17aWQ6aS5PUFMuc2V0U3Ryb2tlQ29sb3JOLG51bUFyZ3M6MzMsdmFyaWFibGVBcmdzOiEwfSxlLnNjPXtpZDppLk9QUy5zZXRGaWxsQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMH0sZS5zY249e2lkOmkuT1BTLnNldEZpbGxDb2xvck4sbnVtQXJnczozMyx2YXJpYWJsZUFyZ3M6ITB9LGUuRz17aWQ6aS5PUFMuc2V0U3Ryb2tlR3JheSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLmc9e2lkOmkuT1BTLnNldEZpbGxHcmF5LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuUkc9e2lkOmkuT1BTLnNldFN0cm9rZVJHQkNvbG9yLG51bUFyZ3M6Myx2YXJpYWJsZUFyZ3M6ITF9LGUucmc9e2lkOmkuT1BTLnNldEZpbGxSR0JDb2xvcixudW1BcmdzOjMsdmFyaWFibGVBcmdzOiExfSxlLks9e2lkOmkuT1BTLnNldFN0cm9rZUNNWUtDb2xvcixudW1BcmdzOjQsdmFyaWFibGVBcmdzOiExfSxlLms9e2lkOmkuT1BTLnNldEZpbGxDTVlLQ29sb3IsbnVtQXJnczo0LHZhcmlhYmxlQXJnczohMX0sZS5zaD17aWQ6aS5PUFMuc2hhZGluZ0ZpbGwsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CST17aWQ6aS5PUFMuYmVnaW5JbmxpbmVJbWFnZSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLklEPXtpZDppLk9QUy5iZWdpbkltYWdlRGF0YSxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkVJPXtpZDppLk9QUy5lbmRJbmxpbmVJbWFnZSxudW1BcmdzOjEsdmFyaWFibGVBcmdzOiExfSxlLkRvPXtpZDppLk9QUy5wYWludFhPYmplY3QsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5NUD17aWQ6aS5PUFMubWFya1BvaW50LG51bUFyZ3M6MSx2YXJpYWJsZUFyZ3M6ITF9LGUuRFA9e2lkOmkuT1BTLm1hcmtQb2ludFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuQk1DPXtpZDppLk9QUy5iZWdpbk1hcmtlZENvbnRlbnQsbnVtQXJnczoxLHZhcmlhYmxlQXJnczohMX0sZS5CREM9e2lkOmkuT1BTLmJlZ2luTWFya2VkQ29udGVudFByb3BzLG51bUFyZ3M6Mix2YXJpYWJsZUFyZ3M6ITF9LGUuRU1DPXtpZDppLk9QUy5lbmRNYXJrZWRDb250ZW50LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuQlg9e2lkOmkuT1BTLmJlZ2luQ29tcGF0LG51bUFyZ3M6MCx2YXJpYWJsZUFyZ3M6ITF9LGUuRVg9e2lkOmkuT1BTLmVuZENvbXBhdCxudW1BcmdzOjAsdmFyaWFibGVBcmdzOiExfSxlLkJNPW51bGwsZS5CRD1udWxsLGUudHJ1ZT1udWxsLGUuZmE9bnVsbCxlLmZhbD1udWxsLGUuZmFscz1udWxsLGUuZmFsc2U9bnVsbCxlLm51PW51bGwsZS5udWw9bnVsbCxlLm51bGw9bnVsbH0pKTtmdW5jdGlvbiB0KHQscixuKXt0aGlzLm9wTWFwPWUoKSx0aGlzLnBhcnNlcj1uZXcgcC5QYXJzZXIobmV3IHAuTGV4ZXIodCx0aGlzLm9wTWFwKSwhMSxyKSx0aGlzLnN0YXRlTWFuYWdlcj1uLHRoaXMubm9uUHJvY2Vzc2VkQXJncz1bXSx0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz0wfXJldHVybiB0LnByb3RvdHlwZT17Z2V0IHNhdmVkU3RhdGVzRGVwdGgoKXtyZXR1cm4gdGhpcy5zdGF0ZU1hbmFnZXIuc3RhdGVTdGFjay5sZW5ndGh9LHJlYWQ6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PWUuYXJnczs7KXt2YXIgcj10aGlzLnBhcnNlci5nZXRPYmooKTtpZigoMCxsLmlzQ21kKShyKSl7dmFyIG49ci5jbWQsYT10aGlzLm9wTWFwW25dO2lmKCFhKXsoMCxpLndhcm4pKCdVbmtub3duIGNvbW1hbmQgIicuY29uY2F0KG4sJyIuJykpO2NvbnRpbnVlfXZhciBvPWEuaWQscz1hLm51bUFyZ3MsYz1udWxsIT09dD90Lmxlbmd0aDowO2lmKGEudmFyaWFibGVBcmdzKWM+cyYmKDAsaS5pbmZvKSgiQ29tbWFuZCAiLmNvbmNhdChuLCI6IGV4cGVjdGVkIFswLCAiKS5jb25jYXQocywiXSBhcmdzLCAiKSsiYnV0IHJlY2VpdmVkICIuY29uY2F0KGMsIiBhcmdzLiIpKTtlbHNle2lmKGMhPT1zKXtmb3IodmFyIHU9dGhpcy5ub25Qcm9jZXNzZWRBcmdzO2M+czspdS5wdXNoKHQuc2hpZnQoKSksYy0tO2Zvcig7YzxzJiYwIT09dS5sZW5ndGg7KW51bGw9PT10JiYodD1bXSksdC51bnNoaWZ0KHUucG9wKCkpLGMrK31pZihjPHMpe3ZhciBmPSJjb21tYW5kICIuY29uY2F0KG4sIjogZXhwZWN0ZWQgIikuY29uY2F0KHMsIiBhcmdzLCAiKSsiYnV0IHJlY2VpdmVkICIuY29uY2F0KGMsIiBhcmdzLiIpO2lmKG8+PWkuT1BTLm1vdmVUbyYmbzw9aS5PUFMuZW5kUGF0aCYmKyt0aGlzLl9udW1JbnZhbGlkUGF0aE9QUz4yMCl0aHJvdyBuZXcgaS5Gb3JtYXRFcnJvcigiSW52YWxpZCAiLmNvbmNhdChmKSk7KDAsaS53YXJuKSgiU2tpcHBpbmcgIi5jb25jYXQoZikpLG51bGwhPT10JiYodC5sZW5ndGg9MCk7Y29udGludWV9fXJldHVybiB0aGlzLnByZXByb2Nlc3NDb21tYW5kKG8sdCksZS5mbj1vLGUuYXJncz10LCEwfWlmKCgwLGwuaXNFT0YpKHIpKXJldHVybiExO2lmKG51bGwhPT1yJiYobnVsbD09PXQmJih0PVtdKSx0LnB1c2gociksdC5sZW5ndGg+MzMpKXRocm93IG5ldyBpLkZvcm1hdEVycm9yKCJUb28gbWFueSBhcmd1bWVudHMiKX19LHByZXByb2Nlc3NDb21tYW5kOmZ1bmN0aW9uKGUsdCl7c3dpdGNoKDB8ZSl7Y2FzZSBpLk9QUy5zYXZlOnRoaXMuc3RhdGVNYW5hZ2VyLnNhdmUoKTticmVhaztjYXNlIGkuT1BTLnJlc3RvcmU6dGhpcy5zdGF0ZU1hbmFnZXIucmVzdG9yZSgpO2JyZWFrO2Nhc2UgaS5PUFMudHJhbnNmb3JtOnRoaXMuc3RhdGVNYW5hZ2VyLnRyYW5zZm9ybSh0KX19fSx0fSgpfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkNNYXBGYWN0b3J5PXQuSWRlbnRpdHlDTWFwPXQuQ01hcD12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KSxpPXIoMTU2KSxvPXIoMTU3KTtmdW5jdGlvbiBzKGUpe3JldHVybihzPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gbChlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PXModCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiBjKGUpe3JldHVybihjPU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiB1KGUsdCl7cmV0dXJuKHU9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGYoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBoKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gZChlLHQscil7cmV0dXJuIHQmJmgoZS5wcm90b3R5cGUsdCksciYmaChlLHIpLGV9dmFyIHA9WyJBZG9iZS1HQjEtVUNTMiIsIkFkb2JlLUNOUzEtVUNTMiIsIkFkb2JlLUphcGFuMS1VQ1MyIiwiQWRvYmUtS29yZWExLVVDUzIiLCI3OC1FVUMtSCIsIjc4LUVVQy1WIiwiNzgtSCIsIjc4LVJLU0otSCIsIjc4LVJLU0otViIsIjc4LVYiLCI3OG1zLVJLU0otSCIsIjc4bXMtUktTSi1WIiwiODNwdi1SS1NKLUgiLCI5MG1zLVJLU0otSCIsIjkwbXMtUktTSi1WIiwiOTBtc3AtUktTSi1IIiwiOTBtc3AtUktTSi1WIiwiOTBwdi1SS1NKLUgiLCI5MHB2LVJLU0otViIsIkFkZC1IIiwiQWRkLVJLU0otSCIsIkFkZC1SS1NKLVYiLCJBZGQtViIsIkFkb2JlLUNOUzEtMCIsIkFkb2JlLUNOUzEtMSIsIkFkb2JlLUNOUzEtMiIsIkFkb2JlLUNOUzEtMyIsIkFkb2JlLUNOUzEtNCIsIkFkb2JlLUNOUzEtNSIsIkFkb2JlLUNOUzEtNiIsIkFkb2JlLUdCMS0wIiwiQWRvYmUtR0IxLTEiLCJBZG9iZS1HQjEtMiIsIkFkb2JlLUdCMS0zIiwiQWRvYmUtR0IxLTQiLCJBZG9iZS1HQjEtNSIsIkFkb2JlLUphcGFuMS0wIiwiQWRvYmUtSmFwYW4xLTEiLCJBZG9iZS1KYXBhbjEtMiIsIkFkb2JlLUphcGFuMS0zIiwiQWRvYmUtSmFwYW4xLTQiLCJBZG9iZS1KYXBhbjEtNSIsIkFkb2JlLUphcGFuMS02IiwiQWRvYmUtS29yZWExLTAiLCJBZG9iZS1Lb3JlYTEtMSIsIkFkb2JlLUtvcmVhMS0yIiwiQjUtSCIsIkI1LVYiLCJCNXBjLUgiLCJCNXBjLVYiLCJDTlMtRVVDLUgiLCJDTlMtRVVDLVYiLCJDTlMxLUgiLCJDTlMxLVYiLCJDTlMyLUgiLCJDTlMyLVYiLCJFVEhLLUI1LUgiLCJFVEhLLUI1LVYiLCJFVGVuLUI1LUgiLCJFVGVuLUI1LVYiLCJFVGVubXMtQjUtSCIsIkVUZW5tcy1CNS1WIiwiRVVDLUgiLCJFVUMtViIsIkV4dC1IIiwiRXh0LVJLU0otSCIsIkV4dC1SS1NKLVYiLCJFeHQtViIsIkdCLUVVQy1IIiwiR0ItRVVDLVYiLCJHQi1IIiwiR0ItViIsIkdCSy1FVUMtSCIsIkdCSy1FVUMtViIsIkdCSzJLLUgiLCJHQksySy1WIiwiR0JLcC1FVUMtSCIsIkdCS3AtRVVDLVYiLCJHQlQtRVVDLUgiLCJHQlQtRVVDLVYiLCJHQlQtSCIsIkdCVC1WIiwiR0JUcGMtRVVDLUgiLCJHQlRwYy1FVUMtViIsIkdCcGMtRVVDLUgiLCJHQnBjLUVVQy1WIiwiSCIsIkhLZGxhLUI1LUgiLCJIS2RsYS1CNS1WIiwiSEtkbGItQjUtSCIsIkhLZGxiLUI1LVYiLCJIS2djY3MtQjUtSCIsIkhLZ2Njcy1CNS1WIiwiSEttMzE0LUI1LUgiLCJIS20zMTQtQjUtViIsIkhLbTQ3MS1CNS1IIiwiSEttNDcxLUI1LVYiLCJIS3Njcy1CNS1IIiwiSEtzY3MtQjUtViIsIkhhbmtha3UiLCJIaXJhZ2FuYSIsIktTQy1FVUMtSCIsIktTQy1FVUMtViIsIktTQy1IIiwiS1NDLUpvaGFiLUgiLCJLU0MtSm9oYWItViIsIktTQy1WIiwiS1NDbXMtVUhDLUgiLCJLU0Ntcy1VSEMtSFctSCIsIktTQ21zLVVIQy1IVy1WIiwiS1NDbXMtVUhDLVYiLCJLU0NwYy1FVUMtSCIsIktTQ3BjLUVVQy1WIiwiS2F0YWthbmEiLCJOV1AtSCIsIk5XUC1WIiwiUktTSi1IIiwiUktTSi1WIiwiUm9tYW4iLCJVbmlDTlMtVUNTMi1IIiwiVW5pQ05TLVVDUzItViIsIlVuaUNOUy1VVEYxNi1IIiwiVW5pQ05TLVVURjE2LVYiLCJVbmlDTlMtVVRGMzItSCIsIlVuaUNOUy1VVEYzMi1WIiwiVW5pQ05TLVVURjgtSCIsIlVuaUNOUy1VVEY4LVYiLCJVbmlHQi1VQ1MyLUgiLCJVbmlHQi1VQ1MyLVYiLCJVbmlHQi1VVEYxNi1IIiwiVW5pR0ItVVRGMTYtViIsIlVuaUdCLVVURjMyLUgiLCJVbmlHQi1VVEYzMi1WIiwiVW5pR0ItVVRGOC1IIiwiVW5pR0ItVVRGOC1WIiwiVW5pSklTLVVDUzItSCIsIlVuaUpJUy1VQ1MyLUhXLUgiLCJVbmlKSVMtVUNTMi1IVy1WIiwiVW5pSklTLVVDUzItViIsIlVuaUpJUy1VVEYxNi1IIiwiVW5pSklTLVVURjE2LVYiLCJVbmlKSVMtVVRGMzItSCIsIlVuaUpJUy1VVEYzMi1WIiwiVW5pSklTLVVURjgtSCIsIlVuaUpJUy1VVEY4LVYiLCJVbmlKSVMyMDA0LVVURjE2LUgiLCJVbmlKSVMyMDA0LVVURjE2LVYiLCJVbmlKSVMyMDA0LVVURjMyLUgiLCJVbmlKSVMyMDA0LVVURjMyLVYiLCJVbmlKSVMyMDA0LVVURjgtSCIsIlVuaUpJUzIwMDQtVVRGOC1WIiwiVW5pSklTUHJvLVVDUzItSFctViIsIlVuaUpJU1Byby1VQ1MyLVYiLCJVbmlKSVNQcm8tVVRGOC1WIiwiVW5pSklTWDAyMTMtVVRGMzItSCIsIlVuaUpJU1gwMjEzLVVURjMyLVYiLCJVbmlKSVNYMDIxMzIwMDQtVVRGMzItSCIsIlVuaUpJU1gwMjEzMjAwNC1VVEYzMi1WIiwiVW5pS1MtVUNTMi1IIiwiVW5pS1MtVUNTMi1WIiwiVW5pS1MtVVRGMTYtSCIsIlVuaUtTLVVURjE2LVYiLCJVbmlLUy1VVEYzMi1IIiwiVW5pS1MtVVRGMzItViIsIlVuaUtTLVVURjgtSCIsIlVuaUtTLVVURjgtViIsIlYiLCJXUC1TeW1ib2wiXSxtPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3ZhciB0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF07Zih0aGlzLGUpLHRoaXMuY29kZXNwYWNlUmFuZ2VzPVtbXSxbXSxbXSxbXV0sdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXM9MCx0aGlzLl9tYXA9W10sdGhpcy5uYW1lPSIiLHRoaXMudmVydGljYWw9ITEsdGhpcy51c2VDTWFwPW51bGwsdGhpcy5idWlsdEluQ01hcD10fXJldHVybiBkKGUsW3trZXk6ImFkZENvZGVzcGFjZVJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7dGhpcy5jb2Rlc3BhY2VSYW5nZXNbZS0xXS5wdXNoKHQsciksdGhpcy5udW1Db2Rlc3BhY2VSYW5nZXMrK319LHtrZXk6Im1hcENpZFJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKDtlPD10Oyl0aGlzLl9tYXBbZSsrXT1yKyt9fSx7a2V5OiJtYXBCZlJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPXIubGVuZ3RoLTE7ZTw9dDspdGhpcy5fbWFwW2UrK109cixyPXIuc3Vic3RyaW5nKDAsbikrU3RyaW5nLmZyb21DaGFyQ29kZShyLmNoYXJDb2RlQXQobikrMSl9fSx7a2V5OiJtYXBCZlJhbmdlVG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj0wLGE9ci5sZW5ndGg7ZTw9dCYmbjxhOyl0aGlzLl9tYXBbZV09cltuKytdLCsrZX19LHtrZXk6Im1hcE9uZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXt0aGlzLl9tYXBbZV09dH19LHtrZXk6Imxvb2t1cCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuX21hcFtlXX19LHtrZXk6ImNvbnRhaW5zIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gdm9pZCAwIT09dGhpcy5fbWFwW2VdfX0se2tleToiZm9yRWFjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcy5fbWFwLHI9dC5sZW5ndGg7aWYocjw9NjU1MzYpZm9yKHZhciBuPTA7bjxyO24rKyl2b2lkIDAhPT10W25dJiZlKG4sdFtuXSk7ZWxzZSBmb3IodmFyIGEgaW4gdCllKGEsdFthXSl9fSx7a2V5OiJjaGFyQ29kZU9mIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD10aGlzLl9tYXA7aWYodC5sZW5ndGg8PTY1NTM2KXJldHVybiB0LmluZGV4T2YoZSk7Zm9yKHZhciByIGluIHQpaWYodFtyXT09PWUpcmV0dXJuIDB8cjtyZXR1cm4tMX19LHtrZXk6ImdldE1hcCIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwfX0se2tleToicmVhZENoYXJDb2RlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7Zm9yKHZhciBuPTAsYT10aGlzLmNvZGVzcGFjZVJhbmdlcyxpPTAsbz1hLmxlbmd0aDtpPG87aSsrKXtuPShuPDw4fGUuY2hhckNvZGVBdCh0K2kpKT4+PjA7Zm9yKHZhciBzPWFbaV0sbD0wLGM9cy5sZW5ndGg7bDxjOyl7dmFyIHU9c1tsKytdLGY9c1tsKytdO2lmKG4+PXUmJm48PWYpcmV0dXJuIHIuY2hhcmNvZGU9bix2b2lkKHIubGVuZ3RoPWkrMSl9fXIuY2hhcmNvZGU9MCxyLmxlbmd0aD0xfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5fbWFwLmxlbmd0aH19LHtrZXk6ImlzSWRlbnRpdHlDTWFwIixnZXQ6ZnVuY3Rpb24oKXtpZigiSWRlbnRpdHktSCIhPT10aGlzLm5hbWUmJiJJZGVudGl0eS1WIiE9PXRoaXMubmFtZSlyZXR1cm4hMTtpZig2NTUzNiE9PXRoaXMuX21hcC5sZW5ndGgpcmV0dXJuITE7Zm9yKHZhciBlPTA7ZTw2NTUzNjtlKyspaWYodGhpcy5fbWFwW2VdIT09ZSlyZXR1cm4hMTtyZXR1cm4hMH19XSksZX0oKTt0LkNNYXA9bTt2YXIgZz1mdW5jdGlvbihlKXtmdW5jdGlvbiB0KGUscil7dmFyIG47cmV0dXJuIGYodGhpcyx0KSwobj1sKHRoaXMsYyh0KS5jYWxsKHRoaXMpKSkudmVydGljYWw9ZSxuLmFkZENvZGVzcGFjZVJhbmdlKHIsMCw2NTUzNSksbn1yZXR1cm4gZnVuY3Rpb24oZSx0KXtpZigiZnVuY3Rpb24iIT10eXBlb2YgdCYmbnVsbCE9PXQpdGhyb3cgbmV3IFR5cGVFcnJvcigiU3VwZXIgZXhwcmVzc2lvbiBtdXN0IGVpdGhlciBiZSBudWxsIG9yIGEgZnVuY3Rpb24iKTtlLnByb3RvdHlwZT1PYmplY3QuY3JlYXRlKHQmJnQucHJvdG90eXBlLHtjb25zdHJ1Y3Rvcjp7dmFsdWU6ZSx3cml0YWJsZTohMCxjb25maWd1cmFibGU6ITB9fSksdCYmdShlLHQpfSh0LGUpLGQodCxbe2tleToibWFwQ2lkUmFuZ2UiLHZhbHVlOmZ1bmN0aW9uKGUsdCxyKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZFJhbmdlIil9fSx7a2V5OiJtYXBCZlJhbmdlIix2YWx1ZTpmdW5jdGlvbihlLHQscil7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgY2FsbCBtYXBCZlJhbmdlIil9fSx7a2V5OiJtYXBCZlJhbmdlVG9BcnJheSIsdmFsdWU6ZnVuY3Rpb24oZSx0LHIpeygwLG4udW5yZWFjaGFibGUpKCJzaG91bGQgbm90IGNhbGwgbWFwQmZSYW5nZVRvQXJyYXkiKX19LHtrZXk6Im1hcE9uZSIsdmFsdWU6ZnVuY3Rpb24oZSx0KXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIG1hcENpZE9uZSIpfX0se2tleToibG9va3VwIix2YWx1ZTpmdW5jdGlvbihlKXtyZXR1cm4gTnVtYmVyLmlzSW50ZWdlcihlKSYmZTw9NjU1MzU/ZTp2b2lkIDB9fSx7a2V5OiJjb250YWlucyIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU8PTY1NTM1fX0se2tleToiZm9yRWFjaCIsdmFsdWU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTA7dDw9NjU1MzU7dCsrKWUodCx0KX19LHtrZXk6ImNoYXJDb2RlT2YiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBOdW1iZXIuaXNJbnRlZ2VyKGUpJiZlPD02NTUzNT9lOi0xfX0se2tleToiZ2V0TWFwIix2YWx1ZTpmdW5jdGlvbigpe2Zvcih2YXIgZT1uZXcgQXJyYXkoNjU1MzYpLHQ9MDt0PD02NTUzNTt0KyspZVt0XT10O3JldHVybiBlfX0se2tleToibGVuZ3RoIixnZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gNjU1MzZ9fSx7a2V5OiJpc0lkZW50aXR5Q01hcCIsZ2V0OmZ1bmN0aW9uKCl7KDAsbi51bnJlYWNoYWJsZSkoInNob3VsZCBub3QgYWNjZXNzIC5pc0lkZW50aXR5Q01hcCIpfX1dKSx0fShtKTt0LklkZW50aXR5Q01hcD1nO3ZhciB2PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe2Zvcih2YXIgcj0wLG49MDtuPD10O24rKylyPXI8PDh8ZVtuXTtyZXR1cm4gcj4+PjB9ZnVuY3Rpb24gdChlLHQpe3JldHVybiAxPT09dD9TdHJpbmcuZnJvbUNoYXJDb2RlKGVbMF0sZVsxXSk6Mz09PXQ/U3RyaW5nLmZyb21DaGFyQ29kZShlWzBdLGVbMV0sZVsyXSxlWzNdKTpTdHJpbmcuZnJvbUNoYXJDb2RlLmFwcGx5KG51bGwsZS5zdWJhcnJheSgwLHQrMSkpfWZ1bmN0aW9uIHIoZSx0LHIpe2Zvcih2YXIgbj0wLGE9cjthPj0wO2EtLSluKz1lW2FdK3RbYV0sZVthXT0yNTUmbixuPj49OH1mdW5jdGlvbiBhKGUsdCl7Zm9yKHZhciByPTEsbj10O24+PTAmJnI+MDtuLS0pcis9ZVtuXSxlW25dPTI1NSZyLHI+Pj04fWZ1bmN0aW9uIGkoZSl7dGhpcy5idWZmZXI9ZSx0aGlzLnBvcz0wLHRoaXMuZW5kPWUubGVuZ3RoLHRoaXMudG1wQnVmPW5ldyBVaW50OEFycmF5KDE5KX1mdW5jdGlvbiBvKCl7fXJldHVybiBpLnByb3RvdHlwZT17cmVhZEJ5dGU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5wb3M+PXRoaXMuZW5kPy0xOnRoaXMuYnVmZmVyW3RoaXMucG9zKytdfSxyZWFkTnVtYmVyOmZ1bmN0aW9uKCl7dmFyIGUsdD0wO2Rve3ZhciByPXRoaXMucmVhZEJ5dGUoKTtpZihyPDApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoInVuZXhwZWN0ZWQgRU9GIGluIGJjbWFwIik7ZT0hKDEyOCZyKSx0PXQ8PDd8MTI3JnJ9d2hpbGUoIWUpO3JldHVybiB0fSxyZWFkU2lnbmVkOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5yZWFkTnVtYmVyKCk7cmV0dXJuIDEmZT9+KGU+Pj4xKTplPj4+MX0scmVhZEhleDpmdW5jdGlvbihlLHQpe2Uuc2V0KHRoaXMuYnVmZmVyLnN1YmFycmF5KHRoaXMucG9zLHRoaXMucG9zK3QrMSkpLHRoaXMucG9zKz10KzF9LHJlYWRIZXhOdW1iZXI6ZnVuY3Rpb24oZSx0KXt2YXIgcixhPXRoaXMudG1wQnVmLGk9MDtkb3t2YXIgbz10aGlzLnJlYWRCeXRlKCk7aWYobzwwKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmV4cGVjdGVkIEVPRiBpbiBiY21hcCIpO3I9ISgxMjgmbyksYVtpKytdPTEyNyZvfXdoaWxlKCFyKTtmb3IodmFyIHM9dCxsPTAsYz0wO3M+PTA7KXtmb3IoO2M8OCYmYS5sZW5ndGg+MDspbD1hWy0taV08PGN8bCxjKz03O2Vbc109MjU1Jmwscy0tLGw+Pj04LGMtPTh9fSxyZWFkSGV4U2lnbmVkOmZ1bmN0aW9uKGUsdCl7dGhpcy5yZWFkSGV4TnVtYmVyKGUsdCk7Zm9yKHZhciByPTEmZVt0XT8yNTU6MCxuPTAsYT0wO2E8PXQ7YSsrKW49KDEmbik8PDh8ZVthXSxlW2FdPW4+PjFecn0scmVhZFN0cmluZzpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLnJlYWROdW1iZXIoKSx0PSIiLHI9MDtyPGU7cisrKXQrPVN0cmluZy5mcm9tQ2hhckNvZGUodGhpcy5yZWFkTnVtYmVyKCkpO3JldHVybiB0fX0sby5wcm90b3R5cGU9e3Byb2Nlc3M6ZnVuY3Rpb24obixvLHMpe3JldHVybiBuZXcgUHJvbWlzZSgoZnVuY3Rpb24obCxjKXt2YXIgdT1uZXcgaShuKSxmPXUucmVhZEJ5dGUoKTtvLnZlcnRpY2FsPSEhKDEmZik7Zm9yKHZhciBoLGQscD1udWxsLG09bmV3IFVpbnQ4QXJyYXkoMTYpLGc9bmV3IFVpbnQ4QXJyYXkoMTYpLHY9bmV3IFVpbnQ4QXJyYXkoMTYpLHk9bmV3IFVpbnQ4QXJyYXkoMTYpLGI9bmV3IFVpbnQ4QXJyYXkoMTYpOyhkPXUucmVhZEJ5dGUoKSk+PTA7KXt2YXIgdz1kPj41O2lmKDchPT13KXt2YXIgaz0hISgxNiZkKSxTPTE1JmQ7aWYoUysxPjE2KXRocm93IG5ldyBFcnJvcigicHJvY2Vzc0JpbmFyeUNNYXA6IEludmFsaWQgZGF0YVNpemUuIik7dmFyIF8seD11LnJlYWROdW1iZXIoKTtzd2l0Y2godyl7Y2FzZSAwOmZvcih1LnJlYWRIZXgobSxTKSx1LnJlYWRIZXhOdW1iZXIoZyxTKSxyKGcsbSxTKSxvLmFkZENvZGVzcGFjZVJhbmdlKFMrMSxlKG0sUyksZShnLFMpKSxfPTE7Xzx4O18rKylhKGcsUyksdS5yZWFkSGV4TnVtYmVyKG0sUykscihtLGcsUyksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksby5hZGRDb2Rlc3BhY2VSYW5nZShTKzEsZShtLFMpLGUoZyxTKSk7YnJlYWs7Y2FzZSAxOmZvcih1LnJlYWRIZXgobSxTKSx1LnJlYWRIZXhOdW1iZXIoZyxTKSxyKGcsbSxTKSx1LnJlYWROdW1iZXIoKSxfPTE7Xzx4O18rKylhKGcsUyksdS5yZWFkSGV4TnVtYmVyKG0sUykscihtLGcsUyksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksdS5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSAyOmZvcih1LnJlYWRIZXgodixTKSxoPXUucmVhZE51bWJlcigpLG8ubWFwT25lKGUodixTKSxoKSxfPTE7Xzx4O18rKylhKHYsUyksa3x8KHUucmVhZEhleE51bWJlcihiLFMpLHIodixiLFMpKSxoPXUucmVhZFNpZ25lZCgpKyhoKzEpLG8ubWFwT25lKGUodixTKSxoKTticmVhaztjYXNlIDM6Zm9yKHUucmVhZEhleChtLFMpLHUucmVhZEhleE51bWJlcihnLFMpLHIoZyxtLFMpLGg9dS5yZWFkTnVtYmVyKCksby5tYXBDaWRSYW5nZShlKG0sUyksZShnLFMpLGgpLF89MTtfPHg7XysrKWEoZyxTKSxrP20uc2V0KGcpOih1LnJlYWRIZXhOdW1iZXIobSxTKSxyKG0sZyxTKSksdS5yZWFkSGV4TnVtYmVyKGcsUykscihnLG0sUyksaD11LnJlYWROdW1iZXIoKSxvLm1hcENpZFJhbmdlKGUobSxTKSxlKGcsUyksaCk7YnJlYWs7Y2FzZSA0OmZvcih1LnJlYWRIZXgodiwxKSx1LnJlYWRIZXgoeSxTKSxvLm1hcE9uZShlKHYsMSksdCh5LFMpKSxfPTE7Xzx4O18rKylhKHYsMSksa3x8KHUucmVhZEhleE51bWJlcihiLDEpLHIodixiLDEpKSxhKHksUyksdS5yZWFkSGV4U2lnbmVkKGIsUykscih5LGIsUyksby5tYXBPbmUoZSh2LDEpLHQoeSxTKSk7YnJlYWs7Y2FzZSA1OmZvcih1LnJlYWRIZXgobSwxKSx1LnJlYWRIZXhOdW1iZXIoZywxKSxyKGcsbSwxKSx1LnJlYWRIZXgoeSxTKSxvLm1hcEJmUmFuZ2UoZShtLDEpLGUoZywxKSx0KHksUykpLF89MTtfPHg7XysrKWEoZywxKSxrP20uc2V0KGcpOih1LnJlYWRIZXhOdW1iZXIobSwxKSxyKG0sZywxKSksdS5yZWFkSGV4TnVtYmVyKGcsMSkscihnLG0sMSksdS5yZWFkSGV4KHksUyksby5tYXBCZlJhbmdlKGUobSwxKSxlKGcsMSksdCh5LFMpKTticmVhaztkZWZhdWx0OnJldHVybiB2b2lkIGMobmV3IEVycm9yKCJwcm9jZXNzQmluYXJ5Q01hcDogVW5rbm93biB0eXBlOiAiK3cpKX19ZWxzZSBzd2l0Y2goMzEmZCl7Y2FzZSAwOnUucmVhZFN0cmluZygpO2JyZWFrO2Nhc2UgMTpwPXUucmVhZFN0cmluZygpfX1sKHA/cyhwKTpvKX0pKX19LG99KCkseT1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7Zm9yKHZhciB0PTAscj0wO3I8ZS5sZW5ndGg7cisrKXQ9dDw8OHxlLmNoYXJDb2RlQXQocik7cmV0dXJuIHQ+Pj4wfWZ1bmN0aW9uIHQoZSl7aWYoISgwLG4uaXNTdHJpbmcpKGUpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJNYWxmb3JtZWQgQ01hcDogZXhwZWN0ZWQgc3RyaW5nLiIpfWZ1bmN0aW9uIHIoZSl7aWYoIU51bWJlci5pc0ludGVnZXIoZSkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1hbGZvcm1lZCBDTWFwOiBleHBlY3RlZCBpbnQuIil9ZnVuY3Rpb24gcyhyLG4pe2Zvcig7Oyl7dmFyIGk9bi5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShpKSlicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRiZmNoYXIiKSlyZXR1cm47dChpKTt2YXIgbz1lKGkpO3QoaT1uLmdldE9iaigpKTt2YXIgcz1pO3IubWFwT25lKG8scyl9fWZ1bmN0aW9uIGwocixpKXtmb3IoOzspe3ZhciBvPWkuZ2V0T2JqKCk7aWYoKDAsYS5pc0VPRikobykpYnJlYWs7aWYoKDAsYS5pc0NtZCkobywiZW5kYmZyYW5nZSIpKXJldHVybjt0KG8pO3ZhciBzPWUobyk7dChvPWkuZ2V0T2JqKCkpO3ZhciBsPWUobyk7aWYobz1pLmdldE9iaigpLE51bWJlci5pc0ludGVnZXIobyl8fCgwLG4uaXNTdHJpbmcpKG8pKXt2YXIgYz1OdW1iZXIuaXNJbnRlZ2VyKG8pP1N0cmluZy5mcm9tQ2hhckNvZGUobyk6bztyLm1hcEJmUmFuZ2UocyxsLGMpfWVsc2V7aWYoISgwLGEuaXNDbWQpKG8sIlsiKSlicmVhaztvPWkuZ2V0T2JqKCk7Zm9yKHZhciB1PVtdOyEoMCxhLmlzQ21kKShvLCJdIikmJiEoMCxhLmlzRU9GKShvKTspdS5wdXNoKG8pLG89aS5nZXRPYmooKTtyLm1hcEJmUmFuZ2VUb0FycmF5KHMsbCx1KX19dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgYmYgcmFuZ2UuIil9ZnVuY3Rpb24gYyhuLGkpe2Zvcig7Oyl7dmFyIG89aS5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShvKSlicmVhaztpZigoMCxhLmlzQ21kKShvLCJlbmRjaWRjaGFyIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTtyKG89aS5nZXRPYmooKSk7dmFyIGw9bztuLm1hcE9uZShzLGwpfX1mdW5jdGlvbiB1KG4saSl7Zm9yKDs7KXt2YXIgbz1pLmdldE9iaigpO2lmKCgwLGEuaXNFT0YpKG8pKWJyZWFrO2lmKCgwLGEuaXNDbWQpKG8sImVuZGNpZHJhbmdlIikpcmV0dXJuO3Qobyk7dmFyIHM9ZShvKTt0KG89aS5nZXRPYmooKSk7dmFyIGw9ZShvKTtyKG89aS5nZXRPYmooKSk7dmFyIGM9bztuLm1hcENpZFJhbmdlKHMsbCxjKX19ZnVuY3Rpb24gZih0LHIpe2Zvcig7Oyl7dmFyIGk9ci5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShpKSlicmVhaztpZigoMCxhLmlzQ21kKShpLCJlbmRjb2Rlc3BhY2VyYW5nZSIpKXJldHVybjtpZighKDAsbi5pc1N0cmluZykoaSkpYnJlYWs7dmFyIG89ZShpKTtpZihpPXIuZ2V0T2JqKCksISgwLG4uaXNTdHJpbmcpKGkpKWJyZWFrO3ZhciBzPWUoaSk7dC5hZGRDb2Rlc3BhY2VSYW5nZShpLmxlbmd0aCxvLHMpfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGNvZGVzcGFjZSByYW5nZS4iKX1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9dC5nZXRPYmooKTtOdW1iZXIuaXNJbnRlZ2VyKHIpJiYoZS52ZXJ0aWNhbD0hIXIpfWZ1bmN0aW9uIGQoZSx0KXt2YXIgcj10LmdldE9iaigpOygwLGEuaXNOYW1lKShyKSYmKDAsbi5pc1N0cmluZykoci5uYW1lKSYmKGUubmFtZT1yLm5hbWUpfWZ1bmN0aW9uIHkoZSx0LHIsaSl7dmFyIG8scDtlOmZvcig7Oyl0cnl7dmFyIG09dC5nZXRPYmooKTtpZigoMCxhLmlzRU9GKShtKSlicmVhaztpZigoMCxhLmlzTmFtZSkobSkpIldNb2RlIj09PW0ubmFtZT9oKGUsdCk6IkNNYXBOYW1lIj09PW0ubmFtZSYmZChlLHQpLG89bTtlbHNlIGlmKCgwLGEuaXNDbWQpKG0pKXN3aXRjaChtLmNtZCl7Y2FzZSJlbmRjbWFwIjpicmVhayBlO2Nhc2UidXNlY21hcCI6KDAsYS5pc05hbWUpKG8pJiYocD1vLm5hbWUpO2JyZWFrO2Nhc2UiYmVnaW5jb2Rlc3BhY2VyYW5nZSI6ZihlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZmNoYXIiOnMoZSx0KTticmVhaztjYXNlImJlZ2luY2lkY2hhciI6YyhlLHQpO2JyZWFrO2Nhc2UiYmVnaW5iZnJhbmdlIjpsKGUsdCk7YnJlYWs7Y2FzZSJiZWdpbmNpZHJhbmdlIjp1KGUsdCl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7KDAsbi53YXJuKSgiSW52YWxpZCBjTWFwIGRhdGE6ICIrZSk7Y29udGludWV9cmV0dXJuIWkmJnAmJihpPXApLGk/YihlLHIsaSk6UHJvbWlzZS5yZXNvbHZlKGUpfWZ1bmN0aW9uIGIoZSx0LHIpe3JldHVybiB3KHIsdCkudGhlbigoZnVuY3Rpb24odCl7aWYoZS51c2VDTWFwPXQsMD09PWUubnVtQ29kZXNwYWNlUmFuZ2VzKXtmb3IodmFyIHI9ZS51c2VDTWFwLmNvZGVzcGFjZVJhbmdlcyxuPTA7bjxyLmxlbmd0aDtuKyspZS5jb2Rlc3BhY2VSYW5nZXNbbl09cltuXS5zbGljZSgpO2UubnVtQ29kZXNwYWNlUmFuZ2VzPWUudXNlQ01hcC5udW1Db2Rlc3BhY2VSYW5nZXN9cmV0dXJuIGUudXNlQ01hcC5mb3JFYWNoKChmdW5jdGlvbih0LHIpe2UuY29udGFpbnModCl8fGUubWFwT25lKHQsZS51c2VDTWFwLmxvb2t1cCh0KSl9KSksZX0pKX1mdW5jdGlvbiB3KGUsdCl7cmV0dXJuIklkZW50aXR5LUgiPT09ZT9Qcm9taXNlLnJlc29sdmUobmV3IGcoITEsMikpOiJJZGVudGl0eS1WIj09PWU/UHJvbWlzZS5yZXNvbHZlKG5ldyBnKCEwLDIpKTpwLmluY2x1ZGVzKGUpP3Q/dChlKS50aGVuKChmdW5jdGlvbihlKXt2YXIgcj1lLmNNYXBEYXRhLGE9ZS5jb21wcmVzc2lvblR5cGUscz1uZXcgbSghMCk7aWYoYT09PW4uQ01hcENvbXByZXNzaW9uVHlwZS5CSU5BUlkpcmV0dXJuKG5ldyB2KS5wcm9jZXNzKHIscywoZnVuY3Rpb24oZSl7cmV0dXJuIGIocyx0LGUpfSkpO2lmKGE9PT1uLkNNYXBDb21wcmVzc2lvblR5cGUuTk9ORSl7dmFyIGw9bmV3IGkuTGV4ZXIobmV3IG8uU3RyZWFtKHIpKTtyZXR1cm4geShzLGwsdCxudWxsKX1yZXR1cm4gUHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJUT0RPOiBPbmx5IEJJTkFSWS9OT05FIENNYXAgY29tcHJlc3Npb24gaXMgY3VycmVudGx5IHN1cHBvcnRlZC4iKSl9KSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJCdWlsdC1pbiBDTWFwIHBhcmFtZXRlcnMgYXJlIG5vdCBwcm92aWRlZC4iKSk6UHJvbWlzZS5yZWplY3QobmV3IEVycm9yKCJVbmtub3duIENNYXAgbmFtZTogIitlKSl9cmV0dXJue2NyZWF0ZTpmdW5jdGlvbihlKXt2YXIgdD1lLmVuY29kaW5nLHI9ZS5mZXRjaEJ1aWx0SW5DTWFwLG49ZS51c2VDTWFwO3JldHVybigwLGEuaXNOYW1lKSh0KT93KHQubmFtZSxyKTooMCxhLmlzU3RyZWFtKSh0KT95KG5ldyBtLG5ldyBpLkxleGVyKHQpLHIsbikudGhlbigoZnVuY3Rpb24oZSl7cmV0dXJuIGUuaXNJZGVudGl0eUNNYXA/dyhlLm5hbWUscik6ZX0pKTpQcm9taXNlLnJlamVjdChuZXcgRXJyb3IoIkVuY29kaW5nIHJlcXVpcmVkLiIpKX19fSgpO3QuQ01hcEZhY3Rvcnk9eX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5nZXRGb250VHlwZT15LHQuSWRlbnRpdHlUb1VuaWNvZGVNYXA9dC5Ub1VuaWNvZGVNYXA9dC5Gb250RmxhZ3M9dC5Gb250PXQuRXJyb3JGb250PXQuU0VBQ19BTkFMWVNJU19FTkFCTEVEPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNzQpLGk9cigxNzcpLG89cigxNzYpLHM9cigxNzgpLGw9cigxNzkpLGM9cigxODApLHU9cigxNzIpLGY9cigxNTcpLGg9cigxODEpO2Z1bmN0aW9uIGQoZSx0KXtyZXR1cm4gZnVuY3Rpb24oZSl7aWYoQXJyYXkuaXNBcnJheShlKSlyZXR1cm4gZX0oZSl8fGZ1bmN0aW9uKGUsdCl7dmFyIHI9W10sbj0hMCxhPSExLGk9dm9pZCAwO3RyeXtmb3IodmFyIG8scz1lW1N5bWJvbC5pdGVyYXRvcl0oKTshKG49KG89cy5uZXh0KCkpLmRvbmUpJiYoci5wdXNoKG8udmFsdWUpLCF0fHxyLmxlbmd0aCE9PXQpO249ITApO31jYXRjaChlKXthPSEwLGk9ZX1maW5hbGx5e3RyeXtufHxudWxsPT1zLnJldHVybnx8cy5yZXR1cm4oKX1maW5hbGx5e2lmKGEpdGhyb3cgaX19cmV0dXJuIHJ9KGUsdCl8fGZ1bmN0aW9uKCl7dGhyb3cgbmV3IFR5cGVFcnJvcigiSW52YWxpZCBhdHRlbXB0IHRvIGRlc3RydWN0dXJlIG5vbi1pdGVyYWJsZSBpbnN0YW5jZSIpfSgpfXZhciBwPVtbNTczNDQsNjM3NDNdLFsxMDQ4NTc2LDExMTQxMDldXTt0LlNFQUNfQU5BTFlTSVNfRU5BQkxFRD0hMDt2YXIgbT17Rml4ZWRQaXRjaDoxLFNlcmlmOjIsU3ltYm9saWM6NCxTY3JpcHQ6OCxOb25zeW1ib2xpYzozMixJdGFsaWM6NjQsQWxsQ2FwOjY1NTM2LFNtYWxsQ2FwOjEzMTA3MixGb3JjZUJvbGQ6MjYyMTQ0fTt0LkZvbnRGbGFncz1tO3ZhciBnPVsiLm5vdGRlZiIsIi5udWxsIiwibm9ubWFya2luZ3JldHVybiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwibm9uYnJlYWtpbmdzcGFjZSIsIkFncmF2ZSIsIkF0aWxkZSIsIk90aWxkZSIsIk9FIiwib2UiLCJlbmRhc2giLCJlbWRhc2giLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwicXVvdGVsZWZ0IiwicXVvdGVyaWdodCIsImRpdmlkZSIsImxvemVuZ2UiLCJ5ZGllcmVzaXMiLCJZZGllcmVzaXMiLCJmcmFjdGlvbiIsImN1cnJlbmN5IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJwZXJ0aG91c2FuZCIsIkFjaXJjdW1mbGV4IiwiRWNpcmN1bWZsZXgiLCJBYWN1dGUiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiYXBwbGUiLCJPZ3JhdmUiLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVncmF2ZSIsImRvdGxlc3NpIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiTHNsYXNoIiwibHNsYXNoIiwiU2Nhcm9uIiwic2Nhcm9uIiwiWmNhcm9uIiwiemNhcm9uIiwiYnJva2VuYmFyIiwiRXRoIiwiZXRoIiwiWWFjdXRlIiwieWFjdXRlIiwiVGhvcm4iLCJ0aG9ybiIsIm1pbnVzIiwibXVsdGlwbHkiLCJvbmVzdXBlcmlvciIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsIm9uZWhhbGYiLCJvbmVxdWFydGVyIiwidGhyZWVxdWFydGVycyIsImZyYW5jIiwiR2JyZXZlIiwiZ2JyZXZlIiwiSWRvdGFjY2VudCIsIlNjZWRpbGxhIiwic2NlZGlsbGEiLCJDYWN1dGUiLCJjYWN1dGUiLCJDY2Fyb24iLCJjY2Fyb24iLCJkY3JvYXQiXTtmdW5jdGlvbiB2KGUpe2lmKGUuZm9udE1hdHJpeCYmZS5mb250TWF0cml4WzBdIT09bi5GT05UX0lERU5USVRZX01BVFJJWFswXSl7dmFyIHQ9LjAwMS9lLmZvbnRNYXRyaXhbMF0scj1lLndpZHRocztmb3IodmFyIGEgaW4gcilyW2FdKj10O2UuZGVmYXVsdFdpZHRoKj10fX1mdW5jdGlvbiB5KGUsdCl7c3dpdGNoKGUpe2Nhc2UiVHlwZTEiOnJldHVybiJUeXBlMUMiPT09dD9uLkZvbnRUeXBlLlRZUEUxQzpuLkZvbnRUeXBlLlRZUEUxO2Nhc2UiQ0lERm9udFR5cGUwIjpyZXR1cm4iQ0lERm9udFR5cGUwQyI9PT10P24uRm9udFR5cGUuQ0lERk9OVFRZUEUwQzpuLkZvbnRUeXBlLkNJREZPTlRUWVBFMDtjYXNlIk9wZW5UeXBlIjpyZXR1cm4gbi5Gb250VHlwZS5PUEVOVFlQRTtjYXNlIlRydWVUeXBlIjpyZXR1cm4gbi5Gb250VHlwZS5UUlVFVFlQRTtjYXNlIkNJREZvbnRUeXBlMiI6cmV0dXJuIG4uRm9udFR5cGUuQ0lERk9OVFRZUEUyO2Nhc2UiTU1UeXBlMSI6cmV0dXJuIG4uRm9udFR5cGUuTU1UWVBFMTtjYXNlIlR5cGUwIjpyZXR1cm4gbi5Gb250VHlwZS5UWVBFMDtkZWZhdWx0OnJldHVybiBuLkZvbnRUeXBlLlVOS05PV059fWZ1bmN0aW9uIGIoZSx0KXtpZih2b2lkIDAhPT10W2VdKXJldHVybiBlO3ZhciByPSgwLGwuZ2V0VW5pY29kZUZvckdseXBoKShlLHQpO2lmKC0xIT09cilmb3IodmFyIGEgaW4gdClpZih0W2FdPT09cilyZXR1cm4gYTtyZXR1cm4oMCxuLmluZm8pKCJVbmFibGUgdG8gcmVjb3ZlciBhIHN0YW5kYXJkIGdseXBoIG5hbWUgZm9yOiAiK2UpLGV9dmFyIHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLG4sYSxpLG8scyl7dGhpcy5mb250Q2hhcj1lLHRoaXMudW5pY29kZT10LHRoaXMuYWNjZW50PXIsdGhpcy53aWR0aD1uLHRoaXMudm1ldHJpYz1hLHRoaXMub3BlcmF0b3JMaXN0SWQ9aSx0aGlzLmlzU3BhY2U9byx0aGlzLmlzSW5Gb250PXN9cmV0dXJuIGUucHJvdG90eXBlLm1hdGNoZXNGb3JDYWNoZT1mdW5jdGlvbihlLHQscixuLGEsaSxvLHMpe3JldHVybiB0aGlzLmZvbnRDaGFyPT09ZSYmdGhpcy51bmljb2RlPT09dCYmdGhpcy5hY2NlbnQ9PT1yJiZ0aGlzLndpZHRoPT09biYmdGhpcy52bWV0cmljPT09YSYmdGhpcy5vcGVyYXRvckxpc3RJZD09PWkmJnRoaXMuaXNTcGFjZT09PW8mJnRoaXMuaXNJbkZvbnQ9PT1zfSxlfSgpLGs9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dmFyIGU9YXJndW1lbnRzLmxlbmd0aD4wJiZ2b2lkIDAhPT1hcmd1bWVudHNbMF0/YXJndW1lbnRzWzBdOltdO3RoaXMuX21hcD1lfXJldHVybiBlLnByb3RvdHlwZT17Z2V0IGxlbmd0aCgpe3JldHVybiB0aGlzLl9tYXAubGVuZ3RofSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLl9tYXApZSh0LHRoaXMuX21hcFt0XS5jaGFyQ29kZUF0KDApKX0saGFzOmZ1bmN0aW9uKGUpe3JldHVybiB2b2lkIDAhPT10aGlzLl9tYXBbZV19LGdldDpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5fbWFwW2VdfSxjaGFyQ29kZU9mOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuX21hcDtpZih0Lmxlbmd0aDw9NjU1MzYpcmV0dXJuIHQuaW5kZXhPZihlKTtmb3IodmFyIHIgaW4gdClpZih0W3JdPT09ZSlyZXR1cm4gMHxyO3JldHVybi0xfSxhbWVuZDpmdW5jdGlvbihlKXtmb3IodmFyIHQgaW4gZSl0aGlzLl9tYXBbdF09ZVt0XX19LGV9KCk7dC5Ub1VuaWNvZGVNYXA9azt2YXIgUz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmZpcnN0Q2hhcj1lLHRoaXMubGFzdENoYXI9dH1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBsZW5ndGgoKXtyZXR1cm4gdGhpcy5sYXN0Q2hhcisxLXRoaXMuZmlyc3RDaGFyfSxmb3JFYWNoOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD10aGlzLmZpcnN0Q2hhcixyPXRoaXMubGFzdENoYXI7dDw9cjt0KyspZSh0LHQpfSxoYXM6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMuZmlyc3RDaGFyPD1lJiZlPD10aGlzLmxhc3RDaGFyfSxnZXQ6ZnVuY3Rpb24oZSl7aWYodGhpcy5maXJzdENoYXI8PWUmJmU8PXRoaXMubGFzdENoYXIpcmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZSl9LGNoYXJDb2RlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIE51bWJlci5pc0ludGVnZXIoZSkmJmU+PXRoaXMuZmlyc3RDaGFyJiZlPD10aGlzLmxhc3RDaGFyP2U6LTF9LGFtZW5kOmZ1bmN0aW9uKGUpeygwLG4udW5yZWFjaGFibGUpKCJTaG91bGQgbm90IGNhbGwgYW1lbmQoKSIpfX0sZX0oKTt0LklkZW50aXR5VG9Vbmljb2RlTWFwPVM7dmFyIF89ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyKXtlW3RdPXI+PjgmMjU1LGVbdCsxXT0yNTUmcn1mdW5jdGlvbiB0KGUsdCxyKXtlW3RdPXI+PjI0JjI1NSxlW3QrMV09cj4+MTYmMjU1LGVbdCsyXT1yPj44JjI1NSxlW3QrM109MjU1JnJ9ZnVuY3Rpb24gcihlLHQscil7dmFyIG4sYTtpZihyIGluc3RhbmNlb2YgVWludDhBcnJheSllLnNldChyLHQpO2Vsc2UgaWYoInN0cmluZyI9PXR5cGVvZiByKWZvcihuPTAsYT1yLmxlbmd0aDtuPGE7bisrKWVbdCsrXT0yNTUmci5jaGFyQ29kZUF0KG4pO2Vsc2UgZm9yKG49MCxhPXIubGVuZ3RoO248YTtuKyspZVt0KytdPTI1NSZyW25dfWZ1bmN0aW9uIGEoZSl7dGhpcy5zZm50PWUsdGhpcy50YWJsZXM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gYS5nZXRTZWFyY2hQYXJhbXM9ZnVuY3Rpb24oZSx0KXtmb3IodmFyIHI9MSxuPTA7KHJeZSk+cjspcjw8PTEsbisrO3ZhciBhPXIqdDtyZXR1cm57cmFuZ2U6YSxlbnRyeTpuLHJhbmdlU2hpZnQ6dCplLWF9fSxhLnByb3RvdHlwZT17dG9BcnJheTpmdW5jdGlvbigpe3ZhciBpPXRoaXMuc2ZudCxvPXRoaXMudGFibGVzLHM9T2JqZWN0LmtleXMobyk7cy5zb3J0KCk7dmFyIGwsYyx1LGYsaCxkPXMubGVuZ3RoLHA9MTIrMTYqZCxtPVtwXTtmb3IobD0wO2w8ZDtsKyspcCs9KChmPW9bc1tsXV0pLmxlbmd0aCszJi00KT4+PjAsbS5wdXNoKHApO3ZhciBnPW5ldyBVaW50OEFycmF5KHApO2ZvcihsPTA7bDxkO2wrKylmPW9bc1tsXV0scihnLG1bbF0sZik7InRydWUiPT09aSYmKGk9KDAsbi5zdHJpbmczMikoNjU1MzYpKSxnWzBdPTI1NSZpLmNoYXJDb2RlQXQoMCksZ1sxXT0yNTUmaS5jaGFyQ29kZUF0KDEpLGdbMl09MjU1JmkuY2hhckNvZGVBdCgyKSxnWzNdPTI1NSZpLmNoYXJDb2RlQXQoMyksZShnLDQsZCk7dmFyIHY9YS5nZXRTZWFyY2hQYXJhbXMoZCwxNik7Zm9yKGUoZyw2LHYucmFuZ2UpLGUoZyw4LHYuZW50cnkpLGUoZywxMCx2LnJhbmdlU2hpZnQpLHA9MTIsbD0wO2w8ZDtsKyspe2g9c1tsXSxnW3BdPTI1NSZoLmNoYXJDb2RlQXQoMCksZ1twKzFdPTI1NSZoLmNoYXJDb2RlQXQoMSksZ1twKzJdPTI1NSZoLmNoYXJDb2RlQXQoMiksZ1twKzNdPTI1NSZoLmNoYXJDb2RlQXQoMyk7dmFyIHk9MDtmb3IoYz1tW2xdLHU9bVtsKzFdO2M8dTtjKz00KXk9eSsoMCxuLnJlYWRVaW50MzIpKGcsYyk+Pj4wO3QoZyxwKzQseSksdChnLHArOCxtW2xdKSx0KGcscCsxMixvW2hdLmxlbmd0aCkscCs9MTZ9cmV0dXJuIGd9LGFkZFRhYmxlOmZ1bmN0aW9uKGUsdCl7aWYoZSBpbiB0aGlzLnRhYmxlcyl0aHJvdyBuZXcgRXJyb3IoIlRhYmxlICIrZSsiIGFscmVhZHkgZXhpc3RzIik7dGhpcy50YWJsZXNbZV09dH19LGF9KCkseD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0LHIpe3ZhciBhO3RoaXMubmFtZT1lLHRoaXMubG9hZGVkTmFtZT1yLmxvYWRlZE5hbWUsdGhpcy5pc1R5cGUzRm9udD1yLmlzVHlwZTNGb250LHRoaXMuc2l6ZXM9W10sdGhpcy5taXNzaW5nRmlsZT0hMSx0aGlzLmdseXBoQ2FjaGU9T2JqZWN0LmNyZWF0ZShudWxsKSx0aGlzLmlzU2VyaWZGb250PSEhKHIuZmxhZ3MmbS5TZXJpZiksdGhpcy5pc1N5bWJvbGljRm9udD0hIShyLmZsYWdzJm0uU3ltYm9saWMpLHRoaXMuaXNNb25vc3BhY2U9ISEoci5mbGFncyZtLkZpeGVkUGl0Y2gpO3ZhciBpPXIudHlwZSxvPXIuc3VidHlwZTtpZih0aGlzLnR5cGU9aSx0aGlzLnN1YnR5cGU9byx0aGlzLmZhbGxiYWNrTmFtZT10aGlzLmlzTW9ub3NwYWNlPyJtb25vc3BhY2UiOnRoaXMuaXNTZXJpZkZvbnQ/InNlcmlmIjoic2Fucy1zZXJpZiIsdGhpcy5kaWZmZXJlbmNlcz1yLmRpZmZlcmVuY2VzLHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMuY29tcG9zaXRlPXIuY29tcG9zaXRlLHRoaXMud2lkZUNoYXJzPXIud2lkZUNoYXJzLHRoaXMuY01hcD1yLmNNYXAsdGhpcy5hc2NlbnQ9ci5hc2NlbnQvMWUzLHRoaXMuZGVzY2VudD1yLmRlc2NlbnQvMWUzLHRoaXMuZm9udE1hdHJpeD1yLmZvbnRNYXRyaXgsdGhpcy5iYm94PXIuYmJveCx0aGlzLmRlZmF1bHRFbmNvZGluZz1yLmRlZmF1bHRFbmNvZGluZyx0aGlzLnRvVW5pY29kZT1yLnRvVW5pY29kZSx0aGlzLmZhbGxiYWNrVG9Vbmljb2RlPXIuZmFsbGJhY2tUb1VuaWNvZGV8fG5ldyBrLHRoaXMudG9Gb250Q2hhcj1bXSwiVHlwZTMiIT09ci50eXBlKXtpZih0aGlzLmNpZEVuY29kaW5nPXIuY2lkRW5jb2RpbmcsdGhpcy52ZXJ0aWNhbD1yLnZlcnRpY2FsLHRoaXMudmVydGljYWwmJih0aGlzLnZtZXRyaWNzPXIudm1ldHJpY3MsdGhpcy5kZWZhdWx0Vk1ldHJpY3M9ci5kZWZhdWx0Vk1ldHJpY3MpLCF0fHx0LmlzRW1wdHkpcmV0dXJuIHQmJigwLG4ud2FybikoJ0ZvbnQgZmlsZSBpcyBlbXB0eSBpbiAiJytlKyciICgnK3RoaXMubG9hZGVkTmFtZSsiKSIpLHZvaWQgdGhpcy5mYWxsYmFja1RvU3lzdGVtRm9udCgpO3ZhciBzPWQoZnVuY3Rpb24oZSx0KXt2YXIgcixhLGk9dC50eXBlLG89dC5zdWJ0eXBlLHM9dC5jb21wb3NpdGU7cmV0dXJuIGZ1bmN0aW9uKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiA2NTUzNj09PSgwLG4ucmVhZFVpbnQzMikodCwwKXx8InRydWUiPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSl8fEMoZSk/cj1zPyJDSURGb250VHlwZTIiOiJUcnVlVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIk9UVE8iPT09KDAsbi5ieXRlc1RvU3RyaW5nKSh0KX0oZSk/cj1zPyJDSURGb250VHlwZTIiOiJPcGVuVHlwZSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoMik7cmV0dXJuIDM3PT09dFswXSYmMzM9PT10WzFdfHwxMjg9PT10WzBdJiYxPT09dFsxXX0oZSk/cj1zPyJDSURGb250VHlwZTAiOiJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5wZWVrQnl0ZXMoNCk7cmV0dXJuIHRbMF0+PTEmJnRbM10+PTEmJnRbM108PTR9KGUpP3M/KHI9IkNJREZvbnRUeXBlMCIsYT0iQ0lERm9udFR5cGUwQyIpOihyPSJNTVR5cGUxIj09PWk/Ik1NVHlwZTEiOiJUeXBlMSIsYT0iVHlwZTFDIik6KCgwLG4ud2FybikoImdldEZvbnRGaWxlVHlwZTogVW5hYmxlIHRvIGRldGVjdCBjb3JyZWN0IGZvbnQgZmlsZSBUeXBlL1N1YnR5cGUuIikscj1pLGE9byksW3IsYV19KHQsciksMik7aT1zWzBdLG89c1sxXSxpPT09dGhpcy50eXBlJiZvPT09dGhpcy5zdWJ0eXBlfHwoMCxuLmluZm8pKCJJbmNvbnNpc3RlbnQgZm9udCBmaWxlIFR5cGUvU3ViVHlwZSwgZXhwZWN0ZWQ6ICIrIiIuY29uY2F0KHRoaXMudHlwZSwiLyIpLmNvbmNhdCh0aGlzLnN1YnR5cGUsIiBidXQgZm91bmQ6ICIpLmNvbmNhdChpLCIvIikuY29uY2F0KG8sIi4iKSk7dHJ5e3ZhciBsO3N3aXRjaChpKXtjYXNlIk1NVHlwZTEiOigwLG4uaW5mbykoIk1NVHlwZTEgZm9udCAoIitlKyIpLCBmYWxsaW5nIGJhY2sgdG8gVHlwZTEuIik7Y2FzZSJUeXBlMSI6Y2FzZSJDSURGb250VHlwZTAiOnRoaXMubWltZXR5cGU9ImZvbnQvb3BlbnR5cGUiO3ZhciBjPSJUeXBlMUMiPT09b3x8IkNJREZvbnRUeXBlMEMiPT09bz9uZXcgRSh0LHIpOm5ldyBQKGUsdCxyKTt2KHIpLGw9dGhpcy5jb252ZXJ0KGUsYyxyKTticmVhaztjYXNlIk9wZW5UeXBlIjpjYXNlIlRydWVUeXBlIjpjYXNlIkNJREZvbnRUeXBlMiI6dGhpcy5taW1ldHlwZT0iZm9udC9vcGVudHlwZSIsbD10aGlzLmNoZWNrQW5kUmVwYWlyKGUsdCxyKSx0aGlzLmlzT3BlblR5cGUmJih2KHIpLGk9Ik9wZW5UeXBlIik7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiRm9udCAiLmNvbmNhdChpLCIgaXMgbm90IHN1cHBvcnRlZCIpKX19Y2F0Y2goZSl7cmV0dXJuKDAsbi53YXJuKShlKSx2b2lkIHRoaXMuZmFsbGJhY2tUb1N5c3RlbUZvbnQoKX10aGlzLmRhdGE9bCx0aGlzLmZvbnRUeXBlPXkoaSxvKSx0aGlzLmZvbnRNYXRyaXg9ci5mb250TWF0cml4LHRoaXMud2lkdGhzPXIud2lkdGhzLHRoaXMuZGVmYXVsdFdpZHRoPXIuZGVmYXVsdFdpZHRoLHRoaXMudG9Vbmljb2RlPXIudG9Vbmljb2RlLHRoaXMuZW5jb2Rpbmc9ci5iYXNlRW5jb2RpbmcsdGhpcy5zZWFjTWFwPXIuc2VhY01hcH1lbHNle2ZvcihhPTA7YTwyNTY7YSsrKXRoaXMudG9Gb250Q2hhclthXT10aGlzLmRpZmZlcmVuY2VzW2FdfHxyLmRlZmF1bHRFbmNvZGluZ1thXTt0aGlzLmZvbnRUeXBlPW4uRm9udFR5cGUuVFlQRTN9fXZhciB0O2Z1bmN0aW9uIHIoZSx0KXtyZXR1cm4oZTw8OCkrdH1mdW5jdGlvbiBoKGUsdCl7dmFyIHI9KGU8PDgpK3Q7cmV0dXJuIDMyNzY4JnI/ci02NTUzNjpyfWZ1bmN0aW9uIHgoZSl7cmV0dXJuIFN0cmluZy5mcm9tQ2hhckNvZGUoZT4+OCYyNTUsMjU1JmUpfWZ1bmN0aW9uIEEoZSl7cmV0dXJuIGU9ZT4zMjc2Nz8zMjc2NzplPC0zMjc2OD8tMzI3Njg6ZSxTdHJpbmcuZnJvbUNoYXJDb2RlKGU+PjgmMjU1LDI1NSZlKX1mdW5jdGlvbiBDKGUpe3ZhciB0PWUucGVla0J5dGVzKDQpO3JldHVybiJ0dGNmIj09PSgwLG4uYnl0ZXNUb1N0cmluZykodCl9ZnVuY3Rpb24gVChlLHQscil7Zm9yKHZhciBuLGE9W10saT0wLG89ZS5sZW5ndGg7aTxvO2krKyktMSE9PShuPSgwLGwuZ2V0VW5pY29kZUZvckdseXBoKShlW2ldLHQpKSYmKGFbaV09bik7Zm9yKHZhciBzIGluIHIpLTEhPT0obj0oMCxsLmdldFVuaWNvZGVGb3JHbHlwaCkocltzXSx0KSkmJihhWytzXT1uKTtyZXR1cm4gYX1mdW5jdGlvbiBSKGUsdCxyKXt2YXIgYT1PYmplY3QuY3JlYXRlKG51bGwpLGk9W10sbz0wLHM9cFtvXVswXSxsPXBbb11bMV07Zm9yKHZhciBjIGluIGUpe3ZhciB1PWVbY3w9MF07aWYodCh1KSl7aWYocz5sKXtpZigrK28+PXAubGVuZ3RoKXsoMCxuLndhcm4pKCJSYW4gb3V0IG9mIHNwYWNlIGluIGZvbnQgcHJpdmF0ZSB1c2UgYXJlYS4iKTticmVha31zPXBbb11bMF0sbD1wW29dWzFdfXZhciBmPXMrKzswPT09dSYmKHU9ciksYVtmXT11LGlbY109Zn19cmV0dXJue3RvRm9udENoYXI6aSxjaGFyQ29kZVRvR2x5cGhJZDphLG5leHRBdmFpbGFibGVGb250Q2hhckNvZGU6c319ZnVuY3Rpb24gTyhlLHQpe3ZhciByLGEsaSxvLHM9ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXTtmb3IodmFyIG4gaW4gZSllW25dPj10fHxyLnB1c2goe2ZvbnRDaGFyQ29kZTowfG4sZ2x5cGhJZDplW25dfSk7MD09PXIubGVuZ3RoJiZyLnB1c2goe2ZvbnRDaGFyQ29kZTowLGdseXBoSWQ6MH0pLHIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5mb250Q2hhckNvZGUtdC5mb250Q2hhckNvZGV9KSk7Zm9yKHZhciBhPVtdLGk9ci5sZW5ndGgsbz0wO288aTspe3ZhciBzPXJbb10uZm9udENoYXJDb2RlLGw9W3Jbb10uZ2x5cGhJZF07KytvO2Zvcih2YXIgYz1zO288aSYmYysxPT09cltvXS5mb250Q2hhckNvZGUmJihsLnB1c2gocltvXS5nbHlwaElkKSwrK28sNjU1MzUhPSsrYyk7KTthLnB1c2goW3MsYyxsXSl9cmV0dXJuIGF9KGUsdCksbD1zW3MubGVuZ3RoLTFdWzFdPjY1NTM1PzI6MSxjPSJcMFwwIit4KGwpKyJcMANcMAEiKygwLG4uc3RyaW5nMzIpKDQrOCpsKTtmb3Iocj1zLmxlbmd0aC0xO3I+PTAmJiEoc1tyXVswXTw9NjU1MzUpOy0tcik7dmFyIHU9cisxO3Nbcl1bMF08NjU1MzUmJjY1NTM1PT09c1tyXVsxXSYmKHNbcl1bMV09NjU1MzQpO3ZhciBmLGgsZCxwLG09c1tyXVsxXTw2NTUzNT8xOjAsZz11K20sdj1fLmdldFNlYXJjaFBhcmFtcyhnLDIpLHk9IiIsYj0iIix3PSIiLGs9IiIsUz0iIixBPTA7Zm9yKHI9MCxhPXU7cjxhO3IrKyl7aD0oZj1zW3JdKVswXSxkPWZbMV0seSs9eChoKSxiKz14KGQpO3ZhciBDPSEwO2ZvcihpPTEsbz0ocD1mWzJdKS5sZW5ndGg7aTxvOysraSlpZihwW2ldIT09cFtpLTFdKzEpe0M9ITE7YnJlYWt9aWYoQyl3Kz14KHBbMF0taCY2NTUzNSksays9eCgwKTtlbHNle3ZhciBQPTIqKGctcikrMipBO2ZvcihBKz1kLWgrMSx3Kz14KDApLGsrPXgoUCksaT0wLG89cC5sZW5ndGg7aTxvOysraSlTKz14KHBbaV0pfX1tPjAmJihiKz0iw7/DvyIseSs9IsO/w78iLHcrPSJcMAEiLGsrPSJcMFwwIik7dmFyIEU9IlwwXDAiK3goMipnKSt4KHYucmFuZ2UpK3godi5lbnRyeSkreCh2LnJhbmdlU2hpZnQpK2IrIlwwXDAiK3krdytrK1MsVD0iIixSPSIiO2lmKGw+MSl7Zm9yKGMrPSJcMANcMFxuIisoMCxuLnN0cmluZzMyKSg0KzgqbCs0K0UubGVuZ3RoKSxUPSIiLHI9MCxhPXMubGVuZ3RoO3I8YTtyKyspe2g9KGY9c1tyXSlbMF07dmFyIE89KHA9ZlsyXSlbMF07Zm9yKGk9MSxvPXAubGVuZ3RoO2k8bzsrK2kpcFtpXSE9PXBbaS0xXSsxJiYoZD1mWzBdK2ktMSxUKz0oMCxuLnN0cmluZzMyKShoKSsoMCxuLnN0cmluZzMyKShkKSsoMCxuLnN0cmluZzMyKShPKSxoPWQrMSxPPXBbaV0pO1QrPSgwLG4uc3RyaW5nMzIpKGgpKygwLG4uc3RyaW5nMzIpKGZbMV0pKygwLG4uc3RyaW5nMzIpKE8pfVI9IlwwXGZcMFwwIisoMCxuLnN0cmluZzMyKShULmxlbmd0aCsxNikrIlwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShULmxlbmd0aC8xMil9cmV0dXJuIGMrIlwwBCIreChFLmxlbmd0aCs0KStFK1IrVH1mdW5jdGlvbiBJKGUsdCxyKXtyPXJ8fHt1bml0c1BlckVtOjAseU1heDowLHlNaW46MCxhc2NlbnQ6MCxkZXNjZW50OjB9O3ZhciBhPTAsaT0wLG89MCxzPTAsYz1udWxsLHU9MDtpZih0KXtmb3IodmFyIGYgaW4gdCl7KGM+KGZ8PTApfHwhYykmJihjPWYpLHU8ZiYmKHU9Zik7dmFyIGg9KDAsbC5nZXRVbmljb2RlUmFuZ2VGb3IpKGYpO2lmKGg8MzIpYXw9MTw8aDtlbHNlIGlmKGg8NjQpaXw9MTw8aC0zMjtlbHNlIGlmKGg8OTYpb3w9MTw8aC02NDtlbHNle2lmKCEoaDwxMjMpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmljb2RlIHJhbmdlcyBCaXRzID4gMTIzIGFyZSByZXNlcnZlZCBmb3IgaW50ZXJuYWwgdXNhZ2UiKTtzfD0xPDxoLTk2fX11PjY1NTM1JiYodT02NTUzNSl9ZWxzZSBjPTAsdT0yNTU7dmFyIGQ9ZS5iYm94fHxbMCwwLDAsMF0scD1yLnVuaXRzUGVyRW18fDEvKGUuZm9udE1hdHJpeHx8bi5GT05UX0lERU5USVRZX01BVFJJWClbMF0sbT1lLmFzY2VudFNjYWxlZD8xOnAvMWUzLGc9ci5hc2NlbnR8fE1hdGgucm91bmQobSooZS5hc2NlbnR8fGRbM10pKSx2PXIuZGVzY2VudHx8TWF0aC5yb3VuZChtKihlLmRlc2NlbnR8fGRbMV0pKTt2PjAmJmUuZGVzY2VudD4wJiZkWzFdPDAmJih2PS12KTt2YXIgeT1yLnlNYXh8fGcsYj0tci55TWlufHwtdjtyZXR1cm4iXDADAiQBw7RcMAVcMFwwAsKKAsK7XDBcMFwwwowCwooCwrtcMFwwAcOfXHgwMDEBAlwwXDBcMFwwBiIrU3RyaW5nLmZyb21DaGFyQ29kZShlLmZpeGVkUGl0Y2g/OTowKSsiXDBcMFwwXDBcMFwwIisoMCxuLnN0cmluZzMyKShhKSsoMCxuLnN0cmluZzMyKShpKSsoMCxuLnN0cmluZzMyKShvKSsoMCxuLnN0cmluZzMyKShzKSsiKjIxKiIreChlLml0YWxpY0FuZ2xlPzE6MCkreChjfHxlLmZpcnN0Q2hhcikreCh1fHxlLmxhc3RDaGFyKSt4KGcpK3godikrIlwwZCIreCh5KSt4KGIpKyJcMFwwXDBcMFwwXDBcMFwwIit4KGUueEhlaWdodCkreChlLmNhcEhlaWdodCkreCgwKSt4KGN8fGUuZmlyc3RDaGFyKSsiXDADIn1mdW5jdGlvbiBGKGUpe3ZhciB0PU1hdGguZmxvb3IoZS5pdGFsaWNBbmdsZSpNYXRoLnBvdygyLDE2KSk7cmV0dXJuIlwwA1wwXDAiKygwLG4uc3RyaW5nMzIpKHQpKyJcMFwwXDBcMCIrKDAsbi5zdHJpbmczMikoZS5maXhlZFBpdGNoKSsiXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMFwwXDAifWZ1bmN0aW9uIEwoZSx0KXt0fHwodD1bW10sW11dKTt2YXIgcixuLGEsaSxvLHM9W3RbMF1bMF18fCJPcmlnaW5hbCBsaWNlbmNlIix0WzBdWzFdfHxlLHRbMF1bMl18fCJVbmtub3duIix0WzBdWzNdfHwidW5pcXVlSUQiLHRbMF1bNF18fGUsdFswXVs1XXx8IlZlcnNpb24gMC4xMSIsdFswXVs2XXx8IiIsdFswXVs3XXx8IlVua25vd24iLHRbMF1bOF18fCJVbmtub3duIix0WzBdWzldfHwiVW5rbm93biJdLGw9W107Zm9yKHI9MCxuPXMubGVuZ3RoO3I8bjtyKyspe3ZhciBjPVtdO2ZvcihhPTAsaT0obz10WzFdW3JdfHxzW3JdKS5sZW5ndGg7YTxpO2ErKyljLnB1c2goeChvLmNoYXJDb2RlQXQoYSkpKTtsLnB1c2goYy5qb2luKCIiKSl9dmFyIHU9W3MsbF0sZj1bIlwwASIsIlwwAyJdLGg9WyJcMFwwIiwiXDABIl0sZD1bIlwwXDAiLCIEXHQiXSxwPXMubGVuZ3RoKmYubGVuZ3RoLG09IlwwXDAiK3gocCkreCgxMipwKzYpLGc9MDtmb3Iocj0wLG49Zi5sZW5ndGg7cjxuO3IrKyl7dmFyIHY9dVtyXTtmb3IoYT0wLGk9di5sZW5ndGg7YTxpO2ErKylvPXZbYV0sbSs9ZltyXStoW3JdK2Rbcl0reChhKSt4KG8ubGVuZ3RoKSt4KGcpLGcrPW8ubGVuZ3RofXJldHVybiBtKz1zLmpvaW4oIiIpK2wuam9pbigiIil9cmV0dXJuIGUuZ2V0Rm9udElEPSh0PTEsZnVuY3Rpb24oKXtyZXR1cm4gU3RyaW5nKHQrKyl9KSxlLnByb3RvdHlwZT17bmFtZTpudWxsLGZvbnQ6bnVsbCxtaW1ldHlwZTpudWxsLGVuY29kaW5nOm51bGwsZGlzYWJsZUZvbnRGYWNlOiExLGdldCByZW5kZXJlcigpe3ZhciBlPWMuRm9udFJlbmRlcmVyRmFjdG9yeS5jcmVhdGUodGhpcywhMCk7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsInJlbmRlcmVyIixlKX0sZXhwb3J0RGF0YTpmdW5jdGlvbigpe3ZhciBlPXt9O2Zvcih2YXIgdCBpbiB0aGlzKXRoaXMuaGFzT3duUHJvcGVydHkodCkmJihlW3RdPXRoaXNbdF0pO3JldHVybiBlfSxmYWxsYmFja1RvU3lzdGVtRm9udDpmdW5jdGlvbigpe3ZhciBlLHQscj10aGlzO3RoaXMubWlzc2luZ0ZpbGU9ITA7dmFyIGE9dGhpcy5uYW1lLGM9dGhpcy50eXBlLHU9dGhpcy5zdWJ0eXBlLGY9YS5yZXBsYWNlKC9bLF9dL2csIi0iKSxoPSgwLHMuZ2V0U3RkRm9udE1hcCkoKSxkPSgwLHMuZ2V0Tm9uU3RkRm9udE1hcCkoKSxwPSEhaFtmXXx8ISghZFtmXXx8IWhbZFtmXV0pO2lmKGY9aFtmXXx8ZFtmXXx8Zix0aGlzLmJvbGQ9LTEhPT1mLnNlYXJjaCgvYm9sZC9naSksdGhpcy5pdGFsaWM9LTEhPT1mLnNlYXJjaCgvb2JsaXF1ZS9naSl8fC0xIT09Zi5zZWFyY2goL2l0YWxpYy9naSksdGhpcy5ibGFjaz0tMSE9PWEuc2VhcmNoKC9CbGFjay9nKSx0aGlzLnJlbWVhc3VyZT1PYmplY3Qua2V5cyh0aGlzLndpZHRocykubGVuZ3RoPjAscCYmIkNJREZvbnRUeXBlMiI9PT1jJiZ0aGlzLmNpZEVuY29kaW5nLnN0YXJ0c1dpdGgoIklkZW50aXR5LSIpKXt2YXIgbT0oMCxzLmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cykoKSxnPVtdO2ZvcihlIGluIG0pZ1srZV09bVtlXTtpZigvQXJpYWwtP0JsYWNrL2kudGVzdChhKSl7dmFyIHY9KDAscy5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2spKCk7Zm9yKGUgaW4gdilnWytlXT12W2VdfWVsc2UgaWYoL0NhbGlicmkvaS50ZXN0KGEpKXt2YXIgYj0oMCxzLmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaSkoKTtmb3IoZSBpbiBiKWdbK2VdPWJbZV19dGhpcy50b1VuaWNvZGUgaW5zdGFuY2VvZiBTfHx0aGlzLnRvVW5pY29kZS5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2dbK2VdPXR9KSksdGhpcy50b0ZvbnRDaGFyPWcsdGhpcy50b1VuaWNvZGU9bmV3IGsoZyl9ZWxzZSBpZigvU3ltYm9sL2kudGVzdChmKSl0aGlzLnRvRm9udENoYXI9VChvLlN5bWJvbFNldEVuY29kaW5nLCgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKSx0aGlzLmRpZmZlcmVuY2VzKTtlbHNlIGlmKC9EaW5nYmF0cy9pLnRlc3QoZikpL1dpbmdkaW5ncy9pLnRlc3QoYSkmJigwLG4ud2FybikoIk5vbi1lbWJlZGRlZCBXaW5nZGluZ3MgZm9udCwgZmFsbGluZyBiYWNrIHRvIFphcGZEaW5nYmF0cy4iKSx0aGlzLnRvRm9udENoYXI9VChvLlphcGZEaW5nYmF0c0VuY29kaW5nLCgwLGkuZ2V0RGluZ2JhdHNHbHlwaHNVbmljb2RlKSgpLHRoaXMuZGlmZmVyZW5jZXMpO2Vsc2UgaWYocCl0aGlzLnRvRm9udENoYXI9VCh0aGlzLmRlZmF1bHRFbmNvZGluZywoMCxpLmdldEdseXBoc1VuaWNvZGUpKCksdGhpcy5kaWZmZXJlbmNlcyk7ZWxzZXt2YXIgdz0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7dGhpcy50b1VuaWNvZGUuZm9yRWFjaCgoZnVuY3Rpb24oZSxuKXtpZighci5jb21wb3NpdGUpe3ZhciBhPXIuZGlmZmVyZW5jZXNbZV18fHIuZGVmYXVsdEVuY29kaW5nW2VdOy0xIT09KHQ9KDAsbC5nZXRVbmljb2RlRm9yR2x5cGgpKGEsdykpJiYobj10KX1yLnRvRm9udENoYXJbZV09bn0pKX10aGlzLmxvYWRlZE5hbWU9Zi5zcGxpdCgiLSIpWzBdLHRoaXMuZm9udFR5cGU9eShjLHUpfSxjaGVja0FuZFJlcGFpcjpmdW5jdGlvbihlLHQscyl7dmFyIGw9WyJPUy8yIiwiY21hcCIsImhlYWQiLCJoaGVhIiwiaG10eCIsIm1heHAiLCJuYW1lIiwicG9zdCIsImxvY2EiLCJnbHlmIiwiZnBnbSIsInByZXAiLCJjdnQgIiwiQ0ZGICJdO2Z1bmN0aW9uIGMoZSxyKXt2YXIgbj1PYmplY3QuY3JlYXRlKG51bGwpO25bIk9TLzIiXT1udWxsLG4uY21hcD1udWxsLG4uaGVhZD1udWxsLG4uaGhlYT1udWxsLG4uaG10eD1udWxsLG4ubWF4cD1udWxsLG4ubmFtZT1udWxsLG4ucG9zdD1udWxsO2Zvcih2YXIgYT0wO2E8cjthKyspe3ZhciBpPWQodCk7bC5pbmNsdWRlcyhpLnRhZykmJjAhPT1pLmxlbmd0aCYmKG5baS50YWddPWkpfXJldHVybiBufWZ1bmN0aW9uIGQoZSl7dmFyIHQ9KDAsbi5ieXRlc1RvU3RyaW5nKShlLmdldEJ5dGVzKDQpKSxyPWUuZ2V0SW50MzIoKT4+PjAsYT1lLmdldEludDMyKCk+Pj4wLGk9ZS5nZXRJbnQzMigpPj4+MCxvPWUucG9zO2UucG9zPWUuc3RhcnQ/ZS5zdGFydDowLGUuc2tpcChhKTt2YXIgcz1lLmdldEJ5dGVzKGkpO3JldHVybiBlLnBvcz1vLCJoZWFkIj09PXQmJihzWzhdPXNbOV09c1sxMF09c1sxMV09MCxzWzE3XXw9MzIpLHt0YWc6dCxjaGVja3N1bTpyLGxlbmd0aDppLG9mZnNldDphLGRhdGE6c319ZnVuY3Rpb24gcChlKXtyZXR1cm57dmVyc2lvbjooMCxuLmJ5dGVzVG9TdHJpbmcpKGUuZ2V0Qnl0ZXMoNCkpLG51bVRhYmxlczplLmdldFVpbnQxNigpLHNlYXJjaFJhbmdlOmUuZ2V0VWludDE2KCksZW50cnlTZWxlY3RvcjplLmdldFVpbnQxNigpLHJhbmdlU2hpZnQ6ZS5nZXRVaW50MTYoKX19ZnVuY3Rpb24gbShlLHQscixuLGEsaSl7dmFyIG89e2xlbmd0aDowLHNpemVPZkluc3RydWN0aW9uczowfTtpZihyLXQ8PTEyKXJldHVybiBvO3ZhciBzLGwsYyx1PWUuc3ViYXJyYXkodCxyKSxmPWgodVswXSx1WzFdKTtpZihmPDApcmV0dXJuIGM9Zj0tMSwocz11KVsxKyhsPTApXT1jLHNbbF09Yz4+Pjgsbi5zZXQodSxhKSxvLmxlbmd0aD11Lmxlbmd0aCxvO3ZhciBkLHA9MTAsbT0wO2ZvcihkPTA7ZDxmO2QrKyltPTErKHVbcF08PDh8dVtwKzFdKSxwKz0yO3ZhciBnPXAsdj11W3BdPDw4fHVbcCsxXTtvLnNpemVPZkluc3RydWN0aW9ucz12O3ZhciB5PXArPTIrdixiPTA7Zm9yKGQ9MDtkPG07ZCsrKXt2YXIgdz11W3ArK107MTkyJncmJih1W3AtMV09NjMmdyk7dmFyIGs9KDImdz8xOjE2Jnc/MDoyKSsoNCZ3PzE6MzImdz8wOjIpO2lmKGIrPWssOCZ3KXt2YXIgUz11W3ArK107ZCs9UyxiKz1TKmt9fWlmKDA9PT1iKXJldHVybiBvO3ZhciBfPXArYjtyZXR1cm4gXz51Lmxlbmd0aD9vOiFpJiZ2PjA/KG4uc2V0KHUuc3ViYXJyYXkoMCxnKSxhKSxuLnNldChbMCwwXSxhK2cpLG4uc2V0KHUuc3ViYXJyYXkoeSxfKSxhK2crMiksXy09dix1Lmxlbmd0aC1fPjMmJihfPV8rMyYtNCksby5sZW5ndGg9XyxvKTp1Lmxlbmd0aC1fPjM/KF89XyszJi00LG4uc2V0KHUuc3ViYXJyYXkoMCxfKSxhKSxvLmxlbmd0aD1fLG8pOihuLnNldCh1LGEpLG8ubGVuZ3RoPXUubGVuZ3RoLG8pfWZ1bmN0aW9uIHkoZSl7dmFyIHI9KHQuc3RhcnQ/dC5zdGFydDowKStlLm9mZnNldDt0LnBvcz1yO3ZhciBhPVtbXSxbXV0saT1lLmxlbmd0aCxvPXIraTtpZigwIT09dC5nZXRVaW50MTYoKXx8aTw2KXJldHVybiBhO3ZhciBzLGwsYz10LmdldFVpbnQxNigpLHU9dC5nZXRVaW50MTYoKSxmPVtdO2ZvcihzPTA7czxjJiZ0LnBvcysxMjw9bztzKyspe3ZhciBoPXtwbGF0Zm9ybTp0LmdldFVpbnQxNigpLGVuY29kaW5nOnQuZ2V0VWludDE2KCksbGFuZ3VhZ2U6dC5nZXRVaW50MTYoKSxuYW1lOnQuZ2V0VWludDE2KCksbGVuZ3RoOnQuZ2V0VWludDE2KCksb2Zmc2V0OnQuZ2V0VWludDE2KCl9OygxPT09aC5wbGF0Zm9ybSYmMD09PWguZW5jb2RpbmcmJjA9PT1oLmxhbmd1YWdlfHwzPT09aC5wbGF0Zm9ybSYmMT09PWguZW5jb2RpbmcmJjEwMzM9PT1oLmxhbmd1YWdlKSYmZi5wdXNoKGgpfWZvcihzPTAsbD1mLmxlbmd0aDtzPGw7cysrKXt2YXIgZD1mW3NdO2lmKCEoZC5sZW5ndGg8PTApKXt2YXIgcD1yK3UrZC5vZmZzZXQ7aWYoIShwK2QubGVuZ3RoPm8pKXt0LnBvcz1wO3ZhciBtPWQubmFtZTtpZihkLmVuY29kaW5nKXtmb3IodmFyIGc9IiIsdj0wLHk9ZC5sZW5ndGg7djx5O3YrPTIpZys9U3RyaW5nLmZyb21DaGFyQ29kZSh0LmdldFVpbnQxNigpKTthWzFdW21dPWd9ZWxzZSBhWzBdW21dPSgwLG4uYnl0ZXNUb1N0cmluZykodC5nZXRCeXRlcyhkLmxlbmd0aCkpfX19cmV0dXJuIGF9dmFyIHcsayxTLHgsQT1bMCwwLDAsMCwwLDAsMCwwLC0yLC0yLC0yLC0yLDAsMCwtMiwtNSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwtMSwtMSwxLC0xLC05OTksMCwxLDAsLTEsLTIsMCwtMSwtMiwtMSwtMSwwLC0xLC0xLDAsMCwtOTk5LC05OTksLTEsLTEsLTEsLTEsLTIsLTk5OSwtMiwtMiwtOTk5LDAsLTIsLTIsMCwwLC0yLDAsLTIsMCwwLDAsLTIsLTEsLTEsMSwxLDAsMCwtMSwtMSwtMSwtMSwtMSwtMSwtMSwwLDAsLTEsMCwtMSwtMSwwLC05OTksLTEsLTEsLTEsLTEsLTEsLTEsMCwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsLTIsLTk5OSwtOTk5LC05OTksLTk5OSwtOTk5LC0xLC0xLC0yLC0yLDAsMCwwLDAsLTEsLTEsLTk5OSwtMiwtMiwwLDAsLTEsLTIsLTIsMCwwLDAsLTEsLTEsLTEsLTJdO2Z1bmN0aW9uIFAoZSx0KXtmb3IodmFyIHIsYSxpLG8scyxsPWUuZGF0YSxjPTAsdT0wLGY9MCxoPVtdLGQ9W10scD1bXSxtPXQudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zLGc9ITEsdj0wLHk9MCxiPWwubGVuZ3RoO2M8Yjspe3ZhciB3PWxbYysrXTtpZig2ND09PXcpaWYoYT1sW2MrK10sZ3x8eSljKz1hO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWgucHVzaChsW2MrK10pO2Vsc2UgaWYoNjU9PT13KWlmKGE9bFtjKytdLGd8fHkpYys9MiphO2Vsc2UgZm9yKHI9MDtyPGE7cisrKWk9bFtjKytdLGgucHVzaChpPDw4fGxbYysrXSk7ZWxzZSBpZigxNzY9PSgyNDgmdykpaWYoYT13LTE3NisxLGd8fHkpYys9YTtlbHNlIGZvcihyPTA7cjxhO3IrKyloLnB1c2gobFtjKytdKTtlbHNlIGlmKDE4ND09KDI0OCZ3KSlpZihhPXctMTg0KzEsZ3x8eSljKz0yKmE7ZWxzZSBmb3Iocj0wO3I8YTtyKyspaT1sW2MrK10saC5wdXNoKGk8PDh8bFtjKytdKTtlbHNlIGlmKDQzIT09d3x8bSlpZig0NCE9PXd8fG0pe2lmKDQ1PT09dylpZihnKWc9ITEsdT1jO2Vsc2V7aWYoIShzPWQucG9wKCkpKXJldHVybigwLG4ud2FybikoIlRUOiBFTkRGIGJhZCBzdGFjayIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtvPXAucG9wKCksbD1zLmRhdGEsYz1zLmksdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tvXT1oLmxlbmd0aC1zLnN0YWNrVG9wfWVsc2UgaWYoMTM3PT09dykoZ3x8eSkmJigoMCxuLndhcm4pKCJUVDogbmVzdGVkIElERUZzIG5vdCBhbGxvd2VkIiksbT0hMCksZz0hMCxmPWM7ZWxzZSBpZig4OD09PXcpKyt2O2Vsc2UgaWYoMjc9PT13KXk9djtlbHNlIGlmKDg5PT09dyl5PT09diYmKHk9MCksLS12O2Vsc2UgaWYoMjg9PT13JiYhZyYmIXkpe3ZhciBrPWhbaC5sZW5ndGgtMV07az4wJiYoYys9ay0xKX19ZWxzZShnfHx5KSYmKCgwLG4ud2FybikoIlRUOiBuZXN0ZWQgRkRFRnMgbm90IGFsbG93ZWQiKSxtPSEwKSxnPSEwLGY9YyxvPWgucG9wKCksdC5mdW5jdGlvbnNEZWZpbmVkW29dPXtkYXRhOmwsaTpjfTtlbHNlIGlmKCFnJiYheSlpZihvPWhbaC5sZW5ndGgtMV0saXNOYU4obykpKDAsbi5pbmZvKSgiVFQ6IENBTEwgZW1wdHkgc3RhY2sgKG9yIGludmFsaWQgZW50cnkpLiIpO2Vsc2UgaWYodC5mdW5jdGlvbnNVc2VkW29dPSEwLG8gaW4gdC5mdW5jdGlvbnNTdGFja0RlbHRhcyl7dmFyIFM9aC5sZW5ndGgrdC5mdW5jdGlvbnNTdGFja0RlbHRhc1tvXTtpZihTPDApcmV0dXJuKDAsbi53YXJuKSgiVFQ6IENBTEwgaW52YWxpZCBmdW5jdGlvbnMgc3RhY2sgZGVsdGEuIiksdm9pZCh0LmhpbnRzVmFsaWQ9ITEpO2gubGVuZ3RoPVN9ZWxzZSBpZihvIGluIHQuZnVuY3Rpb25zRGVmaW5lZCYmIXAuaW5jbHVkZXMobykpe2lmKGQucHVzaCh7ZGF0YTpsLGk6YyxzdGFja1RvcDpoLmxlbmd0aC0xfSkscC5wdXNoKG8pLCEocz10LmZ1bmN0aW9uc0RlZmluZWRbb10pKXJldHVybigwLG4ud2FybikoIlRUOiBDQUxMIG5vbi1leGlzdGVudCBmdW5jdGlvbiIpLHZvaWQodC5oaW50c1ZhbGlkPSExKTtsPXMuZGF0YSxjPXMuaX1pZighZyYmIXkpe3ZhciBfPXc8PTE0Mj9BW3ddOnc+PTE5MiYmdzw9MjIzPy0xOnc+PTIyND8tMjowO2Zvcih3Pj0xMTMmJnc8PTExNyYmKGE9aC5wb3AoKSxpc05hTihhKXx8KF89MiotYSkpO188MCYmaC5sZW5ndGg+MDspaC5wb3AoKSxfKys7Zm9yKDtfPjA7KWgucHVzaChOYU4pLF8tLX19dC50b29Db21wbGV4VG9Gb2xsb3dGdW5jdGlvbnM9bTt2YXIgeD1bbF07Yz5sLmxlbmd0aCYmeC5wdXNoKG5ldyBVaW50OEFycmF5KGMtbC5sZW5ndGgpKSxmPnUmJigoMCxuLndhcm4pKCJUVDogY29tcGxlbWVudGluZyBhIG1pc3NpbmcgZnVuY3Rpb24gdGFpbCIpLHgucHVzaChuZXcgVWludDhBcnJheShbMzQsNDVdKSkpLGZ1bmN0aW9uKGUsdCl7aWYodC5sZW5ndGg+MSl7dmFyIHIsbixhPTA7Zm9yKHI9MCxuPXQubGVuZ3RoO3I8bjtyKyspYSs9dFtyXS5sZW5ndGg7YT1hKzMmLTQ7dmFyIGk9bmV3IFVpbnQ4QXJyYXkoYSksbz0wO2ZvcihyPTAsbj10Lmxlbmd0aDtyPG47cisrKWkuc2V0KHRbcl0sbyksbys9dFtyXS5sZW5ndGg7ZS5kYXRhPWksZS5sZW5ndGg9YX19KGUseCl9aWYoQyh0PW5ldyBmLlN0cmVhbShuZXcgVWludDhBcnJheSh0LmdldEJ5dGVzKCkpKSkpe3ZhciBUPWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWZ1bmN0aW9uKGUpe3ZhciB0PSgwLG4uYnl0ZXNUb1N0cmluZykoZS5nZXRCeXRlcyg0KSk7KDAsbi5hc3NlcnQpKCJ0dGNmIj09PXQsIk11c3QgYmUgYSBUcnVlVHlwZSBDb2xsZWN0aW9uIGZvbnQuIik7Zm9yKHZhciByPWUuZ2V0VWludDE2KCksYT1lLmdldFVpbnQxNigpLGk9ZS5nZXRJbnQzMigpPj4+MCxvPVtdLHM9MDtzPGk7cysrKW8ucHVzaChlLmdldEludDMyKCk+Pj4wKTt2YXIgbD17dHRjVGFnOnQsbWFqb3JWZXJzaW9uOnIsbWlub3JWZXJzaW9uOmEsbnVtRm9udHM6aSxvZmZzZXRUYWJsZTpvfTtzd2l0Y2gocil7Y2FzZSAxOnJldHVybiBsO2Nhc2UgMjpyZXR1cm4gbC5kc2lnVGFnPWUuZ2V0SW50MzIoKT4+PjAsbC5kc2lnTGVuZ3RoPWUuZ2V0SW50MzIoKT4+PjAsbC5kc2lnT2Zmc2V0PWUuZ2V0SW50MzIoKT4+PjAsbH10aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBUcnVlVHlwZSBDb2xsZWN0aW9uIG1ham9yVmVyc2lvbjogIi5jb25jYXQociwiLiIpKX0oZSksYT1yLm51bUZvbnRzLGk9ci5vZmZzZXRUYWJsZSxvPTA7bzxhO28rKyl7ZS5wb3M9KGUuc3RhcnR8fDApK2lbb107dmFyIHM9cChlKSxsPWMoMCxzLm51bVRhYmxlcyk7aWYoIWwubmFtZSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignVHJ1ZVR5cGUgQ29sbGVjdGlvbiBmb250IG11c3QgY29udGFpbiBhICJuYW1lIiB0YWJsZS4nKTtmb3IodmFyIHU9eShsLm5hbWUpLGY9MCxoPXUubGVuZ3RoO2Y8aDtmKyspZm9yKHZhciBkPTAsbT11W2ZdLmxlbmd0aDtkPG07ZCsrKXt2YXIgZz11W2ZdW2RdO2lmKGcmJmcucmVwbGFjZSgvXHMvZywiIik9PT10KXJldHVybntoZWFkZXI6cyx0YWJsZXM6bH19fXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdUcnVlVHlwZSBDb2xsZWN0aW9uIGRvZXMgbm90IGNvbnRhaW4gIicuY29uY2F0KHQsJyIgZm9udC4nKSl9KHQsdGhpcy5uYW1lKTt3PVQuaGVhZGVyLGs9VC50YWJsZXN9ZWxzZSBrPWMoMCwodz1wKHQpKS5udW1UYWJsZXMpO3ZhciBEPSFrWyJDRkYgIl07aWYoRCl7aWYoIWsubG9jYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImxvY2EiIHRhYmxlIGlzIG5vdCBmb3VuZCcpO2suZ2x5Znx8KCgwLG4ud2FybikoJ1JlcXVpcmVkICJnbHlmIiB0YWJsZSBpcyBub3QgZm91bmQgLS0gdHJ5aW5nIHRvIHJlY292ZXIuJyksay5nbHlmPXt0YWc6ImdseWYiLGRhdGE6bmV3IFVpbnQ4QXJyYXkoMCl9KSx0aGlzLmlzT3BlblR5cGU9ITF9ZWxzZXt2YXIgTj1zLmNvbXBvc2l0ZSYmKChzLmNpZFRvR2lkTWFwfHxbXSkubGVuZ3RoPjB8fCEocy5jTWFwIGluc3RhbmNlb2YgdS5JZGVudGl0eUNNYXApKTtpZigiT1RUTyI9PT13LnZlcnNpb24mJiFOfHwhay5oZWFkfHwhay5oaGVhfHwhay5tYXhwfHwhay5wb3N0KXJldHVybiB4PW5ldyBmLlN0cmVhbShrWyJDRkYgIl0uZGF0YSksUz1uZXcgRSh4LHMpLHYocyksdGhpcy5jb252ZXJ0KGUsUyxzKTtkZWxldGUgay5nbHlmLGRlbGV0ZSBrLmxvY2EsZGVsZXRlIGsuZnBnbSxkZWxldGUgay5wcmVwLGRlbGV0ZSBrWyJjdnQgIl0sdGhpcy5pc09wZW5UeXBlPSEwfWlmKCFrLm1heHApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoJ1JlcXVpcmVkICJtYXhwIiB0YWJsZSBpcyBub3QgZm91bmQnKTt0LnBvcz0odC5zdGFydHx8MCkray5tYXhwLm9mZnNldDt2YXIgTT10LmdldEludDMyKCksaj10LmdldFVpbnQxNigpLEI9aisxLFU9ITA7Qj42NTUzNSYmKFU9ITEsQj1qLCgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gZ2x5ZnMgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpKTt2YXIgcT0wLHo9MDtNPj02NTUzNiYmay5tYXhwLmxlbmd0aD49MjImJih0LnBvcys9OCx0LmdldFVpbnQxNigpPjImJihrLm1heHAuZGF0YVsxNF09MCxrLm1heHAuZGF0YVsxNV09MiksdC5wb3MrPTQscT10LmdldFVpbnQxNigpLHQucG9zKz00LHo9dC5nZXRVaW50MTYoKSksay5tYXhwLmRhdGFbNF09Qj4+OCxrLm1heHAuZGF0YVs1XT0yNTUmQjt2YXIgVz1mdW5jdGlvbihlLHQscixhKXt2YXIgaT17ZnVuY3Rpb25zRGVmaW5lZDpbXSxmdW5jdGlvbnNVc2VkOltdLGZ1bmN0aW9uc1N0YWNrRGVsdGFzOltdLHRvb0NvbXBsZXhUb0ZvbGxvd0Z1bmN0aW9uczohMSxoaW50c1ZhbGlkOiEwfTtpZihlJiZQKGUsaSksdCYmUCh0LGkpLGUmJmZ1bmN0aW9uKGUsdCl7aWYoIWUudG9vQ29tcGxleFRvRm9sbG93RnVuY3Rpb25zKXtpZihlLmZ1bmN0aW9uc0RlZmluZWQubGVuZ3RoPnQpcmV0dXJuKDAsbi53YXJuKSgiVFQ6IG1vcmUgZnVuY3Rpb25zIGRlZmluZWQgdGhhbiBleHBlY3RlZCIpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtmb3IodmFyIHI9MCxhPWUuZnVuY3Rpb25zVXNlZC5sZW5ndGg7cjxhO3IrKyl7aWYocj50KXJldHVybigwLG4ud2FybikoIlRUOiBpbnZhbGlkIGZ1bmN0aW9uIGlkOiAiK3IpLHZvaWQoZS5oaW50c1ZhbGlkPSExKTtpZihlLmZ1bmN0aW9uc1VzZWRbcl0mJiFlLmZ1bmN0aW9uc0RlZmluZWRbcl0pcmV0dXJuKDAsbi53YXJuKSgiVFQ6IHVuZGVmaW5lZCBmdW5jdGlvbjogIityKSx2b2lkKGUuaGludHNWYWxpZD0hMSl9fX0oaSxhKSxyJiYxJnIubGVuZ3RoKXt2YXIgbz1uZXcgVWludDhBcnJheShyLmxlbmd0aCsxKTtvLnNldChyLmRhdGEpLHIuZGF0YT1vfXJldHVybiBpLmhpbnRzVmFsaWR9KGsuZnBnbSxrLnByZXAsa1siY3Z0ICJdLHEpO2lmKFd8fChkZWxldGUgay5mcGdtLGRlbGV0ZSBrLnByZXAsZGVsZXRlIGtbImN2dCAiXSksZnVuY3Rpb24oZSx0LHIsYSl7aWYodCl7ZS5wb3M9KGUuc3RhcnQ/ZS5zdGFydDowKSt0Lm9mZnNldCxlLnBvcys9NCxlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9MixlLnBvcys9OCxlLnBvcys9Mjt2YXIgaT1lLmdldFVpbnQxNigpO2k+YSYmKCgwLG4uaW5mbykoIlRoZSBudW1PZk1ldHJpY3MgKCIraSsiKSBzaG91bGQgbm90IGJlIGdyZWF0ZXIgdGhhbiB0aGUgbnVtR2x5cGhzICgiK2ErIikiKSxpPWEsdC5kYXRhWzM0XT0oNjUyODAmaSk+PjgsdC5kYXRhWzM1XT0yNTUmaSk7dmFyIG89YS1pLShyLmxlbmd0aC00Kmk+PjEpO2lmKG8+MCl7dmFyIHM9bmV3IFVpbnQ4QXJyYXkoci5sZW5ndGgrMipvKTtzLnNldChyLmRhdGEpLHIuZGF0YT1zfX1lbHNlIHImJihyLmRhdGE9bnVsbCl9KHQsay5oaGVhLGsuaG10eCxCKSwhay5oZWFkKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdSZXF1aXJlZCAiaGVhZCIgdGFibGUgaXMgbm90IGZvdW5kJyk7IWZ1bmN0aW9uKGUsdCxhKXt2YXIgaSxvLHMsbCxjPWUuZGF0YSx1PShpPWNbMF0sbz1jWzFdLHM9Y1syXSxsPWNbM10sKGk8PDI0KSsobzw8MTYpKyhzPDw4KStsKTt1Pj4xNiE9MSYmKCgwLG4uaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgdmVyc2lvbiBpbiBoZWFkIHRhYmxlOiAiK3UpLGNbMF09MCxjWzFdPTEsY1syXT0wLGNbM109MCk7dmFyIGY9cihjWzUwXSxjWzUxXSk7aWYoZjwwfHxmPjEpeygwLG4uaW5mbykoIkF0dGVtcHRpbmcgdG8gZml4IGludmFsaWQgaW5kZXhUb0xvY0Zvcm1hdCBpbiBoZWFkIHRhYmxlOiAiK2YpO3ZhciBoPXQrMTtpZihhPT09aDw8MSljWzUwXT0wLGNbNTFdPTA7ZWxzZXtpZihhIT09aDw8Mil0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiQ291bGQgbm90IGZpeCBpbmRleFRvTG9jRm9ybWF0OiAiK2YpO2NbNTBdPTAsY1s1MV09MX19fShrLmhlYWQsaixEP2subG9jYS5sZW5ndGg6MCk7dmFyIEg9T2JqZWN0LmNyZWF0ZShudWxsKTtpZihEKXt2YXIgRz1yKGsuaGVhZC5kYXRhWzUwXSxrLmhlYWQuZGF0YVs1MV0pLFY9ZnVuY3Rpb24oZSx0LHIsbixhLGksbyl7dmFyIHMsbCxjO24/KHM9NCxsPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX0sYz1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj4+MjQmMjU1LGVbdCsxXT1yPj4xNiYyNTUsZVt0KzJdPXI+PjgmMjU1LGVbdCszXT0yNTUmcn0pOihzPTIsbD1mdW5jdGlvbihlLHQpe3JldHVybiBlW3RdPDw5fGVbdCsxXTw8MX0sYz1mdW5jdGlvbihlLHQscil7ZVt0XT1yPj45JjI1NSxlW3QrMV09cj4+MSYyNTV9KTt2YXIgdT1pP3IrMTpyLGY9ZS5kYXRhLGg9cyooMSt1KTsoZj1uZXcgVWludDhBcnJheShoKSkuc2V0KGUuZGF0YS5zdWJhcnJheSgwLGgpKSxlLmRhdGE9Zjt2YXIgZCxwLGc9dC5kYXRhLHY9Zy5sZW5ndGgseT1uZXcgVWludDhBcnJheSh2KSxiPWwoZiwwKSx3PTAsaz1PYmplY3QuY3JlYXRlKG51bGwpO2ZvcihjKGYsMCx3KSxkPTAscD1zO2Q8cjtkKysscCs9cyl7dmFyIFM9bChmLHApOzA9PT1TJiYoUz1iKSxTPnYmJih2KzMmLTQpPT09UyYmKFM9diksUz52JiYoYj1TKTt2YXIgXz1tKGcsYixTLHksdyxhKSx4PV8ubGVuZ3RoOzA9PT14JiYoa1tkXT0hMCksXy5zaXplT2ZJbnN0cnVjdGlvbnM+byYmKG89Xy5zaXplT2ZJbnN0cnVjdGlvbnMpLGMoZixwLHcrPXgpLGI9U31pZigwPT09dyl7dmFyIEE9bmV3IFVpbnQ4QXJyYXkoWzAsMSwwLDAsMCwwLDAsMCwwLDAsMCwwLDAsMCw0OSwwXSk7Zm9yKGQ9MCxwPXM7ZDx1O2QrKyxwKz1zKWMoZixwLEEubGVuZ3RoKTt0LmRhdGE9QX1lbHNlIGlmKGkpe3ZhciBDPWwoZixzKTt5Lmxlbmd0aD5DK3c/dC5kYXRhPXkuc3ViYXJyYXkoMCxDK3cpOih0LmRhdGE9bmV3IFVpbnQ4QXJyYXkoQyt3KSx0LmRhdGEuc2V0KHkuc3ViYXJyYXkoMCx3KSkpLHQuZGF0YS5zZXQoeS5zdWJhcnJheSgwLEMpLHcpLGMoZS5kYXRhLGYubGVuZ3RoLXMsdytDKX1lbHNlIHQuZGF0YT15LnN1YmFycmF5KDAsdyk7cmV0dXJue21pc3NpbmdHbHlwaHM6ayxtYXhTaXplT2ZJbnN0cnVjdGlvbnM6b319KGsubG9jYSxrLmdseWYsaixHLFcsVSx6KTtIPVYubWlzc2luZ0dseXBocyxNPj02NTUzNiYmay5tYXhwLmxlbmd0aD49MjImJihrLm1heHAuZGF0YVsyNl09Vi5tYXhTaXplT2ZJbnN0cnVjdGlvbnM+Pjgsay5tYXhwLmRhdGFbMjddPTI1NSZWLm1heFNpemVPZkluc3RydWN0aW9ucyl9aWYoIWsuaGhlYSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignUmVxdWlyZWQgImhoZWEiIHRhYmxlIGlzIG5vdCBmb3VuZCcpOzA9PT1rLmhoZWEuZGF0YVsxMF0mJjA9PT1rLmhoZWEuZGF0YVsxMV0mJihrLmhoZWEuZGF0YVsxMF09MjU1LGsuaGhlYS5kYXRhWzExXT0yNTUpO3ZhciBYPXt1bml0c1BlckVtOnIoay5oZWFkLmRhdGFbMThdLGsuaGVhZC5kYXRhWzE5XSkseU1heDpyKGsuaGVhZC5kYXRhWzQyXSxrLmhlYWQuZGF0YVs0M10pLHlNaW46aChrLmhlYWQuZGF0YVszOF0say5oZWFkLmRhdGFbMzldKSxhc2NlbnQ6cihrLmhoZWEuZGF0YVs0XSxrLmhoZWEuZGF0YVs1XSksZGVzY2VudDpoKGsuaGhlYS5kYXRhWzZdLGsuaGhlYS5kYXRhWzddKX07dGhpcy5hc2NlbnQ9WC5hc2NlbnQvWC51bml0c1BlckVtLHRoaXMuZGVzY2VudD1YLmRlc2NlbnQvWC51bml0c1BlckVtLGsucG9zdCYmZnVuY3Rpb24oZSxyLGEpe3ZhciBpPSh0LnN0YXJ0P3Quc3RhcnQ6MCkrZS5vZmZzZXQ7dC5wb3M9aTt2YXIgbyxzPWkrZS5sZW5ndGgsbD10LmdldEludDMyKCk7dC5nZXRCeXRlcygyOCk7dmFyIGMsdT0hMDtzd2l0Y2gobCl7Y2FzZSA2NTUzNjpvPWc7YnJlYWs7Y2FzZSAxMzEwNzI6dmFyIGY9dC5nZXRVaW50MTYoKTtpZihmIT09YSl7dT0hMTticmVha312YXIgaD1bXTtmb3IoYz0wO2M8ZjsrK2Mpe3ZhciBkPXQuZ2V0VWludDE2KCk7aWYoZD49MzI3Njgpe3U9ITE7YnJlYWt9aC5wdXNoKGQpfWlmKCF1KWJyZWFrO2Zvcih2YXIgcD1bXSxtPVtdO3QucG9zPHM7KXt2YXIgdj10LmdldEJ5dGUoKTtmb3IobS5sZW5ndGg9dixjPTA7Yzx2OysrYyltW2NdPVN0cmluZy5mcm9tQ2hhckNvZGUodC5nZXRCeXRlKCkpO3AucHVzaChtLmpvaW4oIiIpKX1mb3Iobz1bXSxjPTA7YzxmOysrYyl7dmFyIHk9aFtjXTt5PDI1OD9vLnB1c2goZ1t5XSk6by5wdXNoKHBbeS0yNThdKX1icmVhaztjYXNlIDE5NjYwODpicmVhaztkZWZhdWx0OigwLG4ud2FybikoIlVua25vd24vdW5zdXBwb3J0ZWQgcG9zdCB0YWJsZSB2ZXJzaW9uICIrbCksdT0hMSxyLmRlZmF1bHRFbmNvZGluZyYmKG89ci5kZWZhdWx0RW5jb2RpbmcpfXIuZ2x5cGhOYW1lcz1vfShrLnBvc3QscyxqKSxrLnBvc3Q9e3RhZzoicG9zdCIsZGF0YTpGKHMpfTt2YXIgWSxLPVtdO2Z1bmN0aW9uIEooZSl7cmV0dXJuIUhbZV19aWYocy5jb21wb3NpdGUpe3ZhciBRPXMuY2lkVG9HaWRNYXB8fFtdLFo9MD09PVEubGVuZ3RoO3MuY01hcC5mb3JFYWNoKChmdW5jdGlvbihlLHQpe2lmKHQ+NjU1MzUpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1heCBzaXplIG9mIENJRCBpcyA2NSw1MzUiKTt2YXIgcj0tMTtaP3I9dDp2b2lkIDAhPT1RW3RdJiYocj1RW3RdKSxyPj0wJiZyPGomJkoocikmJihLW2VdPXIpfSkpfWVsc2V7dmFyICQ9ZnVuY3Rpb24oZSx0LHIsYSl7aWYoIWUpcmV0dXJuKDAsbi53YXJuKSgiTm8gY21hcCB0YWJsZSBhdmFpbGFibGUuIikse3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9O3ZhciBpLG89KHQuc3RhcnQ/dC5zdGFydDowKStlLm9mZnNldDt0LnBvcz1vLHQuZ2V0VWludDE2KCk7Zm9yKHZhciBzLGw9dC5nZXRVaW50MTYoKSxjPSExLHU9MDt1PGw7dSsrKXt2YXIgZj10LmdldFVpbnQxNigpLGg9dC5nZXRVaW50MTYoKSxkPXQuZ2V0SW50MzIoKT4+PjAscD0hMTtpZigoIXN8fHMucGxhdGZvcm1JZCE9PWZ8fHMuZW5jb2RpbmdJZCE9PWgpJiYoMD09PWYmJjA9PT1oP3A9ITA6MT09PWYmJjA9PT1oP3A9ITA6MyE9PWZ8fDEhPT1ofHwhYSYmcz9yJiYzPT09ZiYmMD09PWgmJihwPSEwLGM9ITApOihwPSEwLHJ8fChjPSEwKSkscCYmKHM9e3BsYXRmb3JtSWQ6ZixlbmNvZGluZ0lkOmgsb2Zmc2V0OmR9KSxjKSlicmVha31pZihzJiYodC5wb3M9bytzLm9mZnNldCksIXN8fC0xPT09dC5wZWVrQnl0ZSgpKXJldHVybigwLG4ud2FybikoIkNvdWxkIG5vdCBmaW5kIGEgcHJlZmVycmVkIGNtYXAgdGFibGUuIikse3BsYXRmb3JtSWQ6LTEsZW5jb2RpbmdJZDotMSxtYXBwaW5nczpbXSxoYXNTaG9ydENtYXA6ITF9O3ZhciBtPXQuZ2V0VWludDE2KCk7dC5nZXRVaW50MTYoKSx0LmdldFVpbnQxNigpO3ZhciBnLHYseT0hMSxiPVtdO2lmKDA9PT1tKXtmb3IoZz0wO2c8MjU2O2crKyl7dmFyIHc9dC5nZXRCeXRlKCk7dyYmYi5wdXNoKHtjaGFyQ29kZTpnLGdseXBoSWQ6d30pfXk9ITB9ZWxzZSBpZig0PT09bSl7dmFyIGs9dC5nZXRVaW50MTYoKT4+MTt0LmdldEJ5dGVzKDYpO3ZhciBTLF89W107Zm9yKFM9MDtTPGs7UysrKV8ucHVzaCh7ZW5kOnQuZ2V0VWludDE2KCl9KTtmb3IodC5nZXRVaW50MTYoKSxTPTA7UzxrO1MrKylfW1NdLnN0YXJ0PXQuZ2V0VWludDE2KCk7Zm9yKFM9MDtTPGs7UysrKV9bU10uZGVsdGE9dC5nZXRVaW50MTYoKTt2YXIgeD0wO2ZvcihTPTA7UzxrO1MrKyl7aT1fW1NdO3ZhciBBPXQuZ2V0VWludDE2KCk7aWYoQSl7dmFyIEM9KEE+PjEpLShrLVMpO2kub2Zmc2V0SW5kZXg9Qyx4PU1hdGgubWF4KHgsQytpLmVuZC1pLnN0YXJ0KzEpfWVsc2UgaS5vZmZzZXRJbmRleD0tMX12YXIgUD1bXTtmb3IoZz0wO2c8eDtnKyspUC5wdXNoKHQuZ2V0VWludDE2KCkpO2ZvcihTPTA7UzxrO1MrKyl7bz0oaT1fW1NdKS5zdGFydDt2YXIgRT1pLmVuZCxUPWkuZGVsdGE7Zm9yKEM9aS5vZmZzZXRJbmRleCxnPW87Zzw9RTtnKyspNjU1MzUhPT1nJiYodj0odj1DPDA/ZzpQW0MrZy1vXSkrVCY2NTUzNSxiLnB1c2goe2NoYXJDb2RlOmcsZ2x5cGhJZDp2fSkpfX1lbHNle2lmKDYhPT1tKXJldHVybigwLG4ud2FybikoImNtYXAgdGFibGUgaGFzIHVuc3VwcG9ydGVkIGZvcm1hdDogIittKSx7cGxhdGZvcm1JZDotMSxlbmNvZGluZ0lkOi0xLG1hcHBpbmdzOltdLGhhc1Nob3J0Q21hcDohMX07dmFyIFI9dC5nZXRVaW50MTYoKSxPPXQuZ2V0VWludDE2KCk7Zm9yKGc9MDtnPE87ZysrKXt2PXQuZ2V0VWludDE2KCk7dmFyIEk9UitnO2IucHVzaCh7Y2hhckNvZGU6SSxnbHlwaElkOnZ9KX19Zm9yKGIuc29ydCgoZnVuY3Rpb24oZSx0KXtyZXR1cm4gZS5jaGFyQ29kZS10LmNoYXJDb2RlfSkpLHU9MTt1PGIubGVuZ3RoO3UrKyliW3UtMV0uY2hhckNvZGU9PT1iW3VdLmNoYXJDb2RlJiYoYi5zcGxpY2UodSwxKSx1LS0pO3JldHVybntwbGF0Zm9ybUlkOnMucGxhdGZvcm1JZCxlbmNvZGluZ0lkOnMuZW5jb2RpbmdJZCxtYXBwaW5nczpiLGhhc1Nob3J0Q21hcDp5fX0oay5jbWFwLHQsdGhpcy5pc1N5bWJvbGljRm9udCxzLmhhc0VuY29kaW5nKSxlZT0kLnBsYXRmb3JtSWQsdGU9JC5lbmNvZGluZ0lkLHJlPSQubWFwcGluZ3MsbmU9cmUubGVuZ3RoO2lmKHMuaGFzRW5jb2RpbmcmJigzPT09ZWUmJjE9PT10ZXx8MT09PWVlJiYwPT09dGUpfHwtMT09PWVlJiYtMT09PXRlJiYoMCxvLmdldEVuY29kaW5nKShzLmJhc2VFbmNvZGluZ05hbWUpKXt2YXIgYWU9W107Ik1hY1JvbWFuRW5jb2RpbmciIT09cy5iYXNlRW5jb2RpbmdOYW1lJiYiV2luQW5zaUVuY29kaW5nIiE9PXMuYmFzZUVuY29kaW5nTmFtZXx8KGFlPSgwLG8uZ2V0RW5jb2RpbmcpKHMuYmFzZUVuY29kaW5nTmFtZSkpO3ZhciBpZT0oMCxpLmdldEdseXBoc1VuaWNvZGUpKCk7Zm9yKFk9MDtZPDI1NjtZKyspe3ZhciBvZSxzZTtpZihvZT10aGlzLmRpZmZlcmVuY2VzJiZZIGluIHRoaXMuZGlmZmVyZW5jZXM/dGhpcy5kaWZmZXJlbmNlc1tZXTpZIGluIGFlJiYiIiE9PWFlW1ldP2FlW1ldOm8uU3RhbmRhcmRFbmNvZGluZ1tZXSl7dmFyIGxlO3NlPWIob2UsaWUpLDM9PT1lZSYmMT09PXRlP2xlPWllW3NlXToxPT09ZWUmJjA9PT10ZSYmKGxlPW8uTWFjUm9tYW5FbmNvZGluZy5pbmRleE9mKHNlKSk7Zm9yKHZhciBjZT0hMSx1ZT0wO3VlPG5lOysrdWUpaWYocmVbdWVdLmNoYXJDb2RlPT09bGUpe0tbWV09cmVbdWVdLmdseXBoSWQsY2U9ITA7YnJlYWt9aWYoIWNlJiZzLmdseXBoTmFtZXMpe3ZhciBmZT1zLmdseXBoTmFtZXMuaW5kZXhPZihvZSk7LTE9PT1mZSYmc2UhPT1vZSYmKGZlPXMuZ2x5cGhOYW1lcy5pbmRleE9mKHNlKSksZmU+MCYmSihmZSkmJihLW1ldPWZlKX19fX1lbHNlIGlmKDA9PT1lZSYmMD09PXRlKWZvcih2YXIgaGU9MDtoZTxuZTsrK2hlKUtbcmVbaGVdLmNoYXJDb2RlXT1yZVtoZV0uZ2x5cGhJZDtlbHNlIGZvcih2YXIgZGU9MDtkZTxuZTsrK2RlKVk9cmVbZGVdLmNoYXJDb2RlLDM9PT1lZSYmWT49NjE0NDAmJlk8PTYxNjk1JiYoWSY9MjU1KSxLW1ldPXJlW2RlXS5nbHlwaElkfTA9PT1LLmxlbmd0aCYmKEtbMF09MCk7dmFyIHBlPUItMTtVfHwocGU9MCk7dmFyIG1lPVIoSyxKLHBlKTtpZih0aGlzLnRvRm9udENoYXI9bWUudG9Gb250Q2hhcixrLmNtYXA9e3RhZzoiY21hcCIsZGF0YTpPKG1lLmNoYXJDb2RlVG9HbHlwaElkLEIpfSxrWyJPUy8yIl0mJmZ1bmN0aW9uKGUpe3ZhciB0PW5ldyBmLlN0cmVhbShlLmRhdGEpLHI9dC5nZXRVaW50MTYoKTt0LmdldEJ5dGVzKDYwKTt2YXIgbj10LmdldFVpbnQxNigpO3JldHVybiEocjw0JiY3Njgmbnx8dC5nZXRVaW50MTYoKT50LmdldFVpbnQxNigpfHwodC5nZXRCeXRlcyg2KSwwPT09dC5nZXRVaW50MTYoKXx8KGUuZGF0YVs4XT1lLmRhdGFbOV09MCwwKSkpfShrWyJPUy8yIl0pfHwoa1siT1MvMiJdPXt0YWc6Ik9TLzIiLGRhdGE6SShzLG1lLmNoYXJDb2RlVG9HbHlwaElkLFgpfSksIUQpdHJ5e3g9bmV3IGYuU3RyZWFtKGtbIkNGRiAiXS5kYXRhKSwoUz1uZXcgYS5DRkZQYXJzZXIoeCxzLCEwKS5wYXJzZSgpKS5kdXBsaWNhdGVGaXJzdEdseXBoKCk7dmFyIGdlPW5ldyBhLkNGRkNvbXBpbGVyKFMpO2tbIkNGRiAiXS5kYXRhPWdlLmNvbXBpbGUoKX1jYXRjaChlKXsoMCxuLndhcm4pKCJGYWlsZWQgdG8gY29tcGlsZSBmb250ICIrcy5sb2FkZWROYW1lKX1pZihrLm5hbWUpe3ZhciB2ZT15KGsubmFtZSk7ay5uYW1lLmRhdGE9TChlLHZlKX1lbHNlIGsubmFtZT17dGFnOiJuYW1lIixkYXRhOkwodGhpcy5uYW1lKX07dmFyIHllPW5ldyBfKHcudmVyc2lvbik7Zm9yKHZhciBiZSBpbiBrKXllLmFkZFRhYmxlKGJlLGtbYmVdLmRhdGEpO3JldHVybiB5ZS50b0FycmF5KCl9LGNvbnZlcnQ6ZnVuY3Rpb24oZSx0LHIpe3IuZml4ZWRQaXRjaD0hMSxyLmJ1aWx0SW5FbmNvZGluZyYmZnVuY3Rpb24oZSx0KXtpZighZS5oYXNJbmNsdWRlZFRvVW5pY29kZU1hcCYmIShlLmhhc0VuY29kaW5nfHx0PT09ZS5kZWZhdWx0RW5jb2Rpbmd8fGUudG9Vbmljb2RlIGluc3RhbmNlb2YgUykpe3ZhciByPVtdLG49KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpO2Zvcih2YXIgYSBpbiB0KXt2YXIgbz10W2FdLHM9KDAsbC5nZXRVbmljb2RlRm9yR2x5cGgpKG8sbik7LTEhPT1zJiYoclthXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHMpKX1lLnRvVW5pY29kZS5hbWVuZChyKX19KHIsci5idWlsdEluRW5jb2RpbmcpO3ZhciBhPTE7dCBpbnN0YW5jZW9mIEUmJihhPXQubnVtR2x5cGhzLTEpO3ZhciBzPXQuZ2V0R2x5cGhNYXBwaW5nKHIpLGM9UihzLHQuaGFzR2x5cGhJZC5iaW5kKHQpLGEpO3RoaXMudG9Gb250Q2hhcj1jLnRvRm9udENoYXI7dmFyIHU9dC5udW1HbHlwaHM7ZnVuY3Rpb24gZihlLHQpe3ZhciByPW51bGw7Zm9yKHZhciBuIGluIGUpdD09PWVbbl0mJihyfHwocj1bXSksci5wdXNoKDB8bikpO3JldHVybiByfWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHIgaW4gZSlpZih0PT09ZVtyXSlyZXR1cm4gMHxyO3JldHVybiBjLmNoYXJDb2RlVG9HbHlwaElkW2MubmV4dEF2YWlsYWJsZUZvbnRDaGFyQ29kZV09dCxjLm5leHRBdmFpbGFibGVGb250Q2hhckNvZGUrK312YXIgZD10LnNlYWNzO2lmKGQmJmQubGVuZ3RoKXt2YXIgcD1yLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgsbT10LmdldENoYXJzZXQoKSxnPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciB2IGluIGQpe3ZhciB5PWRbdnw9MF0sYj1vLlN0YW5kYXJkRW5jb2RpbmdbeVsyXV0sdz1vLlN0YW5kYXJkRW5jb2RpbmdbeVszXV0saz1tLmluZGV4T2YoYiksQz1tLmluZGV4T2Yodyk7aWYoIShrPDB8fEM8MCkpe3ZhciBQPXt4OnlbMF0qcFswXSt5WzFdKnBbMl0rcFs0XSx5OnlbMF0qcFsxXSt5WzFdKnBbM10rcFs1XX0sVD1mKHMsdik7aWYoVClmb3IodmFyIEQ9MCxOPVQubGVuZ3RoO0Q8TjtEKyspe3ZhciBNPVRbRF0saj1jLmNoYXJDb2RlVG9HbHlwaElkLEI9aChqLGspLFU9aChqLEMpO2dbTV09e2Jhc2VGb250Q2hhckNvZGU6QixhY2NlbnRGb250Q2hhckNvZGU6VSxhY2NlbnRPZmZzZXQ6UH19fX1yLnNlYWNNYXA9Z312YXIgcT0xLyhyLmZvbnRNYXRyaXh8fG4uRk9OVF9JREVOVElUWV9NQVRSSVgpWzBdLHo9bmV3IF8oIk9UVE8iKTtyZXR1cm4gei5hZGRUYWJsZSgiQ0ZGICIsdC5kYXRhKSx6LmFkZFRhYmxlKCJPUy8yIixJKHIsYy5jaGFyQ29kZVRvR2x5cGhJZCkpLHouYWRkVGFibGUoImNtYXAiLE8oYy5jaGFyQ29kZVRvR2x5cGhJZCx1KSksei5hZGRUYWJsZSgiaGVhZCIsIlwwAVwwXDBcMFwwEFwwXDBcMFwwXDBfDzzDtVwwXDAiK0EocSkrIlwwXDBcMFwwwp5cdn4nXDBcMFwwXDDCnlx2fidcMFwwIitBKHIuZGVzY2VudCkrIg/DvyIrQShyLmFzY2VudCkreChyLml0YWxpY0FuZ2xlPzI6MCkrIlwwEVwwXDBcMFwwXDBcMCIpLHouYWRkVGFibGUoImhoZWEiLCJcMAFcMFwwIitBKHIuYXNjZW50KStBKHIuZGVzY2VudCkrIlwwXDDDv8O/XDBcMFwwXDBcMFwwIitBKHIuY2FwSGVpZ2h0KStBKE1hdGgudGFuKHIuaXRhbGljQW5nbGUpKnIueEhlaWdodCkrIlwwXDBcMFwwXDBcMFwwXDBcMFwwXDBcMCIreCh1KSksei5hZGRUYWJsZSgiaG10eCIsZnVuY3Rpb24oKXtmb3IodmFyIGU9dC5jaGFyc3RyaW5ncyxyPXQuY2ZmP3QuY2ZmLndpZHRoczpudWxsLG49IlwwXDBcMFwwIixhPTEsaT11O2E8aTthKyspe3ZhciBvPTA7aWYoZSl7dmFyIHM9ZVthLTFdO289IndpZHRoImluIHM/cy53aWR0aDowfWVsc2UgciYmKG89TWF0aC5jZWlsKHJbYV18fDApKTtuKz14KG8pK3goMCl9cmV0dXJuIG59KCkpLHouYWRkVGFibGUoIm1heHAiLCJcMFwwUFwwIit4KHUpKSx6LmFkZFRhYmxlKCJuYW1lIixMKGUpKSx6LmFkZFRhYmxlKCJwb3N0IixGKHIpKSx6LnRvQXJyYXkoKX0sZ2V0IHNwYWNlV2lkdGgoKXtpZigiX3NoYWRvd1dpZHRoImluIHRoaXMpcmV0dXJuIHRoaXMuX3NoYWRvd1dpZHRoO2Zvcih2YXIgZSx0PVsic3BhY2UiLCJtaW51cyIsIm9uZSIsImkiLCJJIl0scj0wLG49dC5sZW5ndGg7cjxuO3IrKyl7dmFyIGE9dFtyXTtpZihhIGluIHRoaXMud2lkdGhzKXtlPXRoaXMud2lkdGhzW2FdO2JyZWFrfXZhciBvPSgwLGkuZ2V0R2x5cGhzVW5pY29kZSkoKVthXSxzPTA7aWYodGhpcy5jb21wb3NpdGUmJnRoaXMuY01hcC5jb250YWlucyhvKSYmKHM9dGhpcy5jTWFwLmxvb2t1cChvKSksIXMmJnRoaXMudG9Vbmljb2RlJiYocz10aGlzLnRvVW5pY29kZS5jaGFyQ29kZU9mKG8pKSxzPD0wJiYocz1vKSxlPXRoaXMud2lkdGhzW3NdKWJyZWFrfXJldHVybiBlPWV8fHRoaXMuZGVmYXVsdFdpZHRoLHRoaXMuX3NoYWRvd1dpZHRoPWUsZX0sY2hhclRvR2x5cGg6ZnVuY3Rpb24oZSx0KXt2YXIgcixhLGksbz1lO3RoaXMuY01hcCYmdGhpcy5jTWFwLmNvbnRhaW5zKGUpJiYobz10aGlzLmNNYXAubG9va3VwKGUpKSxhPXRoaXMud2lkdGhzW29dLGE9KDAsbi5pc051bSkoYSk/YTp0aGlzLmRlZmF1bHRXaWR0aDt2YXIgcz10aGlzLnZtZXRyaWNzJiZ0aGlzLnZtZXRyaWNzW29dLGM9dGhpcy50b1VuaWNvZGUuZ2V0KGUpfHx0aGlzLmZhbGxiYWNrVG9Vbmljb2RlLmdldChlKXx8ZTsibnVtYmVyIj09dHlwZW9mIGMmJihjPVN0cmluZy5mcm9tQ2hhckNvZGUoYykpO3ZhciB1PWUgaW4gdGhpcy50b0ZvbnRDaGFyO3I9dGhpcy50b0ZvbnRDaGFyW2VdfHxlLHRoaXMubWlzc2luZ0ZpbGUmJihyPSgwLGwubWFwU3BlY2lhbFVuaWNvZGVWYWx1ZXMpKHIpKSx0aGlzLmlzVHlwZTNGb250JiYoaT1yKTt2YXIgZj1udWxsO2lmKHRoaXMuc2VhY01hcCYmdGhpcy5zZWFjTWFwW2VdKXt1PSEwO3ZhciBoPXRoaXMuc2VhY01hcFtlXTtyPWguYmFzZUZvbnRDaGFyQ29kZSxmPXtmb250Q2hhcjpTdHJpbmcuZnJvbUNvZGVQb2ludChoLmFjY2VudEZvbnRDaGFyQ29kZSksb2Zmc2V0OmguYWNjZW50T2Zmc2V0fX12YXIgZD0ibnVtYmVyIj09dHlwZW9mIHI/U3RyaW5nLmZyb21Db2RlUG9pbnQocik6IiIscD10aGlzLmdseXBoQ2FjaGVbZV07cmV0dXJuIHAmJnAubWF0Y2hlc0ZvckNhY2hlKGQsYyxmLGEscyxpLHQsdSl8fChwPW5ldyB3KGQsYyxmLGEscyxpLHQsdSksdGhpcy5nbHlwaENhY2hlW2VdPXApLHB9LGNoYXJzVG9HbHlwaHM6ZnVuY3Rpb24oZSl7dmFyIHQscixuLGE9dGhpcy5jaGFyc0NhY2hlO2lmKGEmJih0PWFbZV0pKXJldHVybiB0O2F8fChhPXRoaXMuY2hhcnNDYWNoZT1PYmplY3QuY3JlYXRlKG51bGwpKSx0PVtdO3ZhciBpLG89ZSxzPTA7aWYodGhpcy5jTWFwKWZvcih2YXIgbD1PYmplY3QuY3JlYXRlKG51bGwpO3M8ZS5sZW5ndGg7KXt0aGlzLmNNYXAucmVhZENoYXJDb2RlKGUscyxsKSxuPWwuY2hhcmNvZGU7dmFyIGM9bC5sZW5ndGg7cys9Yzt2YXIgdT0xPT09YyYmMzI9PT1lLmNoYXJDb2RlQXQocy0xKTtyPXRoaXMuY2hhclRvR2x5cGgobix1KSx0LnB1c2gocil9ZWxzZSBmb3Iocz0wLGk9ZS5sZW5ndGg7czxpOysrcyluPWUuY2hhckNvZGVBdChzKSxyPXRoaXMuY2hhclRvR2x5cGgobiwzMj09PW4pLHQucHVzaChyKTtyZXR1cm4gYVtvXT10fSxnZXQgZ2x5cGhDYWNoZVZhbHVlcygpe3JldHVybiBPYmplY3QudmFsdWVzKHRoaXMuZ2x5cGhDYWNoZSl9fSxlfSgpO3QuRm9udD14O3ZhciBBPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLmVycm9yPWUsdGhpcy5sb2FkZWROYW1lPSJnX2ZvbnRfZXJyb3IiLHRoaXMubWlzc2luZ0ZpbGU9ITB9cmV0dXJuIGUucHJvdG90eXBlPXtjaGFyc1RvR2x5cGhzOmZ1bmN0aW9uKCl7cmV0dXJuW119LGV4cG9ydERhdGE6ZnVuY3Rpb24oKXtyZXR1cm57ZXJyb3I6dGhpcy5lcnJvcn19fSxlfSgpO2Z1bmN0aW9uIEMoZSx0LHIpe3ZhciBuLGEscyxsPU9iamVjdC5jcmVhdGUobnVsbCksYz0hIShlLmZsYWdzJm0uU3ltYm9saWMpO2lmKGUuYmFzZUVuY29kaW5nTmFtZSlmb3Iocz0oMCxvLmdldEVuY29kaW5nKShlLmJhc2VFbmNvZGluZ05hbWUpLGE9MDthPHMubGVuZ3RoO2ErKyluPXIuaW5kZXhPZihzW2FdKSxsW2FdPW4+PTA/bjowO2Vsc2UgaWYoYylmb3IoYSBpbiB0KWxbYV09dFthXTtlbHNlIGZvcihzPW8uU3RhbmRhcmRFbmNvZGluZyxhPTA7YTxzLmxlbmd0aDthKyspbj1yLmluZGV4T2Yoc1thXSksbFthXT1uPj0wP246MDt2YXIgdSxmPWUuZGlmZmVyZW5jZXM7aWYoZilmb3IoYSBpbiBmKXt2YXIgaD1mW2FdO2lmKC0xPT09KG49ci5pbmRleE9mKGgpKSl7dXx8KHU9KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpKTt2YXIgZD1iKGgsdSk7ZCE9PWgmJihuPXIuaW5kZXhPZihkKSl9bFthXT1uPj0wP246MH1yZXR1cm4gbH10LkVycm9yRm9udD1BO3ZhciBQPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQscil7Zm9yKHZhciBhLGk9ZS5sZW5ndGgsbz10Lmxlbmd0aCxzPWktbyxsPXIsYz0hMTtsPHM7KXtmb3IoYT0wO2E8byYmZVtsK2FdPT09dFthXTspYSsrO2lmKGE+PW8pe2ZvcihsKz1hO2w8aSYmKDAsbi5pc1NwYWNlKShlW2xdKTspbCsrO2M9ITA7YnJlYWt9bCsrfXJldHVybntmb3VuZDpjLGxlbmd0aDpsfX1mdW5jdGlvbiB0KHQscixhKXt2YXIgaT1hLmxlbmd0aDEsbz0oYS5sZW5ndGgyLHIucGVla0J5dGVzKDYpKSxzPTEyOD09PW9bMF0mJjE9PT1vWzFdO3MmJihyLnNraXAoNiksaT1vWzVdPDwyNHxvWzRdPDwxNnxvWzNdPDw4fG9bMl0pO3ZhciBsPWZ1bmN0aW9uKHQscil7dmFyIGEsaSxvLHMsbD1bMTAxLDEwMSwxMjAsMTAxLDk5XSxjPXQucG9zO3RyeXtpPShhPXQuZ2V0Qnl0ZXMocikpLmxlbmd0aH1jYXRjaChlKXtpZihlIGluc3RhbmNlb2Ygbi5NaXNzaW5nRGF0YUV4Y2VwdGlvbil0aHJvdyBlfWlmKGk9PT1yJiYobz1lKGEsbCxyLTIqbC5sZW5ndGgpKS5mb3VuZCYmby5sZW5ndGg9PT1yKXJldHVybntzdHJlYW06bmV3IGYuU3RyZWFtKGEpLGxlbmd0aDpyfTtmb3IoKDAsbi53YXJuKSgnSW52YWxpZCAiTGVuZ3RoMSIgcHJvcGVydHkgaW4gVHlwZTEgZm9udCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4nKSx0LnBvcz1jOzAhPT0obz1lKHQucGVla0J5dGVzKDIwNDgpLGwsMCkpLmxlbmd0aDspaWYodC5wb3MrPW8ubGVuZ3RoLG8uZm91bmQpe3M9dC5wb3MtYzticmVha31yZXR1cm4gdC5wb3M9YyxzP3tzdHJlYW06bmV3IGYuU3RyZWFtKHQuZ2V0Qnl0ZXMocykpLGxlbmd0aDpzfTooKDAsbi53YXJuKSgnVW5hYmxlIHRvIHJlY292ZXIgIkxlbmd0aDEiIHByb3BlcnR5IGluIFR5cGUxIGZvbnQgLS0gdXNpbmcgYXMgaXMuJykse3N0cmVhbTpuZXcgZi5TdHJlYW0odC5nZXRCeXRlcyhyKSksbGVuZ3RoOnJ9KX0ocixpKTtuZXcgaC5UeXBlMVBhcnNlcihsLnN0cmVhbSwhMSwhMCkuZXh0cmFjdEZvbnRIZWFkZXIoYSkscyYmKChvPXIuZ2V0Qnl0ZXMoNikpWzVdLG9bNF0sb1szXSxvWzJdKTt2YXIgYyx1PShjPXIuZ2V0Qnl0ZXMoKSx7c3RyZWFtOm5ldyBmLlN0cmVhbShjKSxsZW5ndGg6Yy5sZW5ndGh9KSxkPW5ldyBoLlR5cGUxUGFyc2VyKHUuc3RyZWFtLCEwLCEwKS5leHRyYWN0Rm9udFByb2dyYW0oKTtmb3IodmFyIHAgaW4gZC5wcm9wZXJ0aWVzKWFbcF09ZC5wcm9wZXJ0aWVzW3BdO3ZhciBtPWQuY2hhcnN0cmluZ3MsZz10aGlzLmdldFR5cGUyQ2hhcnN0cmluZ3MobSksdj10aGlzLmdldFR5cGUyU3VicnMoZC5zdWJycyk7dGhpcy5jaGFyc3RyaW5ncz1tLHRoaXMuZGF0YT10aGlzLndyYXAodCxnLHRoaXMuY2hhcnN0cmluZ3MsdixhKSx0aGlzLnNlYWNzPXRoaXMuZ2V0U2VhY3MoZC5jaGFyc3RyaW5ncyl9cmV0dXJuIHQucHJvdG90eXBlPXtnZXQgbnVtR2x5cGhzKCl7cmV0dXJuIHRoaXMuY2hhcnN0cmluZ3MubGVuZ3RoKzF9LGdldENoYXJzZXQ6ZnVuY3Rpb24oKXtmb3IodmFyIGU9WyIubm90ZGVmIl0sdD10aGlzLmNoYXJzdHJpbmdzLHI9MDtyPHQubGVuZ3RoO3IrKyllLnB1c2godFtyXS5nbHlwaE5hbWUpO3JldHVybiBlfSxnZXRHbHlwaE1hcHBpbmc6ZnVuY3Rpb24oZSl7dmFyIHQscj10aGlzLmNoYXJzdHJpbmdzLG49WyIubm90ZGVmIl07Zm9yKHQ9MDt0PHIubGVuZ3RoO3QrKyluLnB1c2goclt0XS5nbHlwaE5hbWUpO3ZhciBhPWUuYnVpbHRJbkVuY29kaW5nO2lmKGEpe3ZhciBpPU9iamVjdC5jcmVhdGUobnVsbCk7Zm9yKHZhciBvIGluIGEpKHQ9bi5pbmRleE9mKGFbb10pKT49MCYmKGlbb109dCl9cmV0dXJuIEMoZSxpLG4pfSxoYXNHbHlwaElkOmZ1bmN0aW9uKGUpe3JldHVybiEoZTwwfHxlPj10aGlzLm51bUdseXBocykmJigwPT09ZXx8dGhpcy5jaGFyc3RyaW5nc1tlLTFdLmNoYXJzdHJpbmcubGVuZ3RoPjApfSxnZXRTZWFjczpmdW5jdGlvbihlKXt2YXIgdCxyLG49W107Zm9yKHQ9MCxyPWUubGVuZ3RoO3Q8cjt0Kyspe3ZhciBhPWVbdF07YS5zZWFjJiYoblt0KzFdPWEuc2VhYyl9cmV0dXJuIG59LGdldFR5cGUyQ2hhcnN0cmluZ3M6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjtyKyspdC5wdXNoKGVbcl0uY2hhcnN0cmluZyk7cmV0dXJuIHR9LGdldFR5cGUyU3VicnM6ZnVuY3Rpb24oZSl7dmFyIHQ9MCxyPWUubGVuZ3RoO3Q9cjwxMTMzPzEwNzpyPDMzNzY5PzExMzE6MzI3Njg7dmFyIG4sYT1bXTtmb3Iobj0wO248dDtuKyspYS5wdXNoKFsxMV0pO2ZvcihuPTA7bjxyO24rKylhLnB1c2goZVtuXSk7cmV0dXJuIGF9LHdyYXA6ZnVuY3Rpb24oZSx0LHIsbixpKXt2YXIgbz1uZXcgYS5DRkY7by5oZWFkZXI9bmV3IGEuQ0ZGSGVhZGVyKDEsMCw0LDQpLG8ubmFtZXM9W2VdO3ZhciBzPW5ldyBhLkNGRlRvcERpY3Q7cy5zZXRCeU5hbWUoInZlcnNpb24iLDM5MSkscy5zZXRCeU5hbWUoIk5vdGljZSIsMzkyKSxzLnNldEJ5TmFtZSgiRnVsbE5hbWUiLDM5Mykscy5zZXRCeU5hbWUoIkZhbWlseU5hbWUiLDM5NCkscy5zZXRCeU5hbWUoIldlaWdodCIsMzk1KSxzLnNldEJ5TmFtZSgiRW5jb2RpbmciLG51bGwpLHMuc2V0QnlOYW1lKCJGb250TWF0cml4IixpLmZvbnRNYXRyaXgpLHMuc2V0QnlOYW1lKCJGb250QkJveCIsaS5iYm94KSxzLnNldEJ5TmFtZSgiY2hhcnNldCIsbnVsbCkscy5zZXRCeU5hbWUoIkNoYXJTdHJpbmdzIixudWxsKSxzLnNldEJ5TmFtZSgiUHJpdmF0ZSIsbnVsbCksby50b3BEaWN0PXM7dmFyIGw9bmV3IGEuQ0ZGU3RyaW5ncztsLmFkZCgiVmVyc2lvbiAwLjExIiksbC5hZGQoIlNlZSBvcmlnaW5hbCBub3RpY2UiKSxsLmFkZChlKSxsLmFkZChlKSxsLmFkZCgiTWVkaXVtIiksby5zdHJpbmdzPWwsby5nbG9iYWxTdWJySW5kZXg9bmV3IGEuQ0ZGSW5kZXg7dmFyIGMsdSxmPXQubGVuZ3RoLGg9WzBdO2ZvcihjPTA7YzxmO2MrKyl7dmFyIGQ9YS5DRkZTdGFuZGFyZFN0cmluZ3MuaW5kZXhPZihyW2NdLmdseXBoTmFtZSk7LTE9PT1kJiYoZD0wKSxoLnB1c2goZD4+OCYyNTUsMjU1JmQpfW8uY2hhcnNldD1uZXcgYS5DRkZDaGFyc2V0KCExLDAsW10saCk7dmFyIHA9bmV3IGEuQ0ZGSW5kZXg7Zm9yKHAuYWRkKFsxMzksMTRdKSxjPTA7YzxmO2MrKylwLmFkZCh0W2NdKTtvLmNoYXJTdHJpbmdzPXA7dmFyIG09bmV3IGEuQ0ZGUHJpdmF0ZURpY3Q7bS5zZXRCeU5hbWUoIlN1YnJzIixudWxsKTt2YXIgZz1bIkJsdWVWYWx1ZXMiLCJPdGhlckJsdWVzIiwiRmFtaWx5Qmx1ZXMiLCJGYW1pbHlPdGhlckJsdWVzIiwiU3RlbVNuYXBIIiwiU3RlbVNuYXBWIiwiQmx1ZVNoaWZ0IiwiQmx1ZUZ1enoiLCJCbHVlU2NhbGUiLCJMYW5ndWFnZUdyb3VwIiwiRXhwYW5zaW9uRmFjdG9yIiwiRm9yY2VCb2xkIiwiU3RkSFciLCJTdGRWVyJdO2ZvcihjPTAsdT1nLmxlbmd0aDtjPHU7YysrKXt2YXIgdj1nW2NdO2lmKHYgaW4gaS5wcml2YXRlRGF0YSl7dmFyIHk9aS5wcml2YXRlRGF0YVt2XTtpZihBcnJheS5pc0FycmF5KHkpKWZvcih2YXIgYj15Lmxlbmd0aC0xO2I+MDtiLS0peVtiXS09eVtiLTFdO20uc2V0QnlOYW1lKHYseSl9fW8udG9wRGljdC5wcml2YXRlRGljdD1tO3ZhciB3PW5ldyBhLkNGRkluZGV4O2ZvcihjPTAsdT1uLmxlbmd0aDtjPHU7YysrKXcuYWRkKG5bY10pO3JldHVybiBtLnN1YnJzSW5kZXg9dyxuZXcgYS5DRkZDb21waWxlcihvKS5jb21waWxlKCl9fSx0fSgpLEU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5wcm9wZXJ0aWVzPXQ7dmFyIHI9bmV3IGEuQ0ZGUGFyc2VyKGUsdCwhMCk7dGhpcy5jZmY9ci5wYXJzZSgpLHRoaXMuY2ZmLmR1cGxpY2F0ZUZpcnN0R2x5cGgoKTt2YXIgaT1uZXcgYS5DRkZDb21waWxlcih0aGlzLmNmZik7dGhpcy5zZWFjcz10aGlzLmNmZi5zZWFjczt0cnl7dGhpcy5kYXRhPWkuY29tcGlsZSgpfWNhdGNoKHIpeygwLG4ud2FybikoIkZhaWxlZCB0byBjb21waWxlIGZvbnQgIit0LmxvYWRlZE5hbWUpLHRoaXMuZGF0YT1lfX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldCBudW1HbHlwaHMoKXtyZXR1cm4gdGhpcy5jZmYuY2hhclN0cmluZ3MuY291bnR9LGdldENoYXJzZXQ6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jZmYuY2hhcnNldC5jaGFyc2V0fSxnZXRHbHlwaE1hcHBpbmc6ZnVuY3Rpb24oKXt2YXIgZSx0LHI9dGhpcy5jZmYsbj10aGlzLnByb3BlcnRpZXMsYT1yLmNoYXJzZXQuY2hhcnNldDtpZihuLmNvbXBvc2l0ZSl7aWYoZT1PYmplY3QuY3JlYXRlKG51bGwpLHIuaXNDSURGb250KWZvcih0PTA7dDxhLmxlbmd0aDt0Kyspe3ZhciBpPWFbdF07ZVtuLmNNYXAuY2hhckNvZGVPZihpKV09dH1lbHNlIGZvcih0PTA7dDxyLmNoYXJTdHJpbmdzLmNvdW50O3QrKyllW3RdPXQ7cmV0dXJuIGV9cmV0dXJuIGU9QyhuLHIuZW5jb2Rpbmc/ci5lbmNvZGluZy5lbmNvZGluZzpudWxsLGEpfSxoYXNHbHlwaElkOmZ1bmN0aW9uKGUpe3JldHVybiB0aGlzLmNmZi5oYXNHbHlwaElkKGUpfX0sZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5DRkZGRFNlbGVjdD10LkNGRkNvbXBpbGVyPXQuQ0ZGUHJpdmF0ZURpY3Q9dC5DRkZUb3BEaWN0PXQuQ0ZGQ2hhcnNldD10LkNGRkluZGV4PXQuQ0ZGU3RyaW5ncz10LkNGRkhlYWRlcj10LkNGRj10LkNGRlBhcnNlcj10LkNGRlN0YW5kYXJkU3RyaW5ncz12b2lkIDA7dmFyIG49cig2KSxhPXIoMTc1KSxpPXIoMTc2KSxvPVsiLm5vdGRlZiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3RlcmlnaHQiLCJwYXJlbmxlZnQiLCJwYXJlbnJpZ2h0IiwiYXN0ZXJpc2siLCJwbHVzIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJzbGFzaCIsInplcm8iLCJvbmUiLCJ0d28iLCJ0aHJlZSIsImZvdXIiLCJmaXZlIiwic2l4Iiwic2V2ZW4iLCJlaWdodCIsIm5pbmUiLCJjb2xvbiIsInNlbWljb2xvbiIsImxlc3MiLCJlcXVhbCIsImdyZWF0ZXIiLCJxdWVzdGlvbiIsImF0IiwiQSIsIkIiLCJDIiwiRCIsIkUiLCJGIiwiRyIsIkgiLCJJIiwiSiIsIksiLCJMIiwiTSIsIk4iLCJPIiwiUCIsIlEiLCJSIiwiUyIsIlQiLCJVIiwiViIsIlciLCJYIiwiWSIsIloiLCJicmFja2V0bGVmdCIsImJhY2tzbGFzaCIsImJyYWNrZXRyaWdodCIsImFzY2lpY2lyY3VtIiwidW5kZXJzY29yZSIsInF1b3RlbGVmdCIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiZnJhY3Rpb24iLCJ5ZW4iLCJmbG9yaW4iLCJzZWN0aW9uIiwiY3VycmVuY3kiLCJxdW90ZXNpbmdsZSIsInF1b3RlZGJsbGVmdCIsImd1aWxsZW1vdGxlZnQiLCJndWlsc2luZ2xsZWZ0IiwiZ3VpbHNpbmdscmlnaHQiLCJmaSIsImZsIiwiZW5kYXNoIiwiZGFnZ2VyIiwiZGFnZ2VyZGJsIiwicGVyaW9kY2VudGVyZWQiLCJwYXJhZ3JhcGgiLCJidWxsZXQiLCJxdW90ZXNpbmdsYmFzZSIsInF1b3RlZGJsYmFzZSIsInF1b3RlZGJscmlnaHQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwicGVydGhvdXNhbmQiLCJxdWVzdGlvbmRvd24iLCJncmF2ZSIsImFjdXRlIiwiY2lyY3VtZmxleCIsInRpbGRlIiwibWFjcm9uIiwiYnJldmUiLCJkb3RhY2NlbnQiLCJkaWVyZXNpcyIsInJpbmciLCJjZWRpbGxhIiwiaHVuZ2FydW1sYXV0Iiwib2dvbmVrIiwiY2Fyb24iLCJlbWRhc2giLCJBRSIsIm9yZGZlbWluaW5lIiwiTHNsYXNoIiwiT3NsYXNoIiwiT0UiLCJvcmRtYXNjdWxpbmUiLCJhZSIsImRvdGxlc3NpIiwibHNsYXNoIiwib3NsYXNoIiwib2UiLCJnZXJtYW5kYmxzIiwib25lc3VwZXJpb3IiLCJsb2dpY2Fsbm90IiwibXUiLCJ0cmFkZW1hcmsiLCJFdGgiLCJvbmVoYWxmIiwicGx1c21pbnVzIiwiVGhvcm4iLCJvbmVxdWFydGVyIiwiZGl2aWRlIiwiYnJva2VuYmFyIiwiZGVncmVlIiwidGhvcm4iLCJ0aHJlZXF1YXJ0ZXJzIiwidHdvc3VwZXJpb3IiLCJyZWdpc3RlcmVkIiwibWludXMiLCJldGgiLCJtdWx0aXBseSIsInRocmVlc3VwZXJpb3IiLCJjb3B5cmlnaHQiLCJBYWN1dGUiLCJBY2lyY3VtZmxleCIsIkFkaWVyZXNpcyIsIkFncmF2ZSIsIkFyaW5nIiwiQXRpbGRlIiwiQ2NlZGlsbGEiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIkVncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiSWdyYXZlIiwiTnRpbGRlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPZGllcmVzaXMiLCJPZ3JhdmUiLCJPdGlsZGUiLCJTY2Fyb24iLCJVYWN1dGUiLCJVY2lyY3VtZmxleCIsIlVkaWVyZXNpcyIsIlVncmF2ZSIsIllhY3V0ZSIsIllkaWVyZXNpcyIsIlpjYXJvbiIsImFhY3V0ZSIsImFjaXJjdW1mbGV4IiwiYWRpZXJlc2lzIiwiYWdyYXZlIiwiYXJpbmciLCJhdGlsZGUiLCJjY2VkaWxsYSIsImVhY3V0ZSIsImVjaXJjdW1mbGV4IiwiZWRpZXJlc2lzIiwiZWdyYXZlIiwiaWFjdXRlIiwiaWNpcmN1bWZsZXgiLCJpZGllcmVzaXMiLCJpZ3JhdmUiLCJudGlsZGUiLCJvYWN1dGUiLCJvY2lyY3VtZmxleCIsIm9kaWVyZXNpcyIsIm9ncmF2ZSIsIm90aWxkZSIsInNjYXJvbiIsInVhY3V0ZSIsInVjaXJjdW1mbGV4IiwidWRpZXJlc2lzIiwidWdyYXZlIiwieWFjdXRlIiwieWRpZXJlc2lzIiwiemNhcm9uIiwiZXhjbGFtc21hbGwiLCJIdW5nYXJ1bWxhdXRzbWFsbCIsImRvbGxhcm9sZHN0eWxlIiwiZG9sbGFyc3VwZXJpb3IiLCJhbXBlcnNhbmRzbWFsbCIsIkFjdXRlc21hbGwiLCJwYXJlbmxlZnRzdXBlcmlvciIsInBhcmVucmlnaHRzdXBlcmlvciIsInR3b2RvdGVubGVhZGVyIiwib25lZG90ZW5sZWFkZXIiLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb21tYXN1cGVyaW9yIiwidGhyZWVxdWFydGVyc2VtZGFzaCIsInBlcmlvZHN1cGVyaW9yIiwicXVlc3Rpb25zbWFsbCIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIkRvdGFjY2VudHNtYWxsIiwiTWFjcm9uc21hbGwiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsImZvdXJzdXBlcmlvciIsImZpdmVzdXBlcmlvciIsInNpeHN1cGVyaW9yIiwic2V2ZW5zdXBlcmlvciIsImVpZ2h0c3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvaW5mZXJpb3IiLCJvbmVpbmZlcmlvciIsInR3b2luZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsImZvdXJpbmZlcmlvciIsImZpdmVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwic2V2ZW5pbmZlcmlvciIsImVpZ2h0aW5mZXJpb3IiLCJuaW5laW5mZXJpb3IiLCJjZW50aW5mZXJpb3IiLCJkb2xsYXJpbmZlcmlvciIsInBlcmlvZGluZmVyaW9yIiwiY29tbWFpbmZlcmlvciIsIkFncmF2ZXNtYWxsIiwiQWFjdXRlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQXRpbGRlc21hbGwiLCJBZGllcmVzaXNzbWFsbCIsIkFyaW5nc21hbGwiLCJBRXNtYWxsIiwiQ2NlZGlsbGFzbWFsbCIsIkVncmF2ZXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFY2lyY3VtZmxleHNtYWxsIiwiRWRpZXJlc2lzc21hbGwiLCJJZ3JhdmVzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWNpcmN1bWZsZXhzbWFsbCIsIklkaWVyZXNpc3NtYWxsIiwiRXRoc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9ncmF2ZXNtYWxsIiwiT2FjdXRlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT3RpbGRlc21hbGwiLCJPZGllcmVzaXNzbWFsbCIsIk9Fc21hbGwiLCJPc2xhc2hzbWFsbCIsIlVncmF2ZXNtYWxsIiwiVWFjdXRlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCJZYWN1dGVzbWFsbCIsIlRob3Juc21hbGwiLCJZZGllcmVzaXNzbWFsbCIsIjAwMS4wMDAiLCIwMDEuMDAxIiwiMDAxLjAwMiIsIjAwMS4wMDMiLCJCbGFjayIsIkJvbGQiLCJCb29rIiwiTGlnaHQiLCJNZWRpdW0iLCJSZWd1bGFyIiwiUm9tYW4iLCJTZW1pYm9sZCJdO3QuQ0ZGU3RhbmRhcmRTdHJpbmdzPW87dmFyIHM9ZnVuY3Rpb24oKXt2YXIgZT1bbnVsbCx7aWQ6ImhzdGVtIixtaW46MixzdGFja0NsZWFyaW5nOiEwLHN0ZW06ITB9LG51bGwse2lkOiJ2c3RlbSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InZtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoicmxpbmV0byIsbWluOjIscmVzZXRTdGFjazohMH0se2lkOiJobGluZXRvIixtaW46MSxyZXNldFN0YWNrOiEwfSx7aWQ6InZsaW5ldG8iLG1pbjoxLHJlc2V0U3RhY2s6ITB9LHtpZDoicnJjdXJ2ZXRvIixtaW46NixyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbHN1YnIiLG1pbjoxLHVuZGVmU3RhY2s6ITB9LHtpZDoicmV0dXJuIixtaW46MCx1bmRlZlN0YWNrOiEwfSxudWxsLG51bGwse2lkOiJlbmRjaGFyIixtaW46MCxzdGFja0NsZWFyaW5nOiEwfSxudWxsLG51bGwsbnVsbCx7aWQ6ImhzdGVtaG0iLG1pbjoyLHN0YWNrQ2xlYXJpbmc6ITAsc3RlbTohMH0se2lkOiJoaW50bWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJjbnRybWFzayIsbWluOjAsc3RhY2tDbGVhcmluZzohMH0se2lkOiJybW92ZXRvIixtaW46MixzdGFja0NsZWFyaW5nOiEwfSx7aWQ6Imhtb3ZldG8iLG1pbjoxLHN0YWNrQ2xlYXJpbmc6ITB9LHtpZDoidnN0ZW1obSIsbWluOjIsc3RhY2tDbGVhcmluZzohMCxzdGVtOiEwfSx7aWQ6InJjdXJ2ZWxpbmUiLG1pbjo4LHJlc2V0U3RhY2s6ITB9LHtpZDoicmxpbmVjdXJ2ZSIsbWluOjgscmVzZXRTdGFjazohMH0se2lkOiJ2dmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9LHtpZDoiaGhjdXJ2ZXRvIixtaW46NCxyZXNldFN0YWNrOiEwfSxudWxsLHtpZDoiY2FsbGdzdWJyIixtaW46MSx1bmRlZlN0YWNrOiEwfSx7aWQ6InZoY3VydmV0byIsbWluOjQscmVzZXRTdGFjazohMH0se2lkOiJodmN1cnZldG8iLG1pbjo0LHJlc2V0U3RhY2s6ITB9XSx0PVtudWxsLG51bGwsbnVsbCx7aWQ6ImFuZCIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJvciIsbWluOjIsc3RhY2tEZWx0YTotMX0se2lkOiJub3QiLG1pbjoxLHN0YWNrRGVsdGE6MH0sbnVsbCxudWxsLG51bGwse2lkOiJhYnMiLG1pbjoxLHN0YWNrRGVsdGE6MH0se2lkOiJhZGQiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0rZVt0LTFdfX0se2lkOiJzdWIiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0tZVt0LTFdfX0se2lkOiJkaXYiLG1pbjoyLHN0YWNrRGVsdGE6LTEsc3RhY2tGbjpmdW5jdGlvbihlLHQpe2VbdC0yXT1lW3QtMl0vZVt0LTFdfX0sbnVsbCx7aWQ6Im5lZyIsbWluOjEsc3RhY2tEZWx0YTowLHN0YWNrRm46ZnVuY3Rpb24oZSx0KXtlW3QtMV09LWVbdC0xXX19LHtpZDoiZXEiLG1pbjoyLHN0YWNrRGVsdGE6LTF9LG51bGwsbnVsbCx7aWQ6ImRyb3AiLG1pbjoxLHN0YWNrRGVsdGE6LTF9LG51bGwse2lkOiJwdXQiLG1pbjoyLHN0YWNrRGVsdGE6LTJ9LHtpZDoiZ2V0IixtaW46MSxzdGFja0RlbHRhOjB9LHtpZDoiaWZlbHNlIixtaW46NCxzdGFja0RlbHRhOi0zfSx7aWQ6InJhbmRvbSIsbWluOjAsc3RhY2tEZWx0YToxfSx7aWQ6Im11bCIsbWluOjIsc3RhY2tEZWx0YTotMSxzdGFja0ZuOmZ1bmN0aW9uKGUsdCl7ZVt0LTJdPWVbdC0yXSplW3QtMV19fSxudWxsLHtpZDoic3FydCIsbWluOjEsc3RhY2tEZWx0YTowfSx7aWQ6ImR1cCIsbWluOjEsc3RhY2tEZWx0YToxfSx7aWQ6ImV4Y2giLG1pbjoyLHN0YWNrRGVsdGE6MH0se2lkOiJpbmRleCIsbWluOjIsc3RhY2tEZWx0YTowfSx7aWQ6InJvbGwiLG1pbjozLHN0YWNrRGVsdGE6LTJ9LG51bGwsbnVsbCxudWxsLHtpZDoiaGZsZXgiLG1pbjo3LHJlc2V0U3RhY2s6ITB9LHtpZDoiZmxleCIsbWluOjEzLHJlc2V0U3RhY2s6ITB9LHtpZDoiaGZsZXgxIixtaW46OSxyZXNldFN0YWNrOiEwfSx7aWQ6ImZsZXgxIixtaW46MTEscmVzZXRTdGFjazohMH1dO2Z1bmN0aW9uIHIoZSx0LHIpe3RoaXMuYnl0ZXM9ZS5nZXRCeXRlcygpLHRoaXMucHJvcGVydGllcz10LHRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIXJ9cmV0dXJuIHIucHJvdG90eXBlPXtwYXJzZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMucHJvcGVydGllcyx0PW5ldyBsO3RoaXMuY2ZmPXQ7dmFyIHI9dGhpcy5wYXJzZUhlYWRlcigpLG49dGhpcy5wYXJzZUluZGV4KHIuZW5kUG9zKSxhPXRoaXMucGFyc2VJbmRleChuLmVuZFBvcyksaT10aGlzLnBhcnNlSW5kZXgoYS5lbmRQb3MpLG89dGhpcy5wYXJzZUluZGV4KGkuZW5kUG9zKSxzPXRoaXMucGFyc2VEaWN0KGEub2JqLmdldCgwKSksYz10aGlzLmNyZWF0ZURpY3QoZCxzLHQuc3RyaW5ncyk7dC5oZWFkZXI9ci5vYmosdC5uYW1lcz10aGlzLnBhcnNlTmFtZUluZGV4KG4ub2JqKSx0LnN0cmluZ3M9dGhpcy5wYXJzZVN0cmluZ0luZGV4KGkub2JqKSx0LnRvcERpY3Q9Yyx0Lmdsb2JhbFN1YnJJbmRleD1vLm9iaix0aGlzLnBhcnNlUHJpdmF0ZURpY3QodC50b3BEaWN0KSx0LmlzQ0lERm9udD1jLmhhc05hbWUoIlJPUyIpO3ZhciB1PWMuZ2V0QnlOYW1lKCJDaGFyU3RyaW5ncyIpLGY9dGhpcy5wYXJzZUluZGV4KHUpLm9iaixoPWMuZ2V0QnlOYW1lKCJGb250TWF0cml4Iik7aCYmKGUuZm9udE1hdHJpeD1oKTt2YXIgcCxtLGc9Yy5nZXRCeU5hbWUoIkZvbnRCQm94Iik7aWYoZyYmKGUuYXNjZW50PU1hdGgubWF4KGdbM10sZ1sxXSksZS5kZXNjZW50PU1hdGgubWluKGdbMV0sZ1szXSksZS5hc2NlbnRTY2FsZWQ9ITApLHQuaXNDSURGb250KXtmb3IodmFyIHY9dGhpcy5wYXJzZUluZGV4KGMuZ2V0QnlOYW1lKCJGREFycmF5IikpLm9iaix5PTAsYj12LmNvdW50O3k8YjsrK3kpe3ZhciB3PXYuZ2V0KHkpLGs9dGhpcy5jcmVhdGVEaWN0KGQsdGhpcy5wYXJzZURpY3QodyksdC5zdHJpbmdzKTt0aGlzLnBhcnNlUHJpdmF0ZURpY3QoayksdC5mZEFycmF5LnB1c2goayl9bT1udWxsLHA9dGhpcy5wYXJzZUNoYXJzZXRzKGMuZ2V0QnlOYW1lKCJjaGFyc2V0IiksZi5jb3VudCx0LnN0cmluZ3MsITApLHQuZmRTZWxlY3Q9dGhpcy5wYXJzZUZEU2VsZWN0KGMuZ2V0QnlOYW1lKCJGRFNlbGVjdCIpLGYuY291bnQpfWVsc2UgcD10aGlzLnBhcnNlQ2hhcnNldHMoYy5nZXRCeU5hbWUoImNoYXJzZXQiKSxmLmNvdW50LHQuc3RyaW5ncywhMSksbT10aGlzLnBhcnNlRW5jb2RpbmcoYy5nZXRCeU5hbWUoIkVuY29kaW5nIiksZSx0LnN0cmluZ3MscC5jaGFyc2V0KTt0LmNoYXJzZXQ9cCx0LmVuY29kaW5nPW07dmFyIFM9dGhpcy5wYXJzZUNoYXJTdHJpbmdzKHtjaGFyU3RyaW5nczpmLGxvY2FsU3VickluZGV4OmMucHJpdmF0ZURpY3Quc3VicnNJbmRleCxnbG9iYWxTdWJySW5kZXg6by5vYmosZmRTZWxlY3Q6dC5mZFNlbGVjdCxmZEFycmF5OnQuZmRBcnJheSxwcml2YXRlRGljdDpjLnByaXZhdGVEaWN0fSk7cmV0dXJuIHQuY2hhclN0cmluZ3M9Uy5jaGFyU3RyaW5ncyx0LnNlYWNzPVMuc2VhY3MsdC53aWR0aHM9Uy53aWR0aHMsdH0scGFyc2VIZWFkZXI6ZnVuY3Rpb24oKXtmb3IodmFyIGU9dGhpcy5ieXRlcyx0PWUubGVuZ3RoLHI9MDtyPHQmJjEhPT1lW3JdOykrK3I7aWYocj49dCl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBDRkYgaGVhZGVyIik7MCE9PXImJigoMCxuLmluZm8pKCJjZmYgZGF0YSBpcyBzaGlmdGVkIiksZT1lLnN1YmFycmF5KHIpLHRoaXMuYnl0ZXM9ZSk7dmFyIGE9ZVswXSxpPWVbMV0sbz1lWzJdLHM9ZVszXTtyZXR1cm57b2JqOm5ldyBjKGEsaSxvLHMpLGVuZFBvczpvfX0scGFyc2VEaWN0OmZ1bmN0aW9uKGUpe3ZhciB0PTA7ZnVuY3Rpb24gcigpe3ZhciByPWVbdCsrXTtyZXR1cm4gMzA9PT1yP2Z1bmN0aW9uKCl7Zm9yKHZhciByPSIiLG49WyIwIiwiMSIsIjIiLCIzIiwiNCIsIjUiLCI2IiwiNyIsIjgiLCI5IiwiLiIsIkUiLCJFLSIsbnVsbCwiLSJdLGE9ZS5sZW5ndGg7dDxhOyl7dmFyIGk9ZVt0KytdLG89aT4+NCxzPTE1Jmk7aWYoMTU9PT1vKWJyZWFrO2lmKHIrPW5bb10sMTU9PT1zKWJyZWFrO3IrPW5bc119cmV0dXJuIHBhcnNlRmxvYXQocil9KCk6Mjg9PT1yP3I9KChyPWVbdCsrXSk8PDI0fGVbdCsrXTw8MTYpPj4xNjoyOT09PXI/cj0ocj0ocj0ocj1lW3QrK10pPDw4fGVbdCsrXSk8PDh8ZVt0KytdKTw8OHxlW3QrK106cj49MzImJnI8PTI0Nj9yLTEzOTpyPj0yNDcmJnI8PTI1MD8yNTYqKHItMjQ3KStlW3QrK10rMTA4OnI+PTI1MSYmcjw9MjU0Py0yNTYqKHItMjUxKS1lW3QrK10tMTA4OigoMCxuLndhcm4pKCdDRkZQYXJzZXJfcGFyc2VEaWN0OiAiJytyKyciIGlzIGEgcmVzZXJ2ZWQgY29tbWFuZC4nKSxOYU4pfXZhciBhPVtdLGk9W107dD0wO2Zvcih2YXIgbz1lLmxlbmd0aDt0PG87KXt2YXIgcz1lW3RdO3M8PTIxPygxMj09PXMmJihzPXM8PDh8ZVsrK3RdKSxpLnB1c2goW3MsYV0pLGE9W10sKyt0KTphLnB1c2gocigpKX1yZXR1cm4gaX0scGFyc2VJbmRleDpmdW5jdGlvbihlKXt2YXIgdCxyLG49bmV3IGYsYT10aGlzLmJ5dGVzLGk9YVtlKytdPDw4fGFbZSsrXSxvPVtdLHM9ZTtpZigwIT09aSl7dmFyIGw9YVtlKytdLGM9ZSsoaSsxKSpsLTE7Zm9yKHQ9MCxyPWkrMTt0PHI7Kyt0KXtmb3IodmFyIHU9MCxoPTA7aDxsOysraCl1PDw9OCx1Kz1hW2UrK107by5wdXNoKGMrdSl9cz1vW2ldfWZvcih0PTAscj1vLmxlbmd0aC0xO3Q8cjsrK3Qpe3ZhciBkPW9bdF0scD1vW3QrMV07bi5hZGQoYS5zdWJhcnJheShkLHApKX1yZXR1cm57b2JqOm4sZW5kUG9zOnN9fSxwYXJzZU5hbWVJbmRleDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wLGE9ZS5jb3VudDtyPGE7KytyKXt2YXIgaT1lLmdldChyKTt0LnB1c2goKDAsbi5ieXRlc1RvU3RyaW5nKShpKSl9cmV0dXJuIHR9LHBhcnNlU3RyaW5nSW5kZXg6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyB1LHI9MCxhPWUuY291bnQ7cjxhOysrcil7dmFyIGk9ZS5nZXQocik7dC5hZGQoKDAsbi5ieXRlc1RvU3RyaW5nKShpKSl9cmV0dXJuIHR9LGNyZWF0ZURpY3Q6ZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1uZXcgZShyKSxhPTAsaT10Lmxlbmd0aDthPGk7KythKXt2YXIgbz10W2FdLHM9b1swXSxsPW9bMV07bi5zZXRCeUtleShzLGwpfXJldHVybiBufSxwYXJzZUNoYXJTdHJpbmc6ZnVuY3Rpb24ocixhLGksbyl7aWYoIWF8fHIuY2FsbERlcHRoPjEwKXJldHVybiExO2Zvcih2YXIgcz1yLnN0YWNrU2l6ZSxsPXIuc3RhY2ssYz1hLmxlbmd0aCx1PTA7dTxjOyl7dmFyIGY9YVt1KytdLGg9bnVsbDtpZigxMj09PWYpe3ZhciBkPWFbdSsrXTswPT09ZD8oYVt1LTJdPTEzOSxhW3UtMV09MjIscz0wKTpoPXRbZF19ZWxzZSBpZigyOD09PWYpbFtzXT0oYVt1XTw8MjR8YVt1KzFdPDwxNik+PjE2LHUrPTIscysrO2Vsc2UgaWYoMTQ9PT1mKXtpZihzPj00JiYocy09NCx0aGlzLnNlYWNBbmFseXNpc0VuYWJsZWQpKXJldHVybiByLnNlYWM9bC5zbGljZShzLHMrNCksITE7aD1lW2ZdfWVsc2UgaWYoZj49MzImJmY8PTI0NilsW3NdPWYtMTM5LHMrKztlbHNlIGlmKGY+PTI0NyYmZjw9MjU0KWxbc109ZjwyNTE/KGYtMjQ3PDw4KSthW3VdKzEwODotKGYtMjUxPDw4KS1hW3VdLTEwOCx1KysscysrO2Vsc2UgaWYoMjU1PT09ZilsW3NdPShhW3VdPDwyNHxhW3UrMV08PDE2fGFbdSsyXTw8OHxhW3UrM10pLzY1NTM2LHUrPTQscysrO2Vsc2UgaWYoMTk9PT1mfHwyMD09PWYpci5oaW50cys9cz4+MSx1Kz1yLmhpbnRzKzc+PjMscyU9MixoPWVbZl07ZWxzZXtpZigxMD09PWZ8fDI5PT09Zil7dmFyIHA7aWYoIShwPTEwPT09Zj9pOm8pKXJldHVybiBoPWVbZl0sKDAsbi53YXJuKSgiTWlzc2luZyBzdWJyc0luZGV4IGZvciAiK2guaWQpLCExO3ZhciBtPTMyNzY4O3AuY291bnQ8MTI0MD9tPTEwNzpwLmNvdW50PDMzOTAwJiYobT0xMTMxKTt2YXIgZz1sWy0tc10rbTtpZihnPDB8fGc+PXAuY291bnR8fGlzTmFOKGcpKXJldHVybiBoPWVbZl0sKDAsbi53YXJuKSgiT3V0IG9mIGJvdW5kcyBzdWJySW5kZXggZm9yICIraC5pZCksITE7aWYoci5zdGFja1NpemU9cyxyLmNhbGxEZXB0aCsrLCF0aGlzLnBhcnNlQ2hhclN0cmluZyhyLHAuZ2V0KGcpLGksbykpcmV0dXJuITE7ci5jYWxsRGVwdGgtLSxzPXIuc3RhY2tTaXplO2NvbnRpbnVlfWlmKDExPT09ZilyZXR1cm4gci5zdGFja1NpemU9cywhMDtoPWVbZl19aWYoaCl7aWYoaC5zdGVtJiYoci5oaW50cys9cz4+MSwzPT09Znx8MjM9PT1mP3IuaGFzVlN0ZW1zPSEwOiFyLmhhc1ZTdGVtc3x8MSE9PWYmJjE4IT09Znx8KCgwLG4ud2FybikoIkNGRiBzdGVtIGhpbnRzIGFyZSBpbiB3cm9uZyBvcmRlciIpLGFbdS0xXT0xPT09Zj8zOjIzKSksIm1pbiJpbiBoJiYhci51bmRlZlN0YWNrJiZzPGgubWluKXJldHVybigwLG4ud2FybikoIk5vdCBlbm91Z2ggcGFyYW1ldGVycyBmb3IgIitoLmlkKyI7IGFjdHVhbDogIitzKyIsIGV4cGVjdGVkOiAiK2gubWluKSwhMTtyLmZpcnN0U3RhY2tDbGVhcmluZyYmaC5zdGFja0NsZWFyaW5nJiYoci5maXJzdFN0YWNrQ2xlYXJpbmc9ITEsKHMtPWgubWluKT49MiYmaC5zdGVtP3MlPTI6cz4xJiYoMCxuLndhcm4pKCJGb3VuZCB0b28gbWFueSBwYXJhbWV0ZXJzIGZvciBzdGFjay1jbGVhcmluZyBjb21tYW5kIikscz4wJiZsW3MtMV0+PTAmJihyLndpZHRoPWxbcy0xXSkpLCJzdGFja0RlbHRhImluIGg/KCJzdGFja0ZuImluIGgmJmguc3RhY2tGbihsLHMpLHMrPWguc3RhY2tEZWx0YSk6aC5zdGFja0NsZWFyaW5nP3M9MDpoLnJlc2V0U3RhY2s/KHM9MCxyLnVuZGVmU3RhY2s9ITEpOmgudW5kZWZTdGFjayYmKHM9MCxyLnVuZGVmU3RhY2s9ITAsci5maXJzdFN0YWNrQ2xlYXJpbmc9ITEpfX1yZXR1cm4gci5zdGFja1NpemU9cywhMH0scGFyc2VDaGFyU3RyaW5nczpmdW5jdGlvbihlKXtmb3IodmFyIHQ9ZS5jaGFyU3RyaW5ncyxyPWUubG9jYWxTdWJySW5kZXgsYT1lLmdsb2JhbFN1YnJJbmRleCxpPWUuZmRTZWxlY3Qsbz1lLmZkQXJyYXkscz1lLnByaXZhdGVEaWN0LGw9W10sYz1bXSx1PXQuY291bnQsZj0wO2Y8dTtmKyspe3ZhciBoPXQuZ2V0KGYpLGQ9e2NhbGxEZXB0aDowLHN0YWNrU2l6ZTowLHN0YWNrOltdLHVuZGVmU3RhY2s6ITAsaGludHM6MCxmaXJzdFN0YWNrQ2xlYXJpbmc6ITAsc2VhYzpudWxsLHdpZHRoOm51bGwsaGFzVlN0ZW1zOiExfSxwPSEwLG09bnVsbCxnPXM7aWYoaSYmby5sZW5ndGgpe3ZhciB2PWkuZ2V0RkRJbmRleChmKTstMT09PXYmJigoMCxuLndhcm4pKCJHbHlwaCBpbmRleCBpcyBub3QgaW4gZmQgc2VsZWN0LiIpLHA9ITEpLHY+PW8ubGVuZ3RoJiYoKDAsbi53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIikscD0hMSkscCYmKG09KGc9b1t2XS5wcml2YXRlRGljdCkuc3VicnNJbmRleCl9ZWxzZSByJiYobT1yKTtpZihwJiYocD10aGlzLnBhcnNlQ2hhclN0cmluZyhkLGgsbSxhKSksbnVsbCE9PWQud2lkdGgpe3ZhciB5PWcuZ2V0QnlOYW1lKCJub21pbmFsV2lkdGhYIik7Y1tmXT15K2Qud2lkdGh9ZWxzZXt2YXIgYj1nLmdldEJ5TmFtZSgiZGVmYXVsdFdpZHRoWCIpO2NbZl09Yn1udWxsIT09ZC5zZWFjJiYobFtmXT1kLnNlYWMpLHB8fHQuc2V0KGYsbmV3IFVpbnQ4QXJyYXkoWzE0XSkpfXJldHVybntjaGFyU3RyaW5nczp0LHNlYWNzOmwsd2lkdGhzOmN9fSxlbXB0eVByaXZhdGVEaWN0aW9uYXJ5OmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMuY3JlYXRlRGljdChwLFtdLGUuc3RyaW5ncyk7ZS5zZXRCeUtleSgxOCxbMCwwXSksZS5wcml2YXRlRGljdD10fSxwYXJzZVByaXZhdGVEaWN0OmZ1bmN0aW9uKGUpe2lmKGUuaGFzTmFtZSgiUHJpdmF0ZSIpKXt2YXIgdD1lLmdldEJ5TmFtZSgiUHJpdmF0ZSIpO2lmKEFycmF5LmlzQXJyYXkodCkmJjI9PT10Lmxlbmd0aCl7dmFyIHI9dFswXSxuPXRbMV07aWYoMD09PXJ8fG4+PXRoaXMuYnl0ZXMubGVuZ3RoKXRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtlbHNle3ZhciBhPW4rcixpPXRoaXMuYnl0ZXMuc3ViYXJyYXkobixhKSxvPXRoaXMucGFyc2VEaWN0KGkpLHM9dGhpcy5jcmVhdGVEaWN0KHAsbyxlLnN0cmluZ3MpO2lmKGUucHJpdmF0ZURpY3Q9cyxzLmdldEJ5TmFtZSgiU3VicnMiKSl7dmFyIGw9cy5nZXRCeU5hbWUoIlN1YnJzIiksYz1uK2w7aWYoMD09PWx8fGM+PXRoaXMuYnl0ZXMubGVuZ3RoKXRoaXMuZW1wdHlQcml2YXRlRGljdGlvbmFyeShlKTtlbHNle3ZhciB1PXRoaXMucGFyc2VJbmRleChjKTtzLnN1YnJzSW5kZXg9dS5vYmp9fX19ZWxzZSBlLnJlbW92ZUJ5TmFtZSgiUHJpdmF0ZSIpfWVsc2UgdGhpcy5lbXB0eVByaXZhdGVEaWN0aW9uYXJ5KGUpfSxwYXJzZUNoYXJzZXRzOmZ1bmN0aW9uKGUsdCxyLGkpe2lmKDA9PT1lKXJldHVybiBuZXcgZyghMCxtLklTT19BRE9CRSxhLklTT0Fkb2JlQ2hhcnNldCk7aWYoMT09PWUpcmV0dXJuIG5ldyBnKCEwLG0uRVhQRVJULGEuRXhwZXJ0Q2hhcnNldCk7aWYoMj09PWUpcmV0dXJuIG5ldyBnKCEwLG0uRVhQRVJUX1NVQlNFVCxhLkV4cGVydFN1YnNldENoYXJzZXQpO3ZhciBvLHMsbCxjPXRoaXMuYnl0ZXMsdT1lLGY9Y1tlKytdLGg9WyIubm90ZGVmIl07c3dpdGNoKHQtPTEsZil7Y2FzZSAwOmZvcihsPTA7bDx0O2wrKylvPWNbZSsrXTw8OHxjW2UrK10saC5wdXNoKGk/bzpyLmdldChvKSk7YnJlYWs7Y2FzZSAxOmZvcig7aC5sZW5ndGg8PXQ7KWZvcihvPWNbZSsrXTw8OHxjW2UrK10scz1jW2UrK10sbD0wO2w8PXM7bCsrKWgucHVzaChpP28rKzpyLmdldChvKyspKTticmVhaztjYXNlIDI6Zm9yKDtoLmxlbmd0aDw9dDspZm9yKG89Y1tlKytdPDw4fGNbZSsrXSxzPWNbZSsrXTw8OHxjW2UrK10sbD0wO2w8PXM7bCsrKWgucHVzaChpP28rKzpyLmdldChvKyspKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGNoYXJzZXQgZm9ybWF0Iil9dmFyIGQ9ZSxwPWMuc3ViYXJyYXkodSxkKTtyZXR1cm4gbmV3IGcoITEsZixoLHApfSxwYXJzZUVuY29kaW5nOmZ1bmN0aW9uKGUsdCxyLGEpe3ZhciBvLHMsbCxjPU9iamVjdC5jcmVhdGUobnVsbCksdT10aGlzLmJ5dGVzLGY9ITEsaD1udWxsO2lmKDA9PT1lfHwxPT09ZSl7Zj0hMCxvPWU7dmFyIGQ9ZT9pLkV4cGVydEVuY29kaW5nOmkuU3RhbmRhcmRFbmNvZGluZztmb3Iocz0wLGw9YS5sZW5ndGg7czxsO3MrKyl7dmFyIHA9ZC5pbmRleE9mKGFbc10pOy0xIT09cCYmKGNbcF09cyl9fWVsc2V7dmFyIG09ZTtzd2l0Y2goMTI3JihvPXVbZSsrXSkpe2Nhc2UgMDp2YXIgZz11W2UrK107Zm9yKHM9MTtzPD1nO3MrKyljW3VbZSsrXV09czticmVhaztjYXNlIDE6dmFyIHk9dVtlKytdLGI9MTtmb3Iocz0wO3M8eTtzKyspZm9yKHZhciB3PXVbZSsrXSxrPXVbZSsrXSxTPXc7Uzw9dytrO1MrKyljW1NdPWIrKzticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGVuY29kaW5nIGZvcm1hdDogIi5jb25jYXQobywiIGluIENGRiIpKX12YXIgXz1lOzEyOCZvJiYodVttXSY9MTI3LGZ1bmN0aW9uKCl7dmFyIHQ9dVtlKytdO2ZvcihzPTA7czx0O3MrKyl7dmFyIG49dVtlKytdLGk9KHVbZSsrXTw8OCkrKDI1NSZ1W2UrK10pO2Nbbl09YS5pbmRleE9mKHIuZ2V0KGkpKX19KCkpLGg9dS5zdWJhcnJheShtLF8pfXJldHVybiBuZXcgdihmLG8mPTEyNyxjLGgpfSxwYXJzZUZEU2VsZWN0OmZ1bmN0aW9uKGUsdCl7dmFyIHIsYT10aGlzLmJ5dGVzLGk9YVtlKytdLG89W107c3dpdGNoKGkpe2Nhc2UgMDpmb3Iocj0wO3I8dDsrK3Ipe3ZhciBzPWFbZSsrXTtvLnB1c2gocyl9YnJlYWs7Y2FzZSAzOnZhciBsPWFbZSsrXTw8OHxhW2UrK107Zm9yKHI9MDtyPGw7KytyKXt2YXIgYz1hW2UrK108PDh8YVtlKytdOzA9PT1yJiYwIT09YyYmKCgwLG4ud2FybikoInBhcnNlRkRTZWxlY3Q6IFRoZSBmaXJzdCByYW5nZSBtdXN0IGhhdmUgYSBmaXJzdCBHSUQgb2YgMCAtLSB0cnlpbmcgdG8gcmVjb3Zlci4iKSxjPTApO2Zvcih2YXIgdT1hW2UrK10sZj1hW2VdPDw4fGFbZSsxXSxoPWM7aDxmOysraClvLnB1c2godSl9ZSs9MjticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCdwYXJzZUZEU2VsZWN0OiBVbmtub3duIGZvcm1hdCAiJy5jb25jYXQoaSwnIi4nKSl9aWYoby5sZW5ndGghPT10KXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJwYXJzZUZEU2VsZWN0OiBJbnZhbGlkIGZvbnQgZGF0YS4iKTtyZXR1cm4gbmV3IHkoaSxvKX19LHJ9KCk7dC5DRkZQYXJzZXI9czt2YXIgbD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLmhlYWRlcj1udWxsLHRoaXMubmFtZXM9W10sdGhpcy50b3BEaWN0PW51bGwsdGhpcy5zdHJpbmdzPW5ldyB1LHRoaXMuZ2xvYmFsU3VickluZGV4PW51bGwsdGhpcy5lbmNvZGluZz1udWxsLHRoaXMuY2hhcnNldD1udWxsLHRoaXMuY2hhclN0cmluZ3M9bnVsbCx0aGlzLmZkQXJyYXk9W10sdGhpcy5mZFNlbGVjdD1udWxsLHRoaXMuaXNDSURGb250PSExfXJldHVybiBlLnByb3RvdHlwZT17ZHVwbGljYXRlRmlyc3RHbHlwaDpmdW5jdGlvbigpe2lmKHRoaXMuY2hhclN0cmluZ3MuY291bnQ+PTY1NTM1KSgwLG4ud2FybikoIk5vdCBlbm91Z2ggc3BhY2UgaW4gY2hhcnN0cmluZ3MgdG8gZHVwbGljYXRlIGZpcnN0IGdseXBoLiIpO2Vsc2V7dmFyIGU9dGhpcy5jaGFyU3RyaW5ncy5nZXQoMCk7dGhpcy5jaGFyU3RyaW5ncy5hZGQoZSksdGhpcy5pc0NJREZvbnQmJnRoaXMuZmRTZWxlY3QuZmRTZWxlY3QucHVzaCh0aGlzLmZkU2VsZWN0LmZkU2VsZWN0WzBdKX19LGhhc0dseXBoSWQ6ZnVuY3Rpb24oZSl7cmV0dXJuIShlPDB8fGU+PXRoaXMuY2hhclN0cmluZ3MuY291bnQpJiZ0aGlzLmNoYXJTdHJpbmdzLmdldChlKS5sZW5ndGg+MH19LGV9KCk7dC5DRkY9bDt2YXIgYz1mdW5jdGlvbihlLHQscixuKXt0aGlzLm1ham9yPWUsdGhpcy5taW5vcj10LHRoaXMuaGRyU2l6ZT1yLHRoaXMub2ZmU2l6ZT1ufTt0LkNGRkhlYWRlcj1jO3ZhciB1PWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZSgpe3RoaXMuc3RyaW5ncz1bXX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldDpmdW5jdGlvbihlKXtyZXR1cm4gZT49MCYmZTw9MzkwP29bZV06ZS0zOTE8PXRoaXMuc3RyaW5ncy5sZW5ndGg/dGhpcy5zdHJpbmdzW2UtMzkxXTpvWzBdfSxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5zdHJpbmdzLnB1c2goZSl9LGdldCBjb3VudCgpe3JldHVybiB0aGlzLnN0cmluZ3MubGVuZ3RofX0sZX0oKTt0LkNGRlN0cmluZ3M9dTt2YXIgZj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9iamVjdHM9W10sdGhpcy5sZW5ndGg9MH1yZXR1cm4gZS5wcm90b3R5cGU9e2FkZDpmdW5jdGlvbihlKXt0aGlzLmxlbmd0aCs9ZS5sZW5ndGgsdGhpcy5vYmplY3RzLnB1c2goZSl9LHNldDpmdW5jdGlvbihlLHQpe3RoaXMubGVuZ3RoKz10Lmxlbmd0aC10aGlzLm9iamVjdHNbZV0ubGVuZ3RoLHRoaXMub2JqZWN0c1tlXT10fSxnZXQ6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMub2JqZWN0c1tlXX0sZ2V0IGNvdW50KCl7cmV0dXJuIHRoaXMub2JqZWN0cy5sZW5ndGh9fSxlfSgpO3QuQ0ZGSW5kZXg9Zjt2YXIgaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSx0KXt0aGlzLmtleVRvTmFtZU1hcD1lLmtleVRvTmFtZU1hcCx0aGlzLm5hbWVUb0tleU1hcD1lLm5hbWVUb0tleU1hcCx0aGlzLmRlZmF1bHRzPWUuZGVmYXVsdHMsdGhpcy50eXBlcz1lLnR5cGVzLHRoaXMub3Bjb2Rlcz1lLm9wY29kZXMsdGhpcy5vcmRlcj1lLm9yZGVyLHRoaXMuc3RyaW5ncz10LHRoaXMudmFsdWVzPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIGUucHJvdG90eXBlPXtzZXRCeUtleTpmdW5jdGlvbihlLHQpe2lmKCEoZSBpbiB0aGlzLmtleVRvTmFtZU1hcCkpcmV0dXJuITE7dmFyIHI9dC5sZW5ndGg7aWYoMD09PXIpcmV0dXJuITA7Zm9yKHZhciBhPTA7YTxyO2ErKylpZihpc05hTih0W2FdKSlyZXR1cm4oMCxuLndhcm4pKCdJbnZhbGlkIENGRkRpY3QgdmFsdWU6ICInK3QrJyIgZm9yIGtleSAiJytlKyciLicpLCEwO3ZhciBpPXRoaXMudHlwZXNbZV07cmV0dXJuIm51bSIhPT1pJiYic2lkIiE9PWkmJiJvZmZzZXQiIT09aXx8KHQ9dFswXSksdGhpcy52YWx1ZXNbZV09dCwhMH0sc2V0QnlOYW1lOmZ1bmN0aW9uKGUsdCl7aWYoIShlIGluIHRoaXMubmFtZVRvS2V5TWFwKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcignSW52YWxpZCBkaWN0aW9uYXJ5IG5hbWUgIicuY29uY2F0KGUsJyInKSk7dGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dPXR9LGhhc05hbWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMubmFtZVRvS2V5TWFwW2VdaW4gdGhpcy52YWx1ZXN9LGdldEJ5TmFtZTpmdW5jdGlvbihlKXtpZighKGUgaW4gdGhpcy5uYW1lVG9LZXlNYXApKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJJbnZhbGlkIGRpY3Rpb25hcnkgbmFtZSAiLmNvbmNhdChlLCciJykpO3ZhciB0PXRoaXMubmFtZVRvS2V5TWFwW2VdO3JldHVybiB0IGluIHRoaXMudmFsdWVzP3RoaXMudmFsdWVzW3RdOnRoaXMuZGVmYXVsdHNbdF19LHJlbW92ZUJ5TmFtZTpmdW5jdGlvbihlKXtkZWxldGUgdGhpcy52YWx1ZXNbdGhpcy5uYW1lVG9LZXlNYXBbZV1dfX0sZS5jcmVhdGVUYWJsZXM9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PXtrZXlUb05hbWVNYXA6e30sbmFtZVRvS2V5TWFwOnt9LGRlZmF1bHRzOnt9LHR5cGVzOnt9LG9wY29kZXM6e30sb3JkZXI6W119LHI9MCxuPWUubGVuZ3RoO3I8bjsrK3Ipe3ZhciBhPWVbcl0saT1BcnJheS5pc0FycmF5KGFbMF0pPyhhWzBdWzBdPDw4KSthWzBdWzFdOmFbMF07dC5rZXlUb05hbWVNYXBbaV09YVsxXSx0Lm5hbWVUb0tleU1hcFthWzFdXT1pLHQudHlwZXNbaV09YVsyXSx0LmRlZmF1bHRzW2ldPWFbM10sdC5vcGNvZGVzW2ldPUFycmF5LmlzQXJyYXkoYVswXSk/YVswXTpbYVswXV0sdC5vcmRlci5wdXNoKGkpfXJldHVybiB0fSxlfSgpLGQ9ZnVuY3Rpb24oKXt2YXIgZT1bW1sxMiwzMF0sIlJPUyIsWyJzaWQiLCJzaWQiLCJudW0iXSxudWxsXSxbWzEyLDIwXSwiU3ludGhldGljQmFzZSIsIm51bSIsbnVsbF0sWzAsInZlcnNpb24iLCJzaWQiLG51bGxdLFsxLCJOb3RpY2UiLCJzaWQiLG51bGxdLFtbMTIsMF0sIkNvcHlyaWdodCIsInNpZCIsbnVsbF0sWzIsIkZ1bGxOYW1lIiwic2lkIixudWxsXSxbMywiRmFtaWx5TmFtZSIsInNpZCIsbnVsbF0sWzQsIldlaWdodCIsInNpZCIsbnVsbF0sW1sxMiwxXSwiaXNGaXhlZFBpdGNoIiwibnVtIiwwXSxbWzEyLDJdLCJJdGFsaWNBbmdsZSIsIm51bSIsMF0sW1sxMiwzXSwiVW5kZXJsaW5lUG9zaXRpb24iLCJudW0iLC0xMDBdLFtbMTIsNF0sIlVuZGVybGluZVRoaWNrbmVzcyIsIm51bSIsNTBdLFtbMTIsNV0sIlBhaW50VHlwZSIsIm51bSIsMF0sW1sxMiw2XSwiQ2hhcnN0cmluZ1R5cGUiLCJudW0iLDJdLFtbMTIsN10sIkZvbnRNYXRyaXgiLFsibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIiwibnVtIl0sWy4wMDEsMCwwLC4wMDEsMCwwXV0sWzEzLCJVbmlxdWVJRCIsIm51bSIsbnVsbF0sWzUsIkZvbnRCQm94IixbIm51bSIsIm51bSIsIm51bSIsIm51bSJdLFswLDAsMCwwXV0sW1sxMiw4XSwiU3Ryb2tlV2lkdGgiLCJudW0iLDBdLFsxNCwiWFVJRCIsImFycmF5IixudWxsXSxbMTUsImNoYXJzZXQiLCJvZmZzZXQiLDBdLFsxNiwiRW5jb2RpbmciLCJvZmZzZXQiLDBdLFsxNywiQ2hhclN0cmluZ3MiLCJvZmZzZXQiLDBdLFsxOCwiUHJpdmF0ZSIsWyJvZmZzZXQiLCJvZmZzZXQiXSxudWxsXSxbWzEyLDIxXSwiUG9zdFNjcmlwdCIsInNpZCIsbnVsbF0sW1sxMiwyMl0sIkJhc2VGb250TmFtZSIsInNpZCIsbnVsbF0sW1sxMiwyM10sIkJhc2VGb250QmxlbmQiLCJkZWx0YSIsbnVsbF0sW1sxMiwzMV0sIkNJREZvbnRWZXJzaW9uIiwibnVtIiwwXSxbWzEyLDMyXSwiQ0lERm9udFJldmlzaW9uIiwibnVtIiwwXSxbWzEyLDMzXSwiQ0lERm9udFR5cGUiLCJudW0iLDBdLFtbMTIsMzRdLCJDSURDb3VudCIsIm51bSIsODcyMF0sW1sxMiwzNV0sIlVJREJhc2UiLCJudW0iLG51bGxdLFtbMTIsMzddLCJGRFNlbGVjdCIsIm9mZnNldCIsbnVsbF0sW1sxMiwzNl0sIkZEQXJyYXkiLCJvZmZzZXQiLG51bGxdLFtbMTIsMzhdLCJGb250TmFtZSIsInNpZCIsbnVsbF1dLHQ9bnVsbDtmdW5jdGlvbiByKHIpe251bGw9PT10JiYodD1oLmNyZWF0ZVRhYmxlcyhlKSksaC5jYWxsKHRoaXMsdCxyKSx0aGlzLnByaXZhdGVEaWN0PW51bGx9cmV0dXJuIHIucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoaC5wcm90b3R5cGUpLHJ9KCk7dC5DRkZUb3BEaWN0PWQ7dmFyIHA9ZnVuY3Rpb24oKXt2YXIgZT1bWzYsIkJsdWVWYWx1ZXMiLCJkZWx0YSIsbnVsbF0sWzcsIk90aGVyQmx1ZXMiLCJkZWx0YSIsbnVsbF0sWzgsIkZhbWlseUJsdWVzIiwiZGVsdGEiLG51bGxdLFs5LCJGYW1pbHlPdGhlckJsdWVzIiwiZGVsdGEiLG51bGxdLFtbMTIsOV0sIkJsdWVTY2FsZSIsIm51bSIsLjAzOTYyNV0sW1sxMiwxMF0sIkJsdWVTaGlmdCIsIm51bSIsN10sW1sxMiwxMV0sIkJsdWVGdXp6IiwibnVtIiwxXSxbMTAsIlN0ZEhXIiwibnVtIixudWxsXSxbMTEsIlN0ZFZXIiwibnVtIixudWxsXSxbWzEyLDEyXSwiU3RlbVNuYXBIIiwiZGVsdGEiLG51bGxdLFtbMTIsMTNdLCJTdGVtU25hcFYiLCJkZWx0YSIsbnVsbF0sW1sxMiwxNF0sIkZvcmNlQm9sZCIsIm51bSIsMF0sW1sxMiwxN10sIkxhbmd1YWdlR3JvdXAiLCJudW0iLDBdLFtbMTIsMThdLCJFeHBhbnNpb25GYWN0b3IiLCJudW0iLC4wNl0sW1sxMiwxOV0sImluaXRpYWxSYW5kb21TZWVkIiwibnVtIiwwXSxbMjAsImRlZmF1bHRXaWR0aFgiLCJudW0iLDBdLFsyMSwibm9taW5hbFdpZHRoWCIsIm51bSIsMF0sWzE5LCJTdWJycyIsIm9mZnNldCIsbnVsbF1dLHQ9bnVsbDtmdW5jdGlvbiByKHIpe251bGw9PT10JiYodD1oLmNyZWF0ZVRhYmxlcyhlKSksaC5jYWxsKHRoaXMsdCxyKSx0aGlzLnN1YnJzSW5kZXg9bnVsbH1yZXR1cm4gci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShoLnByb3RvdHlwZSkscn0oKTt0LkNGRlByaXZhdGVEaWN0PXA7dmFyIG09e0lTT19BRE9CRTowLEVYUEVSVDoxLEVYUEVSVF9TVUJTRVQ6Mn0sZz1mdW5jdGlvbihlLHQscixuKXt0aGlzLnByZWRlZmluZWQ9ZSx0aGlzLmZvcm1hdD10LHRoaXMuY2hhcnNldD1yLHRoaXMucmF3PW59O3QuQ0ZGQ2hhcnNldD1nO3ZhciB2PWZ1bmN0aW9uKGUsdCxyLG4pe3RoaXMucHJlZGVmaW5lZD1lLHRoaXMuZm9ybWF0PXQsdGhpcy5lbmNvZGluZz1yLHRoaXMucmF3PW59LHk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7dGhpcy5mb3JtYXQ9ZSx0aGlzLmZkU2VsZWN0PXR9cmV0dXJuIGUucHJvdG90eXBlPXtnZXRGREluZGV4OmZ1bmN0aW9uKGUpe3JldHVybiBlPDB8fGU+PXRoaXMuZmRTZWxlY3QubGVuZ3RoPy0xOnRoaXMuZmRTZWxlY3RbZV19fSxlfSgpO3QuQ0ZGRkRTZWxlY3Q9eTt2YXIgYj1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXt0aGlzLm9mZnNldHM9T2JqZWN0LmNyZWF0ZShudWxsKX1yZXR1cm4gZS5wcm90b3R5cGU9e2lzVHJhY2tpbmc6ZnVuY3Rpb24oZSl7cmV0dXJuIGUgaW4gdGhpcy5vZmZzZXRzfSx0cmFjazpmdW5jdGlvbihlLHQpe2lmKGUgaW4gdGhpcy5vZmZzZXRzKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJBbHJlYWR5IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTt0aGlzLm9mZnNldHNbZV09dH0sb2Zmc2V0OmZ1bmN0aW9uKGUpe2Zvcih2YXIgdCBpbiB0aGlzLm9mZnNldHMpdGhpcy5vZmZzZXRzW3RdKz1lfSxzZXRFbnRyeUxvY2F0aW9uOmZ1bmN0aW9uKGUsdCxyKXtpZighKGUgaW4gdGhpcy5vZmZzZXRzKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm90IHRyYWNraW5nIGxvY2F0aW9uIG9mICIuY29uY2F0KGUpKTtmb3IodmFyIGE9ci5kYXRhLGk9dGhpcy5vZmZzZXRzW2VdLG89MCxzPXQubGVuZ3RoO288czsrK28pe3ZhciBsPTUqbytpLGM9bCsxLHU9bCsyLGY9bCszLGg9bCs0O2lmKDI5IT09YVtsXXx8MCE9PWFbY118fDAhPT1hW3VdfHwwIT09YVtmXXx8MCE9PWFbaF0pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIndyaXRpbmcgdG8gYW4gb2Zmc2V0IHRoYXQgaXMgbm90IGVtcHR5Iik7dmFyIGQ9dFtvXTthW2xdPTI5LGFbY109ZD4+MjQmMjU1LGFbdV09ZD4+MTYmMjU1LGFbZl09ZD4+OCYyNTUsYVtoXT0yNTUmZH19fSxlfSgpLHc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMuY2ZmPWV9cmV0dXJuIGUucHJvdG90eXBlPXtjb21waWxlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYsdD17ZGF0YTpbXSxsZW5ndGg6MCxhZGQ6ZnVuY3Rpb24oZSl7dGhpcy5kYXRhPXRoaXMuZGF0YS5jb25jYXQoZSksdGhpcy5sZW5ndGg9dGhpcy5kYXRhLmxlbmd0aH19LHI9dGhpcy5jb21waWxlSGVhZGVyKGUuaGVhZGVyKTt0LmFkZChyKTt2YXIgYT10aGlzLmNvbXBpbGVOYW1lSW5kZXgoZS5uYW1lcyk7aWYodC5hZGQoYSksZS5pc0NJREZvbnQmJmUudG9wRGljdC5oYXNOYW1lKCJGb250TWF0cml4Iikpe3ZhciBpPWUudG9wRGljdC5nZXRCeU5hbWUoIkZvbnRNYXRyaXgiKTtlLnRvcERpY3QucmVtb3ZlQnlOYW1lKCJGb250TWF0cml4Iik7Zm9yKHZhciBvPTAscz1lLmZkQXJyYXkubGVuZ3RoO288cztvKyspe3ZhciBsPWUuZmRBcnJheVtvXSxjPWkuc2xpY2UoMCk7bC5oYXNOYW1lKCJGb250TWF0cml4IikmJihjPW4uVXRpbC50cmFuc2Zvcm0oYyxsLmdldEJ5TmFtZSgiRm9udE1hdHJpeCIpKSksbC5zZXRCeU5hbWUoIkZvbnRNYXRyaXgiLGMpfX1lLnRvcERpY3Quc2V0QnlOYW1lKCJjaGFyc2V0IiwwKTt2YXIgdT10aGlzLmNvbXBpbGVUb3BEaWN0cyhbZS50b3BEaWN0XSx0Lmxlbmd0aCxlLmlzQ0lERm9udCk7dC5hZGQodS5vdXRwdXQpO3ZhciBmPXUudHJhY2tlcnNbMF0saD10aGlzLmNvbXBpbGVTdHJpbmdJbmRleChlLnN0cmluZ3Muc3RyaW5ncyk7dC5hZGQoaCk7dmFyIGQ9dGhpcy5jb21waWxlSW5kZXgoZS5nbG9iYWxTdWJySW5kZXgpO2lmKHQuYWRkKGQpLGUuZW5jb2RpbmcmJmUudG9wRGljdC5oYXNOYW1lKCJFbmNvZGluZyIpKWlmKGUuZW5jb2RpbmcucHJlZGVmaW5lZClmLnNldEVudHJ5TG9jYXRpb24oIkVuY29kaW5nIixbZS5lbmNvZGluZy5mb3JtYXRdLHQpO2Vsc2V7dmFyIHA9dGhpcy5jb21waWxlRW5jb2RpbmcoZS5lbmNvZGluZyk7Zi5zZXRFbnRyeUxvY2F0aW9uKCJFbmNvZGluZyIsW3QubGVuZ3RoXSx0KSx0LmFkZChwKX12YXIgbT10aGlzLmNvbXBpbGVDaGFyc2V0KGUuY2hhcnNldCk7Zi5zZXRFbnRyeUxvY2F0aW9uKCJjaGFyc2V0IixbdC5sZW5ndGhdLHQpLHQuYWRkKG0pO3ZhciBnPXRoaXMuY29tcGlsZUNoYXJTdHJpbmdzKGUuY2hhclN0cmluZ3MpO2lmKGYuc2V0RW50cnlMb2NhdGlvbigiQ2hhclN0cmluZ3MiLFt0Lmxlbmd0aF0sdCksdC5hZGQoZyksZS5pc0NJREZvbnQpe2Yuc2V0RW50cnlMb2NhdGlvbigiRkRTZWxlY3QiLFt0Lmxlbmd0aF0sdCk7dmFyIHY9dGhpcy5jb21waWxlRkRTZWxlY3QoZS5mZFNlbGVjdCk7dC5hZGQodiksdT10aGlzLmNvbXBpbGVUb3BEaWN0cyhlLmZkQXJyYXksdC5sZW5ndGgsITApLGYuc2V0RW50cnlMb2NhdGlvbigiRkRBcnJheSIsW3QubGVuZ3RoXSx0KSx0LmFkZCh1Lm91dHB1dCk7dmFyIHk9dS50cmFja2Vyczt0aGlzLmNvbXBpbGVQcml2YXRlRGljdHMoZS5mZEFycmF5LHksdCl9cmV0dXJuIHRoaXMuY29tcGlsZVByaXZhdGVEaWN0cyhbZS50b3BEaWN0XSxbZl0sdCksdC5hZGQoWzBdKSx0LmRhdGF9LGVuY29kZU51bWJlcjpmdW5jdGlvbihlKXtyZXR1cm4gcGFyc2VGbG9hdChlKSE9PXBhcnNlSW50KGUsMTApfHxpc05hTihlKT90aGlzLmVuY29kZUZsb2F0KGUpOnRoaXMuZW5jb2RlSW50ZWdlcihlKX0sZW5jb2RlRmxvYXQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS50b1N0cmluZygpLHI9L1wuKFxkKj8pKD86OXs1LDIwfXwwezUsMjB9KVxkezAsMn0oPzplKC4rKXwkKS8uZXhlYyh0KTtpZihyKXt2YXIgbj1wYXJzZUZsb2F0KCIxZSIrKChyWzJdPytyWzJdOjApK3JbMV0ubGVuZ3RoKSk7dD0oTWF0aC5yb3VuZChlKm4pL24pLnRvU3RyaW5nKCl9dmFyIGEsaSxvPSIiO2ZvcihhPTAsaT10Lmxlbmd0aDthPGk7KythKXt2YXIgcz10W2FdO28rPSJlIj09PXM/Ii0iPT09dFsrK2FdPyJjIjoiYiI6Ii4iPT09cz8iYSI6Ii0iPT09cz8iZSI6c312YXIgbD1bMzBdO2ZvcihhPTAsaT0obys9MSZvLmxlbmd0aD8iZiI6ImZmIikubGVuZ3RoO2E8aTthKz0yKWwucHVzaChwYXJzZUludChvLnN1YnN0cmluZyhhLGErMiksMTYpKTtyZXR1cm4gbH0sZW5jb2RlSW50ZWdlcjpmdW5jdGlvbihlKXtyZXR1cm4gZT49LTEwNyYmZTw9MTA3P1tlKzEzOV06ZT49MTA4JiZlPD0xMTMxP1syNDcrKChlLT0xMDgpPj44KSwyNTUmZV06ZT49LTExMzEmJmU8PS0xMDg/WzI1MSsoKGU9LWUtMTA4KT4+OCksMjU1JmVdOmU+PS0zMjc2OCYmZTw9MzI3Njc/WzI4LGU+PjgmMjU1LDI1NSZlXTpbMjksZT4+MjQmMjU1LGU+PjE2JjI1NSxlPj44JjI1NSwyNTUmZV19LGNvbXBpbGVIZWFkZXI6ZnVuY3Rpb24oZSl7cmV0dXJuW2UubWFqb3IsZS5taW5vcixlLmhkclNpemUsZS5vZmZTaXplXX0sY29tcGlsZU5hbWVJbmRleDpmdW5jdGlvbihlKXtmb3IodmFyIHQ9bmV3IGYscj0wLGE9ZS5sZW5ndGg7cjxhOysrcil7Zm9yKHZhciBpPWVbcl0sbz1NYXRoLm1pbihpLmxlbmd0aCwxMjcpLHM9bmV3IEFycmF5KG8pLGw9MDtsPG87bCsrKXt2YXIgYz1pW2xdOyhjPCIhInx8Yz4ifiJ8fCJbIj09PWN8fCJdIj09PWN8fCIoIj09PWN8fCIpIj09PWN8fCJ7Ij09PWN8fCJ9Ij09PWN8fCI8Ij09PWN8fCI+Ij09PWN8fCIvIj09PWN8fCIlIj09PWMpJiYoYz0iXyIpLHNbbF09Y30iIj09PShzPXMuam9pbigiIikpJiYocz0iQmFkX0ZvbnRfTmFtZSIpLHQuYWRkKCgwLG4uc3RyaW5nVG9CeXRlcykocykpfXJldHVybiB0aGlzLmNvbXBpbGVJbmRleCh0KX0sY29tcGlsZVRvcERpY3RzOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIG49W10sYT1uZXcgZixpPTAsbz1lLmxlbmd0aDtpPG87KytpKXt2YXIgcz1lW2ldO3ImJihzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFZlcnNpb24iKSxzLnJlbW92ZUJ5TmFtZSgiQ0lERm9udFJldmlzaW9uIikscy5yZW1vdmVCeU5hbWUoIkNJREZvbnRUeXBlIikscy5yZW1vdmVCeU5hbWUoIkNJRENvdW50Iikscy5yZW1vdmVCeU5hbWUoIlVJREJhc2UiKSk7dmFyIGw9bmV3IGIsYz10aGlzLmNvbXBpbGVEaWN0KHMsbCk7bi5wdXNoKGwpLGEuYWRkKGMpLGwub2Zmc2V0KHQpfXJldHVybnt0cmFja2VyczpuLG91dHB1dDphPXRoaXMuY29tcGlsZUluZGV4KGEsbil9fSxjb21waWxlUHJpdmF0ZURpY3RzOmZ1bmN0aW9uKGUsdCxyKXtmb3IodmFyIGE9MCxpPWUubGVuZ3RoO2E8aTsrK2Epe3ZhciBvPWVbYV0scz1vLnByaXZhdGVEaWN0O2lmKCFzfHwhby5oYXNOYW1lKCJQcml2YXRlIikpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlRoZXJlIG11c3QgYmUgYSBwcml2YXRlIGRpY3Rpb25hcnkuIik7dmFyIGw9bmV3IGIsYz10aGlzLmNvbXBpbGVEaWN0KHMsbCksdT1yLmxlbmd0aDtpZihsLm9mZnNldCh1KSxjLmxlbmd0aHx8KHU9MCksdFthXS5zZXRFbnRyeUxvY2F0aW9uKCJQcml2YXRlIixbYy5sZW5ndGgsdV0sciksci5hZGQoYykscy5zdWJyc0luZGV4JiZzLmhhc05hbWUoIlN1YnJzIikpe3ZhciBmPXRoaXMuY29tcGlsZUluZGV4KHMuc3VicnNJbmRleCk7bC5zZXRFbnRyeUxvY2F0aW9uKCJTdWJycyIsW2MubGVuZ3RoXSxyKSxyLmFkZChmKX19fSxjb21waWxlRGljdDpmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1bXSxhPWUub3JkZXIsaT0wO2k8YS5sZW5ndGg7KytpKXt2YXIgbz1hW2ldO2lmKG8gaW4gZS52YWx1ZXMpe3ZhciBzPWUudmFsdWVzW29dLGw9ZS50eXBlc1tvXTtpZihBcnJheS5pc0FycmF5KGwpfHwobD1bbF0pLEFycmF5LmlzQXJyYXkocyl8fChzPVtzXSksMCE9PXMubGVuZ3RoKXtmb3IodmFyIGM9MCx1PWwubGVuZ3RoO2M8dTsrK2Mpe3ZhciBmPWxbY10saD1zW2NdO3N3aXRjaChmKXtjYXNlIm51bSI6Y2FzZSJzaWQiOnI9ci5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIoaCkpO2JyZWFrO2Nhc2Uib2Zmc2V0Ijp2YXIgZD1lLmtleVRvTmFtZU1hcFtvXTt0LmlzVHJhY2tpbmcoZCl8fHQudHJhY2soZCxyLmxlbmd0aCkscj1yLmNvbmNhdChbMjksMCwwLDAsMF0pO2JyZWFrO2Nhc2UiYXJyYXkiOmNhc2UiZGVsdGEiOnI9ci5jb25jYXQodGhpcy5lbmNvZGVOdW1iZXIoaCkpO2Zvcih2YXIgcD0xLG09cy5sZW5ndGg7cDxtOysrcClyPXIuY29uY2F0KHRoaXMuZW5jb2RlTnVtYmVyKHNbcF0pKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIGRhdGEgdHlwZSBvZiAiLmNvbmNhdChmKSl9fXI9ci5jb25jYXQoZS5vcGNvZGVzW29dKX19fXJldHVybiByfSxjb21waWxlU3RyaW5nSW5kZXg6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PW5ldyBmLHI9MCxhPWUubGVuZ3RoO3I8YTsrK3IpdC5hZGQoKDAsbi5zdHJpbmdUb0J5dGVzKShlW3JdKSk7cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfSxjb21waWxlR2xvYmFsU3VickluZGV4OmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jZmYuZ2xvYmFsU3VickluZGV4O3RoaXMub3V0LndyaXRlQnl0ZUFycmF5KHRoaXMuY29tcGlsZUluZGV4KGUpKX0sY29tcGlsZUNoYXJTdHJpbmdzOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdD1uZXcgZixyPTA7cjxlLmNvdW50O3IrKyl7dmFyIG49ZS5nZXQocik7MCE9PW4ubGVuZ3RoP3QuYWRkKG4pOnQuYWRkKG5ldyBVaW50OEFycmF5KFsxMzksMTRdKSl9cmV0dXJuIHRoaXMuY29tcGlsZUluZGV4KHQpfSxjb21waWxlQ2hhcnNldDpmdW5jdGlvbihlKXt2YXIgdD0xKzIqKHRoaXMuY2ZmLmNoYXJTdHJpbmdzLmNvdW50LTEpLHI9bmV3IFVpbnQ4QXJyYXkodCk7cmV0dXJuIHRoaXMuY29tcGlsZVR5cGVkQXJyYXkocil9LGNvbXBpbGVFbmNvZGluZzpmdW5jdGlvbihlKXtyZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheShlLnJhdyl9LGNvbXBpbGVGRFNlbGVjdDpmdW5jdGlvbihlKXt2YXIgdCxyLG49ZS5mb3JtYXQ7c3dpdGNoKG4pe2Nhc2UgMDpmb3IoKHQ9bmV3IFVpbnQ4QXJyYXkoMStlLmZkU2VsZWN0Lmxlbmd0aCkpWzBdPW4scj0wO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXRbcisxXT1lLmZkU2VsZWN0W3JdO2JyZWFrO2Nhc2UgMzp2YXIgYT1lLmZkU2VsZWN0WzBdLGk9W24sMCwwLDAsMCxhXTtmb3Iocj0xO3I8ZS5mZFNlbGVjdC5sZW5ndGg7cisrKXt2YXIgbz1lLmZkU2VsZWN0W3JdO28hPT1hJiYoaS5wdXNoKHI+PjgmMjU1LDI1NSZyLG8pLGE9byl9dmFyIHM9KGkubGVuZ3RoLTMpLzM7aVsxXT1zPj44JjI1NSxpWzJdPTI1NSZzLGkucHVzaChyPj44JjI1NSwyNTUmciksdD1uZXcgVWludDhBcnJheShpKX1yZXR1cm4gdGhpcy5jb21waWxlVHlwZWRBcnJheSh0KX0sY29tcGlsZVR5cGVkQXJyYXk6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PVtdLHI9MCxuPWUubGVuZ3RoO3I8bjsrK3IpdFtyXT1lW3JdO3JldHVybiB0fSxjb21waWxlSW5kZXg6ZnVuY3Rpb24oZSx0KXt0PXR8fFtdO3ZhciByPWUub2JqZWN0cyxuPXIubGVuZ3RoO2lmKDA9PT1uKXJldHVyblswLDAsMF07dmFyIGEsaSxvPVtuPj44JjI1NSwyNTUmbl0scz0xO2ZvcihhPTA7YTxuOysrYSlzKz1yW2FdLmxlbmd0aDtpPXM8MjU2PzE6czw2NTUzNj8yOnM8MTY3NzcyMTY/Mzo0LG8ucHVzaChpKTt2YXIgbD0xO2ZvcihhPTA7YTxuKzE7YSsrKTE9PT1pP28ucHVzaCgyNTUmbCk6Mj09PWk/by5wdXNoKGw+PjgmMjU1LDI1NSZsKTozPT09aT9vLnB1c2gobD4+MTYmMjU1LGw+PjgmMjU1LDI1NSZsKTpvLnB1c2gobD4+PjI0JjI1NSxsPj4xNiYyNTUsbD4+OCYyNTUsMjU1JmwpLHJbYV0mJihsKz1yW2FdLmxlbmd0aCk7Zm9yKGE9MDthPG47YSsrKXt0W2FdJiZ0W2FdLm9mZnNldChvLmxlbmd0aCk7Zm9yKHZhciBjPTAsdT1yW2FdLmxlbmd0aDtjPHU7YysrKW8ucHVzaChyW2FdW2NdKX1yZXR1cm4gb319LGV9KCk7dC5DRkZDb21waWxlcj13fSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LkV4cGVydFN1YnNldENoYXJzZXQ9dC5FeHBlcnRDaGFyc2V0PXQuSVNPQWRvYmVDaGFyc2V0PXZvaWQgMCx0LklTT0Fkb2JlQ2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbSIsInF1b3RlZGJsIiwibnVtYmVyc2lnbiIsImRvbGxhciIsInBlcmNlbnQiLCJhbXBlcnNhbmQiLCJxdW90ZXJpZ2h0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJxdW90ZWxlZnQiLCJhIiwiYiIsImMiLCJkIiwiZSIsImYiLCJnIiwiaCIsImkiLCJqIiwiayIsImwiLCJtIiwibiIsIm8iLCJwIiwicSIsInIiLCJzIiwidCIsInUiLCJ2IiwidyIsIngiLCJ5IiwieiIsImJyYWNlbGVmdCIsImJhciIsImJyYWNlcmlnaHQiLCJhc2NpaXRpbGRlIiwiZXhjbGFtZG93biIsImNlbnQiLCJzdGVybGluZyIsImZyYWN0aW9uIiwieWVuIiwiZmxvcmluIiwic2VjdGlvbiIsImN1cnJlbmN5IiwicXVvdGVzaW5nbGUiLCJxdW90ZWRibGxlZnQiLCJndWlsbGVtb3RsZWZ0IiwiZ3VpbHNpbmdsbGVmdCIsImd1aWxzaW5nbHJpZ2h0IiwiZmkiLCJmbCIsImVuZGFzaCIsImRhZ2dlciIsImRhZ2dlcmRibCIsInBlcmlvZGNlbnRlcmVkIiwicGFyYWdyYXBoIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJxdW90ZWRibGJhc2UiLCJxdW90ZWRibHJpZ2h0IiwiZ3VpbGxlbW90cmlnaHQiLCJlbGxpcHNpcyIsInBlcnRob3VzYW5kIiwicXVlc3Rpb25kb3duIiwiZ3JhdmUiLCJhY3V0ZSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwiZGllcmVzaXMiLCJyaW5nIiwiY2VkaWxsYSIsImh1bmdhcnVtbGF1dCIsIm9nb25layIsImNhcm9uIiwiZW1kYXNoIiwiQUUiLCJvcmRmZW1pbmluZSIsIkxzbGFzaCIsIk9zbGFzaCIsIk9FIiwib3JkbWFzY3VsaW5lIiwiYWUiLCJkb3RsZXNzaSIsImxzbGFzaCIsIm9zbGFzaCIsIm9lIiwiZ2VybWFuZGJscyIsIm9uZXN1cGVyaW9yIiwibG9naWNhbG5vdCIsIm11IiwidHJhZGVtYXJrIiwiRXRoIiwib25laGFsZiIsInBsdXNtaW51cyIsIlRob3JuIiwib25lcXVhcnRlciIsImRpdmlkZSIsImJyb2tlbmJhciIsImRlZ3JlZSIsInRob3JuIiwidGhyZWVxdWFydGVycyIsInR3b3N1cGVyaW9yIiwicmVnaXN0ZXJlZCIsIm1pbnVzIiwiZXRoIiwibXVsdGlwbHkiLCJ0aHJlZXN1cGVyaW9yIiwiY29weXJpZ2h0IiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBZGllcmVzaXMiLCJBZ3JhdmUiLCJBcmluZyIsIkF0aWxkZSIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiRWNpcmN1bWZsZXgiLCJFZGllcmVzaXMiLCJFZ3JhdmUiLCJJYWN1dGUiLCJJY2lyY3VtZmxleCIsIklkaWVyZXNpcyIsIklncmF2ZSIsIk50aWxkZSIsIk9hY3V0ZSIsIk9jaXJjdW1mbGV4IiwiT2RpZXJlc2lzIiwiT2dyYXZlIiwiT3RpbGRlIiwiU2Nhcm9uIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZGllcmVzaXMiLCJVZ3JhdmUiLCJZYWN1dGUiLCJZZGllcmVzaXMiLCJaY2Fyb24iLCJhYWN1dGUiLCJhY2lyY3VtZmxleCIsImFkaWVyZXNpcyIsImFncmF2ZSIsImFyaW5nIiwiYXRpbGRlIiwiY2NlZGlsbGEiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImVncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiaWdyYXZlIiwibnRpbGRlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvZGllcmVzaXMiLCJvZ3JhdmUiLCJvdGlsZGUiLCJzY2Fyb24iLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInVncmF2ZSIsInlhY3V0ZSIsInlkaWVyZXNpcyIsInpjYXJvbiJdLHQuRXhwZXJ0Q2hhcnNldD1bIi5ub3RkZWYiLCJzcGFjZSIsImV4Y2xhbXNtYWxsIiwiSHVuZ2FydW1sYXV0c21hbGwiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwiYW1wZXJzYW5kc21hbGwiLCJBY3V0ZXNtYWxsIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsInF1ZXN0aW9uc21hbGwiLCJhc3VwZXJpb3IiLCJic3VwZXJpb3IiLCJjZW50c3VwZXJpb3IiLCJkc3VwZXJpb3IiLCJlc3VwZXJpb3IiLCJpc3VwZXJpb3IiLCJsc3VwZXJpb3IiLCJtc3VwZXJpb3IiLCJuc3VwZXJpb3IiLCJvc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCJmZiIsImZpIiwiZmwiLCJmZmkiLCJmZmwiLCJwYXJlbmxlZnRpbmZlcmlvciIsInBhcmVucmlnaHRpbmZlcmlvciIsIkNpcmN1bWZsZXhzbWFsbCIsImh5cGhlbnN1cGVyaW9yIiwiR3JhdmVzbWFsbCIsIkFzbWFsbCIsIkJzbWFsbCIsIkNzbWFsbCIsIkRzbWFsbCIsIkVzbWFsbCIsIkZzbWFsbCIsIkdzbWFsbCIsIkhzbWFsbCIsIklzbWFsbCIsIkpzbWFsbCIsIktzbWFsbCIsIkxzbWFsbCIsIk1zbWFsbCIsIk5zbWFsbCIsIk9zbWFsbCIsIlBzbWFsbCIsIlFzbWFsbCIsIlJzbWFsbCIsIlNzbWFsbCIsIlRzbWFsbCIsIlVzbWFsbCIsIlZzbWFsbCIsIldzbWFsbCIsIlhzbWFsbCIsIllzbWFsbCIsIlpzbWFsbCIsImNvbG9ubW9uZXRhcnkiLCJvbmVmaXR0ZWQiLCJydXBpYWgiLCJUaWxkZXNtYWxsIiwiZXhjbGFtZG93bnNtYWxsIiwiY2VudG9sZHN0eWxlIiwiTHNsYXNoc21hbGwiLCJTY2Fyb25zbWFsbCIsIlpjYXJvbnNtYWxsIiwiRGllcmVzaXNzbWFsbCIsIkJyZXZlc21hbGwiLCJDYXJvbnNtYWxsIiwiRG90YWNjZW50c21hbGwiLCJNYWNyb25zbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5pbmZlcmlvciIsIk9nb25la3NtYWxsIiwiUmluZ3NtYWxsIiwiQ2VkaWxsYXNtYWxsIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiemVyb3N1cGVyaW9yIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJlaWdodHN1cGVyaW9yIiwibmluZXN1cGVyaW9yIiwiemVyb2luZmVyaW9yIiwib25laW5mZXJpb3IiLCJ0d29pbmZlcmlvciIsInRocmVlaW5mZXJpb3IiLCJmb3VyaW5mZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCJzaXhpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJlaWdodGluZmVyaW9yIiwibmluZWluZmVyaW9yIiwiY2VudGluZmVyaW9yIiwiZG9sbGFyaW5mZXJpb3IiLCJwZXJpb2RpbmZlcmlvciIsImNvbW1haW5mZXJpb3IiLCJBZ3JhdmVzbWFsbCIsIkFhY3V0ZXNtYWxsIiwiQWNpcmN1bWZsZXhzbWFsbCIsIkF0aWxkZXNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBcmluZ3NtYWxsIiwiQUVzbWFsbCIsIkNjZWRpbGxhc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVhY3V0ZXNtYWxsIiwiRWNpcmN1bWZsZXhzbWFsbCIsIkVkaWVyZXNpc3NtYWxsIiwiSWdyYXZlc21hbGwiLCJJYWN1dGVzbWFsbCIsIkljaXJjdW1mbGV4c21hbGwiLCJJZGllcmVzaXNzbWFsbCIsIkV0aHNtYWxsIiwiTnRpbGRlc21hbGwiLCJPZ3JhdmVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2NpcmN1bWZsZXhzbWFsbCIsIk90aWxkZXNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPRXNtYWxsIiwiT3NsYXNoc21hbGwiLCJVZ3JhdmVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWNpcmN1bWZsZXhzbWFsbCIsIlVkaWVyZXNpc3NtYWxsIiwiWWFjdXRlc21hbGwiLCJUaG9ybnNtYWxsIiwiWWRpZXJlc2lzc21hbGwiXSx0LkV4cGVydFN1YnNldENoYXJzZXQ9WyIubm90ZGVmIiwic3BhY2UiLCJkb2xsYXJvbGRzdHlsZSIsImRvbGxhcnN1cGVyaW9yIiwicGFyZW5sZWZ0c3VwZXJpb3IiLCJwYXJlbnJpZ2h0c3VwZXJpb3IiLCJ0d29kb3RlbmxlYWRlciIsIm9uZWRvdGVubGVhZGVyIiwiY29tbWEiLCJoeXBoZW4iLCJwZXJpb2QiLCJmcmFjdGlvbiIsInplcm9vbGRzdHlsZSIsIm9uZW9sZHN0eWxlIiwidHdvb2xkc3R5bGUiLCJ0aHJlZW9sZHN0eWxlIiwiZm91cm9sZHN0eWxlIiwiZml2ZW9sZHN0eWxlIiwic2l4b2xkc3R5bGUiLCJzZXZlbm9sZHN0eWxlIiwiZWlnaHRvbGRzdHlsZSIsIm5pbmVvbGRzdHlsZSIsImNvbG9uIiwic2VtaWNvbG9uIiwiY29tbWFzdXBlcmlvciIsInRocmVlcXVhcnRlcnNlbWRhc2giLCJwZXJpb2RzdXBlcmlvciIsImFzdXBlcmlvciIsImJzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsImRzdXBlcmlvciIsImVzdXBlcmlvciIsImlzdXBlcmlvciIsImxzdXBlcmlvciIsIm1zdXBlcmlvciIsIm5zdXBlcmlvciIsIm9zdXBlcmlvciIsInJzdXBlcmlvciIsInNzdXBlcmlvciIsInRzdXBlcmlvciIsImZmIiwiZmkiLCJmbCIsImZmaSIsImZmbCIsInBhcmVubGVmdGluZmVyaW9yIiwicGFyZW5yaWdodGluZmVyaW9yIiwiaHlwaGVuc3VwZXJpb3IiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiY2VudG9sZHN0eWxlIiwiZmlndXJlZGFzaCIsImh5cGhlbmluZmVyaW9yIiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIl19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuZ2V0RW5jb2Rpbmc9ZnVuY3Rpb24oZSl7c3dpdGNoKGUpe2Nhc2UiV2luQW5zaUVuY29kaW5nIjpyZXR1cm4gcztjYXNlIlN0YW5kYXJkRW5jb2RpbmciOnJldHVybiBvO2Nhc2UiTWFjUm9tYW5FbmNvZGluZyI6cmV0dXJuIGk7Y2FzZSJTeW1ib2xTZXRFbmNvZGluZyI6cmV0dXJuIGw7Y2FzZSJaYXBmRGluZ2JhdHNFbmNvZGluZyI6cmV0dXJuIGM7Y2FzZSJFeHBlcnRFbmNvZGluZyI6cmV0dXJuIG47Y2FzZSJNYWNFeHBlcnRFbmNvZGluZyI6cmV0dXJuIGE7ZGVmYXVsdDpyZXR1cm4gbnVsbH19LHQuRXhwZXJ0RW5jb2Rpbmc9dC5aYXBmRGluZ2JhdHNFbmNvZGluZz10LlN5bWJvbFNldEVuY29kaW5nPXQuTWFjUm9tYW5FbmNvZGluZz10LlN0YW5kYXJkRW5jb2Rpbmc9dC5XaW5BbnNpRW5jb2Rpbmc9dm9pZCAwO3ZhciBuPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsImNvbW1hc3VwZXJpb3IiLCJ0aHJlZXF1YXJ0ZXJzZW1kYXNoIiwicGVyaW9kc3VwZXJpb3IiLCJxdWVzdGlvbnNtYWxsIiwiIiwiYXN1cGVyaW9yIiwiYnN1cGVyaW9yIiwiY2VudHN1cGVyaW9yIiwiZHN1cGVyaW9yIiwiZXN1cGVyaW9yIiwiIiwiIiwiIiwiaXN1cGVyaW9yIiwiIiwiIiwibHN1cGVyaW9yIiwibXN1cGVyaW9yIiwibnN1cGVyaW9yIiwib3N1cGVyaW9yIiwiIiwiIiwicnN1cGVyaW9yIiwic3N1cGVyaW9yIiwidHN1cGVyaW9yIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5zdXBlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsImNlbnRvbGRzdHlsZSIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiU2Nhcm9uc21hbGwiLCJaY2Fyb25zbWFsbCIsIkRpZXJlc2lzc21hbGwiLCJCcmV2ZXNtYWxsIiwiQ2Fyb25zbWFsbCIsIiIsIkRvdGFjY2VudHNtYWxsIiwiIiwiIiwiTWFjcm9uc21hbGwiLCIiLCIiLCJmaWd1cmVkYXNoIiwiaHlwaGVuaW5mZXJpb3IiLCIiLCIiLCJPZ29uZWtzbWFsbCIsIlJpbmdzbWFsbCIsIkNlZGlsbGFzbWFsbCIsIiIsIiIsIiIsIm9uZXF1YXJ0ZXIiLCJvbmVoYWxmIiwidGhyZWVxdWFydGVycyIsInF1ZXN0aW9uZG93bnNtYWxsIiwib25lZWlnaHRoIiwidGhyZWVlaWdodGhzIiwiZml2ZWVpZ2h0aHMiLCJzZXZlbmVpZ2h0aHMiLCJvbmV0aGlyZCIsInR3b3RoaXJkcyIsIiIsIiIsInplcm9zdXBlcmlvciIsIm9uZXN1cGVyaW9yIiwidHdvc3VwZXJpb3IiLCJ0aHJlZXN1cGVyaW9yIiwiZm91cnN1cGVyaW9yIiwiZml2ZXN1cGVyaW9yIiwic2l4c3VwZXJpb3IiLCJzZXZlbnN1cGVyaW9yIiwiZWlnaHRzdXBlcmlvciIsIm5pbmVzdXBlcmlvciIsInplcm9pbmZlcmlvciIsIm9uZWluZmVyaW9yIiwidHdvaW5mZXJpb3IiLCJ0aHJlZWluZmVyaW9yIiwiZm91cmluZmVyaW9yIiwiZml2ZWluZmVyaW9yIiwic2l4aW5mZXJpb3IiLCJzZXZlbmluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsIm5pbmVpbmZlcmlvciIsImNlbnRpbmZlcmlvciIsImRvbGxhcmluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJjb21tYWluZmVyaW9yIiwiQWdyYXZlc21hbGwiLCJBYWN1dGVzbWFsbCIsIkFjaXJjdW1mbGV4c21hbGwiLCJBdGlsZGVzbWFsbCIsIkFkaWVyZXNpc3NtYWxsIiwiQXJpbmdzbWFsbCIsIkFFc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWdyYXZlc21hbGwiLCJFYWN1dGVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklncmF2ZXNtYWxsIiwiSWFjdXRlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJFdGhzbWFsbCIsIk50aWxkZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPYWN1dGVzbWFsbCIsIk9jaXJjdW1mbGV4c21hbGwiLCJPdGlsZGVzbWFsbCIsIk9kaWVyZXNpc3NtYWxsIiwiT0VzbWFsbCIsIk9zbGFzaHNtYWxsIiwiVWdyYXZlc21hbGwiLCJVYWN1dGVzbWFsbCIsIlVjaXJjdW1mbGV4c21hbGwiLCJVZGllcmVzaXNzbWFsbCIsIllhY3V0ZXNtYWxsIiwiVGhvcm5zbWFsbCIsIllkaWVyZXNpc3NtYWxsIl07dC5FeHBlcnRFbmNvZGluZz1uO3ZhciBhPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW1zbWFsbCIsIkh1bmdhcnVtbGF1dHNtYWxsIiwiY2VudG9sZHN0eWxlIiwiZG9sbGFyb2xkc3R5bGUiLCJkb2xsYXJzdXBlcmlvciIsImFtcGVyc2FuZHNtYWxsIiwiQWN1dGVzbWFsbCIsInBhcmVubGVmdHN1cGVyaW9yIiwicGFyZW5yaWdodHN1cGVyaW9yIiwidHdvZG90ZW5sZWFkZXIiLCJvbmVkb3RlbmxlYWRlciIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwiZnJhY3Rpb24iLCJ6ZXJvb2xkc3R5bGUiLCJvbmVvbGRzdHlsZSIsInR3b29sZHN0eWxlIiwidGhyZWVvbGRzdHlsZSIsImZvdXJvbGRzdHlsZSIsImZpdmVvbGRzdHlsZSIsInNpeG9sZHN0eWxlIiwic2V2ZW5vbGRzdHlsZSIsImVpZ2h0b2xkc3R5bGUiLCJuaW5lb2xkc3R5bGUiLCJjb2xvbiIsInNlbWljb2xvbiIsIiIsInRocmVlcXVhcnRlcnNlbWRhc2giLCIiLCJxdWVzdGlvbnNtYWxsIiwiIiwiIiwiIiwiIiwiRXRoc21hbGwiLCIiLCIiLCJvbmVxdWFydGVyIiwib25laGFsZiIsInRocmVlcXVhcnRlcnMiLCJvbmVlaWdodGgiLCJ0aHJlZWVpZ2h0aHMiLCJmaXZlZWlnaHRocyIsInNldmVuZWlnaHRocyIsIm9uZXRoaXJkIiwidHdvdGhpcmRzIiwiIiwiIiwiIiwiIiwiIiwiIiwiZmYiLCJmaSIsImZsIiwiZmZpIiwiZmZsIiwicGFyZW5sZWZ0aW5mZXJpb3IiLCIiLCJwYXJlbnJpZ2h0aW5mZXJpb3IiLCJDaXJjdW1mbGV4c21hbGwiLCJoeXBoZW5pbmZlcmlvciIsIkdyYXZlc21hbGwiLCJBc21hbGwiLCJCc21hbGwiLCJDc21hbGwiLCJEc21hbGwiLCJFc21hbGwiLCJGc21hbGwiLCJHc21hbGwiLCJIc21hbGwiLCJJc21hbGwiLCJKc21hbGwiLCJLc21hbGwiLCJMc21hbGwiLCJNc21hbGwiLCJOc21hbGwiLCJPc21hbGwiLCJQc21hbGwiLCJRc21hbGwiLCJSc21hbGwiLCJTc21hbGwiLCJUc21hbGwiLCJVc21hbGwiLCJWc21hbGwiLCJXc21hbGwiLCJYc21hbGwiLCJZc21hbGwiLCJac21hbGwiLCJjb2xvbm1vbmV0YXJ5Iiwib25lZml0dGVkIiwicnVwaWFoIiwiVGlsZGVzbWFsbCIsIiIsIiIsImFzdXBlcmlvciIsImNlbnRzdXBlcmlvciIsIiIsIiIsIiIsIiIsIkFhY3V0ZXNtYWxsIiwiQWdyYXZlc21hbGwiLCJBY2lyY3VtZmxleHNtYWxsIiwiQWRpZXJlc2lzc21hbGwiLCJBdGlsZGVzbWFsbCIsIkFyaW5nc21hbGwiLCJDY2VkaWxsYXNtYWxsIiwiRWFjdXRlc21hbGwiLCJFZ3JhdmVzbWFsbCIsIkVjaXJjdW1mbGV4c21hbGwiLCJFZGllcmVzaXNzbWFsbCIsIklhY3V0ZXNtYWxsIiwiSWdyYXZlc21hbGwiLCJJY2lyY3VtZmxleHNtYWxsIiwiSWRpZXJlc2lzc21hbGwiLCJOdGlsZGVzbWFsbCIsIk9hY3V0ZXNtYWxsIiwiT2dyYXZlc21hbGwiLCJPY2lyY3VtZmxleHNtYWxsIiwiT2RpZXJlc2lzc21hbGwiLCJPdGlsZGVzbWFsbCIsIlVhY3V0ZXNtYWxsIiwiVWdyYXZlc21hbGwiLCJVY2lyY3VtZmxleHNtYWxsIiwiVWRpZXJlc2lzc21hbGwiLCIiLCJlaWdodHN1cGVyaW9yIiwiZm91cmluZmVyaW9yIiwidGhyZWVpbmZlcmlvciIsInNpeGluZmVyaW9yIiwiZWlnaHRpbmZlcmlvciIsInNldmVuaW5mZXJpb3IiLCJTY2Fyb25zbWFsbCIsIiIsImNlbnRpbmZlcmlvciIsInR3b2luZmVyaW9yIiwiIiwiRGllcmVzaXNzbWFsbCIsIiIsIkNhcm9uc21hbGwiLCJvc3VwZXJpb3IiLCJmaXZlaW5mZXJpb3IiLCIiLCJjb21tYWluZmVyaW9yIiwicGVyaW9kaW5mZXJpb3IiLCJZYWN1dGVzbWFsbCIsIiIsImRvbGxhcmluZmVyaW9yIiwiIiwiIiwiVGhvcm5zbWFsbCIsIiIsIm5pbmVpbmZlcmlvciIsInplcm9pbmZlcmlvciIsIlpjYXJvbnNtYWxsIiwiQUVzbWFsbCIsIk9zbGFzaHNtYWxsIiwicXVlc3Rpb25kb3duc21hbGwiLCJvbmVpbmZlcmlvciIsIkxzbGFzaHNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiIiwiQ2VkaWxsYXNtYWxsIiwiIiwiIiwiIiwiIiwiIiwiT0VzbWFsbCIsImZpZ3VyZWRhc2giLCJoeXBoZW5zdXBlcmlvciIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd25zbWFsbCIsIiIsIllkaWVyZXNpc3NtYWxsIiwiIiwib25lc3VwZXJpb3IiLCJ0d29zdXBlcmlvciIsInRocmVlc3VwZXJpb3IiLCJmb3Vyc3VwZXJpb3IiLCJmaXZlc3VwZXJpb3IiLCJzaXhzdXBlcmlvciIsInNldmVuc3VwZXJpb3IiLCJuaW5lc3VwZXJpb3IiLCJ6ZXJvc3VwZXJpb3IiLCIiLCJlc3VwZXJpb3IiLCJyc3VwZXJpb3IiLCJ0c3VwZXJpb3IiLCIiLCIiLCJpc3VwZXJpb3IiLCJzc3VwZXJpb3IiLCJkc3VwZXJpb3IiLCIiLCIiLCIiLCIiLCIiLCJsc3VwZXJpb3IiLCJPZ29uZWtzbWFsbCIsIkJyZXZlc21hbGwiLCJNYWNyb25zbWFsbCIsImJzdXBlcmlvciIsIm5zdXBlcmlvciIsIm1zdXBlcmlvciIsImNvbW1hc3VwZXJpb3IiLCJwZXJpb2RzdXBlcmlvciIsIkRvdGFjY2VudHNtYWxsIiwiUmluZ3NtYWxsIiwiIiwiIiwiIiwiIl0saT1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCIiLCJBZGllcmVzaXMiLCJBcmluZyIsIkNjZWRpbGxhIiwiRWFjdXRlIiwiTnRpbGRlIiwiT2RpZXJlc2lzIiwiVWRpZXJlc2lzIiwiYWFjdXRlIiwiYWdyYXZlIiwiYWNpcmN1bWZsZXgiLCJhZGllcmVzaXMiLCJhdGlsZGUiLCJhcmluZyIsImNjZWRpbGxhIiwiZWFjdXRlIiwiZWdyYXZlIiwiZWNpcmN1bWZsZXgiLCJlZGllcmVzaXMiLCJpYWN1dGUiLCJpZ3JhdmUiLCJpY2lyY3VtZmxleCIsImlkaWVyZXNpcyIsIm50aWxkZSIsIm9hY3V0ZSIsIm9ncmF2ZSIsIm9jaXJjdW1mbGV4Iiwib2RpZXJlc2lzIiwib3RpbGRlIiwidWFjdXRlIiwidWdyYXZlIiwidWNpcmN1bWZsZXgiLCJ1ZGllcmVzaXMiLCJkYWdnZXIiLCJkZWdyZWUiLCJjZW50Iiwic3RlcmxpbmciLCJzZWN0aW9uIiwiYnVsbGV0IiwicGFyYWdyYXBoIiwiZ2VybWFuZGJscyIsInJlZ2lzdGVyZWQiLCJjb3B5cmlnaHQiLCJ0cmFkZW1hcmsiLCJhY3V0ZSIsImRpZXJlc2lzIiwibm90ZXF1YWwiLCJBRSIsIk9zbGFzaCIsImluZmluaXR5IiwicGx1c21pbnVzIiwibGVzc2VxdWFsIiwiZ3JlYXRlcmVxdWFsIiwieWVuIiwibXUiLCJwYXJ0aWFsZGlmZiIsInN1bW1hdGlvbiIsInByb2R1Y3QiLCJwaSIsImludGVncmFsIiwib3JkZmVtaW5pbmUiLCJvcmRtYXNjdWxpbmUiLCJPbWVnYSIsImFlIiwib3NsYXNoIiwicXVlc3Rpb25kb3duIiwiZXhjbGFtZG93biIsImxvZ2ljYWxub3QiLCJyYWRpY2FsIiwiZmxvcmluIiwiYXBwcm94ZXF1YWwiLCJEZWx0YSIsImd1aWxsZW1vdGxlZnQiLCJndWlsbGVtb3RyaWdodCIsImVsbGlwc2lzIiwic3BhY2UiLCJBZ3JhdmUiLCJBdGlsZGUiLCJPdGlsZGUiLCJPRSIsIm9lIiwiZW5kYXNoIiwiZW1kYXNoIiwicXVvdGVkYmxsZWZ0IiwicXVvdGVkYmxyaWdodCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJkaXZpZGUiLCJsb3plbmdlIiwieWRpZXJlc2lzIiwiWWRpZXJlc2lzIiwiZnJhY3Rpb24iLCJjdXJyZW5jeSIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicGVydGhvdXNhbmQiLCJBY2lyY3VtZmxleCIsIkVjaXJjdW1mbGV4IiwiQWFjdXRlIiwiRWRpZXJlc2lzIiwiRWdyYXZlIiwiSWFjdXRlIiwiSWNpcmN1bWZsZXgiLCJJZGllcmVzaXMiLCJJZ3JhdmUiLCJPYWN1dGUiLCJPY2lyY3VtZmxleCIsImFwcGxlIiwiT2dyYXZlIiwiVWFjdXRlIiwiVWNpcmN1bWZsZXgiLCJVZ3JhdmUiLCJkb3RsZXNzaSIsImNpcmN1bWZsZXgiLCJ0aWxkZSIsIm1hY3JvbiIsImJyZXZlIiwiZG90YWNjZW50IiwicmluZyIsImNlZGlsbGEiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiJdO3QuTWFjUm9tYW5FbmNvZGluZz1pO3ZhciBvPVsiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwiIiwic3BhY2UiLCJleGNsYW0iLCJxdW90ZWRibCIsIm51bWJlcnNpZ24iLCJkb2xsYXIiLCJwZXJjZW50IiwiYW1wZXJzYW5kIiwicXVvdGVyaWdodCIsInBhcmVubGVmdCIsInBhcmVucmlnaHQiLCJhc3RlcmlzayIsInBsdXMiLCJjb21tYSIsImh5cGhlbiIsInBlcmlvZCIsInNsYXNoIiwiemVybyIsIm9uZSIsInR3byIsInRocmVlIiwiZm91ciIsImZpdmUiLCJzaXgiLCJzZXZlbiIsImVpZ2h0IiwibmluZSIsImNvbG9uIiwic2VtaWNvbG9uIiwibGVzcyIsImVxdWFsIiwiZ3JlYXRlciIsInF1ZXN0aW9uIiwiYXQiLCJBIiwiQiIsIkMiLCJEIiwiRSIsIkYiLCJHIiwiSCIsIkkiLCJKIiwiSyIsIkwiLCJNIiwiTiIsIk8iLCJQIiwiUSIsIlIiLCJTIiwiVCIsIlUiLCJWIiwiVyIsIlgiLCJZIiwiWiIsImJyYWNrZXRsZWZ0IiwiYmFja3NsYXNoIiwiYnJhY2tldHJpZ2h0IiwiYXNjaWljaXJjdW0iLCJ1bmRlcnNjb3JlIiwicXVvdGVsZWZ0IiwiYSIsImIiLCJjIiwiZCIsImUiLCJmIiwiZyIsImgiLCJpIiwiaiIsImsiLCJsIiwibSIsIm4iLCJvIiwicCIsInEiLCJyIiwicyIsInQiLCJ1IiwidiIsInciLCJ4IiwieSIsInoiLCJicmFjZWxlZnQiLCJiYXIiLCJicmFjZXJpZ2h0IiwiYXNjaWl0aWxkZSIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImV4Y2xhbWRvd24iLCJjZW50Iiwic3RlcmxpbmciLCJmcmFjdGlvbiIsInllbiIsImZsb3JpbiIsInNlY3Rpb24iLCJjdXJyZW5jeSIsInF1b3Rlc2luZ2xlIiwicXVvdGVkYmxsZWZ0IiwiZ3VpbGxlbW90bGVmdCIsImd1aWxzaW5nbGxlZnQiLCJndWlsc2luZ2xyaWdodCIsImZpIiwiZmwiLCIiLCJlbmRhc2giLCJkYWdnZXIiLCJkYWdnZXJkYmwiLCJwZXJpb2RjZW50ZXJlZCIsIiIsInBhcmFncmFwaCIsImJ1bGxldCIsInF1b3Rlc2luZ2xiYXNlIiwicXVvdGVkYmxiYXNlIiwicXVvdGVkYmxyaWdodCIsImd1aWxsZW1vdHJpZ2h0IiwiZWxsaXBzaXMiLCJwZXJ0aG91c2FuZCIsIiIsInF1ZXN0aW9uZG93biIsIiIsImdyYXZlIiwiYWN1dGUiLCJjaXJjdW1mbGV4IiwidGlsZGUiLCJtYWNyb24iLCJicmV2ZSIsImRvdGFjY2VudCIsImRpZXJlc2lzIiwiIiwicmluZyIsImNlZGlsbGEiLCIiLCJodW5nYXJ1bWxhdXQiLCJvZ29uZWsiLCJjYXJvbiIsImVtZGFzaCIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIkFFIiwiIiwib3JkZmVtaW5pbmUiLCIiLCIiLCIiLCIiLCJMc2xhc2giLCJPc2xhc2giLCJPRSIsIm9yZG1hc2N1bGluZSIsIiIsIiIsIiIsIiIsIiIsImFlIiwiIiwiIiwiIiwiZG90bGVzc2kiLCIiLCIiLCJsc2xhc2giLCJvc2xhc2giLCJvZSIsImdlcm1hbmRibHMiLCIiLCIiLCIiLCIiXTt0LlN0YW5kYXJkRW5jb2Rpbmc9bzt2YXIgcz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwicXVvdGVkYmwiLCJudW1iZXJzaWduIiwiZG9sbGFyIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInF1b3Rlc2luZ2xlIiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrIiwicGx1cyIsImNvbW1hIiwiaHlwaGVuIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJhdCIsIkEiLCJCIiwiQyIsIkQiLCJFIiwiRiIsIkciLCJIIiwiSSIsIkoiLCJLIiwiTCIsIk0iLCJOIiwiTyIsIlAiLCJRIiwiUiIsIlMiLCJUIiwiVSIsIlYiLCJXIiwiWCIsIlkiLCJaIiwiYnJhY2tldGxlZnQiLCJiYWNrc2xhc2giLCJicmFja2V0cmlnaHQiLCJhc2NpaWNpcmN1bSIsInVuZGVyc2NvcmUiLCJncmF2ZSIsImEiLCJiIiwiYyIsImQiLCJlIiwiZiIsImciLCJoIiwiaSIsImoiLCJrIiwibCIsIm0iLCJuIiwibyIsInAiLCJxIiwiciIsInMiLCJ0IiwidSIsInYiLCJ3IiwieCIsInkiLCJ6IiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsImFzY2lpdGlsZGUiLCJidWxsZXQiLCJFdXJvIiwiYnVsbGV0IiwicXVvdGVzaW5nbGJhc2UiLCJmbG9yaW4iLCJxdW90ZWRibGJhc2UiLCJlbGxpcHNpcyIsImRhZ2dlciIsImRhZ2dlcmRibCIsImNpcmN1bWZsZXgiLCJwZXJ0aG91c2FuZCIsIlNjYXJvbiIsImd1aWxzaW5nbGxlZnQiLCJPRSIsImJ1bGxldCIsIlpjYXJvbiIsImJ1bGxldCIsImJ1bGxldCIsInF1b3RlbGVmdCIsInF1b3RlcmlnaHQiLCJxdW90ZWRibGxlZnQiLCJxdW90ZWRibHJpZ2h0IiwiYnVsbGV0IiwiZW5kYXNoIiwiZW1kYXNoIiwidGlsZGUiLCJ0cmFkZW1hcmsiLCJzY2Fyb24iLCJndWlsc2luZ2xyaWdodCIsIm9lIiwiYnVsbGV0IiwiemNhcm9uIiwiWWRpZXJlc2lzIiwic3BhY2UiLCJleGNsYW1kb3duIiwiY2VudCIsInN0ZXJsaW5nIiwiY3VycmVuY3kiLCJ5ZW4iLCJicm9rZW5iYXIiLCJzZWN0aW9uIiwiZGllcmVzaXMiLCJjb3B5cmlnaHQiLCJvcmRmZW1pbmluZSIsImd1aWxsZW1vdGxlZnQiLCJsb2dpY2Fsbm90IiwiaHlwaGVuIiwicmVnaXN0ZXJlZCIsIm1hY3JvbiIsImRlZ3JlZSIsInBsdXNtaW51cyIsInR3b3N1cGVyaW9yIiwidGhyZWVzdXBlcmlvciIsImFjdXRlIiwibXUiLCJwYXJhZ3JhcGgiLCJwZXJpb2RjZW50ZXJlZCIsImNlZGlsbGEiLCJvbmVzdXBlcmlvciIsIm9yZG1hc2N1bGluZSIsImd1aWxsZW1vdHJpZ2h0Iiwib25lcXVhcnRlciIsIm9uZWhhbGYiLCJ0aHJlZXF1YXJ0ZXJzIiwicXVlc3Rpb25kb3duIiwiQWdyYXZlIiwiQWFjdXRlIiwiQWNpcmN1bWZsZXgiLCJBdGlsZGUiLCJBZGllcmVzaXMiLCJBcmluZyIsIkFFIiwiQ2NlZGlsbGEiLCJFZ3JhdmUiLCJFYWN1dGUiLCJFY2lyY3VtZmxleCIsIkVkaWVyZXNpcyIsIklncmF2ZSIsIklhY3V0ZSIsIkljaXJjdW1mbGV4IiwiSWRpZXJlc2lzIiwiRXRoIiwiTnRpbGRlIiwiT2dyYXZlIiwiT2FjdXRlIiwiT2NpcmN1bWZsZXgiLCJPdGlsZGUiLCJPZGllcmVzaXMiLCJtdWx0aXBseSIsIk9zbGFzaCIsIlVncmF2ZSIsIlVhY3V0ZSIsIlVjaXJjdW1mbGV4IiwiVWRpZXJlc2lzIiwiWWFjdXRlIiwiVGhvcm4iLCJnZXJtYW5kYmxzIiwiYWdyYXZlIiwiYWFjdXRlIiwiYWNpcmN1bWZsZXgiLCJhdGlsZGUiLCJhZGllcmVzaXMiLCJhcmluZyIsImFlIiwiY2NlZGlsbGEiLCJlZ3JhdmUiLCJlYWN1dGUiLCJlY2lyY3VtZmxleCIsImVkaWVyZXNpcyIsImlncmF2ZSIsImlhY3V0ZSIsImljaXJjdW1mbGV4IiwiaWRpZXJlc2lzIiwiZXRoIiwibnRpbGRlIiwib2dyYXZlIiwib2FjdXRlIiwib2NpcmN1bWZsZXgiLCJvdGlsZGUiLCJvZGllcmVzaXMiLCJkaXZpZGUiLCJvc2xhc2giLCJ1Z3JhdmUiLCJ1YWN1dGUiLCJ1Y2lyY3VtZmxleCIsInVkaWVyZXNpcyIsInlhY3V0ZSIsInRob3JuIiwieWRpZXJlc2lzIl07dC5XaW5BbnNpRW5jb2Rpbmc9czt2YXIgbD1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiZXhjbGFtIiwidW5pdmVyc2FsIiwibnVtYmVyc2lnbiIsImV4aXN0ZW50aWFsIiwicGVyY2VudCIsImFtcGVyc2FuZCIsInN1Y2h0aGF0IiwicGFyZW5sZWZ0IiwicGFyZW5yaWdodCIsImFzdGVyaXNrbWF0aCIsInBsdXMiLCJjb21tYSIsIm1pbnVzIiwicGVyaW9kIiwic2xhc2giLCJ6ZXJvIiwib25lIiwidHdvIiwidGhyZWUiLCJmb3VyIiwiZml2ZSIsInNpeCIsInNldmVuIiwiZWlnaHQiLCJuaW5lIiwiY29sb24iLCJzZW1pY29sb24iLCJsZXNzIiwiZXF1YWwiLCJncmVhdGVyIiwicXVlc3Rpb24iLCJjb25ncnVlbnQiLCJBbHBoYSIsIkJldGEiLCJDaGkiLCJEZWx0YSIsIkVwc2lsb24iLCJQaGkiLCJHYW1tYSIsIkV0YSIsIklvdGEiLCJ0aGV0YTEiLCJLYXBwYSIsIkxhbWJkYSIsIk11IiwiTnUiLCJPbWljcm9uIiwiUGkiLCJUaGV0YSIsIlJobyIsIlNpZ21hIiwiVGF1IiwiVXBzaWxvbiIsInNpZ21hMSIsIk9tZWdhIiwiWGkiLCJQc2kiLCJaZXRhIiwiYnJhY2tldGxlZnQiLCJ0aGVyZWZvcmUiLCJicmFja2V0cmlnaHQiLCJwZXJwZW5kaWN1bGFyIiwidW5kZXJzY29yZSIsInJhZGljYWxleCIsImFscGhhIiwiYmV0YSIsImNoaSIsImRlbHRhIiwiZXBzaWxvbiIsInBoaSIsImdhbW1hIiwiZXRhIiwiaW90YSIsInBoaTEiLCJrYXBwYSIsImxhbWJkYSIsIm11IiwibnUiLCJvbWljcm9uIiwicGkiLCJ0aGV0YSIsInJobyIsInNpZ21hIiwidGF1IiwidXBzaWxvbiIsIm9tZWdhMSIsIm9tZWdhIiwieGkiLCJwc2kiLCJ6ZXRhIiwiYnJhY2VsZWZ0IiwiYmFyIiwiYnJhY2VyaWdodCIsInNpbWlsYXIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCIiLCJFdXJvIiwiVXBzaWxvbjEiLCJtaW51dGUiLCJsZXNzZXF1YWwiLCJmcmFjdGlvbiIsImluZmluaXR5IiwiZmxvcmluIiwiY2x1YiIsImRpYW1vbmQiLCJoZWFydCIsInNwYWRlIiwiYXJyb3dib3RoIiwiYXJyb3dsZWZ0IiwiYXJyb3d1cCIsImFycm93cmlnaHQiLCJhcnJvd2Rvd24iLCJkZWdyZWUiLCJwbHVzbWludXMiLCJzZWNvbmQiLCJncmVhdGVyZXF1YWwiLCJtdWx0aXBseSIsInByb3BvcnRpb25hbCIsInBhcnRpYWxkaWZmIiwiYnVsbGV0IiwiZGl2aWRlIiwibm90ZXF1YWwiLCJlcXVpdmFsZW5jZSIsImFwcHJveGVxdWFsIiwiZWxsaXBzaXMiLCJhcnJvd3ZlcnRleCIsImFycm93aG9yaXpleCIsImNhcnJpYWdlcmV0dXJuIiwiYWxlcGgiLCJJZnJha3R1ciIsIlJmcmFrdHVyIiwid2VpZXJzdHJhc3MiLCJjaXJjbGVtdWx0aXBseSIsImNpcmNsZXBsdXMiLCJlbXB0eXNldCIsImludGVyc2VjdGlvbiIsInVuaW9uIiwicHJvcGVyc3VwZXJzZXQiLCJyZWZsZXhzdXBlcnNldCIsIm5vdHN1YnNldCIsInByb3BlcnN1YnNldCIsInJlZmxleHN1YnNldCIsImVsZW1lbnQiLCJub3RlbGVtZW50IiwiYW5nbGUiLCJncmFkaWVudCIsInJlZ2lzdGVyc2VyaWYiLCJjb3B5cmlnaHRzZXJpZiIsInRyYWRlbWFya3NlcmlmIiwicHJvZHVjdCIsInJhZGljYWwiLCJkb3RtYXRoIiwibG9naWNhbG5vdCIsImxvZ2ljYWxhbmQiLCJsb2dpY2Fsb3IiLCJhcnJvd2RibGJvdGgiLCJhcnJvd2RibGxlZnQiLCJhcnJvd2RibHVwIiwiYXJyb3dkYmxyaWdodCIsImFycm93ZGJsZG93biIsImxvemVuZ2UiLCJhbmdsZWxlZnQiLCJyZWdpc3RlcnNhbnMiLCJjb3B5cmlnaHRzYW5zIiwidHJhZGVtYXJrc2FucyIsInN1bW1hdGlvbiIsInBhcmVubGVmdHRwIiwicGFyZW5sZWZ0ZXgiLCJwYXJlbmxlZnRidCIsImJyYWNrZXRsZWZ0dHAiLCJicmFja2V0bGVmdGV4IiwiYnJhY2tldGxlZnRidCIsImJyYWNlbGVmdHRwIiwiYnJhY2VsZWZ0bWlkIiwiYnJhY2VsZWZ0YnQiLCJicmFjZWV4IiwiIiwiYW5nbGVyaWdodCIsImludGVncmFsIiwiaW50ZWdyYWx0cCIsImludGVncmFsZXgiLCJpbnRlZ3JhbGJ0IiwicGFyZW5yaWdodHRwIiwicGFyZW5yaWdodGV4IiwicGFyZW5yaWdodGJ0IiwiYnJhY2tldHJpZ2h0dHAiLCJicmFja2V0cmlnaHRleCIsImJyYWNrZXRyaWdodGJ0IiwiYnJhY2VyaWdodHRwIiwiYnJhY2VyaWdodG1pZCIsImJyYWNlcmlnaHRidCIsIiJdO3QuU3ltYm9sU2V0RW5jb2Rpbmc9bDt2YXIgYz1bIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsInNwYWNlIiwiYTEiLCJhMiIsImEyMDIiLCJhMyIsImE0IiwiYTUiLCJhMTE5IiwiYTExOCIsImExMTciLCJhMTEiLCJhMTIiLCJhMTMiLCJhMTQiLCJhMTUiLCJhMTYiLCJhMTA1IiwiYTE3IiwiYTE4IiwiYTE5IiwiYTIwIiwiYTIxIiwiYTIyIiwiYTIzIiwiYTI0IiwiYTI1IiwiYTI2IiwiYTI3IiwiYTI4IiwiYTYiLCJhNyIsImE4IiwiYTkiLCJhMTAiLCJhMjkiLCJhMzAiLCJhMzEiLCJhMzIiLCJhMzMiLCJhMzQiLCJhMzUiLCJhMzYiLCJhMzciLCJhMzgiLCJhMzkiLCJhNDAiLCJhNDEiLCJhNDIiLCJhNDMiLCJhNDQiLCJhNDUiLCJhNDYiLCJhNDciLCJhNDgiLCJhNDkiLCJhNTAiLCJhNTEiLCJhNTIiLCJhNTMiLCJhNTQiLCJhNTUiLCJhNTYiLCJhNTciLCJhNTgiLCJhNTkiLCJhNjAiLCJhNjEiLCJhNjIiLCJhNjMiLCJhNjQiLCJhNjUiLCJhNjYiLCJhNjciLCJhNjgiLCJhNjkiLCJhNzAiLCJhNzEiLCJhNzIiLCJhNzMiLCJhNzQiLCJhMjAzIiwiYTc1IiwiYTIwNCIsImE3NiIsImE3NyIsImE3OCIsImE3OSIsImE4MSIsImE4MiIsImE4MyIsImE4NCIsImE5NyIsImE5OCIsImE5OSIsImExMDAiLCIiLCJhODkiLCJhOTAiLCJhOTMiLCJhOTQiLCJhOTEiLCJhOTIiLCJhMjA1IiwiYTg1IiwiYTIwNiIsImE4NiIsImE4NyIsImE4OCIsImE5NSIsImE5NiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsIiIsImExMDEiLCJhMTAyIiwiYTEwMyIsImExMDQiLCJhMTA2IiwiYTEwNyIsImExMDgiLCJhMTEyIiwiYTExMSIsImExMTAiLCJhMTA5IiwiYTEyMCIsImExMjEiLCJhMTIyIiwiYTEyMyIsImExMjQiLCJhMTI1IiwiYTEyNiIsImExMjciLCJhMTI4IiwiYTEyOSIsImExMzAiLCJhMTMxIiwiYTEzMiIsImExMzMiLCJhMTM0IiwiYTEzNSIsImExMzYiLCJhMTM3IiwiYTEzOCIsImExMzkiLCJhMTQwIiwiYTE0MSIsImExNDIiLCJhMTQzIiwiYTE0NCIsImExNDUiLCJhMTQ2IiwiYTE0NyIsImExNDgiLCJhMTQ5IiwiYTE1MCIsImExNTEiLCJhMTUyIiwiYTE1MyIsImExNTQiLCJhMTU1IiwiYTE1NiIsImExNTciLCJhMTU4IiwiYTE1OSIsImExNjAiLCJhMTYxIiwiYTE2MyIsImExNjQiLCJhMTk2IiwiYTE2NSIsImExOTIiLCJhMTY2IiwiYTE2NyIsImExNjgiLCJhMTY5IiwiYTE3MCIsImExNzEiLCJhMTcyIiwiYTE3MyIsImExNjIiLCJhMTc0IiwiYTE3NSIsImExNzYiLCJhMTc3IiwiYTE3OCIsImExNzkiLCJhMTkzIiwiYTE4MCIsImExOTkiLCJhMTgxIiwiYTIwMCIsImExODIiLCIiLCJhMjAxIiwiYTE4MyIsImExODQiLCJhMTk3IiwiYTE4NSIsImExOTQiLCJhMTk4IiwiYTE4NiIsImExOTUiLCJhMTg3IiwiYTE4OCIsImExODkiLCJhMTkwIiwiYTE5MSIsIiJdO3QuWmFwZkRpbmdiYXRzRW5jb2Rpbmc9Y30sZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXIoNikuZ2V0TG9va3VwVGFibGVGYWN0b3J5LGE9bigoZnVuY3Rpb24oZSl7ZS5BPTY1LGUuQUU9MTk4LGUuQUVhY3V0ZT01MDgsZS5BRW1hY3Jvbj00ODIsZS5BRXNtYWxsPTYzNDYyLGUuQWFjdXRlPTE5MyxlLkFhY3V0ZXNtYWxsPTYzNDU3LGUuQWJyZXZlPTI1OCxlLkFicmV2ZWFjdXRlPTc4NTQsZS5BYnJldmVjeXJpbGxpYz0xMjMyLGUuQWJyZXZlZG90YmVsb3c9Nzg2MixlLkFicmV2ZWdyYXZlPTc4NTYsZS5BYnJldmVob29rYWJvdmU9Nzg1OCxlLkFicmV2ZXRpbGRlPTc4NjAsZS5BY2Fyb249NDYxLGUuQWNpcmNsZT05Mzk4LGUuQWNpcmN1bWZsZXg9MTk0LGUuQWNpcmN1bWZsZXhhY3V0ZT03ODQ0LGUuQWNpcmN1bWZsZXhkb3RiZWxvdz03ODUyLGUuQWNpcmN1bWZsZXhncmF2ZT03ODQ2LGUuQWNpcmN1bWZsZXhob29rYWJvdmU9Nzg0OCxlLkFjaXJjdW1mbGV4c21hbGw9NjM0NTgsZS5BY2lyY3VtZmxleHRpbGRlPTc4NTAsZS5BY3V0ZT02MzE3NyxlLkFjdXRlc21hbGw9NjM0MTIsZS5BY3lyaWxsaWM9MTA0MCxlLkFkYmxncmF2ZT01MTIsZS5BZGllcmVzaXM9MTk2LGUuQWRpZXJlc2lzY3lyaWxsaWM9MTIzNCxlLkFkaWVyZXNpc21hY3Jvbj00NzgsZS5BZGllcmVzaXNzbWFsbD02MzQ2MCxlLkFkb3RiZWxvdz03ODQwLGUuQWRvdG1hY3Jvbj00ODAsZS5BZ3JhdmU9MTkyLGUuQWdyYXZlc21hbGw9NjM0NTYsZS5BaG9va2Fib3ZlPTc4NDIsZS5BaWVjeXJpbGxpYz0xMjM2LGUuQWludmVydGVkYnJldmU9NTE0LGUuQWxwaGE9OTEzLGUuQWxwaGF0b25vcz05MDIsZS5BbWFjcm9uPTI1NixlLkFtb25vc3BhY2U9NjUzMTMsZS5Bb2dvbmVrPTI2MCxlLkFyaW5nPTE5NyxlLkFyaW5nYWN1dGU9NTA2LGUuQXJpbmdiZWxvdz03NjgwLGUuQXJpbmdzbWFsbD02MzQ2MSxlLkFzbWFsbD02MzMyOSxlLkF0aWxkZT0xOTUsZS5BdGlsZGVzbWFsbD02MzQ1OSxlLkF5YmFybWVuaWFuPTEzMjksZS5CPTY2LGUuQmNpcmNsZT05Mzk5LGUuQmRvdGFjY2VudD03NjgyLGUuQmRvdGJlbG93PTc2ODQsZS5CZWN5cmlsbGljPTEwNDEsZS5CZW5hcm1lbmlhbj0xMzMwLGUuQmV0YT05MTQsZS5CaG9vaz0zODUsZS5CbGluZWJlbG93PTc2ODYsZS5CbW9ub3NwYWNlPTY1MzE0LGUuQnJldmVzbWFsbD02MzIyMCxlLkJzbWFsbD02MzMzMCxlLkJ0b3BiYXI9Mzg2LGUuQz02NyxlLkNhYXJtZW5pYW49MTM0MixlLkNhY3V0ZT0yNjIsZS5DYXJvbj02MzE3OCxlLkNhcm9uc21hbGw9NjMyMjEsZS5DY2Fyb249MjY4LGUuQ2NlZGlsbGE9MTk5LGUuQ2NlZGlsbGFhY3V0ZT03Njg4LGUuQ2NlZGlsbGFzbWFsbD02MzQ2MyxlLkNjaXJjbGU9OTQwMCxlLkNjaXJjdW1mbGV4PTI2NCxlLkNkb3Q9MjY2LGUuQ2RvdGFjY2VudD0yNjYsZS5DZWRpbGxhc21hbGw9NjM0MTYsZS5DaGFhcm1lbmlhbj0xMzUzLGUuQ2hlYWJraGFzaWFuY3lyaWxsaWM9MTIxMixlLkNoZWN5cmlsbGljPTEwNjMsZS5DaGVkZXNjZW5kZXJhYmtoYXNpYW5jeXJpbGxpYz0xMjE0LGUuQ2hlZGVzY2VuZGVyY3lyaWxsaWM9MTIwNixlLkNoZWRpZXJlc2lzY3lyaWxsaWM9MTI2OCxlLkNoZWhhcm1lbmlhbj0xMzQ3LGUuQ2hla2hha2Fzc2lhbmN5cmlsbGljPTEyMjcsZS5DaGV2ZXJ0aWNhbHN0cm9rZWN5cmlsbGljPTEyMDgsZS5DaGk9OTM1LGUuQ2hvb2s9MzkxLGUuQ2lyY3VtZmxleHNtYWxsPTYzMjIyLGUuQ21vbm9zcGFjZT02NTMxNSxlLkNvYXJtZW5pYW49MTM2MSxlLkNzbWFsbD02MzMzMSxlLkQ9NjgsZS5EWj00OTcsZS5EWmNhcm9uPTQ1MixlLkRhYXJtZW5pYW49MTMzMixlLkRhZnJpY2FuPTM5MyxlLkRjYXJvbj0yNzAsZS5EY2VkaWxsYT03Njk2LGUuRGNpcmNsZT05NDAxLGUuRGNpcmN1bWZsZXhiZWxvdz03Njk4LGUuRGNyb2F0PTI3MixlLkRkb3RhY2NlbnQ9NzY5MCxlLkRkb3RiZWxvdz03NjkyLGUuRGVjeXJpbGxpYz0xMDQ0LGUuRGVpY29wdGljPTEwMDYsZS5EZWx0YT04NzEwLGUuRGVsdGFncmVlaz05MTYsZS5EaG9vaz0zOTQsZS5EaWVyZXNpcz02MzE3OSxlLkRpZXJlc2lzQWN1dGU9NjMxODAsZS5EaWVyZXNpc0dyYXZlPTYzMTgxLGUuRGllcmVzaXNzbWFsbD02MzQwMCxlLkRpZ2FtbWFncmVlaz05ODgsZS5EamVjeXJpbGxpYz0xMDI2LGUuRGxpbmViZWxvdz03Njk0LGUuRG1vbm9zcGFjZT02NTMxNixlLkRvdGFjY2VudHNtYWxsPTYzMjIzLGUuRHNsYXNoPTI3MixlLkRzbWFsbD02MzMzMixlLkR0b3BiYXI9Mzk1LGUuRHo9NDk4LGUuRHpjYXJvbj00NTMsZS5EemVhYmtoYXNpYW5jeXJpbGxpYz0xMjQ4LGUuRHplY3lyaWxsaWM9MTAyOSxlLkR6aGVjeXJpbGxpYz0xMDM5LGUuRT02OSxlLkVhY3V0ZT0yMDEsZS5FYWN1dGVzbWFsbD02MzQ2NSxlLkVicmV2ZT0yNzYsZS5FY2Fyb249MjgyLGUuRWNlZGlsbGFicmV2ZT03NzA4LGUuRWNoYXJtZW5pYW49MTMzMyxlLkVjaXJjbGU9OTQwMixlLkVjaXJjdW1mbGV4PTIwMixlLkVjaXJjdW1mbGV4YWN1dGU9Nzg3MCxlLkVjaXJjdW1mbGV4YmVsb3c9NzcwNCxlLkVjaXJjdW1mbGV4ZG90YmVsb3c9Nzg3OCxlLkVjaXJjdW1mbGV4Z3JhdmU9Nzg3MixlLkVjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NzQsZS5FY2lyY3VtZmxleHNtYWxsPTYzNDY2LGUuRWNpcmN1bWZsZXh0aWxkZT03ODc2LGUuRWN5cmlsbGljPTEwMjgsZS5FZGJsZ3JhdmU9NTE2LGUuRWRpZXJlc2lzPTIwMyxlLkVkaWVyZXNpc3NtYWxsPTYzNDY3LGUuRWRvdD0yNzgsZS5FZG90YWNjZW50PTI3OCxlLkVkb3RiZWxvdz03ODY0LGUuRWZjeXJpbGxpYz0xMDYwLGUuRWdyYXZlPTIwMCxlLkVncmF2ZXNtYWxsPTYzNDY0LGUuRWhhcm1lbmlhbj0xMzM1LGUuRWhvb2thYm92ZT03ODY2LGUuRWlnaHRyb21hbj04NTUxLGUuRWludmVydGVkYnJldmU9NTE4LGUuRWlvdGlmaWVkY3lyaWxsaWM9MTEyNCxlLkVsY3lyaWxsaWM9MTA1MSxlLkVsZXZlbnJvbWFuPTg1NTQsZS5FbWFjcm9uPTI3NCxlLkVtYWNyb25hY3V0ZT03NzAyLGUuRW1hY3JvbmdyYXZlPTc3MDAsZS5FbWN5cmlsbGljPTEwNTIsZS5FbW9ub3NwYWNlPTY1MzE3LGUuRW5jeXJpbGxpYz0xMDUzLGUuRW5kZXNjZW5kZXJjeXJpbGxpYz0xMTg2LGUuRW5nPTMzMCxlLkVuZ2hlY3lyaWxsaWM9MTE4OCxlLkVuaG9va2N5cmlsbGljPTEyMjMsZS5Fb2dvbmVrPTI4MCxlLkVvcGVuPTQwMCxlLkVwc2lsb249OTE3LGUuRXBzaWxvbnRvbm9zPTkwNCxlLkVyY3lyaWxsaWM9MTA1NixlLkVyZXZlcnNlZD0zOTgsZS5FcmV2ZXJzZWRjeXJpbGxpYz0xMDY5LGUuRXNjeXJpbGxpYz0xMDU3LGUuRXNkZXNjZW5kZXJjeXJpbGxpYz0xMTk0LGUuRXNoPTQyNSxlLkVzbWFsbD02MzMzMyxlLkV0YT05MTksZS5FdGFybWVuaWFuPTEzMzYsZS5FdGF0b25vcz05MDUsZS5FdGg9MjA4LGUuRXRoc21hbGw9NjM0NzIsZS5FdGlsZGU9Nzg2OCxlLkV0aWxkZWJlbG93PTc3MDYsZS5FdXJvPTgzNjQsZS5Femg9NDM5LGUuRXpoY2Fyb249NDk0LGUuRXpocmV2ZXJzZWQ9NDQwLGUuRj03MCxlLkZjaXJjbGU9OTQwMyxlLkZkb3RhY2NlbnQ9NzcxMCxlLkZlaGFybWVuaWFuPTEzNjYsZS5GZWljb3B0aWM9OTk2LGUuRmhvb2s9NDAxLGUuRml0YWN5cmlsbGljPTExMzgsZS5GaXZlcm9tYW49ODU0OCxlLkZtb25vc3BhY2U9NjUzMTgsZS5Gb3Vycm9tYW49ODU0NyxlLkZzbWFsbD02MzMzNCxlLkc9NzEsZS5HQnNxdWFyZT0xMzE5MSxlLkdhY3V0ZT01MDAsZS5HYW1tYT05MTUsZS5HYW1tYWFmcmljYW49NDA0LGUuR2FuZ2lhY29wdGljPTEwMDIsZS5HYnJldmU9Mjg2LGUuR2Nhcm9uPTQ4NixlLkdjZWRpbGxhPTI5MCxlLkdjaXJjbGU9OTQwNCxlLkdjaXJjdW1mbGV4PTI4NCxlLkdjb21tYWFjY2VudD0yOTAsZS5HZG90PTI4OCxlLkdkb3RhY2NlbnQ9Mjg4LGUuR2VjeXJpbGxpYz0xMDQzLGUuR2hhZGFybWVuaWFuPTEzNDYsZS5HaGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MixlLkdoZXN0cm9rZWN5cmlsbGljPTExNzAsZS5HaGV1cHR1cm5jeXJpbGxpYz0xMTY4LGUuR2hvb2s9NDAzLGUuR2ltYXJtZW5pYW49MTMzMSxlLkdqZWN5cmlsbGljPTEwMjcsZS5HbWFjcm9uPTc3MTIsZS5HbW9ub3NwYWNlPTY1MzE5LGUuR3JhdmU9NjMxODIsZS5HcmF2ZXNtYWxsPTYzMzI4LGUuR3NtYWxsPTYzMzM1LGUuR3NtYWxsaG9vaz02NjcsZS5Hc3Ryb2tlPTQ4NCxlLkg9NzIsZS5IMTg1MzM9OTY3OSxlLkgxODU0Mz05NjQyLGUuSDE4NTUxPTk2NDMsZS5IMjIwNzM9OTYzMyxlLkhQc3F1YXJlPTEzMjU5LGUuSGFhYmtoYXNpYW5jeXJpbGxpYz0xMTkyLGUuSGFkZXNjZW5kZXJjeXJpbGxpYz0xMjAyLGUuSGFyZHNpZ25jeXJpbGxpYz0xMDY2LGUuSGJhcj0yOTQsZS5IYnJldmViZWxvdz03NzIyLGUuSGNlZGlsbGE9NzcyMCxlLkhjaXJjbGU9OTQwNSxlLkhjaXJjdW1mbGV4PTI5MixlLkhkaWVyZXNpcz03NzE4LGUuSGRvdGFjY2VudD03NzE0LGUuSGRvdGJlbG93PTc3MTYsZS5IbW9ub3NwYWNlPTY1MzIwLGUuSG9hcm1lbmlhbj0xMzQ0LGUuSG9yaWNvcHRpYz0xZTMsZS5Ic21hbGw9NjMzMzYsZS5IdW5nYXJ1bWxhdXQ9NjMxODMsZS5IdW5nYXJ1bWxhdXRzbWFsbD02MzIyNCxlLkh6c3F1YXJlPTEzMjAwLGUuST03MyxlLklBY3lyaWxsaWM9MTA3MSxlLklKPTMwNixlLklVY3lyaWxsaWM9MTA3MCxlLklhY3V0ZT0yMDUsZS5JYWN1dGVzbWFsbD02MzQ2OSxlLklicmV2ZT0zMDAsZS5JY2Fyb249NDYzLGUuSWNpcmNsZT05NDA2LGUuSWNpcmN1bWZsZXg9MjA2LGUuSWNpcmN1bWZsZXhzbWFsbD02MzQ3MCxlLkljeXJpbGxpYz0xMDMwLGUuSWRibGdyYXZlPTUyMCxlLklkaWVyZXNpcz0yMDcsZS5JZGllcmVzaXNhY3V0ZT03NzI2LGUuSWRpZXJlc2lzY3lyaWxsaWM9MTI1MixlLklkaWVyZXNpc3NtYWxsPTYzNDcxLGUuSWRvdD0zMDQsZS5JZG90YWNjZW50PTMwNCxlLklkb3RiZWxvdz03ODgyLGUuSWVicmV2ZWN5cmlsbGljPTEyMzgsZS5JZWN5cmlsbGljPTEwNDUsZS5JZnJha3R1cj04NDY1LGUuSWdyYXZlPTIwNCxlLklncmF2ZXNtYWxsPTYzNDY4LGUuSWhvb2thYm92ZT03ODgwLGUuSWljeXJpbGxpYz0xMDQ4LGUuSWludmVydGVkYnJldmU9NTIyLGUuSWlzaG9ydGN5cmlsbGljPTEwNDksZS5JbWFjcm9uPTI5OCxlLkltYWNyb25jeXJpbGxpYz0xMjUwLGUuSW1vbm9zcGFjZT02NTMyMSxlLkluaWFybWVuaWFuPTEzMzksZS5Jb2N5cmlsbGljPTEwMjUsZS5Jb2dvbmVrPTMwMixlLklvdGE9OTIxLGUuSW90YWFmcmljYW49NDA2LGUuSW90YWRpZXJlc2lzPTkzOCxlLklvdGF0b25vcz05MDYsZS5Jc21hbGw9NjMzMzcsZS5Jc3Ryb2tlPTQwNyxlLkl0aWxkZT0yOTYsZS5JdGlsZGViZWxvdz03NzI0LGUuSXpoaXRzYWN5cmlsbGljPTExNDAsZS5JemhpdHNhZGJsZ3JhdmVjeXJpbGxpYz0xMTQyLGUuSj03NCxlLkphYXJtZW5pYW49MTM0NSxlLkpjaXJjbGU9OTQwNyxlLkpjaXJjdW1mbGV4PTMwOCxlLkplY3lyaWxsaWM9MTAzMixlLkpoZWhhcm1lbmlhbj0xMzU1LGUuSm1vbm9zcGFjZT02NTMyMixlLkpzbWFsbD02MzMzOCxlLks9NzUsZS5LQnNxdWFyZT0xMzE4OSxlLktLc3F1YXJlPTEzMjYxLGUuS2FiYXNoa2lyY3lyaWxsaWM9MTE4NCxlLkthY3V0ZT03NzI4LGUuS2FjeXJpbGxpYz0xMDUwLGUuS2FkZXNjZW5kZXJjeXJpbGxpYz0xMTc4LGUuS2Fob29rY3lyaWxsaWM9MTIxOSxlLkthcHBhPTkyMixlLkthc3Ryb2tlY3lyaWxsaWM9MTE4MixlLkthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgwLGUuS2Nhcm9uPTQ4OCxlLktjZWRpbGxhPTMxMCxlLktjaXJjbGU9OTQwOCxlLktjb21tYWFjY2VudD0zMTAsZS5LZG90YmVsb3c9NzczMCxlLktlaGFybWVuaWFuPTEzNjQsZS5LZW5hcm1lbmlhbj0xMzQzLGUuS2hhY3lyaWxsaWM9MTA2MSxlLktoZWljb3B0aWM9OTk4LGUuS2hvb2s9NDA4LGUuS2plY3lyaWxsaWM9MTAzNixlLktsaW5lYmVsb3c9NzczMixlLkttb25vc3BhY2U9NjUzMjMsZS5Lb3BwYWN5cmlsbGljPTExNTIsZS5Lb3BwYWdyZWVrPTk5MCxlLktzaWN5cmlsbGljPTExMzQsZS5Lc21hbGw9NjMzMzksZS5MPTc2LGUuTEo9NDU1LGUuTEw9NjMxNjcsZS5MYWN1dGU9MzEzLGUuTGFtYmRhPTkyMyxlLkxjYXJvbj0zMTcsZS5MY2VkaWxsYT0zMTUsZS5MY2lyY2xlPTk0MDksZS5MY2lyY3VtZmxleGJlbG93PTc3NDAsZS5MY29tbWFhY2NlbnQ9MzE1LGUuTGRvdD0zMTksZS5MZG90YWNjZW50PTMxOSxlLkxkb3RiZWxvdz03NzM0LGUuTGRvdGJlbG93bWFjcm9uPTc3MzYsZS5MaXduYXJtZW5pYW49MTM0MCxlLkxqPTQ1NixlLkxqZWN5cmlsbGljPTEwMzMsZS5MbGluZWJlbG93PTc3MzgsZS5MbW9ub3NwYWNlPTY1MzI0LGUuTHNsYXNoPTMyMSxlLkxzbGFzaHNtYWxsPTYzMjI1LGUuTHNtYWxsPTYzMzQwLGUuTT03NyxlLk1Cc3F1YXJlPTEzMTkwLGUuTWFjcm9uPTYzMTg0LGUuTWFjcm9uc21hbGw9NjM0MDcsZS5NYWN1dGU9Nzc0MixlLk1jaXJjbGU9OTQxMCxlLk1kb3RhY2NlbnQ9Nzc0NCxlLk1kb3RiZWxvdz03NzQ2LGUuTWVuYXJtZW5pYW49MTM0OCxlLk1tb25vc3BhY2U9NjUzMjUsZS5Nc21hbGw9NjMzNDEsZS5NdHVybmVkPTQxMixlLk11PTkyNCxlLk49NzgsZS5OSj00NTgsZS5OYWN1dGU9MzIzLGUuTmNhcm9uPTMyNyxlLk5jZWRpbGxhPTMyNSxlLk5jaXJjbGU9OTQxMSxlLk5jaXJjdW1mbGV4YmVsb3c9Nzc1NCxlLk5jb21tYWFjY2VudD0zMjUsZS5OZG90YWNjZW50PTc3NDgsZS5OZG90YmVsb3c9Nzc1MCxlLk5ob29rbGVmdD00MTMsZS5OaW5lcm9tYW49ODU1MixlLk5qPTQ1OSxlLk5qZWN5cmlsbGljPTEwMzQsZS5ObGluZWJlbG93PTc3NTIsZS5ObW9ub3NwYWNlPTY1MzI2LGUuTm93YXJtZW5pYW49MTM1MCxlLk5zbWFsbD02MzM0MixlLk50aWxkZT0yMDksZS5OdGlsZGVzbWFsbD02MzQ3MyxlLk51PTkyNSxlLk89NzksZS5PRT0zMzgsZS5PRXNtYWxsPTYzMjI2LGUuT2FjdXRlPTIxMSxlLk9hY3V0ZXNtYWxsPTYzNDc1LGUuT2JhcnJlZGN5cmlsbGljPTEyNTYsZS5PYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU4LGUuT2JyZXZlPTMzNCxlLk9jYXJvbj00NjUsZS5PY2VudGVyZWR0aWxkZT00MTUsZS5PY2lyY2xlPTk0MTIsZS5PY2lyY3VtZmxleD0yMTIsZS5PY2lyY3VtZmxleGFjdXRlPTc4ODgsZS5PY2lyY3VtZmxleGRvdGJlbG93PTc4OTYsZS5PY2lyY3VtZmxleGdyYXZlPTc4OTAsZS5PY2lyY3VtZmxleGhvb2thYm92ZT03ODkyLGUuT2NpcmN1bWZsZXhzbWFsbD02MzQ3NixlLk9jaXJjdW1mbGV4dGlsZGU9Nzg5NCxlLk9jeXJpbGxpYz0xMDU0LGUuT2RibGFjdXRlPTMzNixlLk9kYmxncmF2ZT01MjQsZS5PZGllcmVzaXM9MjE0LGUuT2RpZXJlc2lzY3lyaWxsaWM9MTI1NCxlLk9kaWVyZXNpc3NtYWxsPTYzNDc4LGUuT2RvdGJlbG93PTc4ODQsZS5PZ29uZWtzbWFsbD02MzIyNyxlLk9ncmF2ZT0yMTAsZS5PZ3JhdmVzbWFsbD02MzQ3NCxlLk9oYXJtZW5pYW49MTM2NSxlLk9obT04NDg2LGUuT2hvb2thYm92ZT03ODg2LGUuT2hvcm49NDE2LGUuT2hvcm5hY3V0ZT03ODk4LGUuT2hvcm5kb3RiZWxvdz03OTA2LGUuT2hvcm5ncmF2ZT03OTAwLGUuT2hvcm5ob29rYWJvdmU9NzkwMixlLk9ob3JudGlsZGU9NzkwNCxlLk9odW5nYXJ1bWxhdXQ9MzM2LGUuT2k9NDE4LGUuT2ludmVydGVkYnJldmU9NTI2LGUuT21hY3Jvbj0zMzIsZS5PbWFjcm9uYWN1dGU9Nzc2MixlLk9tYWNyb25ncmF2ZT03NzYwLGUuT21lZ2E9ODQ4NixlLk9tZWdhY3lyaWxsaWM9MTEyMCxlLk9tZWdhZ3JlZWs9OTM3LGUuT21lZ2Fyb3VuZGN5cmlsbGljPTExNDYsZS5PbWVnYXRpdGxvY3lyaWxsaWM9MTE0OCxlLk9tZWdhdG9ub3M9OTExLGUuT21pY3Jvbj05MjcsZS5PbWljcm9udG9ub3M9OTA4LGUuT21vbm9zcGFjZT02NTMyNyxlLk9uZXJvbWFuPTg1NDQsZS5Pb2dvbmVrPTQ5MCxlLk9vZ29uZWttYWNyb249NDkyLGUuT29wZW49MzkwLGUuT3NsYXNoPTIxNixlLk9zbGFzaGFjdXRlPTUxMCxlLk9zbGFzaHNtYWxsPTYzNDgwLGUuT3NtYWxsPTYzMzQzLGUuT3N0cm9rZWFjdXRlPTUxMCxlLk90Y3lyaWxsaWM9MTE1MCxlLk90aWxkZT0yMTMsZS5PdGlsZGVhY3V0ZT03NzU2LGUuT3RpbGRlZGllcmVzaXM9Nzc1OCxlLk90aWxkZXNtYWxsPTYzNDc3LGUuUD04MCxlLlBhY3V0ZT03NzY0LGUuUGNpcmNsZT05NDEzLGUuUGRvdGFjY2VudD03NzY2LGUuUGVjeXJpbGxpYz0xMDU1LGUuUGVoYXJtZW5pYW49MTM1NCxlLlBlbWlkZGxlaG9va2N5cmlsbGljPTExOTAsZS5QaGk9OTM0LGUuUGhvb2s9NDIwLGUuUGk9OTI4LGUuUGl3cmFybWVuaWFuPTEzNjMsZS5QbW9ub3NwYWNlPTY1MzI4LGUuUHNpPTkzNixlLlBzaWN5cmlsbGljPTExMzYsZS5Qc21hbGw9NjMzNDQsZS5RPTgxLGUuUWNpcmNsZT05NDE0LGUuUW1vbm9zcGFjZT02NTMyOSxlLlFzbWFsbD02MzM0NSxlLlI9ODIsZS5SYWFybWVuaWFuPTEzNTYsZS5SYWN1dGU9MzQwLGUuUmNhcm9uPTM0NCxlLlJjZWRpbGxhPTM0MixlLlJjaXJjbGU9OTQxNSxlLlJjb21tYWFjY2VudD0zNDIsZS5SZGJsZ3JhdmU9NTI4LGUuUmRvdGFjY2VudD03NzY4LGUuUmRvdGJlbG93PTc3NzAsZS5SZG90YmVsb3dtYWNyb249Nzc3MixlLlJlaGFybWVuaWFuPTEzNjAsZS5SZnJha3R1cj04NDc2LGUuUmhvPTkyOSxlLlJpbmdzbWFsbD02MzIyOCxlLlJpbnZlcnRlZGJyZXZlPTUzMCxlLlJsaW5lYmVsb3c9Nzc3NCxlLlJtb25vc3BhY2U9NjUzMzAsZS5Sc21hbGw9NjMzNDYsZS5Sc21hbGxpbnZlcnRlZD02NDEsZS5Sc21hbGxpbnZlcnRlZHN1cGVyaW9yPTY5NCxlLlM9ODMsZS5TRjAxMDAwMD05NDg0LGUuU0YwMjAwMDA9OTQ5MixlLlNGMDMwMDAwPTk0ODgsZS5TRjA0MDAwMD05NDk2LGUuU0YwNTAwMDA9OTUzMixlLlNGMDYwMDAwPTk1MTYsZS5TRjA3MDAwMD05NTI0LGUuU0YwODAwMDA9OTUwMCxlLlNGMDkwMDAwPTk1MDgsZS5TRjEwMDAwMD05NDcyLGUuU0YxMTAwMDA9OTQ3NCxlLlNGMTkwMDAwPTk1NjksZS5TRjIwMDAwMD05NTcwLGUuU0YyMTAwMDA9OTU1OCxlLlNGMjIwMDAwPTk1NTcsZS5TRjIzMDAwMD05NTcxLGUuU0YyNDAwMDA9OTU1MyxlLlNGMjUwMDAwPTk1NTksZS5TRjI2MDAwMD05NTY1LGUuU0YyNzAwMDA9OTU2NCxlLlNGMjgwMDAwPTk1NjMsZS5TRjM2MDAwMD05NTY2LGUuU0YzNzAwMDA9OTU2NyxlLlNGMzgwMDAwPTk1NjIsZS5TRjM5MDAwMD05NTU2LGUuU0Y0MDAwMDA9OTU3NyxlLlNGNDEwMDAwPTk1NzQsZS5TRjQyMDAwMD05NTY4LGUuU0Y0MzAwMDA9OTU1MixlLlNGNDQwMDAwPTk1ODAsZS5TRjQ1MDAwMD05NTc1LGUuU0Y0NjAwMDA9OTU3NixlLlNGNDcwMDAwPTk1NzIsZS5TRjQ4MDAwMD05NTczLGUuU0Y0OTAwMDA9OTU2MSxlLlNGNTAwMDAwPTk1NjAsZS5TRjUxMDAwMD05NTU0LGUuU0Y1MjAwMDA9OTU1NSxlLlNGNTMwMDAwPTk1NzksZS5TRjU0MDAwMD05NTc4LGUuU2FjdXRlPTM0NixlLlNhY3V0ZWRvdGFjY2VudD03NzgwLGUuU2FtcGlncmVlaz05OTIsZS5TY2Fyb249MzUyLGUuU2Nhcm9uZG90YWNjZW50PTc3ODIsZS5TY2Fyb25zbWFsbD02MzIyOSxlLlNjZWRpbGxhPTM1MCxlLlNjaHdhPTM5OSxlLlNjaHdhY3lyaWxsaWM9MTI0MCxlLlNjaHdhZGllcmVzaXNjeXJpbGxpYz0xMjQyLGUuU2NpcmNsZT05NDE2LGUuU2NpcmN1bWZsZXg9MzQ4LGUuU2NvbW1hYWNjZW50PTUzNixlLlNkb3RhY2NlbnQ9Nzc3NixlLlNkb3RiZWxvdz03Nzc4LGUuU2RvdGJlbG93ZG90YWNjZW50PTc3ODQsZS5TZWhhcm1lbmlhbj0xMzU3LGUuU2V2ZW5yb21hbj04NTUwLGUuU2hhYXJtZW5pYW49MTM1MSxlLlNoYWN5cmlsbGljPTEwNjQsZS5TaGNoYWN5cmlsbGljPTEwNjUsZS5TaGVpY29wdGljPTk5NCxlLlNoaGFjeXJpbGxpYz0xMjEwLGUuU2hpbWFjb3B0aWM9MTAwNCxlLlNpZ21hPTkzMSxlLlNpeHJvbWFuPTg1NDksZS5TbW9ub3NwYWNlPTY1MzMxLGUuU29mdHNpZ25jeXJpbGxpYz0xMDY4LGUuU3NtYWxsPTYzMzQ3LGUuU3RpZ21hZ3JlZWs9OTg2LGUuVD04NCxlLlRhdT05MzIsZS5UYmFyPTM1OCxlLlRjYXJvbj0zNTYsZS5UY2VkaWxsYT0zNTQsZS5UY2lyY2xlPTk0MTcsZS5UY2lyY3VtZmxleGJlbG93PTc3OTIsZS5UY29tbWFhY2NlbnQ9MzU0LGUuVGRvdGFjY2VudD03Nzg2LGUuVGRvdGJlbG93PTc3ODgsZS5UZWN5cmlsbGljPTEwNTgsZS5UZWRlc2NlbmRlcmN5cmlsbGljPTExOTYsZS5UZW5yb21hbj04NTUzLGUuVGV0c2VjeXJpbGxpYz0xMjA0LGUuVGhldGE9OTIwLGUuVGhvb2s9NDI4LGUuVGhvcm49MjIyLGUuVGhvcm5zbWFsbD02MzQ4NixlLlRocmVlcm9tYW49ODU0NixlLlRpbGRlc21hbGw9NjMyMzAsZS5UaXduYXJtZW5pYW49MTM1OSxlLlRsaW5lYmVsb3c9Nzc5MCxlLlRtb25vc3BhY2U9NjUzMzIsZS5Ub2FybWVuaWFuPTEzMzcsZS5Ub25lZml2ZT00NDQsZS5Ub25lc2l4PTM4OCxlLlRvbmV0d289NDIzLGUuVHJldHJvZmxleGhvb2s9NDMwLGUuVHNlY3lyaWxsaWM9MTA2MixlLlRzaGVjeXJpbGxpYz0xMDM1LGUuVHNtYWxsPTYzMzQ4LGUuVHdlbHZlcm9tYW49ODU1NSxlLlR3b3JvbWFuPTg1NDUsZS5VPTg1LGUuVWFjdXRlPTIxOCxlLlVhY3V0ZXNtYWxsPTYzNDgyLGUuVWJyZXZlPTM2NCxlLlVjYXJvbj00NjcsZS5VY2lyY2xlPTk0MTgsZS5VY2lyY3VtZmxleD0yMTksZS5VY2lyY3VtZmxleGJlbG93PTc3OTgsZS5VY2lyY3VtZmxleHNtYWxsPTYzNDgzLGUuVWN5cmlsbGljPTEwNTksZS5VZGJsYWN1dGU9MzY4LGUuVWRibGdyYXZlPTUzMixlLlVkaWVyZXNpcz0yMjAsZS5VZGllcmVzaXNhY3V0ZT00NzEsZS5VZGllcmVzaXNiZWxvdz03Nzk0LGUuVWRpZXJlc2lzY2Fyb249NDczLGUuVWRpZXJlc2lzY3lyaWxsaWM9MTI2NCxlLlVkaWVyZXNpc2dyYXZlPTQ3NSxlLlVkaWVyZXNpc21hY3Jvbj00NjksZS5VZGllcmVzaXNzbWFsbD02MzQ4NCxlLlVkb3RiZWxvdz03OTA4LGUuVWdyYXZlPTIxNyxlLlVncmF2ZXNtYWxsPTYzNDgxLGUuVWhvb2thYm92ZT03OTEwLGUuVWhvcm49NDMxLGUuVWhvcm5hY3V0ZT03OTEyLGUuVWhvcm5kb3RiZWxvdz03OTIwLGUuVWhvcm5ncmF2ZT03OTE0LGUuVWhvcm5ob29rYWJvdmU9NzkxNixlLlVob3JudGlsZGU9NzkxOCxlLlVodW5nYXJ1bWxhdXQ9MzY4LGUuVWh1bmdhcnVtbGF1dGN5cmlsbGljPTEyNjYsZS5VaW52ZXJ0ZWRicmV2ZT01MzQsZS5Va2N5cmlsbGljPTExNDQsZS5VbWFjcm9uPTM2MixlLlVtYWNyb25jeXJpbGxpYz0xMjYyLGUuVW1hY3JvbmRpZXJlc2lzPTc4MDIsZS5VbW9ub3NwYWNlPTY1MzMzLGUuVW9nb25laz0zNzAsZS5VcHNpbG9uPTkzMyxlLlVwc2lsb24xPTk3OCxlLlVwc2lsb25hY3V0ZWhvb2tzeW1ib2xncmVlaz05NzksZS5VcHNpbG9uYWZyaWNhbj00MzMsZS5VcHNpbG9uZGllcmVzaXM9OTM5LGUuVXBzaWxvbmRpZXJlc2lzaG9va3N5bWJvbGdyZWVrPTk4MCxlLlVwc2lsb25ob29rc3ltYm9sPTk3OCxlLlVwc2lsb250b25vcz05MTAsZS5VcmluZz0zNjYsZS5Vc2hvcnRjeXJpbGxpYz0xMDM4LGUuVXNtYWxsPTYzMzQ5LGUuVXN0cmFpZ2h0Y3lyaWxsaWM9MTE5OCxlLlVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDAsZS5VdGlsZGU9MzYwLGUuVXRpbGRlYWN1dGU9NzgwMCxlLlV0aWxkZWJlbG93PTc3OTYsZS5WPTg2LGUuVmNpcmNsZT05NDE5LGUuVmRvdGJlbG93PTc4MDYsZS5WZWN5cmlsbGljPTEwNDIsZS5WZXdhcm1lbmlhbj0xMzU4LGUuVmhvb2s9NDM0LGUuVm1vbm9zcGFjZT02NTMzNCxlLlZvYXJtZW5pYW49MTM1MixlLlZzbWFsbD02MzM1MCxlLlZ0aWxkZT03ODA0LGUuVz04NyxlLldhY3V0ZT03ODEwLGUuV2NpcmNsZT05NDIwLGUuV2NpcmN1bWZsZXg9MzcyLGUuV2RpZXJlc2lzPTc4MTIsZS5XZG90YWNjZW50PTc4MTQsZS5XZG90YmVsb3c9NzgxNixlLldncmF2ZT03ODA4LGUuV21vbm9zcGFjZT02NTMzNSxlLldzbWFsbD02MzM1MSxlLlg9ODgsZS5YY2lyY2xlPTk0MjEsZS5YZGllcmVzaXM9NzgyMCxlLlhkb3RhY2NlbnQ9NzgxOCxlLlhlaGFybWVuaWFuPTEzNDEsZS5YaT05MjYsZS5YbW9ub3NwYWNlPTY1MzM2LGUuWHNtYWxsPTYzMzUyLGUuWT04OSxlLllhY3V0ZT0yMjEsZS5ZYWN1dGVzbWFsbD02MzQ4NSxlLllhdGN5cmlsbGljPTExMjIsZS5ZY2lyY2xlPTk0MjIsZS5ZY2lyY3VtZmxleD0zNzQsZS5ZZGllcmVzaXM9Mzc2LGUuWWRpZXJlc2lzc21hbGw9NjM0ODcsZS5ZZG90YWNjZW50PTc4MjIsZS5ZZG90YmVsb3c9NzkyNCxlLlllcmljeXJpbGxpYz0xMDY3LGUuWWVydWRpZXJlc2lzY3lyaWxsaWM9MTI3MixlLllncmF2ZT03OTIyLGUuWWhvb2s9NDM1LGUuWWhvb2thYm92ZT03OTI2LGUuWWlhcm1lbmlhbj0xMzQ5LGUuWWljeXJpbGxpYz0xMDMxLGUuWWl3bmFybWVuaWFuPTEzNjIsZS5ZbW9ub3NwYWNlPTY1MzM3LGUuWXNtYWxsPTYzMzUzLGUuWXRpbGRlPTc5MjgsZS5ZdXNiaWdjeXJpbGxpYz0xMTMwLGUuWXVzYmlnaW90aWZpZWRjeXJpbGxpYz0xMTMyLGUuWXVzbGl0dGxlY3lyaWxsaWM9MTEyNixlLll1c2xpdHRsZWlvdGlmaWVkY3lyaWxsaWM9MTEyOCxlLlo9OTAsZS5aYWFybWVuaWFuPTEzMzQsZS5aYWN1dGU9Mzc3LGUuWmNhcm9uPTM4MSxlLlpjYXJvbnNtYWxsPTYzMjMxLGUuWmNpcmNsZT05NDIzLGUuWmNpcmN1bWZsZXg9NzgyNCxlLlpkb3Q9Mzc5LGUuWmRvdGFjY2VudD0zNzksZS5aZG90YmVsb3c9NzgyNixlLlplY3lyaWxsaWM9MTA0NyxlLlplZGVzY2VuZGVyY3lyaWxsaWM9MTE3NixlLlplZGllcmVzaXNjeXJpbGxpYz0xMjQ2LGUuWmV0YT05MTgsZS5aaGVhcm1lbmlhbj0xMzM4LGUuWmhlYnJldmVjeXJpbGxpYz0xMjE3LGUuWmhlY3lyaWxsaWM9MTA0NixlLlpoZWRlc2NlbmRlcmN5cmlsbGljPTExNzQsZS5aaGVkaWVyZXNpc2N5cmlsbGljPTEyNDQsZS5abGluZWJlbG93PTc4MjgsZS5abW9ub3NwYWNlPTY1MzM4LGUuWnNtYWxsPTYzMzU0LGUuWnN0cm9rZT00MzcsZS5hPTk3LGUuYWFiZW5nYWxpPTI0MzgsZS5hYWN1dGU9MjI1LGUuYWFkZXZhPTIzMTAsZS5hYWd1amFyYXRpPTI2OTQsZS5hYWd1cm11a2hpPTI1NjYsZS5hYW1hdHJhZ3VybXVraGk9MjYyMixlLmFhcnVzcXVhcmU9MTMwNTksZS5hYXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NCxlLmFhdm93ZWxzaWduZGV2YT0yMzY2LGUuYWF2b3dlbHNpZ25ndWphcmF0aT0yNzUwLGUuYWJicmV2aWF0aW9ubWFya2FybWVuaWFuPTEzNzUsZS5hYmJyZXZpYXRpb25zaWduZGV2YT0yNDE2LGUuYWJlbmdhbGk9MjQzNyxlLmFib3BvbW9mbz0xMjU3MCxlLmFicmV2ZT0yNTksZS5hYnJldmVhY3V0ZT03ODU1LGUuYWJyZXZlY3lyaWxsaWM9MTIzMyxlLmFicmV2ZWRvdGJlbG93PTc4NjMsZS5hYnJldmVncmF2ZT03ODU3LGUuYWJyZXZlaG9va2Fib3ZlPTc4NTksZS5hYnJldmV0aWxkZT03ODYxLGUuYWNhcm9uPTQ2MixlLmFjaXJjbGU9OTQyNCxlLmFjaXJjdW1mbGV4PTIyNixlLmFjaXJjdW1mbGV4YWN1dGU9Nzg0NSxlLmFjaXJjdW1mbGV4ZG90YmVsb3c9Nzg1MyxlLmFjaXJjdW1mbGV4Z3JhdmU9Nzg0NyxlLmFjaXJjdW1mbGV4aG9va2Fib3ZlPTc4NDksZS5hY2lyY3VtZmxleHRpbGRlPTc4NTEsZS5hY3V0ZT0xODAsZS5hY3V0ZWJlbG93Y21iPTc5MSxlLmFjdXRlY21iPTc2OSxlLmFjdXRlY29tYj03NjksZS5hY3V0ZWRldmE9MjM4OCxlLmFjdXRlbG93bW9kPTcxOSxlLmFjdXRldG9uZWNtYj04MzMsZS5hY3lyaWxsaWM9MTA3MixlLmFkYmxncmF2ZT01MTMsZS5hZGRha2d1cm11a2hpPTI2NzMsZS5hZGV2YT0yMzA5LGUuYWRpZXJlc2lzPTIyOCxlLmFkaWVyZXNpc2N5cmlsbGljPTEyMzUsZS5hZGllcmVzaXNtYWNyb249NDc5LGUuYWRvdGJlbG93PTc4NDEsZS5hZG90bWFjcm9uPTQ4MSxlLmFlPTIzMCxlLmFlYWN1dGU9NTA5LGUuYWVrb3JlYW49MTI2MjQsZS5hZW1hY3Jvbj00ODMsZS5hZmlpMDAyMDg9ODIxMyxlLmFmaWkwODk0MT04MzU2LGUuYWZpaTEwMDE3PTEwNDAsZS5hZmlpMTAwMTg9MTA0MSxlLmFmaWkxMDAxOT0xMDQyLGUuYWZpaTEwMDIwPTEwNDMsZS5hZmlpMTAwMjE9MTA0NCxlLmFmaWkxMDAyMj0xMDQ1LGUuYWZpaTEwMDIzPTEwMjUsZS5hZmlpMTAwMjQ9MTA0NixlLmFmaWkxMDAyNT0xMDQ3LGUuYWZpaTEwMDI2PTEwNDgsZS5hZmlpMTAwMjc9MTA0OSxlLmFmaWkxMDAyOD0xMDUwLGUuYWZpaTEwMDI5PTEwNTEsZS5hZmlpMTAwMzA9MTA1MjtlLmFmaWkxMDAzMT0xMDUzLGUuYWZpaTEwMDMyPTEwNTQsZS5hZmlpMTAwMzM9MTA1NSxlLmFmaWkxMDAzND0xMDU2LGUuYWZpaTEwMDM1PTEwNTcsZS5hZmlpMTAwMzY9MTA1OCxlLmFmaWkxMDAzNz0xMDU5LGUuYWZpaTEwMDM4PTEwNjAsZS5hZmlpMTAwMzk9MTA2MSxlLmFmaWkxMDA0MD0xMDYyLGUuYWZpaTEwMDQxPTEwNjMsZS5hZmlpMTAwNDI9MTA2NCxlLmFmaWkxMDA0Mz0xMDY1LGUuYWZpaTEwMDQ0PTEwNjYsZS5hZmlpMTAwNDU9MTA2NyxlLmFmaWkxMDA0Nj0xMDY4LGUuYWZpaTEwMDQ3PTEwNjksZS5hZmlpMTAwNDg9MTA3MCxlLmFmaWkxMDA0OT0xMDcxLGUuYWZpaTEwMDUwPTExNjgsZS5hZmlpMTAwNTE9MTAyNixlLmFmaWkxMDA1Mj0xMDI3LGUuYWZpaTEwMDUzPTEwMjgsZS5hZmlpMTAwNTQ9MTAyOSxlLmFmaWkxMDA1NT0xMDMwLGUuYWZpaTEwMDU2PTEwMzEsZS5hZmlpMTAwNTc9MTAzMixlLmFmaWkxMDA1OD0xMDMzLGUuYWZpaTEwMDU5PTEwMzQsZS5hZmlpMTAwNjA9MTAzNSxlLmFmaWkxMDA2MT0xMDM2LGUuYWZpaTEwMDYyPTEwMzgsZS5hZmlpMTAwNjM9NjMxNzIsZS5hZmlpMTAwNjQ9NjMxNzMsZS5hZmlpMTAwNjU9MTA3MixlLmFmaWkxMDA2Nj0xMDczLGUuYWZpaTEwMDY3PTEwNzQsZS5hZmlpMTAwNjg9MTA3NSxlLmFmaWkxMDA2OT0xMDc2LGUuYWZpaTEwMDcwPTEwNzcsZS5hZmlpMTAwNzE9MTEwNSxlLmFmaWkxMDA3Mj0xMDc4LGUuYWZpaTEwMDczPTEwNzksZS5hZmlpMTAwNzQ9MTA4MCxlLmFmaWkxMDA3NT0xMDgxLGUuYWZpaTEwMDc2PTEwODIsZS5hZmlpMTAwNzc9MTA4MyxlLmFmaWkxMDA3OD0xMDg0LGUuYWZpaTEwMDc5PTEwODUsZS5hZmlpMTAwODA9MTA4NixlLmFmaWkxMDA4MT0xMDg3LGUuYWZpaTEwMDgyPTEwODgsZS5hZmlpMTAwODM9MTA4OSxlLmFmaWkxMDA4ND0xMDkwLGUuYWZpaTEwMDg1PTEwOTEsZS5hZmlpMTAwODY9MTA5MixlLmFmaWkxMDA4Nz0xMDkzLGUuYWZpaTEwMDg4PTEwOTQsZS5hZmlpMTAwODk9MTA5NSxlLmFmaWkxMDA5MD0xMDk2LGUuYWZpaTEwMDkxPTEwOTcsZS5hZmlpMTAwOTI9MTA5OCxlLmFmaWkxMDA5Mz0xMDk5LGUuYWZpaTEwMDk0PTExMDAsZS5hZmlpMTAwOTU9MTEwMSxlLmFmaWkxMDA5Nj0xMTAyLGUuYWZpaTEwMDk3PTExMDMsZS5hZmlpMTAwOTg9MTE2OSxlLmFmaWkxMDA5OT0xMTA2LGUuYWZpaTEwMTAwPTExMDcsZS5hZmlpMTAxMDE9MTEwOCxlLmFmaWkxMDEwMj0xMTA5LGUuYWZpaTEwMTAzPTExMTAsZS5hZmlpMTAxMDQ9MTExMSxlLmFmaWkxMDEwNT0xMTEyLGUuYWZpaTEwMTA2PTExMTMsZS5hZmlpMTAxMDc9MTExNCxlLmFmaWkxMDEwOD0xMTE1LGUuYWZpaTEwMTA5PTExMTYsZS5hZmlpMTAxMTA9MTExOCxlLmFmaWkxMDE0NT0xMDM5LGUuYWZpaTEwMTQ2PTExMjIsZS5hZmlpMTAxNDc9MTEzOCxlLmFmaWkxMDE0OD0xMTQwLGUuYWZpaTEwMTkyPTYzMTc0LGUuYWZpaTEwMTkzPTExMTksZS5hZmlpMTAxOTQ9MTEyMyxlLmFmaWkxMDE5NT0xMTM5LGUuYWZpaTEwMTk2PTExNDEsZS5hZmlpMTA4MzE9NjMxNzUsZS5hZmlpMTA4MzI9NjMxNzYsZS5hZmlpMTA4NDY9MTI0MSxlLmFmaWkyOTk9ODIwNixlLmFmaWkzMDA9ODIwNyxlLmFmaWkzMDE9ODIwNSxlLmFmaWk1NzM4MT0xNjQyLGUuYWZpaTU3Mzg4PTE1NDgsZS5hZmlpNTczOTI9MTYzMixlLmFmaWk1NzM5Mz0xNjMzLGUuYWZpaTU3Mzk0PTE2MzQsZS5hZmlpNTczOTU9MTYzNSxlLmFmaWk1NzM5Nj0xNjM2LGUuYWZpaTU3Mzk3PTE2MzcsZS5hZmlpNTczOTg9MTYzOCxlLmFmaWk1NzM5OT0xNjM5LGUuYWZpaTU3NDAwPTE2NDAsZS5hZmlpNTc0MDE9MTY0MSxlLmFmaWk1NzQwMz0xNTYzLGUuYWZpaTU3NDA3PTE1NjcsZS5hZmlpNTc0MDk9MTU2OSxlLmFmaWk1NzQxMD0xNTcwLGUuYWZpaTU3NDExPTE1NzEsZS5hZmlpNTc0MTI9MTU3MixlLmFmaWk1NzQxMz0xNTczLGUuYWZpaTU3NDE0PTE1NzQsZS5hZmlpNTc0MTU9MTU3NSxlLmFmaWk1NzQxNj0xNTc2LGUuYWZpaTU3NDE3PTE1NzcsZS5hZmlpNTc0MTg9MTU3OCxlLmFmaWk1NzQxOT0xNTc5LGUuYWZpaTU3NDIwPTE1ODAsZS5hZmlpNTc0MjE9MTU4MSxlLmFmaWk1NzQyMj0xNTgyLGUuYWZpaTU3NDIzPTE1ODMsZS5hZmlpNTc0MjQ9MTU4NCxlLmFmaWk1NzQyNT0xNTg1LGUuYWZpaTU3NDI2PTE1ODYsZS5hZmlpNTc0Mjc9MTU4NyxlLmFmaWk1NzQyOD0xNTg4LGUuYWZpaTU3NDI5PTE1ODksZS5hZmlpNTc0MzA9MTU5MCxlLmFmaWk1NzQzMT0xNTkxLGUuYWZpaTU3NDMyPTE1OTIsZS5hZmlpNTc0MzM9MTU5MyxlLmFmaWk1NzQzND0xNTk0LGUuYWZpaTU3NDQwPTE2MDAsZS5hZmlpNTc0NDE9MTYwMSxlLmFmaWk1NzQ0Mj0xNjAyLGUuYWZpaTU3NDQzPTE2MDMsZS5hZmlpNTc0NDQ9MTYwNCxlLmFmaWk1NzQ0NT0xNjA1LGUuYWZpaTU3NDQ2PTE2MDYsZS5hZmlpNTc0NDg9MTYwOCxlLmFmaWk1NzQ0OT0xNjA5LGUuYWZpaTU3NDUwPTE2MTAsZS5hZmlpNTc0NTE9MTYxMSxlLmFmaWk1NzQ1Mj0xNjEyLGUuYWZpaTU3NDUzPTE2MTMsZS5hZmlpNTc0NTQ9MTYxNCxlLmFmaWk1NzQ1NT0xNjE1LGUuYWZpaTU3NDU2PTE2MTYsZS5hZmlpNTc0NTc9MTYxNyxlLmFmaWk1NzQ1OD0xNjE4LGUuYWZpaTU3NDcwPTE2MDcsZS5hZmlpNTc1MDU9MTcwMCxlLmFmaWk1NzUwNj0xNjYyLGUuYWZpaTU3NTA3PTE2NzAsZS5hZmlpNTc1MDg9MTY4OCxlLmFmaWk1NzUwOT0xNzExLGUuYWZpaTU3NTExPTE2NTcsZS5hZmlpNTc1MTI9MTY3MixlLmFmaWk1NzUxMz0xNjgxLGUuYWZpaTU3NTE0PTE3MjIsZS5hZmlpNTc1MTk9MTc0NixlLmFmaWk1NzUzND0xNzQ5LGUuYWZpaTU3NjM2PTgzNjIsZS5hZmlpNTc2NDU9MTQ3MCxlLmFmaWk1NzY1OD0xNDc1LGUuYWZpaTU3NjY0PTE0ODgsZS5hZmlpNTc2NjU9MTQ4OSxlLmFmaWk1NzY2Nj0xNDkwLGUuYWZpaTU3NjY3PTE0OTEsZS5hZmlpNTc2Njg9MTQ5MixlLmFmaWk1NzY2OT0xNDkzLGUuYWZpaTU3NjcwPTE0OTQsZS5hZmlpNTc2NzE9MTQ5NSxlLmFmaWk1NzY3Mj0xNDk2LGUuYWZpaTU3NjczPTE0OTcsZS5hZmlpNTc2NzQ9MTQ5OCxlLmFmaWk1NzY3NT0xNDk5LGUuYWZpaTU3Njc2PTE1MDAsZS5hZmlpNTc2Nzc9MTUwMSxlLmFmaWk1NzY3OD0xNTAyLGUuYWZpaTU3Njc5PTE1MDMsZS5hZmlpNTc2ODA9MTUwNCxlLmFmaWk1NzY4MT0xNTA1LGUuYWZpaTU3NjgyPTE1MDYsZS5hZmlpNTc2ODM9MTUwNyxlLmFmaWk1NzY4ND0xNTA4LGUuYWZpaTU3Njg1PTE1MDksZS5hZmlpNTc2ODY9MTUxMCxlLmFmaWk1NzY4Nz0xNTExLGUuYWZpaTU3Njg4PTE1MTIsZS5hZmlpNTc2ODk9MTUxMyxlLmFmaWk1NzY5MD0xNTE0LGUuYWZpaTU3Njk0PTY0Mjk4LGUuYWZpaTU3Njk1PTY0Mjk5LGUuYWZpaTU3NzAwPTY0MzMxLGUuYWZpaTU3NzA1PTY0Mjg3LGUuYWZpaTU3NzE2PTE1MjAsZS5hZmlpNTc3MTc9MTUyMSxlLmFmaWk1NzcxOD0xNTIyLGUuYWZpaTU3NzIzPTY0MzA5LGUuYWZpaTU3NzkzPTE0NjAsZS5hZmlpNTc3OTQ9MTQ2MSxlLmFmaWk1Nzc5NT0xNDYyLGUuYWZpaTU3Nzk2PTE0NjcsZS5hZmlpNTc3OTc9MTQ2NCxlLmFmaWk1Nzc5OD0xNDYzLGUuYWZpaTU3Nzk5PTE0NTYsZS5hZmlpNTc4MDA9MTQ1OCxlLmFmaWk1NzgwMT0xNDU3LGUuYWZpaTU3ODAyPTE0NTksZS5hZmlpNTc4MDM9MTQ3NCxlLmFmaWk1NzgwND0xNDczLGUuYWZpaTU3ODA2PTE0NjUsZS5hZmlpNTc4MDc9MTQ2OCxlLmFmaWk1NzgzOT0xNDY5LGUuYWZpaTU3ODQxPTE0NzEsZS5hZmlpNTc4NDI9MTQ3MixlLmFmaWk1NzkyOT03MDAsZS5hZmlpNjEyNDg9ODQ1MyxlLmFmaWk2MTI4OT04NDY3LGUuYWZpaTYxMzUyPTg0NzAsZS5hZmlpNjE1NzM9ODIzNixlLmFmaWk2MTU3ND04MjM3LGUuYWZpaTYxNTc1PTgyMzgsZS5hZmlpNjE2NjQ9ODIwNCxlLmFmaWk2MzE2Nz0xNjQ1LGUuYWZpaTY0OTM3PTcwMSxlLmFncmF2ZT0yMjQsZS5hZ3VqYXJhdGk9MjY5MyxlLmFndXJtdWtoaT0yNTY1LGUuYWhpcmFnYW5hPTEyMzU0LGUuYWhvb2thYm92ZT03ODQzLGUuYWliZW5nYWxpPTI0NDgsZS5haWJvcG9tb2ZvPTEyNTc0LGUuYWlkZXZhPTIzMjAsZS5haWVjeXJpbGxpYz0xMjM3LGUuYWlndWphcmF0aT0yNzA0LGUuYWlndXJtdWtoaT0yNTc2LGUuYWltYXRyYWd1cm11a2hpPTI2MzIsZS5haW5hcmFiaWM9MTU5MyxlLmFpbmZpbmFsYXJhYmljPTY1MjI2LGUuYWluaW5pdGlhbGFyYWJpYz02NTIyNyxlLmFpbm1lZGlhbGFyYWJpYz02NTIyOCxlLmFpbnZlcnRlZGJyZXZlPTUxNSxlLmFpdm93ZWxzaWduYmVuZ2FsaT0yNTA0LGUuYWl2b3dlbHNpZ25kZXZhPTIzNzYsZS5haXZvd2Vsc2lnbmd1amFyYXRpPTI3NjAsZS5ha2F0YWthbmE9MTI0NTAsZS5ha2F0YWthbmFoYWxmd2lkdGg9NjUzOTMsZS5ha29yZWFuPTEyNjIzLGUuYWxlZj0xNDg4LGUuYWxlZmFyYWJpYz0xNTc1LGUuYWxlZmRhZ2VzaGhlYnJldz02NDMwNCxlLmFsZWZmaW5hbGFyYWJpYz02NTE2NixlLmFsZWZoYW16YWFib3ZlYXJhYmljPTE1NzEsZS5hbGVmaGFtemFhYm92ZWZpbmFsYXJhYmljPTY1MTU2LGUuYWxlZmhhbXphYmVsb3dhcmFiaWM9MTU3MyxlLmFsZWZoYW16YWJlbG93ZmluYWxhcmFiaWM9NjUxNjAsZS5hbGVmaGVicmV3PTE0ODgsZS5hbGVmbGFtZWRoZWJyZXc9NjQzMzUsZS5hbGVmbWFkZGFhYm92ZWFyYWJpYz0xNTcwLGUuYWxlZm1hZGRhYWJvdmVmaW5hbGFyYWJpYz02NTE1NCxlLmFsZWZtYWtzdXJhYXJhYmljPTE2MDksZS5hbGVmbWFrc3VyYWZpbmFsYXJhYmljPTY1MjY0LGUuYWxlZm1ha3N1cmFpbml0aWFsYXJhYmljPTY1MjY3LGUuYWxlZm1ha3N1cmFtZWRpYWxhcmFiaWM9NjUyNjgsZS5hbGVmcGF0YWhoZWJyZXc9NjQzMDIsZS5hbGVmcWFtYXRzaGVicmV3PTY0MzAzLGUuYWxlcGg9ODUwMSxlLmFsbGVxdWFsPTg3ODAsZS5hbHBoYT05NDUsZS5hbHBoYXRvbm9zPTk0MCxlLmFtYWNyb249MjU3LGUuYW1vbm9zcGFjZT02NTM0NSxlLmFtcGVyc2FuZD0zOCxlLmFtcGVyc2FuZG1vbm9zcGFjZT02NTI4NixlLmFtcGVyc2FuZHNtYWxsPTYzMjcwLGUuYW1zcXVhcmU9MTMyNTAsZS5hbmJvcG9tb2ZvPTEyNTc4LGUuYW5nYm9wb21vZm89MTI1ODAsZS5hbmdicmFja2V0bGVmdD0xMjI5NixlLmFuZ2JyYWNrZXRyaWdodD0xMjI5NyxlLmFuZ2toYW5raHV0aGFpPTM2NzQsZS5hbmdsZT04NzM2LGUuYW5nbGVicmFja2V0bGVmdD0xMjI5NixlLmFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NyxlLmFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk3LGUuYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4OCxlLmFuZ2xlbGVmdD05MDAxLGUuYW5nbGVyaWdodD05MDAyLGUuYW5nc3Ryb209ODQ5MSxlLmFub3RlbGVpYT05MDMsZS5hbnVkYXR0YWRldmE9MjM4NixlLmFudXN2YXJhYmVuZ2FsaT0yNDM0LGUuYW51c3ZhcmFkZXZhPTIzMDYsZS5hbnVzdmFyYWd1amFyYXRpPTI2OTAsZS5hb2dvbmVrPTI2MSxlLmFwYWF0b3NxdWFyZT0xMzA1NixlLmFwYXJlbj05MzcyLGUuYXBvc3Ryb3BoZWFybWVuaWFuPTEzNzAsZS5hcG9zdHJvcGhlbW9kPTcwMCxlLmFwcGxlPTYzNzQzLGUuYXBwcm9hY2hlcz04Nzg0LGUuYXBwcm94ZXF1YWw9ODc3NixlLmFwcHJveGVxdWFsb3JpbWFnZT04Nzg2LGUuYXBwcm94aW1hdGVseWVxdWFsPTg3NzMsZS5hcmFlYWVrb3JlYW49MTI2ODYsZS5hcmFlYWtvcmVhbj0xMjY4NSxlLmFyYz04OTc4LGUuYXJpZ2h0aGFsZnJpbmc9NzgzNCxlLmFyaW5nPTIyOSxlLmFyaW5nYWN1dGU9NTA3LGUuYXJpbmdiZWxvdz03NjgxLGUuYXJyb3dib3RoPTg1OTYsZS5hcnJvd2Rhc2hkb3duPTg2NzUsZS5hcnJvd2Rhc2hsZWZ0PTg2NzIsZS5hcnJvd2Rhc2hyaWdodD04Njc0LGUuYXJyb3dkYXNodXA9ODY3MyxlLmFycm93ZGJsYm90aD04NjYwLGUuYXJyb3dkYmxkb3duPTg2NTksZS5hcnJvd2RibGxlZnQ9ODY1NixlLmFycm93ZGJscmlnaHQ9ODY1OCxlLmFycm93ZGJsdXA9ODY1NyxlLmFycm93ZG93bj04NTk1LGUuYXJyb3dkb3dubGVmdD04NjAxLGUuYXJyb3dkb3ducmlnaHQ9ODYwMCxlLmFycm93ZG93bndoaXRlPTg2ODEsZS5hcnJvd2hlYWRkb3dubW9kPTcwOSxlLmFycm93aGVhZGxlZnRtb2Q9NzA2LGUuYXJyb3doZWFkcmlnaHRtb2Q9NzA3LGUuYXJyb3doZWFkdXBtb2Q9NzA4LGUuYXJyb3dob3JpemV4PTYzNzE5LGUuYXJyb3dsZWZ0PTg1OTIsZS5hcnJvd2xlZnRkYmw9ODY1NixlLmFycm93bGVmdGRibHN0cm9rZT04NjUzLGUuYXJyb3dsZWZ0b3ZlcnJpZ2h0PTg2NDYsZS5hcnJvd2xlZnR3aGl0ZT04Njc4LGUuYXJyb3dyaWdodD04NTk0LGUuYXJyb3dyaWdodGRibHN0cm9rZT04NjU1LGUuYXJyb3dyaWdodGhlYXZ5PTEwMTQyLGUuYXJyb3dyaWdodG92ZXJsZWZ0PTg2NDQsZS5hcnJvd3JpZ2h0d2hpdGU9ODY4MCxlLmFycm93dGFibGVmdD04Njc2LGUuYXJyb3d0YWJyaWdodD04Njc3LGUuYXJyb3d1cD04NTkzLGUuYXJyb3d1cGRuPTg1OTcsZS5hcnJvd3VwZG5ic2U9ODYxNixlLmFycm93dXBkb3duYmFzZT04NjE2LGUuYXJyb3d1cGxlZnQ9ODU5OCxlLmFycm93dXBsZWZ0b2Zkb3duPTg2NDUsZS5hcnJvd3VwcmlnaHQ9ODU5OSxlLmFycm93dXB3aGl0ZT04Njc5LGUuYXJyb3d2ZXJ0ZXg9NjM3MTgsZS5hc2NpaWNpcmN1bT05NCxlLmFzY2lpY2lyY3VtbW9ub3NwYWNlPTY1MzQyLGUuYXNjaWl0aWxkZT0xMjYsZS5hc2NpaXRpbGRlbW9ub3NwYWNlPTY1Mzc0LGUuYXNjcmlwdD01OTMsZS5hc2NyaXB0dHVybmVkPTU5NCxlLmFzbWFsbGhpcmFnYW5hPTEyMzUzLGUuYXNtYWxsa2F0YWthbmE9MTI0NDksZS5hc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4MyxlLmFzdGVyaXNrPTQyLGUuYXN0ZXJpc2thbHRvbmVhcmFiaWM9MTY0NSxlLmFzdGVyaXNrYXJhYmljPTE2NDUsZS5hc3Rlcmlza21hdGg9ODcyNyxlLmFzdGVyaXNrbW9ub3NwYWNlPTY1MjkwLGUuYXN0ZXJpc2tzbWFsbD02NTEyMSxlLmFzdGVyaXNtPTgyNTgsZS5hc3VwZXJpb3I9NjMyMDksZS5hc3ltcHRvdGljYWxseWVxdWFsPTg3NzEsZS5hdD02NCxlLmF0aWxkZT0yMjcsZS5hdG1vbm9zcGFjZT02NTMxMixlLmF0c21hbGw9NjUxMzEsZS5hdHVybmVkPTU5MixlLmF1YmVuZ2FsaT0yNDUyLGUuYXVib3BvbW9mbz0xMjU3NixlLmF1ZGV2YT0yMzI0LGUuYXVndWphcmF0aT0yNzA4LGUuYXVndXJtdWtoaT0yNTgwLGUuYXVsZW5ndGhtYXJrYmVuZ2FsaT0yNTE5LGUuYXVtYXRyYWd1cm11a2hpPTI2MzYsZS5hdXZvd2Vsc2lnbmJlbmdhbGk9MjUwOCxlLmF1dm93ZWxzaWduZGV2YT0yMzgwLGUuYXV2b3dlbHNpZ25ndWphcmF0aT0yNzY0LGUuYXZhZ3JhaGFkZXZhPTIzNjUsZS5heWJhcm1lbmlhbj0xMzc3LGUuYXlpbj0xNTA2LGUuYXlpbmFsdG9uZWhlYnJldz02NDI4OCxlLmF5aW5oZWJyZXc9MTUwNixlLmI9OTgsZS5iYWJlbmdhbGk9MjQ3NixlLmJhY2tzbGFzaD05MixlLmJhY2tzbGFzaG1vbm9zcGFjZT02NTM0MCxlLmJhZGV2YT0yMzQ4LGUuYmFndWphcmF0aT0yNzMyLGUuYmFndXJtdWtoaT0yNjA0LGUuYmFoaXJhZ2FuYT0xMjQwMCxlLmJhaHR0aGFpPTM2NDcsZS5iYWthdGFrYW5hPTEyNDk2LGUuYmFyPTEyNCxlLmJhcm1vbm9zcGFjZT02NTM3MixlLmJib3BvbW9mbz0xMjU0OSxlLmJjaXJjbGU9OTQyNSxlLmJkb3RhY2NlbnQ9NzY4MyxlLmJkb3RiZWxvdz03Njg1LGUuYmVhbWVkc2l4dGVlbnRobm90ZXM9OTgzNixlLmJlY2F1c2U9ODc1NyxlLmJlY3lyaWxsaWM9MTA3MyxlLmJlaGFyYWJpYz0xNTc2LGUuYmVoZmluYWxhcmFiaWM9NjUxNjgsZS5iZWhpbml0aWFsYXJhYmljPTY1MTY5LGUuYmVoaXJhZ2FuYT0xMjQwOSxlLmJlaG1lZGlhbGFyYWJpYz02NTE3MCxlLmJlaG1lZW1pbml0aWFsYXJhYmljPTY0NjcxLGUuYmVobWVlbWlzb2xhdGVkYXJhYmljPTY0NTIwLGUuYmVobm9vbmZpbmFsYXJhYmljPTY0NjIxLGUuYmVrYXRha2FuYT0xMjUwNSxlLmJlbmFybWVuaWFuPTEzNzgsZS5iZXQ9MTQ4OSxlLmJldGE9OTQ2LGUuYmV0YXN5bWJvbGdyZWVrPTk3NixlLmJldGRhZ2VzaD02NDMwNSxlLmJldGRhZ2VzaGhlYnJldz02NDMwNSxlLmJldGhlYnJldz0xNDg5LGUuYmV0cmFmZWhlYnJldz02NDMzMixlLmJoYWJlbmdhbGk9MjQ3NyxlLmJoYWRldmE9MjM0OSxlLmJoYWd1amFyYXRpPTI3MzMsZS5iaGFndXJtdWtoaT0yNjA1LGUuYmhvb2s9NTk1LGUuYmloaXJhZ2FuYT0xMjQwMyxlLmJpa2F0YWthbmE9MTI0OTksZS5iaWxhYmlhbGNsaWNrPTY2NCxlLmJpbmRpZ3VybXVraGk9MjU2MixlLmJpcnVzcXVhcmU9MTMxMDUsZS5ibGFja2NpcmNsZT05Njc5LGUuYmxhY2tkaWFtb25kPTk2NzAsZS5ibGFja2Rvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjAsZS5ibGFja2xlZnRwb2ludGluZ3BvaW50ZXI9OTY2OCxlLmJsYWNrbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NCxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzA0LGUuYmxhY2tsZW50aWN1bGFyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4MyxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodD0xMjMwNSxlLmJsYWNrbGVudGljdWxhcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDg0LGUuYmxhY2tsb3dlcmxlZnR0cmlhbmdsZT05Njk5LGUuYmxhY2tsb3dlcnJpZ2h0dHJpYW5nbGU9OTY5OCxlLmJsYWNrcmVjdGFuZ2xlPTk2NDQsZS5ibGFja3JpZ2h0cG9pbnRpbmdwb2ludGVyPTk2NTgsZS5ibGFja3JpZ2h0cG9pbnRpbmd0cmlhbmdsZT05NjU0LGUuYmxhY2tzbWFsbHNxdWFyZT05NjQyLGUuYmxhY2tzbWlsaW5nZmFjZT05Nzg3LGUuYmxhY2tzcXVhcmU9OTYzMixlLmJsYWNrc3Rhcj05NzMzLGUuYmxhY2t1cHBlcmxlZnR0cmlhbmdsZT05NzAwLGUuYmxhY2t1cHBlcnJpZ2h0dHJpYW5nbGU9OTcwMSxlLmJsYWNrdXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MixlLmJsYWNrdXBwb2ludGluZ3RyaWFuZ2xlPTk2NTAsZS5ibGFuaz05MjUxLGUuYmxpbmViZWxvdz03Njg3LGUuYmxvY2s9OTYwOCxlLmJtb25vc3BhY2U9NjUzNDYsZS5ib2JhaW1haXRoYWk9MzYxMCxlLmJvaGlyYWdhbmE9MTI0MTIsZS5ib2thdGFrYW5hPTEyNTA4LGUuYnBhcmVuPTkzNzMsZS5icXNxdWFyZT0xMzI1MSxlLmJyYWNlZXg9NjM3MzIsZS5icmFjZWxlZnQ9MTIzLGUuYnJhY2VsZWZ0YnQ9NjM3MzEsZS5icmFjZWxlZnRtaWQ9NjM3MzAsZS5icmFjZWxlZnRtb25vc3BhY2U9NjUzNzEsZS5icmFjZWxlZnRzbWFsbD02NTExNSxlLmJyYWNlbGVmdHRwPTYzNzI5LGUuYnJhY2VsZWZ0dmVydGljYWw9NjUwNzksZS5icmFjZXJpZ2h0PTEyNSxlLmJyYWNlcmlnaHRidD02Mzc0MixlLmJyYWNlcmlnaHRtaWQ9NjM3NDEsZS5icmFjZXJpZ2h0bW9ub3NwYWNlPTY1MzczLGUuYnJhY2VyaWdodHNtYWxsPTY1MTE2LGUuYnJhY2VyaWdodHRwPTYzNzQwLGUuYnJhY2VyaWdodHZlcnRpY2FsPTY1MDgwLGUuYnJhY2tldGxlZnQ9OTEsZS5icmFja2V0bGVmdGJ0PTYzNzI4LGUuYnJhY2tldGxlZnRleD02MzcyNyxlLmJyYWNrZXRsZWZ0bW9ub3NwYWNlPTY1MzM5LGUuYnJhY2tldGxlZnR0cD02MzcyNixlLmJyYWNrZXRyaWdodD05MyxlLmJyYWNrZXRyaWdodGJ0PTYzNzM5LGUuYnJhY2tldHJpZ2h0ZXg9NjM3MzgsZS5icmFja2V0cmlnaHRtb25vc3BhY2U9NjUzNDEsZS5icmFja2V0cmlnaHR0cD02MzczNyxlLmJyZXZlPTcyOCxlLmJyZXZlYmVsb3djbWI9ODE0LGUuYnJldmVjbWI9Nzc0LGUuYnJldmVpbnZlcnRlZGJlbG93Y21iPTgxNSxlLmJyZXZlaW52ZXJ0ZWRjbWI9Nzg1LGUuYnJldmVpbnZlcnRlZGRvdWJsZWNtYj04NjUsZS5icmlkZ2ViZWxvd2NtYj04MTAsZS5icmlkZ2VpbnZlcnRlZGJlbG93Y21iPTgyNixlLmJyb2tlbmJhcj0xNjYsZS5ic3Ryb2tlPTM4NCxlLmJzdXBlcmlvcj02MzIxMCxlLmJ0b3BiYXI9Mzg3LGUuYnVoaXJhZ2FuYT0xMjQwNixlLmJ1a2F0YWthbmE9MTI1MDIsZS5idWxsZXQ9ODIyNixlLmJ1bGxldGludmVyc2U9OTY4OCxlLmJ1bGxldG9wZXJhdG9yPTg3MjksZS5idWxsc2V5ZT05Njc4LGUuYz05OSxlLmNhYXJtZW5pYW49MTM5MCxlLmNhYmVuZ2FsaT0yNDU4LGUuY2FjdXRlPTI2MyxlLmNhZGV2YT0yMzMwLGUuY2FndWphcmF0aT0yNzE0LGUuY2FndXJtdWtoaT0yNTg2LGUuY2Fsc3F1YXJlPTEzMTkyLGUuY2FuZHJhYmluZHViZW5nYWxpPTI0MzMsZS5jYW5kcmFiaW5kdWNtYj03ODQsZS5jYW5kcmFiaW5kdWRldmE9MjMwNSxlLmNhbmRyYWJpbmR1Z3VqYXJhdGk9MjY4OSxlLmNhcHNsb2NrPTg2ODIsZS5jYXJlb2Y9ODQ1MyxlLmNhcm9uPTcxMSxlLmNhcm9uYmVsb3djbWI9ODEyLGUuY2Fyb25jbWI9NzgwLGUuY2FycmlhZ2VyZXR1cm49ODYyOSxlLmNib3BvbW9mbz0xMjU2OCxlLmNjYXJvbj0yNjksZS5jY2VkaWxsYT0yMzEsZS5jY2VkaWxsYWFjdXRlPTc2ODksZS5jY2lyY2xlPTk0MjYsZS5jY2lyY3VtZmxleD0yNjUsZS5jY3VybD01OTcsZS5jZG90PTI2NyxlLmNkb3RhY2NlbnQ9MjY3LGUuY2RzcXVhcmU9MTMyNTMsZS5jZWRpbGxhPTE4NCxlLmNlZGlsbGFjbWI9ODA3LGUuY2VudD0xNjIsZS5jZW50aWdyYWRlPTg0NTEsZS5jZW50aW5mZXJpb3I9NjMxOTksZS5jZW50bW9ub3NwYWNlPTY1NTA0LGUuY2VudG9sZHN0eWxlPTYzMzk0LGUuY2VudHN1cGVyaW9yPTYzMjAwLGUuY2hhYXJtZW5pYW49MTQwMSxlLmNoYWJlbmdhbGk9MjQ1OSxlLmNoYWRldmE9MjMzMSxlLmNoYWd1amFyYXRpPTI3MTUsZS5jaGFndXJtdWtoaT0yNTg3LGUuY2hib3BvbW9mbz0xMjU2NCxlLmNoZWFia2hhc2lhbmN5cmlsbGljPTEyMTMsZS5jaGVja21hcms9MTAwMDMsZS5jaGVjeXJpbGxpYz0xMDk1LGUuY2hlZGVzY2VuZGVyYWJraGFzaWFuY3lyaWxsaWM9MTIxNSxlLmNoZWRlc2NlbmRlcmN5cmlsbGljPTEyMDcsZS5jaGVkaWVyZXNpc2N5cmlsbGljPTEyNjksZS5jaGVoYXJtZW5pYW49MTM5NSxlLmNoZWtoYWthc3NpYW5jeXJpbGxpYz0xMjI4LGUuY2hldmVydGljYWxzdHJva2VjeXJpbGxpYz0xMjA5LGUuY2hpPTk2NyxlLmNoaWV1Y2hhY2lyY2xla29yZWFuPTEyOTE5LGUuY2hpZXVjaGFwYXJlbmtvcmVhbj0xMjgyMyxlLmNoaWV1Y2hjaXJjbGVrb3JlYW49MTI5MDUsZS5jaGlldWNoa29yZWFuPTEyNjE4LGUuY2hpZXVjaHBhcmVua29yZWFuPTEyODA5LGUuY2hvY2hhbmd0aGFpPTM1OTQsZS5jaG9jaGFudGhhaT0zNTkyLGUuY2hvY2hpbmd0aGFpPTM1OTMsZS5jaG9jaG9ldGhhaT0zNTk2LGUuY2hvb2s9MzkyLGUuY2lldWNhY2lyY2xla29yZWFuPTEyOTE4LGUuY2lldWNhcGFyZW5rb3JlYW49MTI4MjIsZS5jaWV1Y2NpcmNsZWtvcmVhbj0xMjkwNCxlLmNpZXVja29yZWFuPTEyNjE2LGUuY2lldWNwYXJlbmtvcmVhbj0xMjgwOCxlLmNpZXVjdXBhcmVua29yZWFuPTEyODI4LGUuY2lyY2xlPTk2NzUsZS5jaXJjbGVjb3B5cnQ9MTY5LGUuY2lyY2xlbXVsdGlwbHk9ODg1NSxlLmNpcmNsZW90PTg4NTcsZS5jaXJjbGVwbHVzPTg4NTMsZS5jaXJjbGVwb3N0YWxtYXJrPTEyMzQyLGUuY2lyY2xld2l0aGxlZnRoYWxmYmxhY2s9OTY4MCxlLmNpcmNsZXdpdGhyaWdodGhhbGZibGFjaz05NjgxLGUuY2lyY3VtZmxleD03MTAsZS5jaXJjdW1mbGV4YmVsb3djbWI9ODEzLGUuY2lyY3VtZmxleGNtYj03NzAsZS5jbGVhcj04OTk5LGUuY2xpY2thbHZlb2xhcj00NTAsZS5jbGlja2RlbnRhbD00NDgsZS5jbGlja2xhdGVyYWw9NDQ5LGUuY2xpY2tyZXRyb2ZsZXg9NDUxLGUuY2x1Yj05ODI3LGUuY2x1YnN1aXRibGFjaz05ODI3LGUuY2x1YnN1aXR3aGl0ZT05ODMxLGUuY21jdWJlZHNxdWFyZT0xMzIyMCxlLmNtb25vc3BhY2U9NjUzNDcsZS5jbXNxdWFyZWRzcXVhcmU9MTMyMTYsZS5jb2FybWVuaWFuPTE0MDksZS5jb2xvbj01OCxlLmNvbG9ubW9uZXRhcnk9ODM1MyxlLmNvbG9ubW9ub3NwYWNlPTY1MzA2LGUuY29sb25zaWduPTgzNTMsZS5jb2xvbnNtYWxsPTY1MTA5LGUuY29sb250cmlhbmd1bGFyaGFsZm1vZD03MjEsZS5jb2xvbnRyaWFuZ3VsYXJtb2Q9NzIwLGUuY29tbWE9NDQsZS5jb21tYWFib3ZlY21iPTc4NyxlLmNvbW1hYWJvdmVyaWdodGNtYj03ODksZS5jb21tYWFjY2VudD02MzE3MSxlLmNvbW1hYXJhYmljPTE1NDgsZS5jb21tYWFybWVuaWFuPTEzNzMsZS5jb21tYWluZmVyaW9yPTYzMjAxLGUuY29tbWFtb25vc3BhY2U9NjUyOTIsZS5jb21tYXJldmVyc2VkYWJvdmVjbWI9Nzg4LGUuY29tbWFyZXZlcnNlZG1vZD03MDEsZS5jb21tYXNtYWxsPTY1MTA0LGUuY29tbWFzdXBlcmlvcj02MzIwMixlLmNvbW1hdHVybmVkYWJvdmVjbWI9Nzg2LGUuY29tbWF0dXJuZWRtb2Q9Njk5LGUuY29tcGFzcz05Nzg4LGUuY29uZ3J1ZW50PTg3NzMsZS5jb250b3VyaW50ZWdyYWw9ODc1MCxlLmNvbnRyb2w9ODk2MyxlLmNvbnRyb2xBQ0s9NixlLmNvbnRyb2xCRUw9NyxlLmNvbnRyb2xCUz04LGUuY29udHJvbENBTj0yNCxlLmNvbnRyb2xDUj0xMyxlLmNvbnRyb2xEQzE9MTcsZS5jb250cm9sREMyPTE4LGUuY29udHJvbERDMz0xOSxlLmNvbnRyb2xEQzQ9MjAsZS5jb250cm9sREVMPTEyNyxlLmNvbnRyb2xETEU9MTYsZS5jb250cm9sRU09MjUsZS5jb250cm9sRU5RPTUsZS5jb250cm9sRU9UPTQsZS5jb250cm9sRVNDPTI3LGUuY29udHJvbEVUQj0yMyxlLmNvbnRyb2xFVFg9MyxlLmNvbnRyb2xGRj0xMixlLmNvbnRyb2xGUz0yOCxlLmNvbnRyb2xHUz0yOSxlLmNvbnRyb2xIVD05LGUuY29udHJvbExGPTEwLGUuY29udHJvbE5BSz0yMSxlLmNvbnRyb2xOVUxMPTAsZS5jb250cm9sUlM9MzAsZS5jb250cm9sU0k9MTUsZS5jb250cm9sU089MTQsZS5jb250cm9sU09UPTIsZS5jb250cm9sU1RYPTEsZS5jb250cm9sU1VCPTI2LGUuY29udHJvbFNZTj0yMixlLmNvbnRyb2xVUz0zMSxlLmNvbnRyb2xWVD0xMSxlLmNvcHlyaWdodD0xNjksZS5jb3B5cmlnaHRzYW5zPTYzNzIxLGUuY29weXJpZ2h0c2VyaWY9NjMxOTMsZS5jb3JuZXJicmFja2V0bGVmdD0xMjMwMCxlLmNvcm5lcmJyYWNrZXRsZWZ0aGFsZndpZHRoPTY1Mzc4LGUuY29ybmVyYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4OSxlLmNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMSxlLmNvcm5lcmJyYWNrZXRyaWdodGhhbGZ3aWR0aD02NTM3OSxlLmNvcm5lcmJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDkwLGUuY29ycG9yYXRpb25zcXVhcmU9MTMxODMsZS5jb3NxdWFyZT0xMzI1NSxlLmNvdmVya2dzcXVhcmU9MTMyNTQsZS5jcGFyZW49OTM3NCxlLmNydXplaXJvPTgzNTQsZS5jc3RyZXRjaGVkPTY2MyxlLmN1cmx5YW5kPTg5MTEsZS5jdXJseW9yPTg5MTAsZS5jdXJyZW5jeT0xNjQsZS5jeXJCcmV2ZT02MzE4NSxlLmN5ckZsZXg9NjMxODYsZS5jeXJicmV2ZT02MzE4OCxlLmN5cmZsZXg9NjMxODksZS5kPTEwMCxlLmRhYXJtZW5pYW49MTM4MCxlLmRhYmVuZ2FsaT0yNDcwLGUuZGFkYXJhYmljPTE1OTAsZS5kYWRldmE9MjM0MixlLmRhZGZpbmFsYXJhYmljPTY1MjE0LGUuZGFkaW5pdGlhbGFyYWJpYz02NTIxNSxlLmRhZG1lZGlhbGFyYWJpYz02NTIxNixlLmRhZ2VzaD0xNDY4LGUuZGFnZXNoaGVicmV3PTE0NjgsZS5kYWdnZXI9ODIyNCxlLmRhZ2dlcmRibD04MjI1LGUuZGFndWphcmF0aT0yNzI2LGUuZGFndXJtdWtoaT0yNTk4LGUuZGFoaXJhZ2FuYT0xMjM4NCxlLmRha2F0YWthbmE9MTI0ODAsZS5kYWxhcmFiaWM9MTU4MyxlLmRhbGV0PTE0OTEsZS5kYWxldGRhZ2VzaD02NDMwNyxlLmRhbGV0ZGFnZXNoaGVicmV3PTY0MzA3LGUuZGFsZXRoZWJyZXc9MTQ5MSxlLmRhbGZpbmFsYXJhYmljPTY1MTk0LGUuZGFtbWFhcmFiaWM9MTYxNSxlLmRhbW1hbG93YXJhYmljPTE2MTUsZS5kYW1tYXRhbmFsdG9uZWFyYWJpYz0xNjEyLGUuZGFtbWF0YW5hcmFiaWM9MTYxMixlLmRhbmRhPTI0MDQsZS5kYXJnYWhlYnJldz0xNDQ3LGUuZGFyZ2FsZWZ0aGVicmV3PTE0NDcsZS5kYXNpYXBuZXVtYXRhY3lyaWxsaWNjbWI9MTE1NyxlLmRibEdyYXZlPTYzMTg3LGUuZGJsYW5nbGVicmFja2V0bGVmdD0xMjI5OCxlLmRibGFuZ2xlYnJhY2tldGxlZnR2ZXJ0aWNhbD02NTA4NSxlLmRibGFuZ2xlYnJhY2tldHJpZ2h0PTEyMjk5LGUuZGJsYW5nbGVicmFja2V0cmlnaHR2ZXJ0aWNhbD02NTA4NixlLmRibGFyY2hpbnZlcnRlZGJlbG93Y21iPTgxMSxlLmRibGFycm93bGVmdD04NjYwLGUuZGJsYXJyb3dyaWdodD04NjU4LGUuZGJsZGFuZGE9MjQwNSxlLmRibGdyYXZlPTYzMTkwLGUuZGJsZ3JhdmVjbWI9NzgzLGUuZGJsaW50ZWdyYWw9ODc0OCxlLmRibGxvd2xpbmU9ODIxNSxlLmRibGxvd2xpbmVjbWI9ODE5LGUuZGJsb3ZlcmxpbmVjbWI9ODMxLGUuZGJscHJpbWVtb2Q9Njk4LGUuZGJsdmVydGljYWxiYXI9ODIxNCxlLmRibHZlcnRpY2FsbGluZWFib3ZlY21iPTc4MixlLmRib3BvbW9mbz0xMjU1MyxlLmRic3F1YXJlPTEzMjU2LGUuZGNhcm9uPTI3MSxlLmRjZWRpbGxhPTc2OTcsZS5kY2lyY2xlPTk0MjcsZS5kY2lyY3VtZmxleGJlbG93PTc2OTksZS5kY3JvYXQ9MjczLGUuZGRhYmVuZ2FsaT0yNDY1LGUuZGRhZGV2YT0yMzM3LGUuZGRhZ3VqYXJhdGk9MjcyMSxlLmRkYWd1cm11a2hpPTI1OTMsZS5kZGFsYXJhYmljPTE2NzIsZS5kZGFsZmluYWxhcmFiaWM9NjQzOTMsZS5kZGRoYWRldmE9MjM5NixlLmRkaGFiZW5nYWxpPTI0NjYsZS5kZGhhZGV2YT0yMzM4LGUuZGRoYWd1amFyYXRpPTI3MjIsZS5kZGhhZ3VybXVraGk9MjU5NCxlLmRkb3RhY2NlbnQ9NzY5MSxlLmRkb3RiZWxvdz03NjkzLGUuZGVjaW1hbHNlcGFyYXRvcmFyYWJpYz0xNjQzLGUuZGVjaW1hbHNlcGFyYXRvcnBlcnNpYW49MTY0MyxlLmRlY3lyaWxsaWM9MTA3NixlLmRlZ3JlZT0xNzYsZS5kZWhpaGVicmV3PTE0NTMsZS5kZWhpcmFnYW5hPTEyMzkxLGUuZGVpY29wdGljPTEwMDcsZS5kZWthdGFrYW5hPTEyNDg3LGUuZGVsZXRlbGVmdD05MDAzLGUuZGVsZXRlcmlnaHQ9ODk5OCxlLmRlbHRhPTk0OCxlLmRlbHRhdHVybmVkPTM5NyxlLmRlbm9taW5hdG9ybWludXNvbmVudW1lcmF0b3JiZW5nYWxpPTI1NTIsZS5kZXpoPTY3NixlLmRoYWJlbmdhbGk9MjQ3MSxlLmRoYWRldmE9MjM0MyxlLmRoYWd1amFyYXRpPTI3MjcsZS5kaGFndXJtdWtoaT0yNTk5LGUuZGhvb2s9NTk5LGUuZGlhbHl0aWthdG9ub3M9OTAxLGUuZGlhbHl0aWthdG9ub3NjbWI9ODM2LGUuZGlhbW9uZD05ODMwLGUuZGlhbW9uZHN1aXR3aGl0ZT05ODI2LGUuZGllcmVzaXM9MTY4LGUuZGllcmVzaXNhY3V0ZT02MzE5MSxlLmRpZXJlc2lzYmVsb3djbWI9ODA0LGUuZGllcmVzaXNjbWI9Nzc2LGUuZGllcmVzaXNncmF2ZT02MzE5MixlLmRpZXJlc2lzdG9ub3M9OTAxLGUuZGloaXJhZ2FuYT0xMjM4NixlLmRpa2F0YWthbmE9MTI0ODIsZS5kaXR0b21hcms9MTIyOTEsZS5kaXZpZGU9MjQ3LGUuZGl2aWRlcz04NzM5LGUuZGl2aXNpb25zbGFzaD04NzI1LGUuZGplY3lyaWxsaWM9MTEwNixlLmRrc2hhZGU9OTYxOSxlLmRsaW5lYmVsb3c9NzY5NSxlLmRsc3F1YXJlPTEzMjA3LGUuZG1hY3Jvbj0yNzMsZS5kbW9ub3NwYWNlPTY1MzQ4LGUuZG5ibG9jaz05NjA0LGUuZG9jaGFkYXRoYWk9MzU5OCxlLmRvZGVrdGhhaT0zNjA0LGUuZG9oaXJhZ2FuYT0xMjM5MyxlLmRva2F0YWthbmE9MTI0ODksZS5kb2xsYXI9MzY7ZS5kb2xsYXJpbmZlcmlvcj02MzIwMyxlLmRvbGxhcm1vbm9zcGFjZT02NTI4NCxlLmRvbGxhcm9sZHN0eWxlPTYzMjY4LGUuZG9sbGFyc21hbGw9NjUxMjksZS5kb2xsYXJzdXBlcmlvcj02MzIwNCxlLmRvbmc9ODM2MyxlLmRvcnVzcXVhcmU9MTMwOTQsZS5kb3RhY2NlbnQ9NzI5LGUuZG90YWNjZW50Y21iPTc3NSxlLmRvdGJlbG93Y21iPTgwMyxlLmRvdGJlbG93Y29tYj04MDMsZS5kb3RrYXRha2FuYT0xMjUzOSxlLmRvdGxlc3NpPTMwNSxlLmRvdGxlc3NqPTYzMTY2LGUuZG90bGVzc2pzdHJva2Vob29rPTY0NCxlLmRvdG1hdGg9ODkwMSxlLmRvdHRlZGNpcmNsZT05Njc2LGUuZG91YmxleW9kcGF0YWg9NjQyODcsZS5kb3VibGV5b2RwYXRhaGhlYnJldz02NDI4NyxlLmRvd250YWNrYmVsb3djbWI9Nzk4LGUuZG93bnRhY2ttb2Q9NzI1LGUuZHBhcmVuPTkzNzUsZS5kc3VwZXJpb3I9NjMyMTEsZS5kdGFpbD01OTgsZS5kdG9wYmFyPTM5NixlLmR1aGlyYWdhbmE9MTIzODksZS5kdWthdGFrYW5hPTEyNDg1LGUuZHo9NDk5LGUuZHphbHRvbmU9Njc1LGUuZHpjYXJvbj00NTQsZS5kemN1cmw9Njc3LGUuZHplYWJraGFzaWFuY3lyaWxsaWM9MTI0OSxlLmR6ZWN5cmlsbGljPTExMDksZS5kemhlY3lyaWxsaWM9MTExOSxlLmU9MTAxLGUuZWFjdXRlPTIzMyxlLmVhcnRoPTk3OTMsZS5lYmVuZ2FsaT0yNDQ3LGUuZWJvcG9tb2ZvPTEyNTcyLGUuZWJyZXZlPTI3NyxlLmVjYW5kcmFkZXZhPTIzMTcsZS5lY2FuZHJhZ3VqYXJhdGk9MjcwMSxlLmVjYW5kcmF2b3dlbHNpZ25kZXZhPTIzNzMsZS5lY2FuZHJhdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NyxlLmVjYXJvbj0yODMsZS5lY2VkaWxsYWJyZXZlPTc3MDksZS5lY2hhcm1lbmlhbj0xMzgxLGUuZWNoeWl3bmFybWVuaWFuPTE0MTUsZS5lY2lyY2xlPTk0MjgsZS5lY2lyY3VtZmxleD0yMzQsZS5lY2lyY3VtZmxleGFjdXRlPTc4NzEsZS5lY2lyY3VtZmxleGJlbG93PTc3MDUsZS5lY2lyY3VtZmxleGRvdGJlbG93PTc4NzksZS5lY2lyY3VtZmxleGdyYXZlPTc4NzMsZS5lY2lyY3VtZmxleGhvb2thYm92ZT03ODc1LGUuZWNpcmN1bWZsZXh0aWxkZT03ODc3LGUuZWN5cmlsbGljPTExMDgsZS5lZGJsZ3JhdmU9NTE3LGUuZWRldmE9MjMxOSxlLmVkaWVyZXNpcz0yMzUsZS5lZG90PTI3OSxlLmVkb3RhY2NlbnQ9Mjc5LGUuZWRvdGJlbG93PTc4NjUsZS5lZWd1cm11a2hpPTI1NzUsZS5lZW1hdHJhZ3VybXVraGk9MjYzMSxlLmVmY3lyaWxsaWM9MTA5MixlLmVncmF2ZT0yMzIsZS5lZ3VqYXJhdGk9MjcwMyxlLmVoYXJtZW5pYW49MTM4MyxlLmVoYm9wb21vZm89MTI1NzMsZS5laGlyYWdhbmE9MTIzNjAsZS5laG9va2Fib3ZlPTc4NjcsZS5laWJvcG9tb2ZvPTEyNTc1LGUuZWlnaHQ9NTYsZS5laWdodGFyYWJpYz0xNjQwLGUuZWlnaHRiZW5nYWxpPTI1NDIsZS5laWdodGNpcmNsZT05MzE5LGUuZWlnaHRjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI5LGUuZWlnaHRkZXZhPTI0MTQsZS5laWdodGVlbmNpcmNsZT05MzI5LGUuZWlnaHRlZW5wYXJlbj05MzQ5LGUuZWlnaHRlZW5wZXJpb2Q9OTM2OSxlLmVpZ2h0Z3VqYXJhdGk9Mjc5OCxlLmVpZ2h0Z3VybXVraGk9MjY3MCxlLmVpZ2h0aGFja2FyYWJpYz0xNjQwLGUuZWlnaHRoYW5nemhvdT0xMjMyOCxlLmVpZ2h0aG5vdGViZWFtZWQ9OTgzNSxlLmVpZ2h0aWRlb2dyYXBoaWNwYXJlbj0xMjgzOSxlLmVpZ2h0aW5mZXJpb3I9ODMyOCxlLmVpZ2h0bW9ub3NwYWNlPTY1MzA0LGUuZWlnaHRvbGRzdHlsZT02MzI4OCxlLmVpZ2h0cGFyZW49OTMzOSxlLmVpZ2h0cGVyaW9kPTkzNTksZS5laWdodHBlcnNpYW49MTc4NCxlLmVpZ2h0cm9tYW49ODU2NyxlLmVpZ2h0c3VwZXJpb3I9ODMxMixlLmVpZ2h0dGhhaT0zNjcyLGUuZWludmVydGVkYnJldmU9NTE5LGUuZWlvdGlmaWVkY3lyaWxsaWM9MTEyNSxlLmVrYXRha2FuYT0xMjQ1NixlLmVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NixlLmVrb25rYXJndXJtdWtoaT0yNjc2LGUuZWtvcmVhbj0xMjYyOCxlLmVsY3lyaWxsaWM9MTA4MyxlLmVsZW1lbnQ9ODcxMixlLmVsZXZlbmNpcmNsZT05MzIyLGUuZWxldmVucGFyZW49OTM0MixlLmVsZXZlbnBlcmlvZD05MzYyLGUuZWxldmVucm9tYW49ODU3MCxlLmVsbGlwc2lzPTgyMzAsZS5lbGxpcHNpc3ZlcnRpY2FsPTg5NDIsZS5lbWFjcm9uPTI3NSxlLmVtYWNyb25hY3V0ZT03NzAzLGUuZW1hY3JvbmdyYXZlPTc3MDEsZS5lbWN5cmlsbGljPTEwODQsZS5lbWRhc2g9ODIxMixlLmVtZGFzaHZlcnRpY2FsPTY1MDczLGUuZW1vbm9zcGFjZT02NTM0OSxlLmVtcGhhc2lzbWFya2FybWVuaWFuPTEzNzEsZS5lbXB0eXNldD04NzA5LGUuZW5ib3BvbW9mbz0xMjU3OSxlLmVuY3lyaWxsaWM9MTA4NSxlLmVuZGFzaD04MjExLGUuZW5kYXNodmVydGljYWw9NjUwNzQsZS5lbmRlc2NlbmRlcmN5cmlsbGljPTExODcsZS5lbmc9MzMxLGUuZW5nYm9wb21vZm89MTI1ODEsZS5lbmdoZWN5cmlsbGljPTExODksZS5lbmhvb2tjeXJpbGxpYz0xMjI0LGUuZW5zcGFjZT04MTk0LGUuZW9nb25laz0yODEsZS5lb2tvcmVhbj0xMjYyNyxlLmVvcGVuPTYwMyxlLmVvcGVuY2xvc2VkPTY2NixlLmVvcGVucmV2ZXJzZWQ9NjA0LGUuZW9wZW5yZXZlcnNlZGNsb3NlZD02MDYsZS5lb3BlbnJldmVyc2VkaG9vaz02MDUsZS5lcGFyZW49OTM3NixlLmVwc2lsb249OTQ5LGUuZXBzaWxvbnRvbm9zPTk0MSxlLmVxdWFsPTYxLGUuZXF1YWxtb25vc3BhY2U9NjUzMDksZS5lcXVhbHNtYWxsPTY1MTI2LGUuZXF1YWxzdXBlcmlvcj04MzE2LGUuZXF1aXZhbGVuY2U9ODgwMSxlLmVyYm9wb21vZm89MTI1ODIsZS5lcmN5cmlsbGljPTEwODgsZS5lcmV2ZXJzZWQ9NjAwLGUuZXJldmVyc2VkY3lyaWxsaWM9MTEwMSxlLmVzY3lyaWxsaWM9MTA4OSxlLmVzZGVzY2VuZGVyY3lyaWxsaWM9MTE5NSxlLmVzaD02NDMsZS5lc2hjdXJsPTY0NixlLmVzaG9ydGRldmE9MjMxOCxlLmVzaG9ydHZvd2Vsc2lnbmRldmE9MjM3NCxlLmVzaHJldmVyc2VkbG9vcD00MjYsZS5lc2hzcXVhdHJldmVyc2VkPTY0NSxlLmVzbWFsbGhpcmFnYW5hPTEyMzU5LGUuZXNtYWxsa2F0YWthbmE9MTI0NTUsZS5lc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4NixlLmVzdGltYXRlZD04NDk0LGUuZXN1cGVyaW9yPTYzMjEyLGUuZXRhPTk1MSxlLmV0YXJtZW5pYW49MTM4NCxlLmV0YXRvbm9zPTk0MixlLmV0aD0yNDAsZS5ldGlsZGU9Nzg2OSxlLmV0aWxkZWJlbG93PTc3MDcsZS5ldG5haHRhZm91a2hoZWJyZXc9MTQyNSxlLmV0bmFodGFmb3VraGxlZnRoZWJyZXc9MTQyNSxlLmV0bmFodGFoZWJyZXc9MTQyNSxlLmV0bmFodGFsZWZ0aGVicmV3PTE0MjUsZS5ldHVybmVkPTQ3NyxlLmV1a29yZWFuPTEyNjQxLGUuZXVybz04MzY0LGUuZXZvd2Vsc2lnbmJlbmdhbGk9MjUwMyxlLmV2b3dlbHNpZ25kZXZhPTIzNzUsZS5ldm93ZWxzaWduZ3VqYXJhdGk9Mjc1OSxlLmV4Y2xhbT0zMyxlLmV4Y2xhbWFybWVuaWFuPTEzNzIsZS5leGNsYW1kYmw9ODI1MixlLmV4Y2xhbWRvd249MTYxLGUuZXhjbGFtZG93bnNtYWxsPTYzMzkzLGUuZXhjbGFtbW9ub3NwYWNlPTY1MjgxLGUuZXhjbGFtc21hbGw9NjMyNjUsZS5leGlzdGVudGlhbD04NzA3LGUuZXpoPTY1OCxlLmV6aGNhcm9uPTQ5NSxlLmV6aGN1cmw9NjU5LGUuZXpocmV2ZXJzZWQ9NDQxLGUuZXpodGFpbD00NDIsZS5mPTEwMixlLmZhZGV2YT0yMzk4LGUuZmFndXJtdWtoaT0yNjU0LGUuZmFocmVuaGVpdD04NDU3LGUuZmF0aGFhcmFiaWM9MTYxNCxlLmZhdGhhbG93YXJhYmljPTE2MTQsZS5mYXRoYXRhbmFyYWJpYz0xNjExLGUuZmJvcG9tb2ZvPTEyNTUyLGUuZmNpcmNsZT05NDI5LGUuZmRvdGFjY2VudD03NzExLGUuZmVoYXJhYmljPTE2MDEsZS5mZWhhcm1lbmlhbj0xNDE0LGUuZmVoZmluYWxhcmFiaWM9NjUyMzQsZS5mZWhpbml0aWFsYXJhYmljPTY1MjM1LGUuZmVobWVkaWFsYXJhYmljPTY1MjM2LGUuZmVpY29wdGljPTk5NyxlLmZlbWFsZT05NzkyLGUuZmY9NjQyNTYsZS5mZmk9NjQyNTksZS5mZmw9NjQyNjAsZS5maT02NDI1NyxlLmZpZnRlZW5jaXJjbGU9OTMyNixlLmZpZnRlZW5wYXJlbj05MzQ2LGUuZmlmdGVlbnBlcmlvZD05MzY2LGUuZmlndXJlZGFzaD04MjEwLGUuZmlsbGVkYm94PTk2MzIsZS5maWxsZWRyZWN0PTk2NDQsZS5maW5hbGthZj0xNDk4LGUuZmluYWxrYWZkYWdlc2g9NjQzMTQsZS5maW5hbGthZmRhZ2VzaGhlYnJldz02NDMxNCxlLmZpbmFsa2FmaGVicmV3PTE0OTgsZS5maW5hbG1lbT0xNTAxLGUuZmluYWxtZW1oZWJyZXc9MTUwMSxlLmZpbmFsbnVuPTE1MDMsZS5maW5hbG51bmhlYnJldz0xNTAzLGUuZmluYWxwZT0xNTA3LGUuZmluYWxwZWhlYnJldz0xNTA3LGUuZmluYWx0c2FkaT0xNTA5LGUuZmluYWx0c2FkaWhlYnJldz0xNTA5LGUuZmlyc3R0b25lY2hpbmVzZT03MTMsZS5maXNoZXllPTk2NzMsZS5maXRhY3lyaWxsaWM9MTEzOSxlLmZpdmU9NTMsZS5maXZlYXJhYmljPTE2MzcsZS5maXZlYmVuZ2FsaT0yNTM5LGUuZml2ZWNpcmNsZT05MzE2LGUuZml2ZWNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjYsZS5maXZlZGV2YT0yNDExLGUuZml2ZWVpZ2h0aHM9ODU0MSxlLmZpdmVndWphcmF0aT0yNzk1LGUuZml2ZWd1cm11a2hpPTI2NjcsZS5maXZlaGFja2FyYWJpYz0xNjM3LGUuZml2ZWhhbmd6aG91PTEyMzI1LGUuZml2ZWlkZW9ncmFwaGljcGFyZW49MTI4MzYsZS5maXZlaW5mZXJpb3I9ODMyNSxlLmZpdmVtb25vc3BhY2U9NjUzMDEsZS5maXZlb2xkc3R5bGU9NjMyODUsZS5maXZlcGFyZW49OTMzNixlLmZpdmVwZXJpb2Q9OTM1NixlLmZpdmVwZXJzaWFuPTE3ODEsZS5maXZlcm9tYW49ODU2NCxlLmZpdmVzdXBlcmlvcj04MzA5LGUuZml2ZXRoYWk9MzY2OSxlLmZsPTY0MjU4LGUuZmxvcmluPTQwMixlLmZtb25vc3BhY2U9NjUzNTAsZS5mbXNxdWFyZT0xMzIwOSxlLmZvZmFudGhhaT0zNjE1LGUuZm9mYXRoYWk9MzYxMyxlLmZvbmdtYW50aGFpPTM2NjMsZS5mb3JhbGw9ODcwNCxlLmZvdXI9NTIsZS5mb3VyYXJhYmljPTE2MzYsZS5mb3VyYmVuZ2FsaT0yNTM4LGUuZm91cmNpcmNsZT05MzE1LGUuZm91cmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjUsZS5mb3VyZGV2YT0yNDEwLGUuZm91cmd1amFyYXRpPTI3OTQsZS5mb3VyZ3VybXVraGk9MjY2NixlLmZvdXJoYWNrYXJhYmljPTE2MzYsZS5mb3VyaGFuZ3pob3U9MTIzMjQsZS5mb3VyaWRlb2dyYXBoaWNwYXJlbj0xMjgzNSxlLmZvdXJpbmZlcmlvcj04MzI0LGUuZm91cm1vbm9zcGFjZT02NTMwMCxlLmZvdXJudW1lcmF0b3JiZW5nYWxpPTI1NTEsZS5mb3Vyb2xkc3R5bGU9NjMyODQsZS5mb3VycGFyZW49OTMzNSxlLmZvdXJwZXJpb2Q9OTM1NSxlLmZvdXJwZXJzaWFuPTE3ODAsZS5mb3Vycm9tYW49ODU2MyxlLmZvdXJzdXBlcmlvcj04MzA4LGUuZm91cnRlZW5jaXJjbGU9OTMyNSxlLmZvdXJ0ZWVucGFyZW49OTM0NSxlLmZvdXJ0ZWVucGVyaW9kPTkzNjUsZS5mb3VydGhhaT0zNjY4LGUuZm91cnRodG9uZWNoaW5lc2U9NzE1LGUuZnBhcmVuPTkzNzcsZS5mcmFjdGlvbj04MjYwLGUuZnJhbmM9ODM1NSxlLmc9MTAzLGUuZ2FiZW5nYWxpPTI0NTUsZS5nYWN1dGU9NTAxLGUuZ2FkZXZhPTIzMjcsZS5nYWZhcmFiaWM9MTcxMSxlLmdhZmZpbmFsYXJhYmljPTY0NDAzLGUuZ2FmaW5pdGlhbGFyYWJpYz02NDQwNCxlLmdhZm1lZGlhbGFyYWJpYz02NDQwNSxlLmdhZ3VqYXJhdGk9MjcxMSxlLmdhZ3VybXVraGk9MjU4MyxlLmdhaGlyYWdhbmE9MTIzNjQsZS5nYWthdGFrYW5hPTEyNDYwLGUuZ2FtbWE9OTQ3LGUuZ2FtbWFsYXRpbnNtYWxsPTYxMSxlLmdhbW1hc3VwZXJpb3I9NzM2LGUuZ2FuZ2lhY29wdGljPTEwMDMsZS5nYm9wb21vZm89MTI1NTcsZS5nYnJldmU9Mjg3LGUuZ2Nhcm9uPTQ4NyxlLmdjZWRpbGxhPTI5MSxlLmdjaXJjbGU9OTQzMCxlLmdjaXJjdW1mbGV4PTI4NSxlLmdjb21tYWFjY2VudD0yOTEsZS5nZG90PTI4OSxlLmdkb3RhY2NlbnQ9Mjg5LGUuZ2VjeXJpbGxpYz0xMDc1LGUuZ2VoaXJhZ2FuYT0xMjM3MCxlLmdla2F0YWthbmE9MTI0NjYsZS5nZW9tZXRyaWNhbGx5ZXF1YWw9ODc4NSxlLmdlcmVzaGFjY2VudGhlYnJldz0xNDM2LGUuZ2VyZXNoaGVicmV3PTE1MjMsZS5nZXJlc2htdXFkYW1oZWJyZXc9MTQzNyxlLmdlcm1hbmRibHM9MjIzLGUuZ2Vyc2hheWltYWNjZW50aGVicmV3PTE0MzgsZS5nZXJzaGF5aW1oZWJyZXc9MTUyNCxlLmdldGFtYXJrPTEyMzA3LGUuZ2hhYmVuZ2FsaT0yNDU2LGUuZ2hhZGFybWVuaWFuPTEzOTQsZS5naGFkZXZhPTIzMjgsZS5naGFndWphcmF0aT0yNzEyLGUuZ2hhZ3VybXVraGk9MjU4NCxlLmdoYWluYXJhYmljPTE1OTQsZS5naGFpbmZpbmFsYXJhYmljPTY1MjMwLGUuZ2hhaW5pbml0aWFsYXJhYmljPTY1MjMxLGUuZ2hhaW5tZWRpYWxhcmFiaWM9NjUyMzIsZS5naGVtaWRkbGVob29rY3lyaWxsaWM9MTE3MyxlLmdoZXN0cm9rZWN5cmlsbGljPTExNzEsZS5naGV1cHR1cm5jeXJpbGxpYz0xMTY5LGUuZ2hoYWRldmE9MjM5NCxlLmdoaGFndXJtdWtoaT0yNjUwLGUuZ2hvb2s9NjA4LGUuZ2h6c3F1YXJlPTEzMjAzLGUuZ2loaXJhZ2FuYT0xMjM2NixlLmdpa2F0YWthbmE9MTI0NjIsZS5naW1hcm1lbmlhbj0xMzc5LGUuZ2ltZWw9MTQ5MCxlLmdpbWVsZGFnZXNoPTY0MzA2LGUuZ2ltZWxkYWdlc2hoZWJyZXc9NjQzMDYsZS5naW1lbGhlYnJldz0xNDkwLGUuZ2plY3lyaWxsaWM9MTEwNyxlLmdsb3R0YWxpbnZlcnRlZHN0cm9rZT00NDYsZS5nbG90dGFsc3RvcD02NjAsZS5nbG90dGFsc3RvcGludmVydGVkPTY2MixlLmdsb3R0YWxzdG9wbW9kPTcwNCxlLmdsb3R0YWxzdG9wcmV2ZXJzZWQ9NjYxLGUuZ2xvdHRhbHN0b3ByZXZlcnNlZG1vZD03MDUsZS5nbG90dGFsc3RvcHJldmVyc2Vkc3VwZXJpb3I9NzQwLGUuZ2xvdHRhbHN0b3BzdHJva2U9NjczLGUuZ2xvdHRhbHN0b3BzdHJva2VyZXZlcnNlZD02NzQsZS5nbWFjcm9uPTc3MTMsZS5nbW9ub3NwYWNlPTY1MzUxLGUuZ29oaXJhZ2FuYT0xMjM3MixlLmdva2F0YWthbmE9MTI0NjgsZS5ncGFyZW49OTM3OCxlLmdwYXNxdWFyZT0xMzIyOCxlLmdyYWRpZW50PTg3MTEsZS5ncmF2ZT05NixlLmdyYXZlYmVsb3djbWI9NzkwLGUuZ3JhdmVjbWI9NzY4LGUuZ3JhdmVjb21iPTc2OCxlLmdyYXZlZGV2YT0yMzg3LGUuZ3JhdmVsb3dtb2Q9NzE4LGUuZ3JhdmVtb25vc3BhY2U9NjUzNDQsZS5ncmF2ZXRvbmVjbWI9ODMyLGUuZ3JlYXRlcj02MixlLmdyZWF0ZXJlcXVhbD04ODA1LGUuZ3JlYXRlcmVxdWFsb3JsZXNzPTg5MjMsZS5ncmVhdGVybW9ub3NwYWNlPTY1MzEwLGUuZ3JlYXRlcm9yZXF1aXZhbGVudD04ODE5LGUuZ3JlYXRlcm9ybGVzcz04ODIzLGUuZ3JlYXRlcm92ZXJlcXVhbD04ODA3LGUuZ3JlYXRlcnNtYWxsPTY1MTI1LGUuZ3NjcmlwdD02MDksZS5nc3Ryb2tlPTQ4NSxlLmd1aGlyYWdhbmE9MTIzNjgsZS5ndWlsbGVtb3RsZWZ0PTE3MSxlLmd1aWxsZW1vdHJpZ2h0PTE4NyxlLmd1aWxzaW5nbGxlZnQ9ODI0OSxlLmd1aWxzaW5nbHJpZ2h0PTgyNTAsZS5ndWthdGFrYW5hPTEyNDY0LGUuZ3VyYW11c3F1YXJlPTEzMDgwLGUuZ3lzcXVhcmU9MTMyNTcsZS5oPTEwNCxlLmhhYWJraGFzaWFuY3lyaWxsaWM9MTE5MyxlLmhhYWx0b25lYXJhYmljPTE3MjksZS5oYWJlbmdhbGk9MjQ4OSxlLmhhZGVzY2VuZGVyY3lyaWxsaWM9MTIwMyxlLmhhZGV2YT0yMzYxLGUuaGFndWphcmF0aT0yNzQ1LGUuaGFndXJtdWtoaT0yNjE3LGUuaGFoYXJhYmljPTE1ODEsZS5oYWhmaW5hbGFyYWJpYz02NTE4NixlLmhhaGluaXRpYWxhcmFiaWM9NjUxODcsZS5oYWhpcmFnYW5hPTEyMzk5LGUuaGFobWVkaWFsYXJhYmljPTY1MTg4LGUuaGFpdHVzcXVhcmU9MTMwOTgsZS5oYWthdGFrYW5hPTEyNDk1LGUuaGFrYXRha2FuYWhhbGZ3aWR0aD02NTQxOCxlLmhhbGFudGd1cm11a2hpPTI2MzcsZS5oYW16YWFyYWJpYz0xNTY5LGUuaGFtemFsb3dhcmFiaWM9MTU2OSxlLmhhbmd1bGZpbGxlcj0xMjY0NCxlLmhhcmRzaWduY3lyaWxsaWM9MTA5OCxlLmhhcnBvb25sZWZ0YmFyYnVwPTg2MzYsZS5oYXJwb29ucmlnaHRiYXJidXA9ODY0MCxlLmhhc3F1YXJlPTEzMjU4LGUuaGF0YWZwYXRhaD0xNDU4LGUuaGF0YWZwYXRhaDE2PTE0NTgsZS5oYXRhZnBhdGFoMjM9MTQ1OCxlLmhhdGFmcGF0YWgyZj0xNDU4LGUuaGF0YWZwYXRhaGhlYnJldz0xNDU4LGUuaGF0YWZwYXRhaG5hcnJvd2hlYnJldz0xNDU4LGUuaGF0YWZwYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ1OCxlLmhhdGFmcGF0YWh3aWRlaGVicmV3PTE0NTgsZS5oYXRhZnFhbWF0cz0xNDU5LGUuaGF0YWZxYW1hdHMxYj0xNDU5LGUuaGF0YWZxYW1hdHMyOD0xNDU5LGUuaGF0YWZxYW1hdHMzND0xNDU5LGUuaGF0YWZxYW1hdHNoZWJyZXc9MTQ1OSxlLmhhdGFmcWFtYXRzbmFycm93aGVicmV3PTE0NTksZS5oYXRhZnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ1OSxlLmhhdGFmcWFtYXRzd2lkZWhlYnJldz0xNDU5LGUuaGF0YWZzZWdvbD0xNDU3LGUuaGF0YWZzZWdvbDE3PTE0NTcsZS5oYXRhZnNlZ29sMjQ9MTQ1NyxlLmhhdGFmc2Vnb2wzMD0xNDU3LGUuaGF0YWZzZWdvbGhlYnJldz0xNDU3LGUuaGF0YWZzZWdvbG5hcnJvd2hlYnJldz0xNDU3LGUuaGF0YWZzZWdvbHF1YXJ0ZXJoZWJyZXc9MTQ1NyxlLmhhdGFmc2Vnb2x3aWRlaGVicmV3PTE0NTcsZS5oYmFyPTI5NSxlLmhib3BvbW9mbz0xMjU1OSxlLmhicmV2ZWJlbG93PTc3MjMsZS5oY2VkaWxsYT03NzIxLGUuaGNpcmNsZT05NDMxLGUuaGNpcmN1bWZsZXg9MjkzLGUuaGRpZXJlc2lzPTc3MTksZS5oZG90YWNjZW50PTc3MTUsZS5oZG90YmVsb3c9NzcxNyxlLmhlPTE0OTIsZS5oZWFydD05ODI5LGUuaGVhcnRzdWl0YmxhY2s9OTgyOSxlLmhlYXJ0c3VpdHdoaXRlPTk4MjUsZS5oZWRhZ2VzaD02NDMwOCxlLmhlZGFnZXNoaGVicmV3PTY0MzA4LGUuaGVoYWx0b25lYXJhYmljPTE3MjksZS5oZWhhcmFiaWM9MTYwNyxlLmhlaGVicmV3PTE0OTIsZS5oZWhmaW5hbGFsdG9uZWFyYWJpYz02NDQyMyxlLmhlaGZpbmFsYWx0dHdvYXJhYmljPTY1MjU4LGUuaGVoZmluYWxhcmFiaWM9NjUyNTgsZS5oZWhoYW16YWFib3ZlZmluYWxhcmFiaWM9NjQ0MjEsZS5oZWhoYW16YWFib3ZlaXNvbGF0ZWRhcmFiaWM9NjQ0MjAsZS5oZWhpbml0aWFsYWx0b25lYXJhYmljPTY0NDI0LGUuaGVoaW5pdGlhbGFyYWJpYz02NTI1OSxlLmhlaGlyYWdhbmE9MTI0MDgsZS5oZWhtZWRpYWxhbHRvbmVhcmFiaWM9NjQ0MjUsZS5oZWhtZWRpYWxhcmFiaWM9NjUyNjAsZS5oZWlzZWllcmFzcXVhcmU9MTMxNzksZS5oZWthdGFrYW5hPTEyNTA0LGUuaGVrYXRha2FuYWhhbGZ3aWR0aD02NTQyMSxlLmhla3V0YWFydXNxdWFyZT0xMzExMCxlLmhlbmdob29rPTYxNSxlLmhlcnV0dXNxdWFyZT0xMzExMyxlLmhldD0xNDk1LGUuaGV0aGVicmV3PTE0OTUsZS5oaG9vaz02MTQsZS5oaG9va3N1cGVyaW9yPTY4OSxlLmhpZXVoYWNpcmNsZWtvcmVhbj0xMjkyMyxlLmhpZXVoYXBhcmVua29yZWFuPTEyODI3LGUuaGlldWhjaXJjbGVrb3JlYW49MTI5MDksZS5oaWV1aGtvcmVhbj0xMjYyMixlLmhpZXVocGFyZW5rb3JlYW49MTI4MTMsZS5oaWhpcmFnYW5hPTEyNDAyLGUuaGlrYXRha2FuYT0xMjQ5OCxlLmhpa2F0YWthbmFoYWxmd2lkdGg9NjU0MTksZS5oaXJpcT0xNDYwLGUuaGlyaXExND0xNDYwLGUuaGlyaXEyMT0xNDYwLGUuaGlyaXEyZD0xNDYwLGUuaGlyaXFoZWJyZXc9MTQ2MCxlLmhpcmlxbmFycm93aGVicmV3PTE0NjAsZS5oaXJpcXF1YXJ0ZXJoZWJyZXc9MTQ2MCxlLmhpcmlxd2lkZWhlYnJldz0xNDYwLGUuaGxpbmViZWxvdz03ODMwLGUuaG1vbm9zcGFjZT02NTM1MixlLmhvYXJtZW5pYW49MTM5MixlLmhvaGlwdGhhaT0zNjI3LGUuaG9oaXJhZ2FuYT0xMjQxMSxlLmhva2F0YWthbmE9MTI1MDcsZS5ob2thdGFrYW5haGFsZndpZHRoPTY1NDIyLGUuaG9sYW09MTQ2NSxlLmhvbGFtMTk9MTQ2NSxlLmhvbGFtMjY9MTQ2NSxlLmhvbGFtMzI9MTQ2NSxlLmhvbGFtaGVicmV3PTE0NjUsZS5ob2xhbW5hcnJvd2hlYnJldz0xNDY1LGUuaG9sYW1xdWFydGVyaGVicmV3PTE0NjUsZS5ob2xhbXdpZGVoZWJyZXc9MTQ2NSxlLmhvbm9raHVrdGhhaT0zNjMwLGUuaG9va2Fib3ZlY29tYj03NzcsZS5ob29rY21iPTc3NyxlLmhvb2twYWxhdGFsaXplZGJlbG93Y21iPTgwMSxlLmhvb2tyZXRyb2ZsZXhiZWxvd2NtYj04MDIsZS5ob29uc3F1YXJlPTEzMTIyLGUuaG9yaWNvcHRpYz0xMDAxLGUuaG9yaXpvbnRhbGJhcj04MjEzLGUuaG9ybmNtYj03OTUsZS5ob3RzcHJpbmdzPTk4MzIsZS5ob3VzZT04OTYyLGUuaHBhcmVuPTkzNzksZS5oc3VwZXJpb3I9Njg4LGUuaHR1cm5lZD02MTMsZS5odWhpcmFnYW5hPTEyNDA1LGUuaHVpaXRvc3F1YXJlPTEzMTA3LGUuaHVrYXRha2FuYT0xMjUwMSxlLmh1a2F0YWthbmFoYWxmd2lkdGg9NjU0MjAsZS5odW5nYXJ1bWxhdXQ9NzMzLGUuaHVuZ2FydW1sYXV0Y21iPTc3OSxlLmh2PTQwNSxlLmh5cGhlbj00NSxlLmh5cGhlbmluZmVyaW9yPTYzMjA1LGUuaHlwaGVubW9ub3NwYWNlPTY1MjkzLGUuaHlwaGVuc21hbGw9NjUxMjMsZS5oeXBoZW5zdXBlcmlvcj02MzIwNixlLmh5cGhlbnR3bz04MjA4LGUuaT0xMDUsZS5pYWN1dGU9MjM3LGUuaWFjeXJpbGxpYz0xMTAzLGUuaWJlbmdhbGk9MjQzOSxlLmlib3BvbW9mbz0xMjU4MyxlLmlicmV2ZT0zMDEsZS5pY2Fyb249NDY0LGUuaWNpcmNsZT05NDMyLGUuaWNpcmN1bWZsZXg9MjM4LGUuaWN5cmlsbGljPTExMTAsZS5pZGJsZ3JhdmU9NTIxLGUuaWRlb2dyYXBoZWFydGhjaXJjbGU9MTI5NDMsZS5pZGVvZ3JhcGhmaXJlY2lyY2xlPTEyOTM5LGUuaWRlb2dyYXBoaWNhbGxpYW5jZXBhcmVuPTEyODYzLGUuaWRlb2dyYXBoaWNjYWxscGFyZW49MTI4NTgsZS5pZGVvZ3JhcGhpY2NlbnRyZWNpcmNsZT0xMjk2NSxlLmlkZW9ncmFwaGljY2xvc2U9MTIyOTQsZS5pZGVvZ3JhcGhpY2NvbW1hPTEyMjg5LGUuaWRlb2dyYXBoaWNjb21tYWxlZnQ9NjUzODAsZS5pZGVvZ3JhcGhpY2NvbmdyYXR1bGF0aW9ucGFyZW49MTI4NTUsZS5pZGVvZ3JhcGhpY2NvcnJlY3RjaXJjbGU9MTI5NjMsZS5pZGVvZ3JhcGhpY2VhcnRocGFyZW49MTI4NDcsZS5pZGVvZ3JhcGhpY2VudGVycHJpc2VwYXJlbj0xMjg2MSxlLmlkZW9ncmFwaGljZXhjZWxsZW50Y2lyY2xlPTEyOTU3LGUuaWRlb2dyYXBoaWNmZXN0aXZhbHBhcmVuPTEyODY0LGUuaWRlb2dyYXBoaWNmaW5hbmNpYWxjaXJjbGU9MTI5NTAsZS5pZGVvZ3JhcGhpY2ZpbmFuY2lhbHBhcmVuPTEyODU0LGUuaWRlb2dyYXBoaWNmaXJlcGFyZW49MTI4NDMsZS5pZGVvZ3JhcGhpY2hhdmVwYXJlbj0xMjg1MCxlLmlkZW9ncmFwaGljaGlnaGNpcmNsZT0xMjk2NCxlLmlkZW9ncmFwaGljaXRlcmF0aW9ubWFyaz0xMjI5MyxlLmlkZW9ncmFwaGljbGFib3JjaXJjbGU9MTI5NTIsZS5pZGVvZ3JhcGhpY2xhYm9ycGFyZW49MTI4NTYsZS5pZGVvZ3JhcGhpY2xlZnRjaXJjbGU9MTI5NjcsZS5pZGVvZ3JhcGhpY2xvd2NpcmNsZT0xMjk2NixlLmlkZW9ncmFwaGljbWVkaWNpbmVjaXJjbGU9MTI5NjksZS5pZGVvZ3JhcGhpY21ldGFscGFyZW49MTI4NDYsZS5pZGVvZ3JhcGhpY21vb25wYXJlbj0xMjg0MixlLmlkZW9ncmFwaGljbmFtZXBhcmVuPTEyODUyLGUuaWRlb2dyYXBoaWNwZXJpb2Q9MTIyOTAsZS5pZGVvZ3JhcGhpY3ByaW50Y2lyY2xlPTEyOTU4LGUuaWRlb2dyYXBoaWNyZWFjaHBhcmVuPTEyODY3LGUuaWRlb2dyYXBoaWNyZXByZXNlbnRwYXJlbj0xMjg1NyxlLmlkZW9ncmFwaGljcmVzb3VyY2VwYXJlbj0xMjg2MixlLmlkZW9ncmFwaGljcmlnaHRjaXJjbGU9MTI5NjgsZS5pZGVvZ3JhcGhpY3NlY3JldGNpcmNsZT0xMjk1MyxlLmlkZW9ncmFwaGljc2VsZnBhcmVuPTEyODY2LGUuaWRlb2dyYXBoaWNzb2NpZXR5cGFyZW49MTI4NTEsZS5pZGVvZ3JhcGhpY3NwYWNlPTEyMjg4LGUuaWRlb2dyYXBoaWNzcGVjaWFscGFyZW49MTI4NTMsZS5pZGVvZ3JhcGhpY3N0b2NrcGFyZW49MTI4NDksZS5pZGVvZ3JhcGhpY3N0dWR5cGFyZW49MTI4NTksZS5pZGVvZ3JhcGhpY3N1bnBhcmVuPTEyODQ4LGUuaWRlb2dyYXBoaWNzdXBlcnZpc2VwYXJlbj0xMjg2MCxlLmlkZW9ncmFwaGljd2F0ZXJwYXJlbj0xMjg0NCxlLmlkZW9ncmFwaGljd29vZHBhcmVuPTEyODQ1LGUuaWRlb2dyYXBoaWN6ZXJvPTEyMjk1LGUuaWRlb2dyYXBobWV0YWxjaXJjbGU9MTI5NDIsZS5pZGVvZ3JhcGhtb29uY2lyY2xlPTEyOTM4LGUuaWRlb2dyYXBobmFtZWNpcmNsZT0xMjk0OCxlLmlkZW9ncmFwaHN1bmNpcmNsZT0xMjk0NCxlLmlkZW9ncmFwaHdhdGVyY2lyY2xlPTEyOTQwLGUuaWRlb2dyYXBod29vZGNpcmNsZT0xMjk0MSxlLmlkZXZhPTIzMTEsZS5pZGllcmVzaXM9MjM5LGUuaWRpZXJlc2lzYWN1dGU9NzcyNyxlLmlkaWVyZXNpc2N5cmlsbGljPTEyNTMsZS5pZG90YmVsb3c9Nzg4MyxlLmllYnJldmVjeXJpbGxpYz0xMjM5LGUuaWVjeXJpbGxpYz0xMDc3LGUuaWV1bmdhY2lyY2xla29yZWFuPTEyOTE3LGUuaWV1bmdhcGFyZW5rb3JlYW49MTI4MjEsZS5pZXVuZ2NpcmNsZWtvcmVhbj0xMjkwMyxlLmlldW5na29yZWFuPTEyNjE1LGUuaWV1bmdwYXJlbmtvcmVhbj0xMjgwNyxlLmlncmF2ZT0yMzYsZS5pZ3VqYXJhdGk9MjY5NSxlLmlndXJtdWtoaT0yNTY3LGUuaWhpcmFnYW5hPTEyMzU2LGUuaWhvb2thYm92ZT03ODgxLGUuaWliZW5nYWxpPTI0NDAsZS5paWN5cmlsbGljPTEwODAsZS5paWRldmE9MjMxMixlLmlpZ3VqYXJhdGk9MjY5NixlLmlpZ3VybXVraGk9MjU2OCxlLmlpbWF0cmFndXJtdWtoaT0yNjI0LGUuaWludmVydGVkYnJldmU9NTIzLGUuaWlzaG9ydGN5cmlsbGljPTEwODEsZS5paXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NixlLmlpdm93ZWxzaWduZGV2YT0yMzY4LGUuaWl2b3dlbHNpZ25ndWphcmF0aT0yNzUyLGUuaWo9MzA3LGUuaWthdGFrYW5hPTEyNDUyLGUuaWthdGFrYW5haGFsZndpZHRoPTY1Mzk0LGUuaWtvcmVhbj0xMjY0MyxlLmlsZGU9NzMyLGUuaWx1eWhlYnJldz0xNDUyLGUuaW1hY3Jvbj0yOTksZS5pbWFjcm9uY3lyaWxsaWM9MTI1MSxlLmltYWdlb3JhcHByb3hpbWF0ZWx5ZXF1YWw9ODc4NyxlLmltYXRyYWd1cm11a2hpPTI2MjMsZS5pbW9ub3NwYWNlPTY1MzUzLGUuaW5jcmVtZW50PTg3MTAsZS5pbmZpbml0eT04NzM0LGUuaW5pYXJtZW5pYW49MTM4NyxlLmludGVncmFsPTg3NDcsZS5pbnRlZ3JhbGJvdHRvbT04OTkzLGUuaW50ZWdyYWxidD04OTkzLGUuaW50ZWdyYWxleD02MzczMyxlLmludGVncmFsdG9wPTg5OTIsZS5pbnRlZ3JhbHRwPTg5OTIsZS5pbnRlcnNlY3Rpb249ODc0NSxlLmludGlzcXVhcmU9MTMwNjEsZS5pbnZidWxsZXQ9OTY4OCxlLmludmNpcmNsZT05Njg5LGUuaW52c21pbGVmYWNlPTk3ODcsZS5pb2N5cmlsbGljPTExMDUsZS5pb2dvbmVrPTMwMyxlLmlvdGE9OTUzLGUuaW90YWRpZXJlc2lzPTk3MCxlLmlvdGFkaWVyZXNpc3Rvbm9zPTkxMixlLmlvdGFsYXRpbj02MTcsZS5pb3RhdG9ub3M9OTQzLGUuaXBhcmVuPTkzODAsZS5pcmlndXJtdWtoaT0yNjc0LGUuaXNtYWxsaGlyYWdhbmE9MTIzNTUsZS5pc21hbGxrYXRha2FuYT0xMjQ1MSxlLmlzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg0LGUuaXNzaGFyYmVuZ2FsaT0yNTU0LGUuaXN0cm9rZT02MTYsZS5pc3VwZXJpb3I9NjMyMTMsZS5pdGVyYXRpb25oaXJhZ2FuYT0xMjQ0NSxlLml0ZXJhdGlvbmthdGFrYW5hPTEyNTQxLGUuaXRpbGRlPTI5NyxlLml0aWxkZWJlbG93PTc3MjUsZS5pdWJvcG9tb2ZvPTEyNTg1LGUuaXVjeXJpbGxpYz0xMTAyLGUuaXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NSxlLml2b3dlbHNpZ25kZXZhPTIzNjcsZS5pdm93ZWxzaWduZ3VqYXJhdGk9Mjc1MSxlLml6aGl0c2FjeXJpbGxpYz0xMTQxLGUuaXpoaXRzYWRibGdyYXZlY3lyaWxsaWM9MTE0MyxlLmo9MTA2LGUuamFhcm1lbmlhbj0xMzkzLGUuamFiZW5nYWxpPTI0NjAsZS5qYWRldmE9MjMzMixlLmphZ3VqYXJhdGk9MjcxNixlLmphZ3VybXVraGk9MjU4OCxlLmpib3BvbW9mbz0xMjU2MCxlLmpjYXJvbj00OTYsZS5qY2lyY2xlPTk0MzMsZS5qY2lyY3VtZmxleD0zMDksZS5qY3Jvc3NlZHRhaWw9NjY5LGUuamRvdGxlc3NzdHJva2U9NjA3LGUuamVjeXJpbGxpYz0xMTEyLGUuamVlbWFyYWJpYz0xNTgwLGUuamVlbWZpbmFsYXJhYmljPTY1MTgyLGUuamVlbWluaXRpYWxhcmFiaWM9NjUxODMsZS5qZWVtbWVkaWFsYXJhYmljPTY1MTg0LGUuamVoYXJhYmljPTE2ODgsZS5qZWhmaW5hbGFyYWJpYz02NDM5NSxlLmpoYWJlbmdhbGk9MjQ2MSxlLmpoYWRldmE9MjMzMyxlLmpoYWd1amFyYXRpPTI3MTcsZS5qaGFndXJtdWtoaT0yNTg5LGUuamhlaGFybWVuaWFuPTE0MDMsZS5qaXM9MTIyOTIsZS5qbW9ub3NwYWNlPTY1MzU0LGUuanBhcmVuPTkzODEsZS5qc3VwZXJpb3I9NjkwLGUuaz0xMDcsZS5rYWJhc2hraXJjeXJpbGxpYz0xMTg1LGUua2FiZW5nYWxpPTI0NTMsZS5rYWN1dGU9NzcyOSxlLmthY3lyaWxsaWM9MTA4MixlLmthZGVzY2VuZGVyY3lyaWxsaWM9MTE3OSxlLmthZGV2YT0yMzI1LGUua2FmPTE0OTksZS5rYWZhcmFiaWM9MTYwMyxlLmthZmRhZ2VzaD02NDMxNSxlLmthZmRhZ2VzaGhlYnJldz02NDMxNSxlLmthZmZpbmFsYXJhYmljPTY1MjQyLGUua2FmaGVicmV3PTE0OTksZS5rYWZpbml0aWFsYXJhYmljPTY1MjQzLGUua2FmbWVkaWFsYXJhYmljPTY1MjQ0LGUua2FmcmFmZWhlYnJldz02NDMzMyxlLmthZ3VqYXJhdGk9MjcwOSxlLmthZ3VybXVraGk9MjU4MSxlLmthaGlyYWdhbmE9MTIzNjMsZS5rYWhvb2tjeXJpbGxpYz0xMjIwLGUua2FrYXRha2FuYT0xMjQ1OSxlLmtha2F0YWthbmFoYWxmd2lkdGg9NjUzOTgsZS5rYXBwYT05NTQsZS5rYXBwYXN5bWJvbGdyZWVrPTEwMDgsZS5rYXB5ZW91bm1pZXVta29yZWFuPTEyNjU3LGUua2FweWVvdW5waGlldXBoa29yZWFuPTEyNjc2LGUua2FweWVvdW5waWV1cGtvcmVhbj0xMjY2NCxlLmthcHllb3Vuc3NhbmdwaWV1cGtvcmVhbj0xMjY2NSxlLmthcm9yaWlzcXVhcmU9MTMwNjksZS5rYXNoaWRhYXV0b2FyYWJpYz0xNjAwLGUua2FzaGlkYWF1dG9ub3NpZGViZWFyaW5nYXJhYmljPTE2MDAsZS5rYXNtYWxsa2F0YWthbmE9MTI1MzMsZS5rYXNxdWFyZT0xMzE4OCxlLmthc3JhYXJhYmljPTE2MTYsZS5rYXNyYXRhbmFyYWJpYz0xNjEzLGUua2FzdHJva2VjeXJpbGxpYz0xMTgzLGUua2F0YWhpcmFwcm9sb25nbWFya2hhbGZ3aWR0aD02NTM5MixlLmthdmVydGljYWxzdHJva2VjeXJpbGxpYz0xMTgxLGUua2JvcG9tb2ZvPTEyNTU4LGUua2NhbHNxdWFyZT0xMzE5MyxlLmtjYXJvbj00ODksZS5rY2VkaWxsYT0zMTEsZS5rY2lyY2xlPTk0MzQsZS5rY29tbWFhY2NlbnQ9MzExLGUua2RvdGJlbG93PTc3MzEsZS5rZWhhcm1lbmlhbj0xNDEyLGUua2VoaXJhZ2FuYT0xMjM2OSxlLmtla2F0YWthbmE9MTI0NjUsZS5rZWthdGFrYW5haGFsZndpZHRoPTY1NDAxLGUua2VuYXJtZW5pYW49MTM5MSxlLmtlc21hbGxrYXRha2FuYT0xMjUzNCxlLmtncmVlbmxhbmRpYz0zMTIsZS5raGFiZW5nYWxpPTI0NTQsZS5raGFjeXJpbGxpYz0xMDkzLGUua2hhZGV2YT0yMzI2LGUua2hhZ3VqYXJhdGk9MjcxMCxlLmtoYWd1cm11a2hpPTI1ODIsZS5raGFoYXJhYmljPTE1ODIsZS5raGFoZmluYWxhcmFiaWM9NjUxOTAsZS5raGFoaW5pdGlhbGFyYWJpYz02NTE5MSxlLmtoYWhtZWRpYWxhcmFiaWM9NjUxOTIsZS5raGVpY29wdGljPTk5OSxlLmtoaGFkZXZhPTIzOTMsZS5raGhhZ3VybXVraGk9MjY0OSxlLmtoaWV1a2hhY2lyY2xla29yZWFuPTEyOTIwLGUua2hpZXVraGFwYXJlbmtvcmVhbj0xMjgyNCxlLmtoaWV1a2hjaXJjbGVrb3JlYW49MTI5MDYsZS5raGlldWtoa29yZWFuPTEyNjE5LGUua2hpZXVraHBhcmVua29yZWFuPTEyODEwLGUua2hva2hhaXRoYWk9MzU4NixlLmtob2tob250aGFpPTM1ODksZS5raG9raHVhdHRoYWk9MzU4NyxlLmtob2tod2FpdGhhaT0zNTg4LGUua2hvbXV0dGhhaT0zNjc1LGUua2hvb2s9NDA5LGUua2hvcmFraGFuZ3RoYWk9MzU5MCxlLmtoenNxdWFyZT0xMzIwMSxlLmtpaGlyYWdhbmE9MTIzNjUsZS5raWthdGFrYW5hPTEyNDYxLGUua2lrYXRha2FuYWhhbGZ3aWR0aD02NTM5OSxlLmtpcm9ndXJhbXVzcXVhcmU9MTMwNzcsZS5raXJvbWVldG9ydXNxdWFyZT0xMzA3OCxlLmtpcm9zcXVhcmU9MTMwNzYsZS5raXllb2thY2lyY2xla29yZWFuPTEyOTEwLGUua2l5ZW9rYXBhcmVua29yZWFuPTEyODE0LGUua2l5ZW9rY2lyY2xla29yZWFuPTEyODk2LGUua2l5ZW9ra29yZWFuPTEyNTkzLGUua2l5ZW9rcGFyZW5rb3JlYW49MTI4MDAsZS5raXllb2tzaW9za29yZWFuPTEyNTk1LGUua2plY3lyaWxsaWM9MTExNixlLmtsaW5lYmVsb3c9NzczMyxlLmtsc3F1YXJlPTEzMjA4LGUua21jdWJlZHNxdWFyZT0xMzIyMixlLmttb25vc3BhY2U9NjUzNTU7ZS5rbXNxdWFyZWRzcXVhcmU9MTMyMTgsZS5rb2hpcmFnYW5hPTEyMzcxLGUua29obXNxdWFyZT0xMzI0OCxlLmtva2FpdGhhaT0zNTg1LGUua29rYXRha2FuYT0xMjQ2NyxlLmtva2F0YWthbmFoYWxmd2lkdGg9NjU0MDIsZS5rb29wb3NxdWFyZT0xMzA4NixlLmtvcHBhY3lyaWxsaWM9MTE1MyxlLmtvcmVhbnN0YW5kYXJkc3ltYm9sPTEyOTI3LGUua29yb25pc2NtYj04MzUsZS5rcGFyZW49OTM4MixlLmtwYXNxdWFyZT0xMzIyNixlLmtzaWN5cmlsbGljPTExMzUsZS5rdHNxdWFyZT0xMzI2MyxlLmt0dXJuZWQ9NjcwLGUua3VoaXJhZ2FuYT0xMjM2NyxlLmt1a2F0YWthbmE9MTI0NjMsZS5rdWthdGFrYW5haGFsZndpZHRoPTY1NDAwLGUua3ZzcXVhcmU9MTMyNDAsZS5rd3NxdWFyZT0xMzI0NixlLmw9MTA4LGUubGFiZW5nYWxpPTI0ODIsZS5sYWN1dGU9MzE0LGUubGFkZXZhPTIzNTQsZS5sYWd1amFyYXRpPTI3MzgsZS5sYWd1cm11a2hpPTI2MTAsZS5sYWtraGFuZ3lhb3RoYWk9MzY1MyxlLmxhbWFsZWZmaW5hbGFyYWJpYz02NTI3NixlLmxhbWFsZWZoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUyNzIsZS5sYW1hbGVmaGFtemFhYm92ZWlzb2xhdGVkYXJhYmljPTY1MjcxLGUubGFtYWxlZmhhbXphYmVsb3dmaW5hbGFyYWJpYz02NTI3NCxlLmxhbWFsZWZoYW16YWJlbG93aXNvbGF0ZWRhcmFiaWM9NjUyNzMsZS5sYW1hbGVmaXNvbGF0ZWRhcmFiaWM9NjUyNzUsZS5sYW1hbGVmbWFkZGFhYm92ZWZpbmFsYXJhYmljPTY1MjcwLGUubGFtYWxlZm1hZGRhYWJvdmVpc29sYXRlZGFyYWJpYz02NTI2OSxlLmxhbWFyYWJpYz0xNjA0LGUubGFtYmRhPTk1NSxlLmxhbWJkYXN0cm9rZT00MTEsZS5sYW1lZD0xNTAwLGUubGFtZWRkYWdlc2g9NjQzMTYsZS5sYW1lZGRhZ2VzaGhlYnJldz02NDMxNixlLmxhbWVkaGVicmV3PTE1MDAsZS5sYW1maW5hbGFyYWJpYz02NTI0NixlLmxhbWhhaGluaXRpYWxhcmFiaWM9NjQ3MTQsZS5sYW1pbml0aWFsYXJhYmljPTY1MjQ3LGUubGFtamVlbWluaXRpYWxhcmFiaWM9NjQ3MTMsZS5sYW1raGFoaW5pdGlhbGFyYWJpYz02NDcxNSxlLmxhbWxhbWhlaGlzb2xhdGVkYXJhYmljPTY1MDEwLGUubGFtbWVkaWFsYXJhYmljPTY1MjQ4LGUubGFtbWVlbWhhaGluaXRpYWxhcmFiaWM9NjQ5MDQsZS5sYW1tZWVtaW5pdGlhbGFyYWJpYz02NDcxNixlLmxhcmdlY2lyY2xlPTk3MTEsZS5sYmFyPTQxMCxlLmxiZWx0PTYyMCxlLmxib3BvbW9mbz0xMjU1NixlLmxjYXJvbj0zMTgsZS5sY2VkaWxsYT0zMTYsZS5sY2lyY2xlPTk0MzUsZS5sY2lyY3VtZmxleGJlbG93PTc3NDEsZS5sY29tbWFhY2NlbnQ9MzE2LGUubGRvdD0zMjAsZS5sZG90YWNjZW50PTMyMCxlLmxkb3RiZWxvdz03NzM1LGUubGRvdGJlbG93bWFjcm9uPTc3MzcsZS5sZWZ0YW5nbGVhYm92ZWNtYj03OTQsZS5sZWZ0dGFja2JlbG93Y21iPTc5MixlLmxlc3M9NjAsZS5sZXNzZXF1YWw9ODgwNCxlLmxlc3NlcXVhbG9yZ3JlYXRlcj04OTIyLGUubGVzc21vbm9zcGFjZT02NTMwOCxlLmxlc3NvcmVxdWl2YWxlbnQ9ODgxOCxlLmxlc3NvcmdyZWF0ZXI9ODgyMixlLmxlc3NvdmVyZXF1YWw9ODgwNixlLmxlc3NzbWFsbD02NTEyNCxlLmxlemg9NjIyLGUubGZibG9jaz05NjEyLGUubGhvb2tyZXRyb2ZsZXg9NjIxLGUubGlyYT04MzU2LGUubGl3bmFybWVuaWFuPTEzODgsZS5saj00NTcsZS5samVjeXJpbGxpYz0xMTEzLGUubGw9NjMxNjgsZS5sbGFkZXZhPTIzNTUsZS5sbGFndWphcmF0aT0yNzM5LGUubGxpbmViZWxvdz03NzM5LGUubGxsYWRldmE9MjM1NixlLmxsdm9jYWxpY2JlbmdhbGk9MjUyOSxlLmxsdm9jYWxpY2RldmE9MjQwMSxlLmxsdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMSxlLmxsdm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjQwMyxlLmxtaWRkbGV0aWxkZT02MTksZS5sbW9ub3NwYWNlPTY1MzU2LGUubG1zcXVhcmU9MTMyNjQsZS5sb2NodWxhdGhhaT0zNjI4LGUubG9naWNhbGFuZD04NzQzLGUubG9naWNhbG5vdD0xNzIsZS5sb2dpY2Fsbm90cmV2ZXJzZWQ9ODk3NixlLmxvZ2ljYWxvcj04NzQ0LGUubG9saW5ndGhhaT0zNjIxLGUubG9uZ3M9MzgzLGUubG93bGluZWNlbnRlcmxpbmU9NjUxMDIsZS5sb3dsaW5lY21iPTgxOCxlLmxvd2xpbmVkYXNoZWQ9NjUxMDEsZS5sb3plbmdlPTk2NzQsZS5scGFyZW49OTM4MyxlLmxzbGFzaD0zMjIsZS5sc3F1YXJlPTg0NjcsZS5sc3VwZXJpb3I9NjMyMTQsZS5sdHNoYWRlPTk2MTcsZS5sdXRoYWk9MzYyMixlLmx2b2NhbGljYmVuZ2FsaT0yNDQ0LGUubHZvY2FsaWNkZXZhPTIzMTYsZS5sdm9jYWxpY3Zvd2Vsc2lnbmJlbmdhbGk9MjUzMCxlLmx2b2NhbGljdm93ZWxzaWduZGV2YT0yNDAyLGUubHhzcXVhcmU9MTMyNjcsZS5tPTEwOSxlLm1hYmVuZ2FsaT0yNDc4LGUubWFjcm9uPTE3NSxlLm1hY3JvbmJlbG93Y21iPTgxNyxlLm1hY3JvbmNtYj03NzIsZS5tYWNyb25sb3dtb2Q9NzE3LGUubWFjcm9ubW9ub3NwYWNlPTY1NTA3LGUubWFjdXRlPTc3NDMsZS5tYWRldmE9MjM1MCxlLm1hZ3VqYXJhdGk9MjczNCxlLm1hZ3VybXVraGk9MjYwNixlLm1haGFwYWtoaGVicmV3PTE0NDQsZS5tYWhhcGFraGxlZnRoZWJyZXc9MTQ0NCxlLm1haGlyYWdhbmE9MTI0MTQsZS5tYWljaGF0dGF3YWxvd2xlZnR0aGFpPTYzNjM3LGUubWFpY2hhdHRhd2Fsb3dyaWdodHRoYWk9NjM2MzYsZS5tYWljaGF0dGF3YXRoYWk9MzY1OSxlLm1haWNoYXR0YXdhdXBwZXJsZWZ0dGhhaT02MzYzNSxlLm1haWVrbG93bGVmdHRoYWk9NjM2MjgsZS5tYWlla2xvd3JpZ2h0dGhhaT02MzYyNyxlLm1haWVrdGhhaT0zNjU2LGUubWFpZWt1cHBlcmxlZnR0aGFpPTYzNjI2LGUubWFpaGFuYWthdGxlZnR0aGFpPTYzNjIwLGUubWFpaGFuYWthdHRoYWk9MzYzMyxlLm1haXRhaWtodWxlZnR0aGFpPTYzNjI1LGUubWFpdGFpa2h1dGhhaT0zNjU1LGUubWFpdGhvbG93bGVmdHRoYWk9NjM2MzEsZS5tYWl0aG9sb3dyaWdodHRoYWk9NjM2MzAsZS5tYWl0aG90aGFpPTM2NTcsZS5tYWl0aG91cHBlcmxlZnR0aGFpPTYzNjI5LGUubWFpdHJpbG93bGVmdHRoYWk9NjM2MzQsZS5tYWl0cmlsb3dyaWdodHRoYWk9NjM2MzMsZS5tYWl0cml0aGFpPTM2NTgsZS5tYWl0cml1cHBlcmxlZnR0aGFpPTYzNjMyLGUubWFpeWFtb2t0aGFpPTM2NTQsZS5tYWthdGFrYW5hPTEyNTEwLGUubWFrYXRha2FuYWhhbGZ3aWR0aD02NTQyMyxlLm1hbGU9OTc5NCxlLm1hbnN5b25zcXVhcmU9MTMxMjcsZS5tYXFhZmhlYnJldz0xNDcwLGUubWFycz05Nzk0LGUubWFzb3JhY2lyY2xlaGVicmV3PTE0NTUsZS5tYXNxdWFyZT0xMzE4NyxlLm1ib3BvbW9mbz0xMjU1MSxlLm1ic3F1YXJlPTEzMjY4LGUubWNpcmNsZT05NDM2LGUubWN1YmVkc3F1YXJlPTEzMjIxLGUubWRvdGFjY2VudD03NzQ1LGUubWRvdGJlbG93PTc3NDcsZS5tZWVtYXJhYmljPTE2MDUsZS5tZWVtZmluYWxhcmFiaWM9NjUyNTAsZS5tZWVtaW5pdGlhbGFyYWJpYz02NTI1MSxlLm1lZW1tZWRpYWxhcmFiaWM9NjUyNTIsZS5tZWVtbWVlbWluaXRpYWxhcmFiaWM9NjQ3MjEsZS5tZWVtbWVlbWlzb2xhdGVkYXJhYmljPTY0NTg0LGUubWVldG9ydXNxdWFyZT0xMzEzMyxlLm1laGlyYWdhbmE9MTI0MTcsZS5tZWl6aWVyYXNxdWFyZT0xMzE4MixlLm1la2F0YWthbmE9MTI1MTMsZS5tZWthdGFrYW5haGFsZndpZHRoPTY1NDI2LGUubWVtPTE1MDIsZS5tZW1kYWdlc2g9NjQzMTgsZS5tZW1kYWdlc2hoZWJyZXc9NjQzMTgsZS5tZW1oZWJyZXc9MTUwMixlLm1lbmFybWVuaWFuPTEzOTYsZS5tZXJraGFoZWJyZXc9MTQ0NSxlLm1lcmtoYWtlZnVsYWhlYnJldz0xNDQ2LGUubWVya2hha2VmdWxhbGVmdGhlYnJldz0xNDQ2LGUubWVya2hhbGVmdGhlYnJldz0xNDQ1LGUubWhvb2s9NjI1LGUubWh6c3F1YXJlPTEzMjAyLGUubWlkZGxlZG90a2F0YWthbmFoYWxmd2lkdGg9NjUzODEsZS5taWRkb3Q9MTgzLGUubWlldW1hY2lyY2xla29yZWFuPTEyOTE0LGUubWlldW1hcGFyZW5rb3JlYW49MTI4MTgsZS5taWV1bWNpcmNsZWtvcmVhbj0xMjkwMCxlLm1pZXVta29yZWFuPTEyNjA5LGUubWlldW1wYW5zaW9za29yZWFuPTEyNjU2LGUubWlldW1wYXJlbmtvcmVhbj0xMjgwNCxlLm1pZXVtcGlldXBrb3JlYW49MTI2NTQsZS5taWV1bXNpb3Nrb3JlYW49MTI2NTUsZS5taWhpcmFnYW5hPTEyNDE1LGUubWlrYXRha2FuYT0xMjUxMSxlLm1pa2F0YWthbmFoYWxmd2lkdGg9NjU0MjQsZS5taW51cz04NzIyLGUubWludXNiZWxvd2NtYj04MDAsZS5taW51c2NpcmNsZT04ODU0LGUubWludXNtb2Q9NzI3LGUubWludXNwbHVzPTg3MjMsZS5taW51dGU9ODI0MixlLm1pcmliYWFydXNxdWFyZT0xMzEzMCxlLm1pcmlzcXVhcmU9MTMxMjksZS5tbG9uZ2xlZ3R1cm5lZD02MjQsZS5tbHNxdWFyZT0xMzIwNixlLm1tY3ViZWRzcXVhcmU9MTMyMTksZS5tbW9ub3NwYWNlPTY1MzU3LGUubW1zcXVhcmVkc3F1YXJlPTEzMjE1LGUubW9oaXJhZ2FuYT0xMjQxOCxlLm1vaG1zcXVhcmU9MTMyNDksZS5tb2thdGFrYW5hPTEyNTE0LGUubW9rYXRha2FuYWhhbGZ3aWR0aD02NTQyNyxlLm1vbHNxdWFyZT0xMzI3MCxlLm1vbWF0aGFpPTM2MTcsZS5tb3ZlcnNzcXVhcmU9MTMyMjMsZS5tb3ZlcnNzcXVhcmVkc3F1YXJlPTEzMjI0LGUubXBhcmVuPTkzODQsZS5tcGFzcXVhcmU9MTMyMjcsZS5tc3NxdWFyZT0xMzIzNSxlLm1zdXBlcmlvcj02MzIxNSxlLm10dXJuZWQ9NjIzLGUubXU9MTgxLGUubXUxPTE4MSxlLm11YXNxdWFyZT0xMzE4NixlLm11Y2hncmVhdGVyPTg4MTEsZS5tdWNobGVzcz04ODEwLGUubXVmc3F1YXJlPTEzMTk2LGUubXVncmVlaz05NTYsZS5tdWdzcXVhcmU9MTMxOTcsZS5tdWhpcmFnYW5hPTEyNDE2LGUubXVrYXRha2FuYT0xMjUxMixlLm11a2F0YWthbmFoYWxmd2lkdGg9NjU0MjUsZS5tdWxzcXVhcmU9MTMyMDUsZS5tdWx0aXBseT0yMTUsZS5tdW1zcXVhcmU9MTMyMTEsZS5tdW5haGhlYnJldz0xNDQzLGUubXVuYWhsZWZ0aGVicmV3PTE0NDMsZS5tdXNpY2Fsbm90ZT05ODM0LGUubXVzaWNhbG5vdGVkYmw9OTgzNSxlLm11c2ljZmxhdHNpZ249OTgzNyxlLm11c2ljc2hhcnBzaWduPTk4MzksZS5tdXNzcXVhcmU9MTMyMzQsZS5tdXZzcXVhcmU9MTMyMzgsZS5tdXdzcXVhcmU9MTMyNDQsZS5tdm1lZ2FzcXVhcmU9MTMyNDEsZS5tdnNxdWFyZT0xMzIzOSxlLm13bWVnYXNxdWFyZT0xMzI0NyxlLm13c3F1YXJlPTEzMjQ1LGUubj0xMTAsZS5uYWJlbmdhbGk9MjQ3MixlLm5hYmxhPTg3MTEsZS5uYWN1dGU9MzI0LGUubmFkZXZhPTIzNDQsZS5uYWd1amFyYXRpPTI3MjgsZS5uYWd1cm11a2hpPTI2MDAsZS5uYWhpcmFnYW5hPTEyMzk0LGUubmFrYXRha2FuYT0xMjQ5MCxlLm5ha2F0YWthbmFoYWxmd2lkdGg9NjU0MTMsZS5uYXBvc3Ryb3BoZT0zMjksZS5uYXNxdWFyZT0xMzE4NSxlLm5ib3BvbW9mbz0xMjU1NSxlLm5ic3BhY2U9MTYwLGUubmNhcm9uPTMyOCxlLm5jZWRpbGxhPTMyNixlLm5jaXJjbGU9OTQzNyxlLm5jaXJjdW1mbGV4YmVsb3c9Nzc1NSxlLm5jb21tYWFjY2VudD0zMjYsZS5uZG90YWNjZW50PTc3NDksZS5uZG90YmVsb3c9Nzc1MSxlLm5laGlyYWdhbmE9MTIzOTcsZS5uZWthdGFrYW5hPTEyNDkzLGUubmVrYXRha2FuYWhhbGZ3aWR0aD02NTQxNixlLm5ld3NoZXFlbHNpZ249ODM2MixlLm5mc3F1YXJlPTEzMTk1LGUubmdhYmVuZ2FsaT0yNDU3LGUubmdhZGV2YT0yMzI5LGUubmdhZ3VqYXJhdGk9MjcxMyxlLm5nYWd1cm11a2hpPTI1ODUsZS5uZ29uZ3V0aGFpPTM1OTEsZS5uaGlyYWdhbmE9MTI0MzUsZS5uaG9va2xlZnQ9NjI2LGUubmhvb2tyZXRyb2ZsZXg9NjI3LGUubmlldW5hY2lyY2xla29yZWFuPTEyOTExLGUubmlldW5hcGFyZW5rb3JlYW49MTI4MTUsZS5uaWV1bmNpZXVja29yZWFuPTEyNTk3LGUubmlldW5jaXJjbGVrb3JlYW49MTI4OTcsZS5uaWV1bmhpZXVoa29yZWFuPTEyNTk4LGUubmlldW5rb3JlYW49MTI1OTYsZS5uaWV1bnBhbnNpb3Nrb3JlYW49MTI2NDgsZS5uaWV1bnBhcmVua29yZWFuPTEyODAxLGUubmlldW5zaW9za29yZWFuPTEyNjQ3LGUubmlldW50aWtldXRrb3JlYW49MTI2NDYsZS5uaWhpcmFnYW5hPTEyMzk1LGUubmlrYXRha2FuYT0xMjQ5MSxlLm5pa2F0YWthbmFoYWxmd2lkdGg9NjU0MTQsZS5uaWtoYWhpdGxlZnR0aGFpPTYzNjQxLGUubmlraGFoaXR0aGFpPTM2NjEsZS5uaW5lPTU3LGUubmluZWFyYWJpYz0xNjQxLGUubmluZWJlbmdhbGk9MjU0MyxlLm5pbmVjaXJjbGU9OTMyMCxlLm5pbmVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTMwLGUubmluZWRldmE9MjQxNSxlLm5pbmVndWphcmF0aT0yNzk5LGUubmluZWd1cm11a2hpPTI2NzEsZS5uaW5laGFja2FyYWJpYz0xNjQxLGUubmluZWhhbmd6aG91PTEyMzI5LGUubmluZWlkZW9ncmFwaGljcGFyZW49MTI4NDAsZS5uaW5laW5mZXJpb3I9ODMyOSxlLm5pbmVtb25vc3BhY2U9NjUzMDUsZS5uaW5lb2xkc3R5bGU9NjMyODksZS5uaW5lcGFyZW49OTM0MCxlLm5pbmVwZXJpb2Q9OTM2MCxlLm5pbmVwZXJzaWFuPTE3ODUsZS5uaW5lcm9tYW49ODU2OCxlLm5pbmVzdXBlcmlvcj04MzEzLGUubmluZXRlZW5jaXJjbGU9OTMzMCxlLm5pbmV0ZWVucGFyZW49OTM1MCxlLm5pbmV0ZWVucGVyaW9kPTkzNzAsZS5uaW5ldGhhaT0zNjczLGUubmo9NDYwLGUubmplY3lyaWxsaWM9MTExNCxlLm5rYXRha2FuYT0xMjUzMSxlLm5rYXRha2FuYWhhbGZ3aWR0aD02NTQzNyxlLm5sZWdyaWdodGxvbmc9NDE0LGUubmxpbmViZWxvdz03NzUzLGUubm1vbm9zcGFjZT02NTM1OCxlLm5tc3F1YXJlPTEzMjEwLGUubm5hYmVuZ2FsaT0yNDY3LGUubm5hZGV2YT0yMzM5LGUubm5hZ3VqYXJhdGk9MjcyMyxlLm5uYWd1cm11a2hpPTI1OTUsZS5ubm5hZGV2YT0yMzQ1LGUubm9oaXJhZ2FuYT0xMjM5OCxlLm5va2F0YWthbmE9MTI0OTQsZS5ub2thdGFrYW5haGFsZndpZHRoPTY1NDE3LGUubm9uYnJlYWtpbmdzcGFjZT0xNjAsZS5ub25lbnRoYWk9MzYwMyxlLm5vbnV0aGFpPTM2MDksZS5ub29uYXJhYmljPTE2MDYsZS5ub29uZmluYWxhcmFiaWM9NjUyNTQsZS5ub29uZ2h1bm5hYXJhYmljPTE3MjIsZS5ub29uZ2h1bm5hZmluYWxhcmFiaWM9NjQ0MTUsZS5ub29uaW5pdGlhbGFyYWJpYz02NTI1NSxlLm5vb25qZWVtaW5pdGlhbGFyYWJpYz02NDcyMixlLm5vb25qZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1ODcsZS5ub29ubWVkaWFsYXJhYmljPTY1MjU2LGUubm9vbm1lZW1pbml0aWFsYXJhYmljPTY0NzI1LGUubm9vbm1lZW1pc29sYXRlZGFyYWJpYz02NDU5MCxlLm5vb25ub29uZmluYWxhcmFiaWM9NjQ2NTMsZS5ub3Rjb250YWlucz04NzE2LGUubm90ZWxlbWVudD04NzEzLGUubm90ZWxlbWVudG9mPTg3MTMsZS5ub3RlcXVhbD04ODAwLGUubm90Z3JlYXRlcj04ODE1LGUubm90Z3JlYXRlcm5vcmVxdWFsPTg4MTcsZS5ub3RncmVhdGVybm9ybGVzcz04ODI1LGUubm90aWRlbnRpY2FsPTg4MDIsZS5ub3RsZXNzPTg4MTQsZS5ub3RsZXNzbm9yZXF1YWw9ODgxNixlLm5vdHBhcmFsbGVsPTg3NDIsZS5ub3RwcmVjZWRlcz04ODMyLGUubm90c3Vic2V0PTg4MzYsZS5ub3RzdWNjZWVkcz04ODMzLGUubm90c3VwZXJzZXQ9ODgzNyxlLm5vd2FybWVuaWFuPTEzOTgsZS5ucGFyZW49OTM4NSxlLm5zc3F1YXJlPTEzMjMzLGUubnN1cGVyaW9yPTgzMTksZS5udGlsZGU9MjQxLGUubnU9OTU3LGUubnVoaXJhZ2FuYT0xMjM5NixlLm51a2F0YWthbmE9MTI0OTIsZS5udWthdGFrYW5haGFsZndpZHRoPTY1NDE1LGUubnVrdGFiZW5nYWxpPTI0OTIsZS5udWt0YWRldmE9MjM2NCxlLm51a3RhZ3VqYXJhdGk9Mjc0OCxlLm51a3RhZ3VybXVraGk9MjYyMCxlLm51bWJlcnNpZ249MzUsZS5udW1iZXJzaWdubW9ub3NwYWNlPTY1MjgzLGUubnVtYmVyc2lnbnNtYWxsPTY1MTE5LGUubnVtZXJhbHNpZ25ncmVlaz04ODQsZS5udW1lcmFsc2lnbmxvd2VyZ3JlZWs9ODg1LGUubnVtZXJvPTg0NzAsZS5udW49MTUwNCxlLm51bmRhZ2VzaD02NDMyMCxlLm51bmRhZ2VzaGhlYnJldz02NDMyMCxlLm51bmhlYnJldz0xNTA0LGUubnZzcXVhcmU9MTMyMzcsZS5ud3NxdWFyZT0xMzI0MyxlLm55YWJlbmdhbGk9MjQ2MixlLm55YWRldmE9MjMzNCxlLm55YWd1amFyYXRpPTI3MTgsZS5ueWFndXJtdWtoaT0yNTkwLGUubz0xMTEsZS5vYWN1dGU9MjQzLGUub2FuZ3RoYWk9MzYyOSxlLm9iYXJyZWQ9NjI5LGUub2JhcnJlZGN5cmlsbGljPTEyNTcsZS5vYmFycmVkZGllcmVzaXNjeXJpbGxpYz0xMjU5LGUub2JlbmdhbGk9MjQ1MSxlLm9ib3BvbW9mbz0xMjU3MSxlLm9icmV2ZT0zMzUsZS5vY2FuZHJhZGV2YT0yMzIxLGUub2NhbmRyYWd1amFyYXRpPTI3MDUsZS5vY2FuZHJhdm93ZWxzaWduZGV2YT0yMzc3LGUub2NhbmRyYXZvd2Vsc2lnbmd1amFyYXRpPTI3NjEsZS5vY2Fyb249NDY2LGUub2NpcmNsZT05NDM4LGUub2NpcmN1bWZsZXg9MjQ0LGUub2NpcmN1bWZsZXhhY3V0ZT03ODg5LGUub2NpcmN1bWZsZXhkb3RiZWxvdz03ODk3LGUub2NpcmN1bWZsZXhncmF2ZT03ODkxLGUub2NpcmN1bWZsZXhob29rYWJvdmU9Nzg5MyxlLm9jaXJjdW1mbGV4dGlsZGU9Nzg5NSxlLm9jeXJpbGxpYz0xMDg2LGUub2RibGFjdXRlPTMzNyxlLm9kYmxncmF2ZT01MjUsZS5vZGV2YT0yMzIzLGUub2RpZXJlc2lzPTI0NixlLm9kaWVyZXNpc2N5cmlsbGljPTEyNTUsZS5vZG90YmVsb3c9Nzg4NSxlLm9lPTMzOSxlLm9la29yZWFuPTEyNjM0LGUub2dvbmVrPTczMSxlLm9nb25la2NtYj04MDgsZS5vZ3JhdmU9MjQyLGUub2d1amFyYXRpPTI3MDcsZS5vaGFybWVuaWFuPTE0MTMsZS5vaGlyYWdhbmE9MTIzNjIsZS5vaG9va2Fib3ZlPTc4ODcsZS5vaG9ybj00MTcsZS5vaG9ybmFjdXRlPTc4OTksZS5vaG9ybmRvdGJlbG93PTc5MDcsZS5vaG9ybmdyYXZlPTc5MDEsZS5vaG9ybmhvb2thYm92ZT03OTAzLGUub2hvcm50aWxkZT03OTA1LGUub2h1bmdhcnVtbGF1dD0zMzcsZS5vaT00MTksZS5vaW52ZXJ0ZWRicmV2ZT01MjcsZS5va2F0YWthbmE9MTI0NTgsZS5va2F0YWthbmFoYWxmd2lkdGg9NjUzOTcsZS5va29yZWFuPTEyNjMxLGUub2xlaGVicmV3PTE0NTEsZS5vbWFjcm9uPTMzMyxlLm9tYWNyb25hY3V0ZT03NzYzLGUub21hY3JvbmdyYXZlPTc3NjEsZS5vbWRldmE9MjM4NCxlLm9tZWdhPTk2OSxlLm9tZWdhMT05ODIsZS5vbWVnYWN5cmlsbGljPTExMjEsZS5vbWVnYWxhdGluY2xvc2VkPTYzMSxlLm9tZWdhcm91bmRjeXJpbGxpYz0xMTQ3LGUub21lZ2F0aXRsb2N5cmlsbGljPTExNDksZS5vbWVnYXRvbm9zPTk3NCxlLm9tZ3VqYXJhdGk9Mjc2OCxlLm9taWNyb249OTU5LGUub21pY3JvbnRvbm9zPTk3MixlLm9tb25vc3BhY2U9NjUzNTksZS5vbmU9NDksZS5vbmVhcmFiaWM9MTYzMyxlLm9uZWJlbmdhbGk9MjUzNSxlLm9uZWNpcmNsZT05MzEyLGUub25lY2lyY2xlaW52ZXJzZXNhbnNzZXJpZj0xMDEyMixlLm9uZWRldmE9MjQwNyxlLm9uZWRvdGVubGVhZGVyPTgyMjgsZS5vbmVlaWdodGg9ODUzOSxlLm9uZWZpdHRlZD02MzE5NixlLm9uZWd1amFyYXRpPTI3OTEsZS5vbmVndXJtdWtoaT0yNjYzLGUub25laGFja2FyYWJpYz0xNjMzLGUub25laGFsZj0xODksZS5vbmVoYW5nemhvdT0xMjMyMSxlLm9uZWlkZW9ncmFwaGljcGFyZW49MTI4MzIsZS5vbmVpbmZlcmlvcj04MzIxLGUub25lbW9ub3NwYWNlPTY1Mjk3LGUub25lbnVtZXJhdG9yYmVuZ2FsaT0yNTQ4LGUub25lb2xkc3R5bGU9NjMyODEsZS5vbmVwYXJlbj05MzMyLGUub25lcGVyaW9kPTkzNTIsZS5vbmVwZXJzaWFuPTE3NzcsZS5vbmVxdWFydGVyPTE4OCxlLm9uZXJvbWFuPTg1NjAsZS5vbmVzdXBlcmlvcj0xODUsZS5vbmV0aGFpPTM2NjUsZS5vbmV0aGlyZD04NTMxLGUub29nb25laz00OTEsZS5vb2dvbmVrbWFjcm9uPTQ5MyxlLm9vZ3VybXVraGk9MjU3OSxlLm9vbWF0cmFndXJtdWtoaT0yNjM1LGUub29wZW49NTk2LGUub3BhcmVuPTkzODYsZS5vcGVuYnVsbGV0PTk3MDIsZS5vcHRpb249ODk5NyxlLm9yZGZlbWluaW5lPTE3MCxlLm9yZG1hc2N1bGluZT0xODYsZS5vcnRob2dvbmFsPTg3MzUsZS5vc2hvcnRkZXZhPTIzMjIsZS5vc2hvcnR2b3dlbHNpZ25kZXZhPTIzNzgsZS5vc2xhc2g9MjQ4LGUub3NsYXNoYWN1dGU9NTExLGUub3NtYWxsaGlyYWdhbmE9MTIzNjEsZS5vc21hbGxrYXRha2FuYT0xMjQ1NyxlLm9zbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg3LGUub3N0cm9rZWFjdXRlPTUxMSxlLm9zdXBlcmlvcj02MzIxNixlLm90Y3lyaWxsaWM9MTE1MSxlLm90aWxkZT0yNDUsZS5vdGlsZGVhY3V0ZT03NzU3LGUub3RpbGRlZGllcmVzaXM9Nzc1OSxlLm91Ym9wb21vZm89MTI1NzcsZS5vdmVybGluZT04MjU0LGUub3ZlcmxpbmVjZW50ZXJsaW5lPTY1MDk4LGUub3ZlcmxpbmVjbWI9NzczLGUub3ZlcmxpbmVkYXNoZWQ9NjUwOTcsZS5vdmVybGluZWRibHdhdnk9NjUxMDAsZS5vdmVybGluZXdhdnk9NjUwOTksZS5vdmVyc2NvcmU9MTc1LGUub3Zvd2Vsc2lnbmJlbmdhbGk9MjUwNyxlLm92b3dlbHNpZ25kZXZhPTIzNzksZS5vdm93ZWxzaWduZ3VqYXJhdGk9Mjc2MyxlLnA9MTEyLGUucGFhbXBzc3F1YXJlPTEzMTg0LGUucGFhc2VudG9zcXVhcmU9MTMwOTksZS5wYWJlbmdhbGk9MjQ3NCxlLnBhY3V0ZT03NzY1LGUucGFkZXZhPTIzNDYsZS5wYWdlZG93bj04NjcxLGUucGFnZXVwPTg2NzAsZS5wYWd1amFyYXRpPTI3MzAsZS5wYWd1cm11a2hpPTI2MDIsZS5wYWhpcmFnYW5hPTEyNDAxLGUucGFpeWFubm9pdGhhaT0zNjMxLGUucGFrYXRha2FuYT0xMjQ5NyxlLnBhbGF0YWxpemF0aW9uY3lyaWxsaWNjbWI9MTE1NixlLnBhbG9jaGthY3lyaWxsaWM9MTIxNixlLnBhbnNpb3Nrb3JlYW49MTI2NzEsZS5wYXJhZ3JhcGg9MTgyLGUucGFyYWxsZWw9ODc0MSxlLnBhcmVubGVmdD00MCxlLnBhcmVubGVmdGFsdG9uZWFyYWJpYz02NDgzMCxlLnBhcmVubGVmdGJ0PTYzNzI1LGUucGFyZW5sZWZ0ZXg9NjM3MjQsZS5wYXJlbmxlZnRpbmZlcmlvcj04MzMzLGUucGFyZW5sZWZ0bW9ub3NwYWNlPTY1Mjg4LGUucGFyZW5sZWZ0c21hbGw9NjUxMTMsZS5wYXJlbmxlZnRzdXBlcmlvcj04MzE3LGUucGFyZW5sZWZ0dHA9NjM3MjMsZS5wYXJlbmxlZnR2ZXJ0aWNhbD02NTA3NyxlLnBhcmVucmlnaHQ9NDEsZS5wYXJlbnJpZ2h0YWx0b25lYXJhYmljPTY0ODMxLGUucGFyZW5yaWdodGJ0PTYzNzM2LGUucGFyZW5yaWdodGV4PTYzNzM1LGUucGFyZW5yaWdodGluZmVyaW9yPTgzMzQsZS5wYXJlbnJpZ2h0bW9ub3NwYWNlPTY1Mjg5LGUucGFyZW5yaWdodHNtYWxsPTY1MTE0LGUucGFyZW5yaWdodHN1cGVyaW9yPTgzMTgsZS5wYXJlbnJpZ2h0dHA9NjM3MzQsZS5wYXJlbnJpZ2h0dmVydGljYWw9NjUwNzgsZS5wYXJ0aWFsZGlmZj04NzA2LGUucGFzZXFoZWJyZXc9MTQ3MixlLnBhc2h0YWhlYnJldz0xNDMzLGUucGFzcXVhcmU9MTMyMjUsZS5wYXRhaD0xNDYzLGUucGF0YWgxMT0xNDYzLGUucGF0YWgxZD0xNDYzLGUucGF0YWgyYT0xNDYzLGUucGF0YWhoZWJyZXc9MTQ2MyxlLnBhdGFobmFycm93aGVicmV3PTE0NjMsZS5wYXRhaHF1YXJ0ZXJoZWJyZXc9MTQ2MyxlLnBhdGFod2lkZWhlYnJldz0xNDYzLGUucGF6ZXJoZWJyZXc9MTQ0MSxlLnBib3BvbW9mbz0xMjU1MCxlLnBjaXJjbGU9OTQzOSxlLnBkb3RhY2NlbnQ9Nzc2NyxlLnBlPTE1MDgsZS5wZWN5cmlsbGljPTEwODcsZS5wZWRhZ2VzaD02NDMyNCxlLnBlZGFnZXNoaGVicmV3PTY0MzI0LGUucGVlemlzcXVhcmU9MTMxMTUsZS5wZWZpbmFsZGFnZXNoaGVicmV3PTY0MzIzLGUucGVoYXJhYmljPTE2NjIsZS5wZWhhcm1lbmlhbj0xNDAyLGUucGVoZWJyZXc9MTUwOCxlLnBlaGZpbmFsYXJhYmljPTY0MzQzLGUucGVoaW5pdGlhbGFyYWJpYz02NDM0NCxlLnBlaGlyYWdhbmE9MTI0MTAsZS5wZWhtZWRpYWxhcmFiaWM9NjQzNDUsZS5wZWthdGFrYW5hPTEyNTA2LGUucGVtaWRkbGVob29rY3lyaWxsaWM9MTE5MSxlLnBlcmFmZWhlYnJldz02NDMzNCxlLnBlcmNlbnQ9MzcsZS5wZXJjZW50YXJhYmljPTE2NDIsZS5wZXJjZW50bW9ub3NwYWNlPTY1Mjg1LGUucGVyY2VudHNtYWxsPTY1MTMwLGUucGVyaW9kPTQ2LGUucGVyaW9kYXJtZW5pYW49MTQxNyxlLnBlcmlvZGNlbnRlcmVkPTE4MyxlLnBlcmlvZGhhbGZ3aWR0aD02NTM3NyxlLnBlcmlvZGluZmVyaW9yPTYzMjA3LGUucGVyaW9kbW9ub3NwYWNlPTY1Mjk0LGUucGVyaW9kc21hbGw9NjUxMDYsZS5wZXJpb2RzdXBlcmlvcj02MzIwOCxlLnBlcmlzcG9tZW5pZ3JlZWtjbWI9ODM0LGUucGVycGVuZGljdWxhcj04ODY5LGUucGVydGhvdXNhbmQ9ODI0MCxlLnBlc2V0YT04MzU5LGUucGZzcXVhcmU9MTMxOTQsZS5waGFiZW5nYWxpPTI0NzUsZS5waGFkZXZhPTIzNDcsZS5waGFndWphcmF0aT0yNzMxLGUucGhhZ3VybXVraGk9MjYwMyxlLnBoaT05NjYsZS5waGkxPTk4MSxlLnBoaWV1cGhhY2lyY2xla29yZWFuPTEyOTIyLGUucGhpZXVwaGFwYXJlbmtvcmVhbj0xMjgyNixlLnBoaWV1cGhjaXJjbGVrb3JlYW49MTI5MDgsZS5waGlldXBoa29yZWFuPTEyNjIxLGUucGhpZXVwaHBhcmVua29yZWFuPTEyODEyLGUucGhpbGF0aW49NjMyLGUucGhpbnRodXRoYWk9MzY0MixlLnBoaXN5bWJvbGdyZWVrPTk4MSxlLnBob29rPTQyMSxlLnBob3BoYW50aGFpPTM2MTQsZS5waG9waHVuZ3RoYWk9MzYxMixlLnBob3NhbXBoYW90aGFpPTM2MTYsZS5waT05NjAsZS5waWV1cGFjaXJjbGVrb3JlYW49MTI5MTUsZS5waWV1cGFwYXJlbmtvcmVhbj0xMjgxOSxlLnBpZXVwY2lldWNrb3JlYW49MTI2NjIsZS5waWV1cGNpcmNsZWtvcmVhbj0xMjkwMSxlLnBpZXVwa2l5ZW9ra29yZWFuPTEyNjU4LGUucGlldXBrb3JlYW49MTI2MTAsZS5waWV1cHBhcmVua29yZWFuPTEyODA1LGUucGlldXBzaW9za2l5ZW9ra29yZWFuPTEyNjYwLGUucGlldXBzaW9za29yZWFuPTEyNjEyLGUucGlldXBzaW9zdGlrZXV0a29yZWFuPTEyNjYxLGUucGlldXB0aGlldXRoa29yZWFuPTEyNjYzLGUucGlldXB0aWtldXRrb3JlYW49MTI2NTksZS5waWhpcmFnYW5hPTEyNDA0LGUucGlrYXRha2FuYT0xMjUwMCxlLnBpc3ltYm9sZ3JlZWs9OTgyLGUucGl3cmFybWVuaWFuPTE0MTEsZS5wbHVzPTQzLGUucGx1c2JlbG93Y21iPTc5OSxlLnBsdXNjaXJjbGU9ODg1MyxlLnBsdXNtaW51cz0xNzcsZS5wbHVzbW9kPTcyNixlLnBsdXNtb25vc3BhY2U9NjUyOTEsZS5wbHVzc21hbGw9NjUxMjIsZS5wbHVzc3VwZXJpb3I9ODMxNCxlLnBtb25vc3BhY2U9NjUzNjAsZS5wbXNxdWFyZT0xMzI3MixlLnBvaGlyYWdhbmE9MTI0MTMsZS5wb2ludGluZ2luZGV4ZG93bndoaXRlPTk3NTksZS5wb2ludGluZ2luZGV4bGVmdHdoaXRlPTk3NTYsZS5wb2ludGluZ2luZGV4cmlnaHR3aGl0ZT05NzU4LGUucG9pbnRpbmdpbmRleHVwd2hpdGU9OTc1NyxlLnBva2F0YWthbmE9MTI1MDksZS5wb3BsYXRoYWk9MzYxMSxlLnBvc3RhbG1hcms9MTIzMDYsZS5wb3N0YWxtYXJrZmFjZT0xMjMyMCxlLnBwYXJlbj05Mzg3LGUucHJlY2VkZXM9ODgyNixlLnByZXNjcmlwdGlvbj04NDc4LGUucHJpbWVtb2Q9Njk3LGUucHJpbWVyZXZlcnNlZD04MjQ1LGUucHJvZHVjdD04NzE5LGUucHJvamVjdGl2ZT04OTY1LGUucHJvbG9uZ2Vka2FuYT0xMjU0MCxlLnByb3BlbGxvcj04OTg0LGUucHJvcGVyc3Vic2V0PTg4MzQsZS5wcm9wZXJzdXBlcnNldD04ODM1LGUucHJvcG9ydGlvbj04NzU5LGUucHJvcG9ydGlvbmFsPTg3MzMsZS5wc2k9OTY4LGUucHNpY3lyaWxsaWM9MTEzNyxlLnBzaWxpcG5ldW1hdGFjeXJpbGxpY2NtYj0xMTU4LGUucHNzcXVhcmU9MTMyMzIsZS5wdWhpcmFnYW5hPTEyNDA3LGUucHVrYXRha2FuYT0xMjUwMyxlLnB2c3F1YXJlPTEzMjM2LGUucHdzcXVhcmU9MTMyNDIsZS5xPTExMyxlLnFhZGV2YT0yMzkyLGUucWFkbWFoZWJyZXc9MTQ0OCxlLnFhZmFyYWJpYz0xNjAyLGUucWFmZmluYWxhcmFiaWM9NjUyMzgsZS5xYWZpbml0aWFsYXJhYmljPTY1MjM5LGUucWFmbWVkaWFsYXJhYmljPTY1MjQwLGUucWFtYXRzPTE0NjQsZS5xYW1hdHMxMD0xNDY0LGUucWFtYXRzMWE9MTQ2NCxlLnFhbWF0czFjPTE0NjQsZS5xYW1hdHMyNz0xNDY0LGUucWFtYXRzMjk9MTQ2NCxlLnFhbWF0czMzPTE0NjQsZS5xYW1hdHNkZT0xNDY0LGUucWFtYXRzaGVicmV3PTE0NjQsZS5xYW1hdHNuYXJyb3doZWJyZXc9MTQ2NCxlLnFhbWF0c3FhdGFuaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbm5hcnJvd2hlYnJldz0xNDY0LGUucWFtYXRzcWF0YW5xdWFydGVyaGVicmV3PTE0NjQsZS5xYW1hdHNxYXRhbndpZGVoZWJyZXc9MTQ2NCxlLnFhbWF0c3F1YXJ0ZXJoZWJyZXc9MTQ2NCxlLnFhbWF0c3dpZGVoZWJyZXc9MTQ2NCxlLnFhcm5leXBhcmFoZWJyZXc9MTQzOSxlLnFib3BvbW9mbz0xMjU2MSxlLnFjaXJjbGU9OTQ0MCxlLnFob29rPTY3MixlLnFtb25vc3BhY2U9NjUzNjEsZS5xb2Y9MTUxMSxlLnFvZmRhZ2VzaD02NDMyNyxlLnFvZmRhZ2VzaGhlYnJldz02NDMyNyxlLnFvZmhlYnJldz0xNTExLGUucXBhcmVuPTkzODgsZS5xdWFydGVybm90ZT05ODMzLGUucXVidXRzPTE0NjcsZS5xdWJ1dHMxOD0xNDY3LGUucXVidXRzMjU9MTQ2NyxlLnF1YnV0czMxPTE0NjcsZS5xdWJ1dHNoZWJyZXc9MTQ2NyxlLnF1YnV0c25hcnJvd2hlYnJldz0xNDY3LGUucXVidXRzcXVhcnRlcmhlYnJldz0xNDY3LGUucXVidXRzd2lkZWhlYnJldz0xNDY3LGUucXVlc3Rpb249NjMsZS5xdWVzdGlvbmFyYWJpYz0xNTY3LGUucXVlc3Rpb25hcm1lbmlhbj0xMzc0LGUucXVlc3Rpb25kb3duPTE5MSxlLnF1ZXN0aW9uZG93bnNtYWxsPTYzNDIzLGUucXVlc3Rpb25ncmVlaz04OTQsZS5xdWVzdGlvbm1vbm9zcGFjZT02NTMxMSxlLnF1ZXN0aW9uc21hbGw9NjMyOTUsZS5xdW90ZWRibD0zNCxlLnF1b3RlZGJsYmFzZT04MjIyLGUucXVvdGVkYmxsZWZ0PTgyMjAsZS5xdW90ZWRibG1vbm9zcGFjZT02NTI4MixlLnF1b3RlZGJscHJpbWU9MTIzMTgsZS5xdW90ZWRibHByaW1lcmV2ZXJzZWQ9MTIzMTcsZS5xdW90ZWRibHJpZ2h0PTgyMjEsZS5xdW90ZWxlZnQ9ODIxNixlLnF1b3RlbGVmdHJldmVyc2VkPTgyMTksZS5xdW90ZXJldmVyc2VkPTgyMTksZS5xdW90ZXJpZ2h0PTgyMTcsZS5xdW90ZXJpZ2h0bj0zMjksZS5xdW90ZXNpbmdsYmFzZT04MjE4LGUucXVvdGVzaW5nbGU9MzksZS5xdW90ZXNpbmdsZW1vbm9zcGFjZT02NTI4NyxlLnI9MTE0LGUucmFhcm1lbmlhbj0xNDA0LGUucmFiZW5nYWxpPTI0ODAsZS5yYWN1dGU9MzQxLGUucmFkZXZhPTIzNTIsZS5yYWRpY2FsPTg3MzAsZS5yYWRpY2FsZXg9NjM3MTcsZS5yYWRvdmVyc3NxdWFyZT0xMzIzMCxlLnJhZG92ZXJzc3F1YXJlZHNxdWFyZT0xMzIzMSxlLnJhZHNxdWFyZT0xMzIyOSxlLnJhZmU9MTQ3MSxlLnJhZmVoZWJyZXc9MTQ3MSxlLnJhZ3VqYXJhdGk9MjczNixlLnJhZ3VybXVraGk9MjYwOCxlLnJhaGlyYWdhbmE9MTI0MjUsZS5yYWthdGFrYW5hPTEyNTIxLGUucmFrYXRha2FuYWhhbGZ3aWR0aD02NTQzMSxlLnJhbG93ZXJkaWFnb25hbGJlbmdhbGk9MjU0NSxlLnJhbWlkZGxlZGlhZ29uYWxiZW5nYWxpPTI1NDQsZS5yYW1zaG9ybj02MTIsZS5yYXRpbz04NzU4LGUucmJvcG9tb2ZvPTEyNTY2LGUucmNhcm9uPTM0NSxlLnJjZWRpbGxhPTM0MyxlLnJjaXJjbGU9OTQ0MSxlLnJjb21tYWFjY2VudD0zNDMsZS5yZGJsZ3JhdmU9NTI5LGUucmRvdGFjY2VudD03NzY5LGUucmRvdGJlbG93PTc3NzEsZS5yZG90YmVsb3dtYWNyb249Nzc3MyxlLnJlZmVyZW5jZW1hcms9ODI1MSxlLnJlZmxleHN1YnNldD04ODM4LGUucmVmbGV4c3VwZXJzZXQ9ODgzOSxlLnJlZ2lzdGVyZWQ9MTc0LGUucmVnaXN0ZXJzYW5zPTYzNzIwLGUucmVnaXN0ZXJzZXJpZj02MzE5NCxlLnJlaGFyYWJpYz0xNTg1LGUucmVoYXJtZW5pYW49MTQwOCxlLnJlaGZpbmFsYXJhYmljPTY1MTk4LGUucmVoaXJhZ2FuYT0xMjQyOCxlLnJla2F0YWthbmE9MTI1MjQsZS5yZWthdGFrYW5haGFsZndpZHRoPTY1NDM0LGUucmVzaD0xNTEyLGUucmVzaGRhZ2VzaGhlYnJldz02NDMyOCxlLnJlc2hoZWJyZXc9MTUxMixlLnJldmVyc2VkdGlsZGU9ODc2NSxlLnJldmlhaGVicmV3PTE0MzEsZS5yZXZpYW11Z3Jhc2hoZWJyZXc9MTQzMTtlLnJldmxvZ2ljYWxub3Q9ODk3NixlLnJmaXNoaG9vaz02MzgsZS5yZmlzaGhvb2tyZXZlcnNlZD02MzksZS5yaGFiZW5nYWxpPTI1MjUsZS5yaGFkZXZhPTIzOTcsZS5yaG89OTYxLGUucmhvb2s9NjM3LGUucmhvb2t0dXJuZWQ9NjM1LGUucmhvb2t0dXJuZWRzdXBlcmlvcj02OTMsZS5yaG9zeW1ib2xncmVlaz0xMDA5LGUucmhvdGljaG9va21vZD03MzQsZS5yaWV1bGFjaXJjbGVrb3JlYW49MTI5MTMsZS5yaWV1bGFwYXJlbmtvcmVhbj0xMjgxNyxlLnJpZXVsY2lyY2xla29yZWFuPTEyODk5LGUucmlldWxoaWV1aGtvcmVhbj0xMjYwOCxlLnJpZXVsa2l5ZW9ra29yZWFuPTEyNjAyLGUucmlldWxraXllb2tzaW9za29yZWFuPTEyNjQ5LGUucmlldWxrb3JlYW49MTI2MDEsZS5yaWV1bG1pZXVta29yZWFuPTEyNjAzLGUucmlldWxwYW5zaW9za29yZWFuPTEyNjUyLGUucmlldWxwYXJlbmtvcmVhbj0xMjgwMyxlLnJpZXVscGhpZXVwaGtvcmVhbj0xMjYwNyxlLnJpZXVscGlldXBrb3JlYW49MTI2MDQsZS5yaWV1bHBpZXVwc2lvc2tvcmVhbj0xMjY1MSxlLnJpZXVsc2lvc2tvcmVhbj0xMjYwNSxlLnJpZXVsdGhpZXV0aGtvcmVhbj0xMjYwNixlLnJpZXVsdGlrZXV0a29yZWFuPTEyNjUwLGUucmlldWx5ZW9yaW5oaWV1aGtvcmVhbj0xMjY1MyxlLnJpZ2h0YW5nbGU9ODczNSxlLnJpZ2h0dGFja2JlbG93Y21iPTc5MyxlLnJpZ2h0dHJpYW5nbGU9ODg5NSxlLnJpaGlyYWdhbmE9MTI0MjYsZS5yaWthdGFrYW5hPTEyNTIyLGUucmlrYXRha2FuYWhhbGZ3aWR0aD02NTQzMixlLnJpbmc9NzMwLGUucmluZ2JlbG93Y21iPTgwNSxlLnJpbmdjbWI9Nzc4LGUucmluZ2hhbGZsZWZ0PTcwMyxlLnJpbmdoYWxmbGVmdGFybWVuaWFuPTEzNjksZS5yaW5naGFsZmxlZnRiZWxvd2NtYj03OTYsZS5yaW5naGFsZmxlZnRjZW50ZXJlZD03MjMsZS5yaW5naGFsZnJpZ2h0PTcwMixlLnJpbmdoYWxmcmlnaHRiZWxvd2NtYj04MjUsZS5yaW5naGFsZnJpZ2h0Y2VudGVyZWQ9NzIyLGUucmludmVydGVkYnJldmU9NTMxLGUucml0dG9ydXNxdWFyZT0xMzEzNyxlLnJsaW5lYmVsb3c9Nzc3NSxlLnJsb25nbGVnPTYzNixlLnJsb25nbGVndHVybmVkPTYzNCxlLnJtb25vc3BhY2U9NjUzNjIsZS5yb2hpcmFnYW5hPTEyNDI5LGUucm9rYXRha2FuYT0xMjUyNSxlLnJva2F0YWthbmFoYWxmd2lkdGg9NjU0MzUsZS5yb3J1YXRoYWk9MzYxOSxlLnJwYXJlbj05Mzg5LGUucnJhYmVuZ2FsaT0yNTI0LGUucnJhZGV2YT0yMzUzLGUucnJhZ3VybXVraGk9MjY1MixlLnJyZWhhcmFiaWM9MTY4MSxlLnJyZWhmaW5hbGFyYWJpYz02NDM5NyxlLnJydm9jYWxpY2JlbmdhbGk9MjUyOCxlLnJydm9jYWxpY2RldmE9MjQwMCxlLnJydm9jYWxpY2d1amFyYXRpPTI3ODQsZS5ycnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI1MDAsZS5ycnZvY2FsaWN2b3dlbHNpZ25kZXZhPTIzNzIsZS5ycnZvY2FsaWN2b3dlbHNpZ25ndWphcmF0aT0yNzU2LGUucnN1cGVyaW9yPTYzMjE3LGUucnRibG9jaz05NjE2LGUucnR1cm5lZD02MzMsZS5ydHVybmVkc3VwZXJpb3I9NjkyLGUucnVoaXJhZ2FuYT0xMjQyNyxlLnJ1a2F0YWthbmE9MTI1MjMsZS5ydWthdGFrYW5haGFsZndpZHRoPTY1NDMzLGUucnVwZWVtYXJrYmVuZ2FsaT0yNTQ2LGUucnVwZWVzaWduYmVuZ2FsaT0yNTQ3LGUucnVwaWFoPTYzMTk3LGUucnV0aGFpPTM2MjAsZS5ydm9jYWxpY2JlbmdhbGk9MjQ0MyxlLnJ2b2NhbGljZGV2YT0yMzE1LGUucnZvY2FsaWNndWphcmF0aT0yNjk5LGUucnZvY2FsaWN2b3dlbHNpZ25iZW5nYWxpPTI0OTksZS5ydm9jYWxpY3Zvd2Vsc2lnbmRldmE9MjM3MSxlLnJ2b2NhbGljdm93ZWxzaWduZ3VqYXJhdGk9Mjc1NSxlLnM9MTE1LGUuc2FiZW5nYWxpPTI0ODgsZS5zYWN1dGU9MzQ3LGUuc2FjdXRlZG90YWNjZW50PTc3ODEsZS5zYWRhcmFiaWM9MTU4OSxlLnNhZGV2YT0yMzYwLGUuc2FkZmluYWxhcmFiaWM9NjUyMTAsZS5zYWRpbml0aWFsYXJhYmljPTY1MjExLGUuc2FkbWVkaWFsYXJhYmljPTY1MjEyLGUuc2FndWphcmF0aT0yNzQ0LGUuc2FndXJtdWtoaT0yNjE2LGUuc2FoaXJhZ2FuYT0xMjM3MyxlLnNha2F0YWthbmE9MTI0NjksZS5zYWthdGFrYW5haGFsZndpZHRoPTY1NDAzLGUuc2FsbGFsbGFob3VhbGF5aGV3YXNhbGxhbWFyYWJpYz02NTAxOCxlLnNhbWVraD0xNTA1LGUuc2FtZWtoZGFnZXNoPTY0MzIxLGUuc2FtZWtoZGFnZXNoaGVicmV3PTY0MzIxLGUuc2FtZWtoaGVicmV3PTE1MDUsZS5zYXJhYWF0aGFpPTM2MzQsZS5zYXJhYWV0aGFpPTM2NDksZS5zYXJhYWltYWltYWxhaXRoYWk9MzY1MixlLnNhcmFhaW1haW11YW50aGFpPTM2NTEsZS5zYXJhYW10aGFpPTM2MzUsZS5zYXJhYXRoYWk9MzYzMixlLnNhcmFldGhhaT0zNjQ4LGUuc2FyYWlpbGVmdHRoYWk9NjM2MjIsZS5zYXJhaWl0aGFpPTM2MzcsZS5zYXJhaWxlZnR0aGFpPTYzNjIxLGUuc2FyYWl0aGFpPTM2MzYsZS5zYXJhb3RoYWk9MzY1MCxlLnNhcmF1ZWVsZWZ0dGhhaT02MzYyNCxlLnNhcmF1ZWV0aGFpPTM2MzksZS5zYXJhdWVsZWZ0dGhhaT02MzYyMyxlLnNhcmF1ZXRoYWk9MzYzOCxlLnNhcmF1dGhhaT0zNjQwLGUuc2FyYXV1dGhhaT0zNjQxLGUuc2JvcG9tb2ZvPTEyNTY5LGUuc2Nhcm9uPTM1MyxlLnNjYXJvbmRvdGFjY2VudD03NzgzLGUuc2NlZGlsbGE9MzUxLGUuc2Nod2E9NjAxLGUuc2Nod2FjeXJpbGxpYz0xMjQxLGUuc2Nod2FkaWVyZXNpc2N5cmlsbGljPTEyNDMsZS5zY2h3YWhvb2s9NjAyLGUuc2NpcmNsZT05NDQyLGUuc2NpcmN1bWZsZXg9MzQ5LGUuc2NvbW1hYWNjZW50PTUzNyxlLnNkb3RhY2NlbnQ9Nzc3NyxlLnNkb3RiZWxvdz03Nzc5LGUuc2RvdGJlbG93ZG90YWNjZW50PTc3ODUsZS5zZWFndWxsYmVsb3djbWI9ODI4LGUuc2Vjb25kPTgyNDMsZS5zZWNvbmR0b25lY2hpbmVzZT03MTQsZS5zZWN0aW9uPTE2NyxlLnNlZW5hcmFiaWM9MTU4NyxlLnNlZW5maW5hbGFyYWJpYz02NTIwMixlLnNlZW5pbml0aWFsYXJhYmljPTY1MjAzLGUuc2Vlbm1lZGlhbGFyYWJpYz02NTIwNCxlLnNlZ29sPTE0NjIsZS5zZWdvbDEzPTE0NjIsZS5zZWdvbDFmPTE0NjIsZS5zZWdvbDJjPTE0NjIsZS5zZWdvbGhlYnJldz0xNDYyLGUuc2Vnb2xuYXJyb3doZWJyZXc9MTQ2MixlLnNlZ29scXVhcnRlcmhlYnJldz0xNDYyLGUuc2Vnb2x0YWhlYnJldz0xNDI2LGUuc2Vnb2x3aWRlaGVicmV3PTE0NjIsZS5zZWhhcm1lbmlhbj0xNDA1LGUuc2VoaXJhZ2FuYT0xMjM3OSxlLnNla2F0YWthbmE9MTI0NzUsZS5zZWthdGFrYW5haGFsZndpZHRoPTY1NDA2LGUuc2VtaWNvbG9uPTU5LGUuc2VtaWNvbG9uYXJhYmljPTE1NjMsZS5zZW1pY29sb25tb25vc3BhY2U9NjUzMDcsZS5zZW1pY29sb25zbWFsbD02NTEwOCxlLnNlbWl2b2ljZWRtYXJra2FuYT0xMjQ0NCxlLnNlbWl2b2ljZWRtYXJra2FuYWhhbGZ3aWR0aD02NTQzOSxlLnNlbnRpc3F1YXJlPTEzMDkwLGUuc2VudG9zcXVhcmU9MTMwOTEsZS5zZXZlbj01NSxlLnNldmVuYXJhYmljPTE2MzksZS5zZXZlbmJlbmdhbGk9MjU0MSxlLnNldmVuY2lyY2xlPTkzMTgsZS5zZXZlbmNpcmNsZWludmVyc2VzYW5zc2VyaWY9MTAxMjgsZS5zZXZlbmRldmE9MjQxMyxlLnNldmVuZWlnaHRocz04NTQyLGUuc2V2ZW5ndWphcmF0aT0yNzk3LGUuc2V2ZW5ndXJtdWtoaT0yNjY5LGUuc2V2ZW5oYWNrYXJhYmljPTE2MzksZS5zZXZlbmhhbmd6aG91PTEyMzI3LGUuc2V2ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODM4LGUuc2V2ZW5pbmZlcmlvcj04MzI3LGUuc2V2ZW5tb25vc3BhY2U9NjUzMDMsZS5zZXZlbm9sZHN0eWxlPTYzMjg3LGUuc2V2ZW5wYXJlbj05MzM4LGUuc2V2ZW5wZXJpb2Q9OTM1OCxlLnNldmVucGVyc2lhbj0xNzgzLGUuc2V2ZW5yb21hbj04NTY2LGUuc2V2ZW5zdXBlcmlvcj04MzExLGUuc2V2ZW50ZWVuY2lyY2xlPTkzMjgsZS5zZXZlbnRlZW5wYXJlbj05MzQ4LGUuc2V2ZW50ZWVucGVyaW9kPTkzNjgsZS5zZXZlbnRoYWk9MzY3MSxlLnNmdGh5cGhlbj0xNzMsZS5zaGFhcm1lbmlhbj0xMzk5LGUuc2hhYmVuZ2FsaT0yNDg2LGUuc2hhY3lyaWxsaWM9MTA5NixlLnNoYWRkYWFyYWJpYz0xNjE3LGUuc2hhZGRhZGFtbWFhcmFiaWM9NjQ2MDksZS5zaGFkZGFkYW1tYXRhbmFyYWJpYz02NDYwNixlLnNoYWRkYWZhdGhhYXJhYmljPTY0NjA4LGUuc2hhZGRha2FzcmFhcmFiaWM9NjQ2MTAsZS5zaGFkZGFrYXNyYXRhbmFyYWJpYz02NDYwNyxlLnNoYWRlPTk2MTgsZS5zaGFkZWRhcms9OTYxOSxlLnNoYWRlbGlnaHQ9OTYxNyxlLnNoYWRlbWVkaXVtPTk2MTgsZS5zaGFkZXZhPTIzNTgsZS5zaGFndWphcmF0aT0yNzQyLGUuc2hhZ3VybXVraGk9MjYxNCxlLnNoYWxzaGVsZXRoZWJyZXc9MTQyNyxlLnNoYm9wb21vZm89MTI1NjUsZS5zaGNoYWN5cmlsbGljPTEwOTcsZS5zaGVlbmFyYWJpYz0xNTg4LGUuc2hlZW5maW5hbGFyYWJpYz02NTIwNixlLnNoZWVuaW5pdGlhbGFyYWJpYz02NTIwNyxlLnNoZWVubWVkaWFsYXJhYmljPTY1MjA4LGUuc2hlaWNvcHRpYz05OTUsZS5zaGVxZWw9ODM2MixlLnNoZXFlbGhlYnJldz04MzYyLGUuc2hldmE9MTQ1NixlLnNoZXZhMTE1PTE0NTYsZS5zaGV2YTE1PTE0NTYsZS5zaGV2YTIyPTE0NTYsZS5zaGV2YTJlPTE0NTYsZS5zaGV2YWhlYnJldz0xNDU2LGUuc2hldmFuYXJyb3doZWJyZXc9MTQ1NixlLnNoZXZhcXVhcnRlcmhlYnJldz0xNDU2LGUuc2hldmF3aWRlaGVicmV3PTE0NTYsZS5zaGhhY3lyaWxsaWM9MTIxMSxlLnNoaW1hY29wdGljPTEwMDUsZS5zaGluPTE1MTMsZS5zaGluZGFnZXNoPTY0MzI5LGUuc2hpbmRhZ2VzaGhlYnJldz02NDMyOSxlLnNoaW5kYWdlc2hzaGluZG90PTY0MzAwLGUuc2hpbmRhZ2VzaHNoaW5kb3RoZWJyZXc9NjQzMDAsZS5zaGluZGFnZXNoc2luZG90PTY0MzAxLGUuc2hpbmRhZ2VzaHNpbmRvdGhlYnJldz02NDMwMSxlLnNoaW5kb3RoZWJyZXc9MTQ3MyxlLnNoaW5oZWJyZXc9MTUxMyxlLnNoaW5zaGluZG90PTY0Mjk4LGUuc2hpbnNoaW5kb3RoZWJyZXc9NjQyOTgsZS5zaGluc2luZG90PTY0Mjk5LGUuc2hpbnNpbmRvdGhlYnJldz02NDI5OSxlLnNob29rPTY0MixlLnNpZ21hPTk2MyxlLnNpZ21hMT05NjIsZS5zaWdtYWZpbmFsPTk2MixlLnNpZ21hbHVuYXRlc3ltYm9sZ3JlZWs9MTAxMCxlLnNpaGlyYWdhbmE9MTIzNzUsZS5zaWthdGFrYW5hPTEyNDcxLGUuc2lrYXRha2FuYWhhbGZ3aWR0aD02NTQwNCxlLnNpbHVxaGVicmV3PTE0NjksZS5zaWx1cWxlZnRoZWJyZXc9MTQ2OSxlLnNpbWlsYXI9ODc2NCxlLnNpbmRvdGhlYnJldz0xNDc0LGUuc2lvc2FjaXJjbGVrb3JlYW49MTI5MTYsZS5zaW9zYXBhcmVua29yZWFuPTEyODIwLGUuc2lvc2NpZXVja29yZWFuPTEyNjcwLGUuc2lvc2NpcmNsZWtvcmVhbj0xMjkwMixlLnNpb3NraXllb2trb3JlYW49MTI2NjYsZS5zaW9za29yZWFuPTEyNjEzLGUuc2lvc25pZXVua29yZWFuPTEyNjY3LGUuc2lvc3BhcmVua29yZWFuPTEyODA2LGUuc2lvc3BpZXVwa29yZWFuPTEyNjY5LGUuc2lvc3Rpa2V1dGtvcmVhbj0xMjY2OCxlLnNpeD01NCxlLnNpeGFyYWJpYz0xNjM4LGUuc2l4YmVuZ2FsaT0yNTQwLGUuc2l4Y2lyY2xlPTkzMTcsZS5zaXhjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI3LGUuc2l4ZGV2YT0yNDEyLGUuc2l4Z3VqYXJhdGk9Mjc5NixlLnNpeGd1cm11a2hpPTI2NjgsZS5zaXhoYWNrYXJhYmljPTE2MzgsZS5zaXhoYW5nemhvdT0xMjMyNixlLnNpeGlkZW9ncmFwaGljcGFyZW49MTI4MzcsZS5zaXhpbmZlcmlvcj04MzI2LGUuc2l4bW9ub3NwYWNlPTY1MzAyLGUuc2l4b2xkc3R5bGU9NjMyODYsZS5zaXhwYXJlbj05MzM3LGUuc2l4cGVyaW9kPTkzNTcsZS5zaXhwZXJzaWFuPTE3ODIsZS5zaXhyb21hbj04NTY1LGUuc2l4c3VwZXJpb3I9ODMxMCxlLnNpeHRlZW5jaXJjbGU9OTMyNyxlLnNpeHRlZW5jdXJyZW5jeWRlbm9taW5hdG9yYmVuZ2FsaT0yNTUzLGUuc2l4dGVlbnBhcmVuPTkzNDcsZS5zaXh0ZWVucGVyaW9kPTkzNjcsZS5zaXh0aGFpPTM2NzAsZS5zbGFzaD00NyxlLnNsYXNobW9ub3NwYWNlPTY1Mjk1LGUuc2xvbmc9MzgzLGUuc2xvbmdkb3RhY2NlbnQ9NzgzNSxlLnNtaWxlZmFjZT05Nzg2LGUuc21vbm9zcGFjZT02NTM2MyxlLnNvZnBhc3VxaGVicmV3PTE0NzUsZS5zb2Z0aHlwaGVuPTE3MyxlLnNvZnRzaWduY3lyaWxsaWM9MTEwMCxlLnNvaGlyYWdhbmE9MTIzODEsZS5zb2thdGFrYW5hPTEyNDc3LGUuc29rYXRha2FuYWhhbGZ3aWR0aD02NTQwNyxlLnNvbGlkdXNsb25nb3ZlcmxheWNtYj04MjQsZS5zb2xpZHVzc2hvcnRvdmVybGF5Y21iPTgyMyxlLnNvcnVzaXRoYWk9MzYyNSxlLnNvc2FsYXRoYWk9MzYyNCxlLnNvc290aGFpPTM1OTUsZS5zb3N1YXRoYWk9MzYyNixlLnNwYWNlPTMyLGUuc3BhY2VoYWNrYXJhYmljPTMyLGUuc3BhZGU9OTgyNCxlLnNwYWRlc3VpdGJsYWNrPTk4MjQsZS5zcGFkZXN1aXR3aGl0ZT05ODI4LGUuc3BhcmVuPTkzOTAsZS5zcXVhcmViZWxvd2NtYj04MjcsZS5zcXVhcmVjYz0xMzI1MixlLnNxdWFyZWNtPTEzMjEzLGUuc3F1YXJlZGlhZ29uYWxjcm9zc2hhdGNoZmlsbD05NjQxLGUuc3F1YXJlaG9yaXpvbnRhbGZpbGw9OTYzNixlLnNxdWFyZWtnPTEzMTk5LGUuc3F1YXJla209MTMyMTQsZS5zcXVhcmVrbWNhcGl0YWw9MTMyNjIsZS5zcXVhcmVsbj0xMzI2NSxlLnNxdWFyZWxvZz0xMzI2NixlLnNxdWFyZW1nPTEzMTk4LGUuc3F1YXJlbWlsPTEzMjY5LGUuc3F1YXJlbW09MTMyMTIsZS5zcXVhcmVtc3F1YXJlZD0xMzIxNyxlLnNxdWFyZW9ydGhvZ29uYWxjcm9zc2hhdGNoZmlsbD05NjM4LGUuc3F1YXJldXBwZXJsZWZ0dG9sb3dlcnJpZ2h0ZmlsbD05NjM5LGUuc3F1YXJldXBwZXJyaWdodHRvbG93ZXJsZWZ0ZmlsbD05NjQwLGUuc3F1YXJldmVydGljYWxmaWxsPTk2MzcsZS5zcXVhcmV3aGl0ZXdpdGhzbWFsbGJsYWNrPTk2MzUsZS5zcnNxdWFyZT0xMzI3NSxlLnNzYWJlbmdhbGk9MjQ4NyxlLnNzYWRldmE9MjM1OSxlLnNzYWd1amFyYXRpPTI3NDMsZS5zc2FuZ2NpZXVja29yZWFuPTEyNjE3LGUuc3NhbmdoaWV1aGtvcmVhbj0xMjY3NyxlLnNzYW5naWV1bmdrb3JlYW49MTI2NzIsZS5zc2FuZ2tpeWVva2tvcmVhbj0xMjU5NCxlLnNzYW5nbmlldW5rb3JlYW49MTI2NDUsZS5zc2FuZ3BpZXVwa29yZWFuPTEyNjExLGUuc3NhbmdzaW9za29yZWFuPTEyNjE0LGUuc3Nhbmd0aWtldXRrb3JlYW49MTI2MDAsZS5zc3VwZXJpb3I9NjMyMTgsZS5zdGVybGluZz0xNjMsZS5zdGVybGluZ21vbm9zcGFjZT02NTUwNSxlLnN0cm9rZWxvbmdvdmVybGF5Y21iPTgyMixlLnN0cm9rZXNob3J0b3ZlcmxheWNtYj04MjEsZS5zdWJzZXQ9ODgzNCxlLnN1YnNldG5vdGVxdWFsPTg4NDIsZS5zdWJzZXRvcmVxdWFsPTg4MzgsZS5zdWNjZWVkcz04ODI3LGUuc3VjaHRoYXQ9ODcxNSxlLnN1aGlyYWdhbmE9MTIzNzcsZS5zdWthdGFrYW5hPTEyNDczLGUuc3VrYXRha2FuYWhhbGZ3aWR0aD02NTQwNSxlLnN1a3VuYXJhYmljPTE2MTgsZS5zdW1tYXRpb249ODcyMSxlLnN1bj05Nzg4LGUuc3VwZXJzZXQ9ODgzNSxlLnN1cGVyc2V0bm90ZXF1YWw9ODg0MyxlLnN1cGVyc2V0b3JlcXVhbD04ODM5LGUuc3ZzcXVhcmU9MTMyNzYsZS5zeW91d2FlcmFzcXVhcmU9MTMxODAsZS50PTExNixlLnRhYmVuZ2FsaT0yNDY4LGUudGFja2Rvd249ODg2OCxlLnRhY2tsZWZ0PTg4NjcsZS50YWRldmE9MjM0MCxlLnRhZ3VqYXJhdGk9MjcyNCxlLnRhZ3VybXVraGk9MjU5NixlLnRhaGFyYWJpYz0xNTkxLGUudGFoZmluYWxhcmFiaWM9NjUyMTgsZS50YWhpbml0aWFsYXJhYmljPTY1MjE5LGUudGFoaXJhZ2FuYT0xMjM4MyxlLnRhaG1lZGlhbGFyYWJpYz02NTIyMCxlLnRhaXN5b3VlcmFzcXVhcmU9MTMxODEsZS50YWthdGFrYW5hPTEyNDc5LGUudGFrYXRha2FuYWhhbGZ3aWR0aD02NTQwOCxlLnRhdHdlZWxhcmFiaWM9MTYwMCxlLnRhdT05NjQsZS50YXY9MTUxNCxlLnRhdmRhZ2VzPTY0MzMwLGUudGF2ZGFnZXNoPTY0MzMwLGUudGF2ZGFnZXNoaGVicmV3PTY0MzMwLGUudGF2aGVicmV3PTE1MTQsZS50YmFyPTM1OSxlLnRib3BvbW9mbz0xMjU1NCxlLnRjYXJvbj0zNTcsZS50Y2N1cmw9NjgwLGUudGNlZGlsbGE9MzU1LGUudGNoZWhhcmFiaWM9MTY3MCxlLnRjaGVoZmluYWxhcmFiaWM9NjQzNzksZS50Y2hlaGluaXRpYWxhcmFiaWM9NjQzODAsZS50Y2hlaG1lZGlhbGFyYWJpYz02NDM4MSxlLnRjaXJjbGU9OTQ0MyxlLnRjaXJjdW1mbGV4YmVsb3c9Nzc5MyxlLnRjb21tYWFjY2VudD0zNTUsZS50ZGllcmVzaXM9NzgzMSxlLnRkb3RhY2NlbnQ9Nzc4NyxlLnRkb3RiZWxvdz03Nzg5LGUudGVjeXJpbGxpYz0xMDkwLGUudGVkZXNjZW5kZXJjeXJpbGxpYz0xMTk3LGUudGVoYXJhYmljPTE1NzgsZS50ZWhmaW5hbGFyYWJpYz02NTE3NCxlLnRlaGhhaGluaXRpYWxhcmFiaWM9NjQ2NzQsZS50ZWhoYWhpc29sYXRlZGFyYWJpYz02NDUyNCxlLnRlaGluaXRpYWxhcmFiaWM9NjUxNzUsZS50ZWhpcmFnYW5hPTEyMzkwLGUudGVoamVlbWluaXRpYWxhcmFiaWM9NjQ2NzMsZS50ZWhqZWVtaXNvbGF0ZWRhcmFiaWM9NjQ1MjMsZS50ZWhtYXJidXRhYXJhYmljPTE1NzcsZS50ZWhtYXJidXRhZmluYWxhcmFiaWM9NjUxNzIsZS50ZWhtZWRpYWxhcmFiaWM9NjUxNzYsZS50ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDY3NixlLnRlaG1lZW1pc29sYXRlZGFyYWJpYz02NDUyNixlLnRlaG5vb25maW5hbGFyYWJpYz02NDYyNyxlLnRla2F0YWthbmE9MTI0ODYsZS50ZWthdGFrYW5haGFsZndpZHRoPTY1NDExLGUudGVsZXBob25lPTg0ODEsZS50ZWxlcGhvbmVibGFjaz05NzQyLGUudGVsaXNoYWdlZG9sYWhlYnJldz0xNDQwLGUudGVsaXNoYXFldGFuYWhlYnJldz0xNDQ5LGUudGVuY2lyY2xlPTkzMjEsZS50ZW5pZGVvZ3JhcGhpY3BhcmVuPTEyODQxLGUudGVucGFyZW49OTM0MSxlLnRlbnBlcmlvZD05MzYxLGUudGVucm9tYW49ODU2OSxlLnRlc2g9Njc5LGUudGV0PTE0OTYsZS50ZXRkYWdlc2g9NjQzMTIsZS50ZXRkYWdlc2hoZWJyZXc9NjQzMTIsZS50ZXRoZWJyZXc9MTQ5NixlLnRldHNlY3lyaWxsaWM9MTIwNSxlLnRldmlyaGVicmV3PTE0MzUsZS50ZXZpcmxlZnRoZWJyZXc9MTQzNSxlLnRoYWJlbmdhbGk9MjQ2OSxlLnRoYWRldmE9MjM0MSxlLnRoYWd1amFyYXRpPTI3MjUsZS50aGFndXJtdWtoaT0yNTk3LGUudGhhbGFyYWJpYz0xNTg0LGUudGhhbGZpbmFsYXJhYmljPTY1MTk2LGUudGhhbnRoYWtoYXRsb3dsZWZ0dGhhaT02MzY0MCxlLnRoYW50aGFraGF0bG93cmlnaHR0aGFpPTYzNjM5LGUudGhhbnRoYWtoYXR0aGFpPTM2NjAsZS50aGFudGhha2hhdHVwcGVybGVmdHRoYWk9NjM2MzgsZS50aGVoYXJhYmljPTE1NzksZS50aGVoZmluYWxhcmFiaWM9NjUxNzgsZS50aGVoaW5pdGlhbGFyYWJpYz02NTE3OSxlLnRoZWhtZWRpYWxhcmFiaWM9NjUxODAsZS50aGVyZWV4aXN0cz04NzA3LGUudGhlcmVmb3JlPTg3NTYsZS50aGV0YT05NTIsZS50aGV0YTE9OTc3LGUudGhldGFzeW1ib2xncmVlaz05NzcsZS50aGlldXRoYWNpcmNsZWtvcmVhbj0xMjkyMSxlLnRoaWV1dGhhcGFyZW5rb3JlYW49MTI4MjUsZS50aGlldXRoY2lyY2xla29yZWFuPTEyOTA3LGUudGhpZXV0aGtvcmVhbj0xMjYyMCxlLnRoaWV1dGhwYXJlbmtvcmVhbj0xMjgxMSxlLnRoaXJ0ZWVuY2lyY2xlPTkzMjQsZS50aGlydGVlbnBhcmVuPTkzNDQsZS50aGlydGVlbnBlcmlvZD05MzY0LGUudGhvbmFuZ21vbnRob3RoYWk9MzYwMSxlLnRob29rPTQyOSxlLnRob3BodXRoYW90aGFpPTM2MDIsZS50aG9ybj0yNTQsZS50aG90aGFoYW50aGFpPTM2MDcsZS50aG90aGFudGhhaT0zNjAwLGUudGhvdGhvbmd0aGFpPTM2MDgsZS50aG90aHVuZ3RoYWk9MzYwNixlLnRob3VzYW5kY3lyaWxsaWM9MTE1NCxlLnRob3VzYW5kc3NlcGFyYXRvcmFyYWJpYz0xNjQ0LGUudGhvdXNhbmRzc2VwYXJhdG9ycGVyc2lhbj0xNjQ0LGUudGhyZWU9NTEsZS50aHJlZWFyYWJpYz0xNjM1LGUudGhyZWViZW5nYWxpPTI1MzcsZS50aHJlZWNpcmNsZT05MzE0LGUudGhyZWVjaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTI0LGUudGhyZWVkZXZhPTI0MDksZS50aHJlZWVpZ2h0aHM9ODU0MCxlLnRocmVlZ3VqYXJhdGk9Mjc5MyxlLnRocmVlZ3VybXVraGk9MjY2NSxlLnRocmVlaGFja2FyYWJpYz0xNjM1LGUudGhyZWVoYW5nemhvdT0xMjMyMyxlLnRocmVlaWRlb2dyYXBoaWNwYXJlbj0xMjgzNCxlLnRocmVlaW5mZXJpb3I9ODMyMyxlLnRocmVlbW9ub3NwYWNlPTY1Mjk5LGUudGhyZWVudW1lcmF0b3JiZW5nYWxpPTI1NTAsZS50aHJlZW9sZHN0eWxlPTYzMjgzLGUudGhyZWVwYXJlbj05MzM0LGUudGhyZWVwZXJpb2Q9OTM1NCxlLnRocmVlcGVyc2lhbj0xNzc5LGUudGhyZWVxdWFydGVycz0xOTAsZS50aHJlZXF1YXJ0ZXJzZW1kYXNoPTYzMTk4LGUudGhyZWVyb21hbj04NTYyLGUudGhyZWVzdXBlcmlvcj0xNzksZS50aHJlZXRoYWk9MzY2NyxlLnRoenNxdWFyZT0xMzIwNCxlLnRpaGlyYWdhbmE9MTIzODUsZS50aWthdGFrYW5hPTEyNDgxLGUudGlrYXRha2FuYWhhbGZ3aWR0aD02NTQwOSxlLnRpa2V1dGFjaXJjbGVrb3JlYW49MTI5MTIsZS50aWtldXRhcGFyZW5rb3JlYW49MTI4MTYsZS50aWtldXRjaXJjbGVrb3JlYW49MTI4OTgsZS50aWtldXRrb3JlYW49MTI1OTksZS50aWtldXRwYXJlbmtvcmVhbj0xMjgwMixlLnRpbGRlPTczMixlLnRpbGRlYmVsb3djbWI9ODE2LGUudGlsZGVjbWI9NzcxLGUudGlsZGVjb21iPTc3MSxlLnRpbGRlZG91YmxlY21iPTg2NCxlLnRpbGRlb3BlcmF0b3I9ODc2NCxlLnRpbGRlb3ZlcmxheWNtYj04MjAsZS50aWxkZXZlcnRpY2FsY21iPTgzMCxlLnRpbWVzY2lyY2xlPTg4NTUsZS50aXBlaGFoZWJyZXc9MTQzMCxlLnRpcGVoYWxlZnRoZWJyZXc9MTQzMCxlLnRpcHBpZ3VybXVraGk9MjY3MixlLnRpdGxvY3lyaWxsaWNjbWI9MTE1NSxlLnRpd25hcm1lbmlhbj0xNDA3LGUudGxpbmViZWxvdz03NzkxLGUudG1vbm9zcGFjZT02NTM2NCxlLnRvYXJtZW5pYW49MTM4NSxlLnRvaGlyYWdhbmE9MTIzOTIsZS50b2thdGFrYW5hPTEyNDg4LGUudG9rYXRha2FuYWhhbGZ3aWR0aD02NTQxMixlLnRvbmViYXJleHRyYWhpZ2htb2Q9NzQxLGUudG9uZWJhcmV4dHJhbG93bW9kPTc0NSxlLnRvbmViYXJoaWdobW9kPTc0MixlLnRvbmViYXJsb3dtb2Q9NzQ0LGUudG9uZWJhcm1pZG1vZD03NDMsZS50b25lZml2ZT00NDUsZS50b25lc2l4PTM4OSxlLnRvbmV0d289NDI0LGUudG9ub3M9OTAwLGUudG9uc3F1YXJlPTEzMDk1LGUudG9wYXRha3RoYWk9MzU5OSxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMwOCxlLnRvcnRvaXNlc2hlbGxicmFja2V0bGVmdHNtYWxsPTY1MTE3LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRsZWZ0dmVydGljYWw9NjUwODEsZS50b3J0b2lzZXNoZWxsYnJhY2tldHJpZ2h0PTEyMzA5LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHNtYWxsPTY1MTE4LGUudG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodHZlcnRpY2FsPTY1MDgyLGUudG90YW90aGFpPTM2MDUsZS50cGFsYXRhbGhvb2s9NDI3LGUudHBhcmVuPTkzOTEsZS50cmFkZW1hcms9ODQ4MixlLnRyYWRlbWFya3NhbnM9NjM3MjIsZS50cmFkZW1hcmtzZXJpZj02MzE5NSxlLnRyZXRyb2ZsZXhob29rPTY0OCxlLnRyaWFnZG49OTY2MCxlLnRyaWFnbGY9OTY2OCxlLnRyaWFncnQ9OTY1OCxlLnRyaWFndXA9OTY1MCxlLnRzPTY3OCxlLnRzYWRpPTE1MTAsZS50c2FkaWRhZ2VzaD02NDMyNixlLnRzYWRpZGFnZXNoaGVicmV3PTY0MzI2LGUudHNhZGloZWJyZXc9MTUxMCxlLnRzZWN5cmlsbGljPTEwOTQsZS50c2VyZT0xNDYxLGUudHNlcmUxMj0xNDYxLGUudHNlcmUxZT0xNDYxLGUudHNlcmUyYj0xNDYxLGUudHNlcmVoZWJyZXc9MTQ2MSxlLnRzZXJlbmFycm93aGVicmV3PTE0NjEsZS50c2VyZXF1YXJ0ZXJoZWJyZXc9MTQ2MSxlLnRzZXJld2lkZWhlYnJldz0xNDYxLGUudHNoZWN5cmlsbGljPTExMTUsZS50c3VwZXJpb3I9NjMyMTksZS50dGFiZW5nYWxpPTI0NjMsZS50dGFkZXZhPTIzMzUsZS50dGFndWphcmF0aT0yNzE5LGUudHRhZ3VybXVraGk9MjU5MSxlLnR0ZWhhcmFiaWM9MTY1NyxlLnR0ZWhmaW5hbGFyYWJpYz02NDM1OSxlLnR0ZWhpbml0aWFsYXJhYmljPTY0MzYwLGUudHRlaG1lZGlhbGFyYWJpYz02NDM2MSxlLnR0aGFiZW5nYWxpPTI0NjQsZS50dGhhZGV2YT0yMzM2LGUudHRoYWd1amFyYXRpPTI3MjAsZS50dGhhZ3VybXVraGk9MjU5MixlLnR0dXJuZWQ9NjQ3LGUudHVoaXJhZ2FuYT0xMjM4OCxlLnR1a2F0YWthbmE9MTI0ODQsZS50dWthdGFrYW5haGFsZndpZHRoPTY1NDEwLGUudHVzbWFsbGhpcmFnYW5hPTEyMzg3LGUudHVzbWFsbGthdGFrYW5hPTEyNDgzLGUudHVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1MzkxLGUudHdlbHZlY2lyY2xlPTkzMjMsZS50d2VsdmVwYXJlbj05MzQzLGUudHdlbHZlcGVyaW9kPTkzNjMsZS50d2VsdmVyb21hbj04NTcxLGUudHdlbnR5Y2lyY2xlPTkzMzEsZS50d2VudHloYW5nemhvdT0yMTMxNixlLnR3ZW50eXBhcmVuPTkzNTEsZS50d2VudHlwZXJpb2Q9OTM3MSxlLnR3bz01MCxlLnR3b2FyYWJpYz0xNjM0LGUudHdvYmVuZ2FsaT0yNTM2LGUudHdvY2lyY2xlPTkzMTMsZS50d29jaXJjbGVpbnZlcnNlc2Fuc3NlcmlmPTEwMTIzLGUudHdvZGV2YT0yNDA4LGUudHdvZG90ZW5sZWFkZXI9ODIyOSxlLnR3b2RvdGxlYWRlcj04MjI5LGUudHdvZG90bGVhZGVydmVydGljYWw9NjUwNzIsZS50d29ndWphcmF0aT0yNzkyLGUudHdvZ3VybXVraGk9MjY2NCxlLnR3b2hhY2thcmFiaWM9MTYzNCxlLnR3b2hhbmd6aG91PTEyMzIyLGUudHdvaWRlb2dyYXBoaWNwYXJlbj0xMjgzMyxlLnR3b2luZmVyaW9yPTgzMjIsZS50d29tb25vc3BhY2U9NjUyOTgsZS50d29udW1lcmF0b3JiZW5nYWxpPTI1NDksZS50d29vbGRzdHlsZT02MzI4MixlLnR3b3BhcmVuPTkzMzMsZS50d29wZXJpb2Q9OTM1MyxlLnR3b3BlcnNpYW49MTc3OCxlLnR3b3JvbWFuPTg1NjEsZS50d29zdHJva2U9NDQzLGUudHdvc3VwZXJpb3I9MTc4LGUudHdvdGhhaT0zNjY2LGUudHdvdGhpcmRzPTg1MzIsZS51PTExNyxlLnVhY3V0ZT0yNTAsZS51YmFyPTY0OSxlLnViZW5nYWxpPTI0NDEsZS51Ym9wb21vZm89MTI1ODQsZS51YnJldmU9MzY1LGUudWNhcm9uPTQ2OCxlLnVjaXJjbGU9OTQ0NCxlLnVjaXJjdW1mbGV4PTI1MSxlLnVjaXJjdW1mbGV4YmVsb3c9Nzc5OSxlLnVjeXJpbGxpYz0xMDkxLGUudWRhdHRhZGV2YT0yMzg1LGUudWRibGFjdXRlPTM2OSxlLnVkYmxncmF2ZT01MzMsZS51ZGV2YT0yMzEzLGUudWRpZXJlc2lzPTI1MixlLnVkaWVyZXNpc2FjdXRlPTQ3MixlLnVkaWVyZXNpc2JlbG93PTc3OTUsZS51ZGllcmVzaXNjYXJvbj00NzQsZS51ZGllcmVzaXNjeXJpbGxpYz0xMjY1LGUudWRpZXJlc2lzZ3JhdmU9NDc2LGUudWRpZXJlc2lzbWFjcm9uPTQ3MCxlLnVkb3RiZWxvdz03OTA5LGUudWdyYXZlPTI0OSxlLnVndWphcmF0aT0yNjk3LGUudWd1cm11a2hpPTI1NjksZS51aGlyYWdhbmE9MTIzNTgsZS51aG9va2Fib3ZlPTc5MTEsZS51aG9ybj00MzIsZS51aG9ybmFjdXRlPTc5MTMsZS51aG9ybmRvdGJlbG93PTc5MjEsZS51aG9ybmdyYXZlPTc5MTUsZS51aG9ybmhvb2thYm92ZT03OTE3LGUudWhvcm50aWxkZT03OTE5LGUudWh1bmdhcnVtbGF1dD0zNjksZS51aHVuZ2FydW1sYXV0Y3lyaWxsaWM9MTI2NyxlLnVpbnZlcnRlZGJyZXZlPTUzNSxlLnVrYXRha2FuYT0xMjQ1NCxlLnVrYXRha2FuYWhhbGZ3aWR0aD02NTM5NSxlLnVrY3lyaWxsaWM9MTE0NSxlLnVrb3JlYW49MTI2MzYsZS51bWFjcm9uPTM2MyxlLnVtYWNyb25jeXJpbGxpYz0xMjYzLGUudW1hY3JvbmRpZXJlc2lzPTc4MDMsZS51bWF0cmFndXJtdWtoaT0yNjI1LGUudW1vbm9zcGFjZT02NTM2NSxlLnVuZGVyc2NvcmU9OTUsZS51bmRlcnNjb3JlZGJsPTgyMTUsZS51bmRlcnNjb3JlbW9ub3NwYWNlPTY1MzQzLGUudW5kZXJzY29yZXZlcnRpY2FsPTY1MDc1LGUudW5kZXJzY29yZXdhdnk9NjUxMDMsZS51bmlvbj04NzQ2LGUudW5pdmVyc2FsPTg3MDQsZS51b2dvbmVrPTM3MSxlLnVwYXJlbj05MzkyLGUudXBibG9jaz05NjAwLGUudXBwZXJkb3RoZWJyZXc9MTQ3NixlLnVwc2lsb249OTY1LGUudXBzaWxvbmRpZXJlc2lzPTk3MSxlLnVwc2lsb25kaWVyZXNpc3Rvbm9zPTk0NCxlLnVwc2lsb25sYXRpbj02NTAsZS51cHNpbG9udG9ub3M9OTczLGUudXB0YWNrYmVsb3djbWI9Nzk3LGUudXB0YWNrbW9kPTcyNCxlLnVyYWd1cm11a2hpPTI2NzUsZS51cmluZz0zNjcsZS51c2hvcnRjeXJpbGxpYz0xMTE4LGUudXNtYWxsaGlyYWdhbmE9MTIzNTcsZS51c21hbGxrYXRha2FuYT0xMjQ1MyxlLnVzbWFsbGthdGFrYW5haGFsZndpZHRoPTY1Mzg1LGUudXN0cmFpZ2h0Y3lyaWxsaWM9MTE5OSxlLnVzdHJhaWdodHN0cm9rZWN5cmlsbGljPTEyMDEsZS51dGlsZGU9MzYxLGUudXRpbGRlYWN1dGU9NzgwMSxlLnV0aWxkZWJlbG93PTc3OTcsZS51dWJlbmdhbGk9MjQ0MixlLnV1ZGV2YT0yMzE0LGUudXVndWphcmF0aT0yNjk4LGUudXVndXJtdWtoaT0yNTcwLGUudXVtYXRyYWd1cm11a2hpPTI2MjYsZS51dXZvd2Vsc2lnbmJlbmdhbGk9MjQ5OCxlLnV1dm93ZWxzaWduZGV2YT0yMzcwLGUudXV2b3dlbHNpZ25ndWphcmF0aT0yNzU0LGUudXZvd2Vsc2lnbmJlbmdhbGk9MjQ5NyxlLnV2b3dlbHNpZ25kZXZhPTIzNjksZS51dm93ZWxzaWduZ3VqYXJhdGk9Mjc1MyxlLnY9MTE4LGUudmFkZXZhPTIzNTcsZS52YWd1amFyYXRpPTI3NDEsZS52YWd1cm11a2hpPTI2MTMsZS52YWthdGFrYW5hPTEyNTM1LGUudmF2PTE0OTMsZS52YXZkYWdlc2g9NjQzMDksZS52YXZkYWdlc2g2NT02NDMwOSxlLnZhdmRhZ2VzaGhlYnJldz02NDMwOSxlLnZhdmhlYnJldz0xNDkzLGUudmF2aG9sYW09NjQzMzEsZS52YXZob2xhbWhlYnJldz02NDMzMSxlLnZhdnZhdmhlYnJldz0xNTIwLGUudmF2eW9kaGVicmV3PTE1MjEsZS52Y2lyY2xlPTk0NDUsZS52ZG90YmVsb3c9NzgwNyxlLnZlY3lyaWxsaWM9MTA3NCxlLnZlaGFyYWJpYz0xNzAwLGUudmVoZmluYWxhcmFiaWM9NjQzNjMsZS52ZWhpbml0aWFsYXJhYmljPTY0MzY0LGUudmVobWVkaWFsYXJhYmljPTY0MzY1LGUudmVrYXRha2FuYT0xMjUzNyxlLnZlbnVzPTk3OTIsZS52ZXJ0aWNhbGJhcj0xMjQsZS52ZXJ0aWNhbGxpbmVhYm92ZWNtYj03ODEsZS52ZXJ0aWNhbGxpbmViZWxvd2NtYj04MDksZS52ZXJ0aWNhbGxpbmVsb3dtb2Q9NzE2LGUudmVydGljYWxsaW5lbW9kPTcxMixlLnZld2FybWVuaWFuPTE0MDYsZS52aG9vaz02NTEsZS52aWthdGFrYW5hPTEyNTM2LGUudmlyYW1hYmVuZ2FsaT0yNTA5LGUudmlyYW1hZGV2YT0yMzgxLGUudmlyYW1hZ3VqYXJhdGk9Mjc2NSxlLnZpc2FyZ2FiZW5nYWxpPTI0MzUsZS52aXNhcmdhZGV2YT0yMzA3LGUudmlzYXJnYWd1amFyYXRpPTI2OTEsZS52bW9ub3NwYWNlPTY1MzY2LGUudm9hcm1lbmlhbj0xNDAwLGUudm9pY2VkaXRlcmF0aW9uaGlyYWdhbmE9MTI0NDYsZS52b2ljZWRpdGVyYXRpb25rYXRha2FuYT0xMjU0MixlLnZvaWNlZG1hcmtrYW5hPTEyNDQzLGUudm9pY2VkbWFya2thbmFoYWxmd2lkdGg9NjU0MzgsZS52b2thdGFrYW5hPTEyNTM4LGUudnBhcmVuPTkzOTMsZS52dGlsZGU9NzgwNSxlLnZ0dXJuZWQ9NjUyLGUudnVoaXJhZ2FuYT0xMjQzNixlLnZ1a2F0YWthbmE9MTI1MzIsZS53PTExOSxlLndhY3V0ZT03ODExLGUud2Fla29yZWFuPTEyNjMzLGUud2FoaXJhZ2FuYT0xMjQzMSxlLndha2F0YWthbmE9MTI1MjcsZS53YWthdGFrYW5haGFsZndpZHRoPTY1NDM2LGUud2Frb3JlYW49MTI2MzIsZS53YXNtYWxsaGlyYWdhbmE9MTI0MzAsZS53YXNtYWxsa2F0YWthbmE9MTI1MjYsZS53YXR0b3NxdWFyZT0xMzE0MyxlLndhdmVkYXNoPTEyMzE2LGUud2F2eXVuZGVyc2NvcmV2ZXJ0aWNhbD02NTA3NixlLndhd2FyYWJpYz0xNjA4LGUud2F3ZmluYWxhcmFiaWM9NjUyNjIsZS53YXdoYW16YWFib3ZlYXJhYmljPTE1NzIsZS53YXdoYW16YWFib3ZlZmluYWxhcmFiaWM9NjUxNTgsZS53YnNxdWFyZT0xMzI3NyxlLndjaXJjbGU9OTQ0NixlLndjaXJjdW1mbGV4PTM3MyxlLndkaWVyZXNpcz03ODEzLGUud2RvdGFjY2VudD03ODE1LGUud2RvdGJlbG93PTc4MTcsZS53ZWhpcmFnYW5hPTEyNDMzLGUud2VpZXJzdHJhc3M9ODQ3MixlLndla2F0YWthbmE9MTI1MjksZS53ZWtvcmVhbj0xMjYzOCxlLndlb2tvcmVhbj0xMjYzNyxlLndncmF2ZT03ODA5LGUud2hpdGVidWxsZXQ9OTcwMixlLndoaXRlY2lyY2xlPTk2NzUsZS53aGl0ZWNpcmNsZWludmVyc2U9OTY4OSxlLndoaXRlY29ybmVyYnJhY2tldGxlZnQ9MTIzMDIsZS53aGl0ZWNvcm5lcmJyYWNrZXRsZWZ0dmVydGljYWw9NjUwOTEsZS53aGl0ZWNvcm5lcmJyYWNrZXRyaWdodD0xMjMwMyxlLndoaXRlY29ybmVyYnJhY2tldHJpZ2h0dmVydGljYWw9NjUwOTIsZS53aGl0ZWRpYW1vbmQ9OTY3MSxlLndoaXRlZGlhbW9uZGNvbnRhaW5pbmdibGFja3NtYWxsZGlhbW9uZD05NjcyLGUud2hpdGVkb3ducG9pbnRpbmdzbWFsbHRyaWFuZ2xlPTk2NjMsZS53aGl0ZWRvd25wb2ludGluZ3RyaWFuZ2xlPTk2NjEsZS53aGl0ZWxlZnRwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY2NyxlLndoaXRlbGVmdHBvaW50aW5ndHJpYW5nbGU9OTY2NSxlLndoaXRlbGVudGljdWxhcmJyYWNrZXRsZWZ0PTEyMzEwLGUud2hpdGVsZW50aWN1bGFyYnJhY2tldHJpZ2h0PTEyMzExLGUud2hpdGVyaWdodHBvaW50aW5nc21hbGx0cmlhbmdsZT05NjU3LGUud2hpdGVyaWdodHBvaW50aW5ndHJpYW5nbGU9OTY1NTtlLndoaXRlc21hbGxzcXVhcmU9OTY0MyxlLndoaXRlc21pbGluZ2ZhY2U9OTc4NixlLndoaXRlc3F1YXJlPTk2MzMsZS53aGl0ZXN0YXI9OTczNCxlLndoaXRldGVsZXBob25lPTk3NDMsZS53aGl0ZXRvcnRvaXNlc2hlbGxicmFja2V0bGVmdD0xMjMxMixlLndoaXRldG9ydG9pc2VzaGVsbGJyYWNrZXRyaWdodD0xMjMxMyxlLndoaXRldXBwb2ludGluZ3NtYWxsdHJpYW5nbGU9OTY1MyxlLndoaXRldXBwb2ludGluZ3RyaWFuZ2xlPTk2NTEsZS53aWhpcmFnYW5hPTEyNDMyLGUud2lrYXRha2FuYT0xMjUyOCxlLndpa29yZWFuPTEyNjM5LGUud21vbm9zcGFjZT02NTM2NyxlLndvaGlyYWdhbmE9MTI0MzQsZS53b2thdGFrYW5hPTEyNTMwLGUud29rYXRha2FuYWhhbGZ3aWR0aD02NTM4MixlLndvbj04MzYxLGUud29ubW9ub3NwYWNlPTY1NTEwLGUud293YWVudGhhaT0zNjIzLGUud3BhcmVuPTkzOTQsZS53cmluZz03ODMyLGUud3N1cGVyaW9yPTY5NSxlLnd0dXJuZWQ9NjUzLGUud3lubj00NDcsZS54PTEyMCxlLnhhYm92ZWNtYj04MjksZS54Ym9wb21vZm89MTI1NjIsZS54Y2lyY2xlPTk0NDcsZS54ZGllcmVzaXM9NzgyMSxlLnhkb3RhY2NlbnQ9NzgxOSxlLnhlaGFybWVuaWFuPTEzODksZS54aT05NTgsZS54bW9ub3NwYWNlPTY1MzY4LGUueHBhcmVuPTkzOTUsZS54c3VwZXJpb3I9NzM5LGUueT0xMjEsZS55YWFkb3NxdWFyZT0xMzEzNCxlLnlhYmVuZ2FsaT0yNDc5LGUueWFjdXRlPTI1MyxlLnlhZGV2YT0yMzUxLGUueWFla29yZWFuPTEyNjI2LGUueWFndWphcmF0aT0yNzM1LGUueWFndXJtdWtoaT0yNjA3LGUueWFoaXJhZ2FuYT0xMjQyMCxlLnlha2F0YWthbmE9MTI1MTYsZS55YWthdGFrYW5haGFsZndpZHRoPTY1NDI4LGUueWFrb3JlYW49MTI2MjUsZS55YW1ha2thbnRoYWk9MzY2MixlLnlhc21hbGxoaXJhZ2FuYT0xMjQxOSxlLnlhc21hbGxrYXRha2FuYT0xMjUxNSxlLnlhc21hbGxrYXRha2FuYWhhbGZ3aWR0aD02NTM4OCxlLnlhdGN5cmlsbGljPTExMjMsZS55Y2lyY2xlPTk0NDgsZS55Y2lyY3VtZmxleD0zNzUsZS55ZGllcmVzaXM9MjU1LGUueWRvdGFjY2VudD03ODIzLGUueWRvdGJlbG93PTc5MjUsZS55ZWhhcmFiaWM9MTYxMCxlLnllaGJhcnJlZWFyYWJpYz0xNzQ2LGUueWVoYmFycmVlZmluYWxhcmFiaWM9NjQ0MzEsZS55ZWhmaW5hbGFyYWJpYz02NTI2NixlLnllaGhhbXphYWJvdmVhcmFiaWM9MTU3NCxlLnllaGhhbXphYWJvdmVmaW5hbGFyYWJpYz02NTE2MixlLnllaGhhbXphYWJvdmVpbml0aWFsYXJhYmljPTY1MTYzLGUueWVoaGFtemFhYm92ZW1lZGlhbGFyYWJpYz02NTE2NCxlLnllaGluaXRpYWxhcmFiaWM9NjUyNjcsZS55ZWhtZWRpYWxhcmFiaWM9NjUyNjgsZS55ZWhtZWVtaW5pdGlhbGFyYWJpYz02NDczMyxlLnllaG1lZW1pc29sYXRlZGFyYWJpYz02NDYwMCxlLnllaG5vb25maW5hbGFyYWJpYz02NDY2MCxlLnllaHRocmVlZG90c2JlbG93YXJhYmljPTE3NDUsZS55ZWtvcmVhbj0xMjYzMCxlLnllbj0xNjUsZS55ZW5tb25vc3BhY2U9NjU1MDksZS55ZW9rb3JlYW49MTI2MjksZS55ZW9yaW5oaWV1aGtvcmVhbj0xMjY3OCxlLnllcmFoYmVueW9tb2hlYnJldz0xNDUwLGUueWVyYWhiZW55b21vbGVmdGhlYnJldz0xNDUwLGUueWVyaWN5cmlsbGljPTEwOTksZS55ZXJ1ZGllcmVzaXNjeXJpbGxpYz0xMjczLGUueWVzaWV1bmdrb3JlYW49MTI2NzMsZS55ZXNpZXVuZ3BhbnNpb3Nrb3JlYW49MTI2NzUsZS55ZXNpZXVuZ3Npb3Nrb3JlYW49MTI2NzQsZS55ZXRpdmhlYnJldz0xNDM0LGUueWdyYXZlPTc5MjMsZS55aG9vaz00MzYsZS55aG9va2Fib3ZlPTc5MjcsZS55aWFybWVuaWFuPTEzOTcsZS55aWN5cmlsbGljPTExMTEsZS55aWtvcmVhbj0xMjY0MixlLnlpbnlhbmc9OTc3NSxlLnlpd25hcm1lbmlhbj0xNDEwLGUueW1vbm9zcGFjZT02NTM2OSxlLnlvZD0xNDk3LGUueW9kZGFnZXNoPTY0MzEzLGUueW9kZGFnZXNoaGVicmV3PTY0MzEzLGUueW9kaGVicmV3PTE0OTcsZS55b2R5b2RoZWJyZXc9MTUyMixlLnlvZHlvZHBhdGFoaGVicmV3PTY0Mjg3LGUueW9oaXJhZ2FuYT0xMjQyNCxlLnlvaWtvcmVhbj0xMjY4MSxlLnlva2F0YWthbmE9MTI1MjAsZS55b2thdGFrYW5haGFsZndpZHRoPTY1NDMwLGUueW9rb3JlYW49MTI2MzUsZS55b3NtYWxsaGlyYWdhbmE9MTI0MjMsZS55b3NtYWxsa2F0YWthbmE9MTI1MTksZS55b3NtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzOTAsZS55b3RncmVlaz0xMDExLGUueW95YWVrb3JlYW49MTI2ODAsZS55b3lha29yZWFuPTEyNjc5LGUueW95YWt0aGFpPTM2MTgsZS55b3lpbmd0aGFpPTM1OTcsZS55cGFyZW49OTM5NixlLnlwb2dlZ3JhbW1lbmk9ODkwLGUueXBvZ2VncmFtbWVuaWdyZWVrY21iPTgzNyxlLnlyPTQyMixlLnlyaW5nPTc4MzMsZS55c3VwZXJpb3I9Njk2LGUueXRpbGRlPTc5MjksZS55dHVybmVkPTY1NCxlLnl1aGlyYWdhbmE9MTI0MjIsZS55dWlrb3JlYW49MTI2ODQsZS55dWthdGFrYW5hPTEyNTE4LGUueXVrYXRha2FuYWhhbGZ3aWR0aD02NTQyOSxlLnl1a29yZWFuPTEyNjQwLGUueXVzYmlnY3lyaWxsaWM9MTEzMSxlLnl1c2JpZ2lvdGlmaWVkY3lyaWxsaWM9MTEzMyxlLnl1c2xpdHRsZWN5cmlsbGljPTExMjcsZS55dXNsaXR0bGVpb3RpZmllZGN5cmlsbGljPTExMjksZS55dXNtYWxsaGlyYWdhbmE9MTI0MjEsZS55dXNtYWxsa2F0YWthbmE9MTI1MTcsZS55dXNtYWxsa2F0YWthbmFoYWxmd2lkdGg9NjUzODksZS55dXlla29yZWFuPTEyNjgzLGUueXV5ZW9rb3JlYW49MTI2ODIsZS55eWFiZW5nYWxpPTI1MjcsZS55eWFkZXZhPTIzOTksZS56PTEyMixlLnphYXJtZW5pYW49MTM4MixlLnphY3V0ZT0zNzgsZS56YWRldmE9MjM5NSxlLnphZ3VybXVraGk9MjY1MSxlLnphaGFyYWJpYz0xNTkyLGUuemFoZmluYWxhcmFiaWM9NjUyMjIsZS56YWhpbml0aWFsYXJhYmljPTY1MjIzLGUuemFoaXJhZ2FuYT0xMjM3NCxlLnphaG1lZGlhbGFyYWJpYz02NTIyNCxlLnphaW5hcmFiaWM9MTU4NixlLnphaW5maW5hbGFyYWJpYz02NTIwMCxlLnpha2F0YWthbmE9MTI0NzAsZS56YXFlZmdhZG9saGVicmV3PTE0MjksZS56YXFlZnFhdGFuaGVicmV3PTE0MjgsZS56YXJxYWhlYnJldz0xNDMyLGUuemF5aW49MTQ5NCxlLnpheWluZGFnZXNoPTY0MzEwLGUuemF5aW5kYWdlc2hoZWJyZXc9NjQzMTAsZS56YXlpbmhlYnJldz0xNDk0LGUuemJvcG9tb2ZvPTEyNTY3LGUuemNhcm9uPTM4MixlLnpjaXJjbGU9OTQ0OSxlLnpjaXJjdW1mbGV4PTc4MjUsZS56Y3VybD02NTcsZS56ZG90PTM4MCxlLnpkb3RhY2NlbnQ9MzgwLGUuemRvdGJlbG93PTc4MjcsZS56ZWN5cmlsbGljPTEwNzksZS56ZWRlc2NlbmRlcmN5cmlsbGljPTExNzcsZS56ZWRpZXJlc2lzY3lyaWxsaWM9MTI0NyxlLnplaGlyYWdhbmE9MTIzODAsZS56ZWthdGFrYW5hPTEyNDc2LGUuemVybz00OCxlLnplcm9hcmFiaWM9MTYzMixlLnplcm9iZW5nYWxpPTI1MzQsZS56ZXJvZGV2YT0yNDA2LGUuemVyb2d1amFyYXRpPTI3OTAsZS56ZXJvZ3VybXVraGk9MjY2MixlLnplcm9oYWNrYXJhYmljPTE2MzIsZS56ZXJvaW5mZXJpb3I9ODMyMCxlLnplcm9tb25vc3BhY2U9NjUyOTYsZS56ZXJvb2xkc3R5bGU9NjMyODAsZS56ZXJvcGVyc2lhbj0xNzc2LGUuemVyb3N1cGVyaW9yPTgzMDQsZS56ZXJvdGhhaT0zNjY0LGUuemVyb3dpZHRoam9pbmVyPTY1Mjc5LGUuemVyb3dpZHRobm9uam9pbmVyPTgyMDQsZS56ZXJvd2lkdGhzcGFjZT04MjAzLGUuemV0YT05NTAsZS56aGJvcG9tb2ZvPTEyNTYzLGUuemhlYXJtZW5pYW49MTM4NixlLnpoZWJyZXZlY3lyaWxsaWM9MTIxOCxlLnpoZWN5cmlsbGljPTEwNzgsZS56aGVkZXNjZW5kZXJjeXJpbGxpYz0xMTc1LGUuemhlZGllcmVzaXNjeXJpbGxpYz0xMjQ1LGUuemloaXJhZ2FuYT0xMjM3NixlLnppa2F0YWthbmE9MTI0NzIsZS56aW5vcmhlYnJldz0xNDU0LGUuemxpbmViZWxvdz03ODI5LGUuem1vbm9zcGFjZT02NTM3MCxlLnpvaGlyYWdhbmE9MTIzODIsZS56b2thdGFrYW5hPTEyNDc4LGUuenBhcmVuPTkzOTcsZS56cmV0cm9mbGV4aG9vaz02NTYsZS56c3Ryb2tlPTQzOCxlLnp1aGlyYWdhbmE9MTIzNzgsZS56dWthdGFrYW5hPTEyNDc0LGVbIi5ub3RkZWYiXT0wLGUuYW5nYnJhY2tldGxlZnRiaWc9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnPTkwMDEsZS5hbmdicmFja2V0bGVmdGJpZ2c9OTAwMSxlLmFuZ2JyYWNrZXRsZWZ0QmlnZz05MDAxLGUuYW5nYnJhY2tldHJpZ2h0QmlnPTkwMDIsZS5hbmdicmFja2V0cmlnaHRiaWc9OTAwMixlLmFuZ2JyYWNrZXRyaWdodEJpZ2c9OTAwMixlLmFuZ2JyYWNrZXRyaWdodGJpZ2c9OTAwMixlLmFycm93aG9va2xlZnQ9ODYxOCxlLmFycm93aG9va3JpZ2h0PTg2MTcsZS5hcnJvd2xlZnR0b3BoYWxmPTg2MzYsZS5hcnJvd2xlZnRib3RoYWxmPTg2MzcsZS5hcnJvd25vcnRoZWFzdD04NTk5LGUuYXJyb3dub3J0aHdlc3Q9ODU5OCxlLmFycm93cmlnaHR0b3BoYWxmPTg2NDAsZS5hcnJvd3JpZ2h0Ym90aGFsZj04NjQxLGUuYXJyb3dzb3V0aGVhc3Q9ODYwMCxlLmFycm93c291dGh3ZXN0PTg2MDEsZS5iYWNrc2xhc2hiaWc9ODcyNixlLmJhY2tzbGFzaEJpZz04NzI2LGUuYmFja3NsYXNoQmlnZz04NzI2LGUuYmFja3NsYXNoYmlnZz04NzI2LGUuYmFyZGJsPTgyMTQsZS5icmFjZWh0aXBkb3dubGVmdD02NTA3OSxlLmJyYWNlaHRpcGRvd25yaWdodD02NTA3OSxlLmJyYWNlaHRpcHVwbGVmdD02NTA4MCxlLmJyYWNlaHRpcHVwcmlnaHQ9NjUwODAsZS5icmFjZWxlZnRCaWc9MTIzLGUuYnJhY2VsZWZ0YmlnPTEyMyxlLmJyYWNlbGVmdGJpZ2c9MTIzLGUuYnJhY2VsZWZ0QmlnZz0xMjMsZS5icmFjZXJpZ2h0QmlnPTEyNSxlLmJyYWNlcmlnaHRiaWc9MTI1LGUuYnJhY2VyaWdodGJpZ2c9MTI1LGUuYnJhY2VyaWdodEJpZ2c9MTI1LGUuYnJhY2tldGxlZnRiaWc9OTEsZS5icmFja2V0bGVmdEJpZz05MSxlLmJyYWNrZXRsZWZ0YmlnZz05MSxlLmJyYWNrZXRsZWZ0QmlnZz05MSxlLmJyYWNrZXRyaWdodEJpZz05MyxlLmJyYWNrZXRyaWdodGJpZz05MyxlLmJyYWNrZXRyaWdodGJpZ2c9OTMsZS5icmFja2V0cmlnaHRCaWdnPTkzLGUuY2VpbGluZ2xlZnRiaWc9ODk2OCxlLmNlaWxpbmdsZWZ0QmlnPTg5NjgsZS5jZWlsaW5nbGVmdEJpZ2c9ODk2OCxlLmNlaWxpbmdsZWZ0YmlnZz04OTY4LGUuY2VpbGluZ3JpZ2h0YmlnPTg5NjksZS5jZWlsaW5ncmlnaHRCaWc9ODk2OSxlLmNlaWxpbmdyaWdodGJpZ2c9ODk2OSxlLmNlaWxpbmdyaWdodEJpZ2c9ODk2OSxlLmNpcmNsZWRvdGRpc3BsYXk9ODg1NyxlLmNpcmNsZWRvdHRleHQ9ODg1NyxlLmNpcmNsZW11bHRpcGx5ZGlzcGxheT04ODU1LGUuY2lyY2xlbXVsdGlwbHl0ZXh0PTg4NTUsZS5jaXJjbGVwbHVzZGlzcGxheT04ODUzLGUuY2lyY2xlcGx1c3RleHQ9ODg1MyxlLmNvbnRpbnRlZ3JhbGRpc3BsYXk9ODc1MCxlLmNvbnRpbnRlZ3JhbHRleHQ9ODc1MCxlLmNvcHJvZHVjdGRpc3BsYXk9ODcyMCxlLmNvcHJvZHVjdHRleHQ9ODcyMCxlLmZsb29ybGVmdEJpZz04OTcwLGUuZmxvb3JsZWZ0YmlnPTg5NzAsZS5mbG9vcmxlZnRiaWdnPTg5NzAsZS5mbG9vcmxlZnRCaWdnPTg5NzAsZS5mbG9vcnJpZ2h0YmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnPTg5NzEsZS5mbG9vcnJpZ2h0QmlnZz04OTcxLGUuZmxvb3JyaWdodGJpZ2c9ODk3MSxlLmhhdHdpZGU9NzcwLGUuaGF0d2lkZXI9NzcwLGUuaGF0d2lkZXN0PTc3MCxlLmludGVyY2FsPTc0ODgsZS5pbnRlZ3JhbGRpc3BsYXk9ODc0NyxlLmludGVncmFsdGV4dD04NzQ3LGUuaW50ZXJzZWN0aW9uZGlzcGxheT04ODk4LGUuaW50ZXJzZWN0aW9udGV4dD04ODk4LGUubG9naWNhbGFuZGRpc3BsYXk9ODc0MyxlLmxvZ2ljYWxhbmR0ZXh0PTg3NDMsZS5sb2dpY2Fsb3JkaXNwbGF5PTg3NDQsZS5sb2dpY2Fsb3J0ZXh0PTg3NDQsZS5wYXJlbmxlZnRCaWc9NDAsZS5wYXJlbmxlZnRiaWc9NDAsZS5wYXJlbmxlZnRCaWdnPTQwLGUucGFyZW5sZWZ0YmlnZz00MCxlLnBhcmVucmlnaHRCaWc9NDEsZS5wYXJlbnJpZ2h0YmlnPTQxLGUucGFyZW5yaWdodEJpZ2c9NDEsZS5wYXJlbnJpZ2h0YmlnZz00MSxlLnByaW1lPTgyNDIsZS5wcm9kdWN0ZGlzcGxheT04NzE5LGUucHJvZHVjdHRleHQ9ODcxOSxlLnJhZGljYWxiaWc9ODczMCxlLnJhZGljYWxCaWc9ODczMCxlLnJhZGljYWxCaWdnPTg3MzAsZS5yYWRpY2FsYmlnZz04NzMwLGUucmFkaWNhbGJ0PTg3MzAsZS5yYWRpY2FsdHA9ODczMCxlLnJhZGljYWx2ZXJ0ZXg9ODczMCxlLnNsYXNoYmlnPTQ3LGUuc2xhc2hCaWc9NDcsZS5zbGFzaEJpZ2c9NDcsZS5zbGFzaGJpZ2c9NDcsZS5zdW1tYXRpb25kaXNwbGF5PTg3MjEsZS5zdW1tYXRpb250ZXh0PTg3MjEsZS50aWxkZXdpZGU9NzMyLGUudGlsZGV3aWRlcj03MzIsZS50aWxkZXdpZGVzdD03MzIsZS51bmlvbmRpc3BsYXk9ODg5OSxlLnVuaW9ubXVsdGlkaXNwbGF5PTg4NDYsZS51bmlvbm11bHRpdGV4dD04ODQ2LGUudW5pb25zcWRpc3BsYXk9ODg1MixlLnVuaW9uc3F0ZXh0PTg4NTIsZS51bmlvbnRleHQ9ODg5OSxlLnZleHRlbmRkb3VibGU9ODc0MSxlLnZleHRlbmRzaW5nbGU9ODczOX0pKSxpPW4oKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MzIsZS5hMT05OTg1LGUuYTI9OTk4NixlLmEyMDI9OTk4NyxlLmEzPTk5ODgsZS5hND05NzQyLGUuYTU9OTk5MCxlLmExMTk9OTk5MSxlLmExMTg9OTk5MixlLmExMTc9OTk5MyxlLmExMT05NzU1LGUuYTEyPTk3NTgsZS5hMTM9OTk5NixlLmExND05OTk3LGUuYTE1PTk5OTgsZS5hMTY9OTk5OSxlLmExMDU9MWU0LGUuYTE3PTEwMDAxLGUuYTE4PTEwMDAyLGUuYTE5PTEwMDAzLGUuYTIwPTEwMDA0LGUuYTIxPTEwMDA1LGUuYTIyPTEwMDA2LGUuYTIzPTEwMDA3LGUuYTI0PTEwMDA4LGUuYTI1PTEwMDA5LGUuYTI2PTEwMDEwLGUuYTI3PTEwMDExLGUuYTI4PTEwMDEyLGUuYTY9MTAwMTMsZS5hNz0xMDAxNCxlLmE4PTEwMDE1LGUuYTk9MTAwMTYsZS5hMTA9MTAwMTcsZS5hMjk9MTAwMTgsZS5hMzA9MTAwMTksZS5hMzE9MTAwMjAsZS5hMzI9MTAwMjEsZS5hMzM9MTAwMjIsZS5hMzQ9MTAwMjMsZS5hMzU9OTczMyxlLmEzNj0xMDAyNSxlLmEzNz0xMDAyNixlLmEzOD0xMDAyNyxlLmEzOT0xMDAyOCxlLmE0MD0xMDAyOSxlLmE0MT0xMDAzMCxlLmE0Mj0xMDAzMSxlLmE0Mz0xMDAzMixlLmE0ND0xMDAzMyxlLmE0NT0xMDAzNCxlLmE0Nj0xMDAzNSxlLmE0Nz0xMDAzNixlLmE0OD0xMDAzNyxlLmE0OT0xMDAzOCxlLmE1MD0xMDAzOSxlLmE1MT0xMDA0MCxlLmE1Mj0xMDA0MSxlLmE1Mz0xMDA0MixlLmE1ND0xMDA0MyxlLmE1NT0xMDA0NCxlLmE1Nj0xMDA0NSxlLmE1Nz0xMDA0NixlLmE1OD0xMDA0NyxlLmE1OT0xMDA0OCxlLmE2MD0xMDA0OSxlLmE2MT0xMDA1MCxlLmE2Mj0xMDA1MSxlLmE2Mz0xMDA1MixlLmE2ND0xMDA1MyxlLmE2NT0xMDA1NCxlLmE2Nj0xMDA1NSxlLmE2Nz0xMDA1NixlLmE2OD0xMDA1NyxlLmE2OT0xMDA1OCxlLmE3MD0xMDA1OSxlLmE3MT05Njc5LGUuYTcyPTEwMDYxLGUuYTczPTk2MzIsZS5hNzQ9MTAwNjMsZS5hMjAzPTEwMDY0LGUuYTc1PTEwMDY1LGUuYTIwND0xMDA2NixlLmE3Nj05NjUwLGUuYTc3PTk2NjAsZS5hNzg9OTY3MCxlLmE3OT0xMDA3MCxlLmE4MT05Njg3LGUuYTgyPTEwMDcyLGUuYTgzPTEwMDczLGUuYTg0PTEwMDc0LGUuYTk3PTEwMDc1LGUuYTk4PTEwMDc2LGUuYTk5PTEwMDc3LGUuYTEwMD0xMDA3OCxlLmExMDE9MTAwODEsZS5hMTAyPTEwMDgyLGUuYTEwMz0xMDA4MyxlLmExMDQ9MTAwODQsZS5hMTA2PTEwMDg1LGUuYTEwNz0xMDA4NixlLmExMDg9MTAwODcsZS5hMTEyPTk4MjcsZS5hMTExPTk4MzAsZS5hMTEwPTk4MjksZS5hMTA5PTk4MjQsZS5hMTIwPTkzMTIsZS5hMTIxPTkzMTMsZS5hMTIyPTkzMTQsZS5hMTIzPTkzMTUsZS5hMTI0PTkzMTYsZS5hMTI1PTkzMTcsZS5hMTI2PTkzMTgsZS5hMTI3PTkzMTksZS5hMTI4PTkzMjAsZS5hMTI5PTkzMjEsZS5hMTMwPTEwMTAyLGUuYTEzMT0xMDEwMyxlLmExMzI9MTAxMDQsZS5hMTMzPTEwMTA1LGUuYTEzND0xMDEwNixlLmExMzU9MTAxMDcsZS5hMTM2PTEwMTA4LGUuYTEzNz0xMDEwOSxlLmExMzg9MTAxMTAsZS5hMTM5PTEwMTExLGUuYTE0MD0xMDExMixlLmExNDE9MTAxMTMsZS5hMTQyPTEwMTE0LGUuYTE0Mz0xMDExNSxlLmExNDQ9MTAxMTYsZS5hMTQ1PTEwMTE3LGUuYTE0Nj0xMDExOCxlLmExNDc9MTAxMTksZS5hMTQ4PTEwMTIwLGUuYTE0OT0xMDEyMSxlLmExNTA9MTAxMjIsZS5hMTUxPTEwMTIzLGUuYTE1Mj0xMDEyNCxlLmExNTM9MTAxMjUsZS5hMTU0PTEwMTI2LGUuYTE1NT0xMDEyNyxlLmExNTY9MTAxMjgsZS5hMTU3PTEwMTI5LGUuYTE1OD0xMDEzMCxlLmExNTk9MTAxMzEsZS5hMTYwPTEwMTMyLGUuYTE2MT04NTk0LGUuYTE2Mz04NTk2LGUuYTE2ND04NTk3LGUuYTE5Nj0xMDEzNixlLmExNjU9MTAxMzcsZS5hMTkyPTEwMTM4LGUuYTE2Nj0xMDEzOSxlLmExNjc9MTAxNDAsZS5hMTY4PTEwMTQxLGUuYTE2OT0xMDE0MixlLmExNzA9MTAxNDMsZS5hMTcxPTEwMTQ0LGUuYTE3Mj0xMDE0NSxlLmExNzM9MTAxNDYsZS5hMTYyPTEwMTQ3LGUuYTE3ND0xMDE0OCxlLmExNzU9MTAxNDksZS5hMTc2PTEwMTUwLGUuYTE3Nz0xMDE1MSxlLmExNzg9MTAxNTIsZS5hMTc5PTEwMTUzLGUuYTE5Mz0xMDE1NCxlLmExODA9MTAxNTUsZS5hMTk5PTEwMTU2LGUuYTE4MT0xMDE1NyxlLmEyMDA9MTAxNTgsZS5hMTgyPTEwMTU5LGUuYTIwMT0xMDE2MSxlLmExODM9MTAxNjIsZS5hMTg0PTEwMTYzLGUuYTE5Nz0xMDE2NCxlLmExODU9MTAxNjUsZS5hMTk0PTEwMTY2LGUuYTE5OD0xMDE2NyxlLmExODY9MTAxNjgsZS5hMTk1PTEwMTY5LGUuYTE4Nz0xMDE3MCxlLmExODg9MTAxNzEsZS5hMTg5PTEwMTcyLGUuYTE5MD0xMDE3MyxlLmExOTE9MTAxNzQsZS5hODk9MTAwODgsZS5hOTA9MTAwODksZS5hOTM9MTAwOTAsZS5hOTQ9MTAwOTEsZS5hOTE9MTAwOTIsZS5hOTI9MTAwOTMsZS5hMjA1PTEwMDk0LGUuYTg1PTEwMDk1LGUuYTIwNj0xMDA5NixlLmE4Nj0xMDA5NyxlLmE4Nz0xMDA5OCxlLmE4OD0xMDA5OSxlLmE5NT0xMDEwMCxlLmE5Nj0xMDEwMSxlWyIubm90ZGVmIl09MH0pKTt0LmdldEdseXBoc1VuaWNvZGU9YSx0LmdldERpbmdiYXRzR2x5cGhzVW5pY29kZT1pfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQ2FsaWJyaT10LmdldFN1cHBsZW1lbnRhbEdseXBoTWFwRm9yQXJpYWxCbGFjaz10LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz10LmdldFN5bWJvbHNGb250cz10LmdldFNlcmlmRm9udHM9dC5nZXROb25TdGRGb250TWFwPXQuZ2V0U3RkRm9udE1hcD12b2lkIDA7dmFyIG49cig2KSxhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5BcmlhbE5hcnJvdz0iSGVsdmV0aWNhIixlWyJBcmlhbE5hcnJvdy1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbE5hcnJvdy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWxOYXJyb3ctSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsQmxhY2s9IkhlbHZldGljYSIsZVsiQXJpYWxCbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbEJsYWNrLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbEJsYWNrLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZVsiQXJpYWwtQmxhY2siXT0iSGVsdmV0aWNhIixlWyJBcmlhbC1CbGFjay1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJBcmlhbC1CbGFjay1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQXJpYWwtQmxhY2stSXRhbGljIl09IkhlbHZldGljYS1PYmxpcXVlIixlLkFyaWFsPSJIZWx2ZXRpY2EiLGVbIkFyaWFsLUJvbGQiXT0iSGVsdmV0aWNhLUJvbGQiLGVbIkFyaWFsLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJBcmlhbC1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkFyaWFsLUJvbGRJdGFsaWNNVCJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkFyaWFsLUJvbGRNVCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQXJpYWwtSXRhbGljTVQiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQXJpYWxNVD0iSGVsdmV0aWNhIixlWyJDb3VyaWVyLUJvbGQiXT0iQ291cmllci1Cb2xkIixlWyJDb3VyaWVyLUJvbGRJdGFsaWMiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllci1JdGFsaWMiXT0iQ291cmllci1PYmxpcXVlIixlLkNvdXJpZXJOZXc9IkNvdXJpZXIiLGVbIkNvdXJpZXJOZXctQm9sZCJdPSJDb3VyaWVyLUJvbGQiLGVbIkNvdXJpZXJOZXctQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJDb3VyaWVyTmV3LUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIkNvdXJpZXJOZXdQUy1Cb2xkSXRhbGljTVQiXT0iQ291cmllci1Cb2xkT2JsaXF1ZSIsZVsiQ291cmllck5ld1BTLUJvbGRNVCJdPSJDb3VyaWVyLUJvbGQiLGVbIkNvdXJpZXJOZXdQUy1JdGFsaWNNVCJdPSJDb3VyaWVyLU9ibGlxdWUiLGUuQ291cmllck5ld1BTTVQ9IkNvdXJpZXIiLGUuSGVsdmV0aWNhPSJIZWx2ZXRpY2EiLGVbIkhlbHZldGljYS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJIZWx2ZXRpY2EtQm9sZEl0YWxpYyJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1Cb2xkT2JsaXF1ZSJdPSJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiLGVbIkhlbHZldGljYS1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGVbIkhlbHZldGljYS1PYmxpcXVlIl09IkhlbHZldGljYS1PYmxpcXVlIixlLlNlZ29lVUlTeW1ib2w9IkhlbHZldGljYSIsZVsiU3ltYm9sLUJvbGQiXT0iU3ltYm9sIixlWyJTeW1ib2wtQm9sZEl0YWxpYyJdPSJTeW1ib2wiLGVbIlN5bWJvbC1JdGFsaWMiXT0iU3ltYm9sIixlLlRpbWVzTmV3Um9tYW49IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuLUJvbGQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hbi1Cb2xkSXRhbGljIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW4tSXRhbGljIl09IlRpbWVzLUl0YWxpYyIsZS5UaW1lc05ld1JvbWFuUFM9IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZCJdPSJUaW1lcy1Cb2xkIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpYyJdPSJUaW1lcy1Cb2xkSXRhbGljIixlWyJUaW1lc05ld1JvbWFuUFMtQm9sZEl0YWxpY01UIl09IlRpbWVzLUJvbGRJdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QUy1Cb2xkTVQiXT0iVGltZXMtQm9sZCIsZVsiVGltZXNOZXdSb21hblBTLUl0YWxpYyJdPSJUaW1lcy1JdGFsaWMiLGVbIlRpbWVzTmV3Um9tYW5QUy1JdGFsaWNNVCJdPSJUaW1lcy1JdGFsaWMiLGUuVGltZXNOZXdSb21hblBTTVQ9IlRpbWVzLVJvbWFuIixlWyJUaW1lc05ld1JvbWFuUFNNVC1Cb2xkIl09IlRpbWVzLUJvbGQiLGVbIlRpbWVzTmV3Um9tYW5QU01ULUJvbGRJdGFsaWMiXT0iVGltZXMtQm9sZEl0YWxpYyIsZVsiVGltZXNOZXdSb21hblBTTVQtSXRhbGljIl09IlRpbWVzLUl0YWxpYyJ9KSk7dC5nZXRTdGRGb250TWFwPWE7dmFyIGk9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLkNhbGlicmk9IkhlbHZldGljYSIsZVsiQ2FsaWJyaS1Cb2xkIl09IkhlbHZldGljYS1Cb2xkIixlWyJDYWxpYnJpLUJvbGRJdGFsaWMiXT0iSGVsdmV0aWNhLUJvbGRPYmxpcXVlIixlWyJDYWxpYnJpLUl0YWxpYyJdPSJIZWx2ZXRpY2EtT2JsaXF1ZSIsZS5DZW50dXJ5R290aGljPSJIZWx2ZXRpY2EiLGVbIkNlbnR1cnlHb3RoaWMtQm9sZCJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiQ2VudHVyeUdvdGhpYy1Cb2xkSXRhbGljIl09IkhlbHZldGljYS1Cb2xkT2JsaXF1ZSIsZVsiQ2VudHVyeUdvdGhpYy1JdGFsaWMiXT0iSGVsdmV0aWNhLU9ibGlxdWUiLGUuQ29taWNTYW5zTVM9IkNvbWljIFNhbnMgTVMiLGVbIkNvbWljU2Fuc01TLUJvbGQiXT0iQ29taWMgU2FucyBNUy1Cb2xkIixlWyJDb21pY1NhbnNNUy1Cb2xkSXRhbGljIl09IkNvbWljIFNhbnMgTVMtQm9sZEl0YWxpYyIsZVsiQ29taWNTYW5zTVMtSXRhbGljIl09IkNvbWljIFNhbnMgTVMtSXRhbGljIixlLkx1Y2lkYUNvbnNvbGU9IkNvdXJpZXIiLGVbIkx1Y2lkYUNvbnNvbGUtQm9sZCJdPSJDb3VyaWVyLUJvbGQiLGVbIkx1Y2lkYUNvbnNvbGUtQm9sZEl0YWxpYyJdPSJDb3VyaWVyLUJvbGRPYmxpcXVlIixlWyJMdWNpZGFDb25zb2xlLUl0YWxpYyJdPSJDb3VyaWVyLU9ibGlxdWUiLGVbIkx1Y2lkYVNhbnMtRGVtaSJdPSJIZWx2ZXRpY2EtQm9sZCIsZVsiTVMtR290aGljIl09Ik1TIEdvdGhpYyIsZVsiTVMtR290aGljLUJvbGQiXT0iTVMgR290aGljLUJvbGQiLGVbIk1TLUdvdGhpYy1Cb2xkSXRhbGljIl09Ik1TIEdvdGhpYy1Cb2xkSXRhbGljIixlWyJNUy1Hb3RoaWMtSXRhbGljIl09Ik1TIEdvdGhpYy1JdGFsaWMiLGVbIk1TLU1pbmNobyJdPSJNUyBNaW5jaG8iLGVbIk1TLU1pbmNoby1Cb2xkIl09Ik1TIE1pbmNoby1Cb2xkIixlWyJNUy1NaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBNaW5jaG8tQm9sZEl0YWxpYyIsZVsiTVMtTWluY2hvLUl0YWxpYyJdPSJNUyBNaW5jaG8tSXRhbGljIixlWyJNUy1QR290aGljIl09Ik1TIFBHb3RoaWMiLGVbIk1TLVBHb3RoaWMtQm9sZCJdPSJNUyBQR290aGljLUJvbGQiLGVbIk1TLVBHb3RoaWMtQm9sZEl0YWxpYyJdPSJNUyBQR290aGljLUJvbGRJdGFsaWMiLGVbIk1TLVBHb3RoaWMtSXRhbGljIl09Ik1TIFBHb3RoaWMtSXRhbGljIixlWyJNUy1QTWluY2hvIl09Ik1TIFBNaW5jaG8iLGVbIk1TLVBNaW5jaG8tQm9sZCJdPSJNUyBQTWluY2hvLUJvbGQiLGVbIk1TLVBNaW5jaG8tQm9sZEl0YWxpYyJdPSJNUyBQTWluY2hvLUJvbGRJdGFsaWMiLGVbIk1TLVBNaW5jaG8tSXRhbGljIl09Ik1TIFBNaW5jaG8tSXRhbGljIixlLk51cHRpYWxTY3JpcHQ9IlRpbWVzLUl0YWxpYyIsZS5XaW5nZGluZ3M9IlphcGZEaW5nYmF0cyJ9KSk7dC5nZXROb25TdGRGb250TWFwPWk7dmFyIG89KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlWyJBZG9iZSBKZW5zb24iXT0hMCxlWyJBZG9iZSBUZXh0Il09ITAsZS5BbGJlcnR1cz0hMCxlLkFsZHVzPSEwLGUuQWxleGFuZHJpYT0hMCxlLkFsZ2VyaWFuPSEwLGVbIkFtZXJpY2FuIFR5cGV3cml0ZXIiXT0hMCxlLkFudGlxdWE9ITAsZS5BcGV4PSEwLGUuQXJubz0hMCxlLkFzdGVyPSEwLGUuQXVyb3JhPSEwLGUuQmFza2VydmlsbGU9ITAsZS5CZWxsPSEwLGUuQmVtYm89ITAsZVsiQmVtYm8gU2Nob29sYm9vayJdPSEwLGUuQmVuZ3VpYXQ9ITAsZVsiQmVya2VsZXkgT2xkIFN0eWxlIl09ITAsZVsiQmVybmhhcmQgTW9kZXJuIl09ITAsZVsiQmVydGhvbGQgQ2l0eSJdPSEwLGUuQm9kb25pPSEwLGVbIkJhdWVyIEJvZG9uaSJdPSEwLGVbIkJvb2sgQW50aXF1YSJdPSEwLGUuQm9va21hbj0hMCxlWyJCb3JkZWF1eCBSb21hbiJdPSEwLGVbIkNhbGlmb3JuaWFuIEZCIl09ITAsZS5DYWxpc3RvPSEwLGUuQ2FsdmVydD0hMCxlLkNhcGl0YWxzPSEwLGUuQ2FtYnJpYT0hMCxlLkNhcnRpZXI9ITAsZS5DYXNsb249ITAsZS5DYXR1bGw9ITAsZS5DZW50YXVyPSEwLGVbIkNlbnR1cnkgT2xkIFN0eWxlIl09ITAsZVsiQ2VudHVyeSBTY2hvb2xib29rIl09ITAsZS5DaGFwYXJyYWw9ITAsZVsiQ2hhcmlzIFNJTCJdPSEwLGUuQ2hlbHRlbmhhbT0hMCxlWyJDaG9sbGEgU2xhYiJdPSEwLGUuQ2xhcmVuZG9uPSEwLGUuQ2xlYXJmYWNlPSEwLGUuQ29jaGluPSEwLGUuQ29sb25uYT0hMCxlWyJDb21wdXRlciBNb2Rlcm4iXT0hMCxlWyJDb25jcmV0ZSBSb21hbiJdPSEwLGUuQ29uc3RhbnRpYT0hMCxlWyJDb29wZXIgQmxhY2siXT0hMCxlLkNvcm9uYT0hMCxlLkVjb3R5cGU9ITAsZS5FZ3lwdGllbm5lPSEwLGUuRWxlcGhhbnQ9ITAsZS5FeGNlbHNpb3I9ITAsZS5GYWlyZmllbGQ9ITAsZVsiRkYgU2NhbGEiXT0hMCxlLkZvbGthcmQ9ITAsZS5Gb290bGlnaHQ9ITAsZS5GcmVlU2VyaWY9ITAsZVsiRnJpeiBRdWFkcmF0YSJdPSEwLGUuR2FyYW1vbmQ9ITAsZS5HZW50aXVtPSEwLGUuR2VvcmdpYT0hMCxlLkdsb3VjZXN0ZXI9ITAsZVsiR291ZHkgT2xkIFN0eWxlIl09ITAsZVsiR291ZHkgU2Nob29sYm9vayJdPSEwLGVbIkdvdWR5IFBybyBGb250Il09ITAsZS5HcmFuam9uPSEwLGVbIkd1YXJkaWFuIEVneXB0aWFuIl09ITAsZS5IZWF0aGVyPSEwLGUuSGVyY3VsZXM9ITAsZVsiSGlnaCBUb3dlciBUZXh0Il09ITAsZS5IaXJvc2hpZ2U9ITAsZVsiSG9lZmxlciBUZXh0Il09ITAsZVsiSHVtYW5hIFNlcmlmIl09ITAsZS5JbXByaW50PSEwLGVbIklvbmljIE5vLiA1Il09ITAsZS5KYW5zb249ITAsZS5Kb2FubmE9ITAsZS5Lb3Jpbm5hPSEwLGUuTGV4aWNvbj0hMCxlWyJMaWJlcmF0aW9uIFNlcmlmIl09ITAsZVsiTGludXggTGliZXJ0aW5lIl09ITAsZS5MaXRlcmF0dXJuYXlhPSEwLGUuTHVjaWRhPSEwLGVbIkx1Y2lkYSBCcmlnaHQiXT0hMCxlLk1lbGlvcj0hMCxlLk1lbXBoaXM9ITAsZS5NaWxsZXI9ITAsZS5NaW5pb249ITAsZS5Nb2Rlcm49ITAsZVsiTW9uYSBMaXNhIl09ITAsZVsiTXJzIEVhdmVzIl09ITAsZVsiTVMgU2VyaWYiXT0hMCxlWyJNdXNlbyBTbGFiIl09ITAsZVsiTmV3IFlvcmsiXT0hMCxlWyJOaW1idXMgUm9tYW4iXT0hMCxlWyJOUFMgUmF3bGluc29uIFJvYWR3YXkiXT0hMCxlLk51cHRpYWxTY3JpcHQ9ITAsZS5QYWxhdGlubz0hMCxlLlBlcnBldHVhPSEwLGUuUGxhbnRpbj0hMCxlWyJQbGFudGluIFNjaG9vbGJvb2siXT0hMCxlLlBsYXliaWxsPSEwLGVbIlBvb3IgUmljaGFyZCJdPSEwLGVbIlJhd2xpbnNvbiBSb2Fkd2F5Il09ITAsZS5SZW5hdWx0PSEwLGUuUmVxdWllbT0hMCxlLlJvY2t3ZWxsPSEwLGUuUm9tYW49ITAsZVsiUm90aXMgU2VyaWYiXT0hMCxlLlNhYm9uPSEwLGUuU2NhbGE9ITAsZS5TZWFndWxsPSEwLGUuU2lzdGluYT0hMCxlLlNvdXZlbmlyPSEwLGUuU1RJWD0hMCxlWyJTdG9uZSBJbmZvcm1hbCJdPSEwLGVbIlN0b25lIFNlcmlmIl09ITAsZS5TeWxmYWVuPSEwLGUuVGltZXM9ITAsZS5UcmFqYW49ITAsZVsiVHJpbml0w6kiXT0hMCxlWyJUcnVtcCBNZWRpYWV2YWwiXT0hMCxlLlV0b3BpYT0hMCxlWyJWYWxlIFR5cGUiXT0hMCxlWyJCaXRzdHJlYW0gVmVyYSJdPSEwLGVbIlZlcmEgU2VyaWYiXT0hMCxlLlZlcnNhaWxsZXM9ITAsZS5XYW50ZWQ9ITAsZS5XZWlzcz0hMCxlWyJXaWRlIExhdGluIl09ITAsZS5XaW5kc29yPSEwLGUuWElUUz0hMH0pKTt0LmdldFNlcmlmRm9udHM9bzt2YXIgcz0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuRGluZ2JhdHM9ITAsZS5TeW1ib2w9ITAsZS5aYXBmRGluZ2JhdHM9ITB9KSk7dC5nZXRTeW1ib2xzRm9udHM9czt2YXIgbD0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMl09MTAsZVszXT0zMixlWzRdPTMzLGVbNV09MzQsZVs2XT0zNSxlWzddPTM2LGVbOF09MzcsZVs5XT0zOCxlWzEwXT0zOSxlWzExXT00MCxlWzEyXT00MSxlWzEzXT00MixlWzE0XT00MyxlWzE1XT00NCxlWzE2XT00NSxlWzE3XT00NixlWzE4XT00NyxlWzE5XT00OCxlWzIwXT00OSxlWzIxXT01MCxlWzIyXT01MSxlWzIzXT01MixlWzI0XT01MyxlWzI1XT01NCxlWzI2XT01NSxlWzI3XT01NixlWzI4XT01NyxlWzI5XT01OCxlWzMwXT04OTQsZVszMV09NjAsZVszMl09NjEsZVszM109NjIsZVszNF09NjMsZVszNV09NjQsZVszNl09NjUsZVszN109NjYsZVszOF09NjcsZVszOV09NjgsZVs0MF09NjksZVs0MV09NzAsZVs0Ml09NzEsZVs0M109NzIsZVs0NF09NzMsZVs0NV09NzQsZVs0Nl09NzUsZVs0N109NzYsZVs0OF09NzcsZVs0OV09NzgsZVs1MF09NzksZVs1MV09ODAsZVs1Ml09ODEsZVs1M109ODIsZVs1NF09ODMsZVs1NV09ODQsZVs1Nl09ODUsZVs1N109ODYsZVs1OF09ODcsZVs1OV09ODgsZVs2MF09ODksZVs2MV09OTAsZVs2Ml09OTEsZVs2M109OTIsZVs2NF09OTMsZVs2NV09OTQsZVs2Nl09OTUsZVs2N109OTYsZVs2OF09OTcsZVs2OV09OTgsZVs3MF09OTksZVs3MV09MTAwLGVbNzJdPTEwMSxlWzczXT0xMDIsZVs3NF09MTAzLGVbNzVdPTEwNCxlWzc2XT0xMDUsZVs3N109MTA2LGVbNzhdPTEwNyxlWzc5XT0xMDgsZVs4MF09MTA5LGVbODFdPTExMCxlWzgyXT0xMTEsZVs4M109MTEyLGVbODRdPTExMyxlWzg1XT0xMTQsZVs4Nl09MTE1LGVbODddPTExNixlWzg4XT0xMTcsZVs4OV09MTE4LGVbOTBdPTExOSxlWzkxXT0xMjAsZVs5Ml09MTIxLGVbOTNdPTEyMixlWzk0XT0xMjMsZVs5NV09MTI0LGVbOTZdPTEyNSxlWzk3XT0xMjYsZVs5OF09MTk2LGVbOTldPTE5NyxlWzEwMF09MTk5LGVbMTAxXT0yMDEsZVsxMDJdPTIwOSxlWzEwM109MjE0LGVbMTA0XT0yMjAsZVsxMDVdPTIyNSxlWzEwNl09MjI0LGVbMTA3XT0yMjYsZVsxMDhdPTIyOCxlWzEwOV09MjI3LGVbMTEwXT0yMjksZVsxMTFdPTIzMSxlWzExMl09MjMzLGVbMTEzXT0yMzIsZVsxMTRdPTIzNCxlWzExNV09MjM1LGVbMTE2XT0yMzcsZVsxMTddPTIzNixlWzExOF09MjM4LGVbMTE5XT0yMzksZVsxMjBdPTI0MSxlWzEyMV09MjQzLGVbMTIyXT0yNDIsZVsxMjNdPTI0NCxlWzEyNF09MjQ2LGVbMTI1XT0yNDUsZVsxMjZdPTI1MCxlWzEyN109MjQ5LGVbMTI4XT0yNTEsZVsxMjldPTI1MixlWzEzMF09ODIyNCxlWzEzMV09MTc2LGVbMTMyXT0xNjIsZVsxMzNdPTE2MyxlWzEzNF09MTY3LGVbMTM1XT04MjI2LGVbMTM2XT0xODIsZVsxMzddPTIyMyxlWzEzOF09MTc0LGVbMTM5XT0xNjksZVsxNDBdPTg0ODIsZVsxNDFdPTE4MCxlWzE0Ml09MTY4LGVbMTQzXT04ODAwLGVbMTQ0XT0xOTgsZVsxNDVdPTIxNixlWzE0Nl09ODczNCxlWzE0N109MTc3LGVbMTQ4XT04ODA0LGVbMTQ5XT04ODA1LGVbMTUwXT0xNjUsZVsxNTFdPTE4MSxlWzE1Ml09ODcwNixlWzE1M109ODcyMSxlWzE1NF09ODcxOSxlWzE1Nl09ODc0NyxlWzE1N109MTcwLGVbMTU4XT0xODYsZVsxNTldPTg0ODYsZVsxNjBdPTIzMCxlWzE2MV09MjQ4LGVbMTYyXT0xOTEsZVsxNjNdPTE2MSxlWzE2NF09MTcyLGVbMTY1XT04NzMwLGVbMTY2XT00MDIsZVsxNjddPTg3NzYsZVsxNjhdPTg3MTAsZVsxNjldPTE3MSxlWzE3MF09MTg3LGVbMTcxXT04MjMwLGVbMjEwXT0yMTgsZVsyMjNdPTcxMSxlWzIyNF09MzIxLGVbMjI1XT0zMjIsZVsyMjddPTM1MyxlWzIyOV09MzgyLGVbMjM0XT0yNTMsZVsyNTJdPTI2MyxlWzI1M109MjY4LGVbMjU0XT0yNjksZVsyNThdPTI1OCxlWzI2MF09MjYwLGVbMjYxXT0yNjEsZVsyNjVdPTI4MCxlWzI2Nl09MjgxLGVbMjY4XT0yODMsZVsyNjldPTMxMyxlWzI3NV09MzIzLGVbMjc2XT0zMjQsZVsyNzhdPTMyOCxlWzI4NF09MzQ1LGVbMjg1XT0zNDYsZVsyODZdPTM0NyxlWzI5Ml09MzY3LGVbMjk1XT0zNzcsZVsyOTZdPTM3OCxlWzI5OF09MzgwLGVbMzA1XT05NjMsZVszMDZdPTk2NCxlWzMwN109OTY2LGVbMzA4XT04MjE1LGVbMzA5XT04MjUyLGVbMzEwXT04MzE5LGVbMzExXT04MzU5LGVbMzEyXT04NTkyLGVbMzEzXT04NTkzLGVbMzM3XT05NTUyLGVbNDkzXT0xMDM5LGVbNDk0XT0xMDQwLGVbNzA1XT0xNTI0LGVbNzA2XT04MzYyLGVbNzEwXT02NDI4OCxlWzcxMV09NjQyOTgsZVs3NTldPTE2MTcsZVs3NjFdPTE3NzYsZVs3NjNdPTE3NzgsZVs3NzVdPTE2NTIsZVs3NzddPTE3NjQsZVs3NzhdPTE3ODAsZVs3NzldPTE3ODEsZVs3ODBdPTE3ODIsZVs3ODJdPTc3MSxlWzc4M109NjQ3MjYsZVs3ODZdPTgzNjMsZVs3ODhdPTg1MzIsZVs3OTBdPTc2OCxlWzc5MV09NzY5LGVbNzkyXT03NjgsZVs3OTVdPTgwMyxlWzc5N109NjQzMzYsZVs3OThdPTY0MzM3LGVbNzk5XT02NDM0MixlWzgwMF09NjQzNDMsZVs4MDFdPTY0MzQ0LGVbODAyXT02NDM0NSxlWzgwM109NjQzNjIsZVs4MDRdPTY0MzYzLGVbODA1XT02NDM2NCxlWzI0MjRdPTc4MjEsZVsyNDI1XT03ODIyLGVbMjQyNl09NzgyMyxlWzI0MjddPTc4MjQsZVsyNDI4XT03ODI1LGVbMjQyOV09NzgyNixlWzI0MzBdPTc4MjcsZVsyNDMzXT03NjgyLGVbMjY3OF09ODA0NSxlWzI2NzldPTgwNDYsZVsyODMwXT0xNTUyLGVbMjgzOF09Njg2LGVbMjg0MF09NzUxLGVbMjg0Ml09NzUzLGVbMjg0M109NzU0LGVbMjg0NF09NzU1LGVbMjg0Nl09NzU3LGVbMjg1Nl09NzY3LGVbMjg1N109ODQ4LGVbMjg1OF09ODQ5LGVbMjg2Ml09ODUzLGVbMjg2M109ODU0LGVbMjg2NF09ODU1LGVbMjg2NV09ODYxLGVbMjg2Nl09ODYyLGVbMjkwNl09NzQ2MCxlWzI5MDhdPTc0NjIsZVsyOTA5XT03NDYzLGVbMjkxMF09NzQ2NCxlWzI5MTJdPTc0NjYsZVsyOTEzXT03NDY3LGVbMjkxNF09NzQ2OCxlWzI5MTZdPTc0NzAsZVsyOTE3XT03NDcxLGVbMjkxOF09NzQ3MixlWzI5MjBdPTc0NzQsZVsyOTIxXT03NDc1LGVbMjkyMl09NzQ3NixlWzI5MjRdPTc0NzgsZVsyOTI1XT03NDc5LGVbMjkyNl09NzQ4MCxlWzI5MjhdPTc0ODIsZVsyOTI5XT03NDgzLGVbMjkzMF09NzQ4NCxlWzI5MzJdPTc0ODYsZVsyOTMzXT03NDg3LGVbMjkzNF09NzQ4OCxlWzI5MzZdPTc0OTAsZVsyOTM3XT03NDkxLGVbMjkzOF09NzQ5MixlWzI5NDBdPTc0OTQsZVsyOTQxXT03NDk1LGVbMjk0Ml09NzQ5NixlWzI5NDRdPTc0OTgsZVsyOTQ2XT03NTAwLGVbMjk0OF09NzUwMixlWzI5NTBdPTc1MDQsZVsyOTUxXT03NTA1LGVbMjk1Ml09NzUwNixlWzI5NTRdPTc1MDgsZVsyOTU1XT03NTA5LGVbMjk1Nl09NzUxMCxlWzI5NThdPTc1MTIsZVsyOTU5XT03NTEzLGVbMjk2MF09NzUxNCxlWzI5NjJdPTc1MTYsZVsyOTYzXT03NTE3LGVbMjk2NF09NzUxOCxlWzI5NjZdPTc1MjAsZVsyOTY3XT03NTIxLGVbMjk2OF09NzUyMixlWzI5NzBdPTc1MjQsZVsyOTcxXT03NTI1LGVbMjk3Ml09NzUyNixlWzI5NzRdPTc1MjgsZVsyOTc1XT03NTI5LGVbMjk3Nl09NzUzMCxlWzI5NzhdPTE1MzcsZVsyOTc5XT0xNTM4LGVbMjk4MF09MTUzOSxlWzI5ODJdPTE1NDksZVsyOTgzXT0xNTUxLGVbMjk4NF09MTU1MixlWzI5ODZdPTE1NTQsZVsyOTg3XT0xNTU1LGVbMjk4OF09MTU1NixlWzI5OTBdPTE2MjMsZVsyOTkxXT0xNjI0LGVbMjk5NV09MTc3NSxlWzI5OTldPTE3OTEsZVszMDAyXT02NDI5MCxlWzMwMDNdPTY0MjkxLGVbMzAwNF09NjQyOTIsZVszMDA2XT02NDI5NCxlWzMwMDddPTY0Mjk1LGVbMzAwOF09NjQyOTYsZVszMDExXT0xOTAwLGVbMzAxNF09ODIyMyxlWzMwMTVdPTgyNDQsZVszMDE3XT03NTMyLGVbMzAxOF09NzUzMyxlWzMwMTldPTc1MzQsZVszMDc1XT03NTkwLGVbMzA3Nl09NzU5MSxlWzMwNzldPTc1OTQsZVszMDgwXT03NTk1LGVbMzA4M109NzU5OCxlWzMwODRdPTc1OTksZVszMDg3XT03NjAyLGVbMzA4OF09NzYwMyxlWzMwOTFdPTc2MDYsZVszMDkyXT03NjA3LGVbMzA5NV09NzYxMCxlWzMwOTZdPTc2MTEsZVszMDk5XT03NjE0LGVbMzEwMF09NzYxNSxlWzMxMDNdPTc2MTgsZVszMTA0XT03NjE5LGVbMzEwN109ODMzNyxlWzMxMDhdPTgzMzgsZVszMTE2XT0xODg0LGVbMzExOV09MTg4NSxlWzMxMjBdPTE4ODUsZVszMTIzXT0xODg2LGVbMzEyNF09MTg4NixlWzMxMjddPTE4ODcsZVszMTI4XT0xODg3LGVbMzEzMV09MTg4OCxlWzMxMzJdPTE4ODgsZVszMTM1XT0xODg5LGVbMzEzNl09MTg4OSxlWzMxMzldPTE4OTAsZVszMTQwXT0xODkwLGVbMzE0M109MTg5MSxlWzMxNDRdPTE4OTEsZVszMTQ3XT0xODkyLGVbMzE0OF09MTg5MixlWzMxNTNdPTU4MCxlWzMxNTRdPTU4MSxlWzMxNTddPTU4NCxlWzMxNThdPTU4NSxlWzMxNjFdPTU4OCxlWzMxNjJdPTU4OSxlWzMxNjVdPTg5MSxlWzMxNjZdPTg5MixlWzMxNjldPTEyNzQsZVszMTcwXT0xMjc1LGVbMzE3M109MTI3OCxlWzMxNzRdPTEyNzksZVszMTgxXT03NjIyLGVbMzE4Ml09NzYyMyxlWzMyODJdPTExNzk5LGVbMzMxNl09NTc4LGVbMzM3OV09NDI3ODUsZVszMzkzXT0xMTU5LGVbMzQxNl09ODM3N30pKTt0LmdldEdseXBoTWFwRm9yU3RhbmRhcmRGb250cz1sO3ZhciBjPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZVsyMjddPTMyMixlWzI2NF09MjYxLGVbMjkxXT0zNDZ9KSk7dC5nZXRTdXBwbGVtZW50YWxHbHlwaE1hcEZvckFyaWFsQmxhY2s9Yzt2YXIgdT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2VbMV09MzIsZVs0XT02NSxlWzE3XT02NixlWzE4XT02NyxlWzI0XT02OCxlWzI4XT02OSxlWzM4XT03MCxlWzM5XT03MSxlWzQ0XT03MixlWzQ3XT03MyxlWzU4XT03NCxlWzYwXT03NSxlWzYyXT03NixlWzY4XT03NyxlWzY5XT03OCxlWzc1XT03OSxlWzg3XT04MCxlWzg5XT04MSxlWzkwXT04MixlWzk0XT04MyxlWzEwMF09ODQsZVsxMDRdPTg1LGVbMTE1XT04NixlWzExNl09ODcsZVsxMjFdPTg4LGVbMTIyXT04OSxlWzEyN109OTAsZVsyNThdPTk3LGVbMjY4XT0yNjEsZVsyNzFdPTk4LGVbMjcyXT05OSxlWzI3M109MjYzLGVbMjgyXT0xMDAsZVsyODZdPTEwMSxlWzI5NV09MjgxLGVbMjk2XT0xMDIsZVszMzZdPTEwMyxlWzM0Nl09MTA0LGVbMzQ5XT0xMDUsZVszNjFdPTEwNixlWzM2NF09MTA3LGVbMzY3XT0xMDgsZVszNzFdPTMyMixlWzM3M109MTA5LGVbMzc0XT0xMTAsZVszODFdPTExMSxlWzM4M109MjQzLGVbMzkzXT0xMTIsZVszOTVdPTExMyxlWzM5Nl09MTE0LGVbNDAwXT0xMTUsZVs0MDFdPTM0NyxlWzQxMF09MTE2LGVbNDM3XT0xMTcsZVs0NDhdPTExOCxlWzQ0OV09MTE5LGVbNDU0XT0xMjAsZVs0NTVdPTEyMSxlWzQ2MF09MTIyLGVbNDYzXT0zODAsZVs4NTNdPTQ0LGVbODU1XT01OCxlWzg1Nl09NDYsZVs4NzZdPTQ3LGVbODc4XT00NSxlWzg4Ml09NDUsZVs4OTRdPTQwLGVbODk1XT00MSxlWzg5Nl09OTEsZVs4OTddPTkzLGVbOTIzXT02NCxlWzEwMDRdPTQ4LGVbMTAwNV09NDksZVsxMDA2XT01MCxlWzEwMDddPTUxLGVbMTAwOF09NTIsZVsxMDA5XT01MyxlWzEwMTBdPTU0LGVbMTAxMV09NTUsZVsxMDEyXT01NixlWzEwMTNdPTU3LGVbMTA4MV09MzcsZVsxMDg1XT00MyxlWzEwODZdPTQ1fSkpO3QuZ2V0U3VwcGxlbWVudGFsR2x5cGhNYXBGb3JDYWxpYnJpPXV9LGZ1bmN0aW9uKGUsdCxyKXt2YXIgbj1yKDYpLmdldExvb2t1cFRhYmxlRmFjdG9yeSxhPW4oKGZ1bmN0aW9uKGUpe2VbNjM3MjFdPTE2OSxlWzYzMTkzXT0xNjksZVs2MzcyMF09MTc0LGVbNjMxOTRdPTE3NCxlWzYzNzIyXT04NDgyLGVbNjMxOTVdPTg0ODIsZVs2MzcyOV09OTEyNyxlWzYzNzMwXT05MTI4LGVbNjM3MzFdPTkxMjksZVs2Mzc0MF09OTEzMSxlWzYzNzQxXT05MTMyLGVbNjM3NDJdPTkxMzMsZVs2MzcyNl09OTEyMSxlWzYzNzI3XT05MTIyLGVbNjM3MjhdPTkxMjMsZVs2MzczN109OTEyNCxlWzYzNzM4XT05MTI1LGVbNjM3MzldPTkxMjYsZVs2MzcyM109OTExNSxlWzYzNzI0XT05MTE2LGVbNjM3MjVdPTkxMTcsZVs2MzczNF09OTExOCxlWzYzNzM1XT05MTE5LGVbNjM3MzZdPTkxMjB9KSksaT1be2JlZ2luOjAsZW5kOjEyN30se2JlZ2luOjEyOCxlbmQ6MjU1fSx7YmVnaW46MjU2LGVuZDozODN9LHtiZWdpbjozODQsZW5kOjU5MX0se2JlZ2luOjU5MixlbmQ6Njg3fSx7YmVnaW46Njg4LGVuZDo3Njd9LHtiZWdpbjo3NjgsZW5kOjg3OX0se2JlZ2luOjg4MCxlbmQ6MTAyM30se2JlZ2luOjExMzkyLGVuZDoxMTUxOX0se2JlZ2luOjEwMjQsZW5kOjEyNzl9LHtiZWdpbjoxMzI4LGVuZDoxNDIzfSx7YmVnaW46MTQyNCxlbmQ6MTUzNX0se2JlZ2luOjQyMjQwLGVuZDo0MjU1OX0se2JlZ2luOjE1MzYsZW5kOjE3OTF9LHtiZWdpbjoxOTg0LGVuZDoyMDQ3fSx7YmVnaW46MjMwNCxlbmQ6MjQzMX0se2JlZ2luOjI0MzIsZW5kOjI1NTl9LHtiZWdpbjoyNTYwLGVuZDoyNjg3fSx7YmVnaW46MjY4OCxlbmQ6MjgxNX0se2JlZ2luOjI4MTYsZW5kOjI5NDN9LHtiZWdpbjoyOTQ0LGVuZDozMDcxfSx7YmVnaW46MzA3MixlbmQ6MzE5OX0se2JlZ2luOjMyMDAsZW5kOjMzMjd9LHtiZWdpbjozMzI4LGVuZDozNDU1fSx7YmVnaW46MzU4NCxlbmQ6MzcxMX0se2JlZ2luOjM3MTIsZW5kOjM4Mzl9LHtiZWdpbjo0MjU2LGVuZDo0MzUxfSx7YmVnaW46NjkxMixlbmQ6NzAzOX0se2JlZ2luOjQzNTIsZW5kOjQ2MDd9LHtiZWdpbjo3NjgwLGVuZDo3OTM1fSx7YmVnaW46NzkzNixlbmQ6ODE5MX0se2JlZ2luOjgxOTIsZW5kOjgzMDN9LHtiZWdpbjo4MzA0LGVuZDo4MzUxfSx7YmVnaW46ODM1MixlbmQ6ODM5OX0se2JlZ2luOjg0MDAsZW5kOjg0NDd9LHtiZWdpbjo4NDQ4LGVuZDo4NTI3fSx7YmVnaW46ODUyOCxlbmQ6ODU5MX0se2JlZ2luOjg1OTIsZW5kOjg3MDN9LHtiZWdpbjo4NzA0LGVuZDo4OTU5fSx7YmVnaW46ODk2MCxlbmQ6OTIxNX0se2JlZ2luOjkyMTYsZW5kOjkyNzl9LHtiZWdpbjo5MjgwLGVuZDo5MzExfSx7YmVnaW46OTMxMixlbmQ6OTQ3MX0se2JlZ2luOjk0NzIsZW5kOjk1OTl9LHtiZWdpbjo5NjAwLGVuZDo5NjMxfSx7YmVnaW46OTYzMixlbmQ6OTcyN30se2JlZ2luOjk3MjgsZW5kOjk5ODN9LHtiZWdpbjo5OTg0LGVuZDoxMDE3NX0se2JlZ2luOjEyMjg4LGVuZDoxMjM1MX0se2JlZ2luOjEyMzUyLGVuZDoxMjQ0N30se2JlZ2luOjEyNDQ4LGVuZDoxMjU0M30se2JlZ2luOjEyNTQ0LGVuZDoxMjU5MX0se2JlZ2luOjEyNTkyLGVuZDoxMjY4N30se2JlZ2luOjQzMDcyLGVuZDo0MzEzNX0se2JlZ2luOjEyODAwLGVuZDoxMzA1NX0se2JlZ2luOjEzMDU2LGVuZDoxMzMxMX0se2JlZ2luOjQ0MDMyLGVuZDo1NTIxNX0se2JlZ2luOjU1Mjk2LGVuZDo1NzM0M30se2JlZ2luOjY3ODQwLGVuZDo2Nzg3MX0se2JlZ2luOjE5OTY4LGVuZDo0MDk1OX0se2JlZ2luOjU3MzQ0LGVuZDo2Mzc0M30se2JlZ2luOjEyNzM2LGVuZDoxMjc4M30se2JlZ2luOjY0MjU2LGVuZDo2NDMzNX0se2JlZ2luOjY0MzM2LGVuZDo2NTAyM30se2JlZ2luOjY1MDU2LGVuZDo2NTA3MX0se2JlZ2luOjY1MDQwLGVuZDo2NTA1NX0se2JlZ2luOjY1MTA0LGVuZDo2NTEzNX0se2JlZ2luOjY1MTM2LGVuZDo2NTI3OX0se2JlZ2luOjY1MjgwLGVuZDo2NTUxOX0se2JlZ2luOjY1NTIwLGVuZDo2NTUzNX0se2JlZ2luOjM4NDAsZW5kOjQwOTV9LHtiZWdpbjoxNzkyLGVuZDoxODcxfSx7YmVnaW46MTkyMCxlbmQ6MTk4M30se2JlZ2luOjM0NTYsZW5kOjM1ODN9LHtiZWdpbjo0MDk2LGVuZDo0MjU1fSx7YmVnaW46NDYwOCxlbmQ6NDk5MX0se2JlZ2luOjUwMjQsZW5kOjUxMTl9LHtiZWdpbjo1MTIwLGVuZDo1NzU5fSx7YmVnaW46NTc2MCxlbmQ6NTc5MX0se2JlZ2luOjU3OTIsZW5kOjU4ODd9LHtiZWdpbjo2MDE2LGVuZDo2MTQzfSx7YmVnaW46NjE0NCxlbmQ6NjMxOX0se2JlZ2luOjEwMjQwLGVuZDoxMDQ5NX0se2JlZ2luOjQwOTYwLGVuZDo0MjEyN30se2JlZ2luOjU4ODgsZW5kOjU5MTl9LHtiZWdpbjo2NjMwNCxlbmQ6NjYzNTF9LHtiZWdpbjo2NjM1MixlbmQ6NjYzODN9LHtiZWdpbjo2NjU2MCxlbmQ6NjY2Mzl9LHtiZWdpbjoxMTg3ODQsZW5kOjExOTAzOX0se2JlZ2luOjExOTgwOCxlbmQ6MTIwODMxfSx7YmVnaW46MTA0NDQ4MCxlbmQ6MTA0ODU3M30se2JlZ2luOjY1MDI0LGVuZDo2NTAzOX0se2JlZ2luOjkxNzUwNCxlbmQ6OTE3NjMxfSx7YmVnaW46NjQwMCxlbmQ6NjQ3OX0se2JlZ2luOjY0ODAsZW5kOjY1Mjd9LHtiZWdpbjo2NTI4LGVuZDo2NjIzfSx7YmVnaW46NjY1NixlbmQ6NjY4N30se2JlZ2luOjExMjY0LGVuZDoxMTM1OX0se2JlZ2luOjExNTY4LGVuZDoxMTY0N30se2JlZ2luOjE5OTA0LGVuZDoxOTk2N30se2JlZ2luOjQzMDA4LGVuZDo0MzA1NX0se2JlZ2luOjY1NTM2LGVuZDo2NTY2M30se2JlZ2luOjY1ODU2LGVuZDo2NTkzNX0se2JlZ2luOjY2NDMyLGVuZDo2NjQ2M30se2JlZ2luOjY2NDY0LGVuZDo2NjUyN30se2JlZ2luOjY2NjQwLGVuZDo2NjY4N30se2JlZ2luOjY2Njg4LGVuZDo2NjczNX0se2JlZ2luOjY3NTg0LGVuZDo2NzY0N30se2JlZ2luOjY4MDk2LGVuZDo2ODE5MX0se2JlZ2luOjExOTU1MixlbmQ6MTE5NjQ3fSx7YmVnaW46NzM3MjgsZW5kOjc0NzUxfSx7YmVnaW46MTE5NjQ4LGVuZDoxMTk2Nzl9LHtiZWdpbjo3MDQwLGVuZDo3MTAzfSx7YmVnaW46NzE2OCxlbmQ6NzI0N30se2JlZ2luOjcyNDgsZW5kOjcyOTV9LHtiZWdpbjo0MzEzNixlbmQ6NDMyMzF9LHtiZWdpbjo0MzI2NCxlbmQ6NDMzMTF9LHtiZWdpbjo0MzMxMixlbmQ6NDMzNTl9LHtiZWdpbjo0MzUyMCxlbmQ6NDM2MTV9LHtiZWdpbjo2NTkzNixlbmQ6NjU5OTl9LHtiZWdpbjo2NmUzLGVuZDo2NjA0N30se2JlZ2luOjY2MjA4LGVuZDo2NjI3MX0se2JlZ2luOjEyNzAyNCxlbmQ6MTI3MTM1fV0sbz1uKChmdW5jdGlvbihlKXtlWyLCqCJdPSIgzIgiLGVbIsKvIl09IiDMhCIsZVsiwrQiXT0iIMyBIixlWyLCtSJdPSLOvCIsZVsiwrgiXT0iIMynIixlWyLEsiJdPSJJSiIsZVsixLMiXT0iaWoiLGVbIsS/Il09IkzCtyIsZVsixYAiXT0ibMK3IixlWyLFiSJdPSLKvG4iLGVbIsW/Il09InMiLGVbIseEIl09IkTFvSIsZVsix4UiXT0iRMW+IixlWyLHhiJdPSJkxb4iLGVbIseHIl09IkxKIixlWyLHiCJdPSJMaiIsZVsix4kiXT0ibGoiLGVbIseKIl09Ik5KIixlWyLHiyJdPSJOaiIsZVsix4wiXT0ibmoiLGVbIsexIl09IkRaIixlWyLHsiJdPSJEeiIsZVsix7MiXT0iZHoiLGVbIsuYIl09IiDMhiIsZVsiy5kiXT0iIMyHIixlWyLLmiJdPSIgzIoiLGVbIsubIl09IiDMqCIsZVsiy5wiXT0iIMyDIixlWyLLnSJdPSIgzIsiLGVbIs26Il09IiDNhSIsZVsizoQiXT0iIMyBIixlWyLPkCJdPSLOsiIsZVsiz5EiXT0izrgiLGVbIs+SIl09Is6lIixlWyLPlSJdPSLPhiIsZVsiz5YiXT0iz4AiLGVbIs+wIl09Is66IixlWyLPsSJdPSLPgSIsZVsiz7IiXT0iz4IiLGVbIs+0Il09Is6YIixlWyLPtSJdPSLOtSIsZVsiz7kiXT0izqMiLGVbItaHIl09ItWl1oIiLGVbItm1Il09Itin2bQiLGVbItm2Il09ItmI2bQiLGVbItm3Il09ItuH2bQiLGVbItm4Il09ItmK2bQiLGVbIuC4syJdPSLguY3guLIiLGVbIuC6syJdPSLgu43gurIiLGVbIuC7nCJdPSLguqvgupkiLGVbIuC7nSJdPSLguqvguqEiLGVbIuC9tyJdPSLgvrLgvoEiLGVbIuC9uSJdPSLgvrPgvoEiLGVbIuG6miJdPSJhyr4iLGVbIuG+vSJdPSIgzJMiLGVbIuG+vyJdPSIgzJMiLGVbIuG/gCJdPSIgzYIiLGVbIuG/viJdPSIgzJQiLGVbIuKAgiJdPSIgIixlWyLigIMiXT0iICIsZVsi4oCEIl09IiAiLGVbIuKAhSJdPSIgIixlWyLigIYiXT0iICIsZVsi4oCIIl09IiAiLGVbIuKAiSJdPSIgIixlWyLigIoiXT0iICIsZVsi4oCXIl09IiDMsyIsZVsi4oCkIl09Ii4iLGVbIuKApSJdPSIuLiIsZVsi4oCmIl09Ii4uLiIsZVsi4oCzIl09IuKAsuKAsiIsZVsi4oC0Il09IuKAsuKAsuKAsiIsZVsi4oC2Il09IuKAteKAtSIsZVsi4oC3Il09IuKAteKAteKAtSIsZVsi4oC8Il09IiEhIixlWyLigL4iXT0iIMyFIixlWyLigYciXT0iPz8iLGVbIuKBiCJdPSI/ISIsZVsi4oGJIl09IiE/IixlWyLigZciXT0i4oCy4oCy4oCy4oCyIixlWyLigZ8iXT0iICIsZVsi4oKoIl09IlJzIixlWyLihIAiXT0iYS9jIixlWyLihIEiXT0iYS9zIixlWyLihIMiXT0iwrBDIixlWyLihIUiXT0iYy9vIixlWyLihIYiXT0iYy91IixlWyLihIciXT0ixpAiLGVbIuKEiSJdPSLCsEYiLGVbIuKEliJdPSJObyIsZVsi4oShIl09IlRFTCIsZVsi4oS1Il09IteQIixlWyLihLYiXT0i15EiLGVbIuKEtyJdPSLXkiIsZVsi4oS4Il09IteTIixlWyLihLsiXT0iRkFYIixlWyLihaAiXT0iSSIsZVsi4oWhIl09IklJIixlWyLihaIiXT0iSUlJIixlWyLihaMiXT0iSVYiLGVbIuKFpCJdPSJWIixlWyLihaUiXT0iVkkiLGVbIuKFpiJdPSJWSUkiLGVbIuKFpyJdPSJWSUlJIixlWyLihagiXT0iSVgiLGVbIuKFqSJdPSJYIixlWyLihaoiXT0iWEkiLGVbIuKFqyJdPSJYSUkiLGVbIuKFrCJdPSJMIixlWyLiha0iXT0iQyIsZVsi4oWuIl09IkQiLGVbIuKFryJdPSJNIixlWyLihbAiXT0iaSIsZVsi4oWxIl09ImlpIixlWyLihbIiXT0iaWlpIixlWyLihbMiXT0iaXYiLGVbIuKFtCJdPSJ2IixlWyLihbUiXT0idmkiLGVbIuKFtiJdPSJ2aWkiLGVbIuKFtyJdPSJ2aWlpIixlWyLihbgiXT0iaXgiLGVbIuKFuSJdPSJ4IixlWyLihboiXT0ieGkiLGVbIuKFuyJdPSJ4aWkiLGVbIuKFvCJdPSJsIixlWyLihb0iXT0iYyIsZVsi4oW+Il09ImQiLGVbIuKFvyJdPSJtIixlWyLiiKwiXT0i4oir4oirIixlWyLiiK0iXT0i4oir4oir4oirIixlWyLiiK8iXT0i4oiu4oiuIixlWyLiiLAiXT0i4oiu4oiu4oiuIixlWyLikbQiXT0iKDEpIixlWyLikbUiXT0iKDIpIixlWyLikbYiXT0iKDMpIixlWyLikbciXT0iKDQpIixlWyLikbgiXT0iKDUpIixlWyLikbkiXT0iKDYpIixlWyLikboiXT0iKDcpIixlWyLikbsiXT0iKDgpIixlWyLikbwiXT0iKDkpIixlWyLikb0iXT0iKDEwKSIsZVsi4pG+Il09IigxMSkiLGVbIuKRvyJdPSIoMTIpIixlWyLikoAiXT0iKDEzKSIsZVsi4pKBIl09IigxNCkiLGVbIuKSgiJdPSIoMTUpIixlWyLikoMiXT0iKDE2KSIsZVsi4pKEIl09IigxNykiLGVbIuKShSJdPSIoMTgpIixlWyLikoYiXT0iKDE5KSIsZVsi4pKHIl09IigyMCkiLGVbIuKSiCJdPSIxLiIsZVsi4pKJIl09IjIuIixlWyLikooiXT0iMy4iLGVbIuKSiyJdPSI0LiIsZVsi4pKMIl09IjUuIixlWyLiko0iXT0iNi4iLGVbIuKSjiJdPSI3LiIsZVsi4pKPIl09IjguIixlWyLikpAiXT0iOS4iLGVbIuKSkSJdPSIxMC4iLGVbIuKSkiJdPSIxMS4iLGVbIuKSkyJdPSIxMi4iLGVbIuKSlCJdPSIxMy4iLGVbIuKSlSJdPSIxNC4iLGVbIuKSliJdPSIxNS4iLGVbIuKSlyJdPSIxNi4iLGVbIuKSmCJdPSIxNy4iLGVbIuKSmSJdPSIxOC4iLGVbIuKSmiJdPSIxOS4iLGVbIuKSmyJdPSIyMC4iLGVbIuKSnCJdPSIoYSkiLGVbIuKSnSJdPSIoYikiLGVbIuKSniJdPSIoYykiLGVbIuKSnyJdPSIoZCkiLGVbIuKSoCJdPSIoZSkiLGVbIuKSoSJdPSIoZikiLGVbIuKSoiJdPSIoZykiLGVbIuKSoyJdPSIoaCkiLGVbIuKSpCJdPSIoaSkiLGVbIuKSpSJdPSIoaikiLGVbIuKSpiJdPSIoaykiLGVbIuKSpyJdPSIobCkiLGVbIuKSqCJdPSIobSkiLGVbIuKSqSJdPSIobikiLGVbIuKSqiJdPSIobykiLGVbIuKSqyJdPSIocCkiLGVbIuKSrCJdPSIocSkiLGVbIuKSrSJdPSIocikiLGVbIuKSriJdPSIocykiLGVbIuKSryJdPSIodCkiLGVbIuKSsCJdPSIodSkiLGVbIuKSsSJdPSIodikiLGVbIuKSsiJdPSIodykiLGVbIuKSsyJdPSIoeCkiLGVbIuKStCJdPSIoeSkiLGVbIuKStSJdPSIoeikiLGVbIuKojCJdPSLiiKviiKviiKviiKsiLGVbIuKptCJdPSI6Oj0iLGVbIuKptSJdPSI9PSIsZVsi4qm2Il09Ij09PSIsZVsi4rqfIl09IuavjSIsZVsi4ruzIl09Ium+nyIsZVsi4ryAIl09IuS4gCIsZVsi4ryBIl09IuS4qCIsZVsi4ryCIl09IuS4tiIsZVsi4ryDIl09IuS4vyIsZVsi4ryEIl09IuS5mSIsZVsi4ryFIl09IuS6hSIsZVsi4ryGIl09IuS6jCIsZVsi4ryHIl09IuS6oCIsZVsi4ryIIl09IuS6uiIsZVsi4ryJIl09IuWEvyIsZVsi4ryKIl09IuWFpSIsZVsi4ryLIl09IuWFqyIsZVsi4ryMIl09IuWGgiIsZVsi4ryNIl09IuWGliIsZVsi4ryOIl09IuWGqyIsZVsi4ryPIl09IuWHoCIsZVsi4ryQIl09IuWHtSIsZVsi4ryRIl09IuWIgCIsZVsi4rySIl09IuWKmyIsZVsi4ryTIl09IuWLuSIsZVsi4ryUIl09IuWMlSIsZVsi4ryVIl09IuWMmiIsZVsi4ryWIl09IuWMuCIsZVsi4ryXIl09IuWNgSIsZVsi4ryYIl09IuWNnCIsZVsi4ryZIl09IuWNqSIsZVsi4ryaIl09IuWOgiIsZVsi4rybIl09IuWOtiIsZVsi4rycIl09IuWPiCIsZVsi4rydIl09IuWPoyIsZVsi4ryeIl09IuWblyIsZVsi4ryfIl09IuWcnyIsZVsi4rygIl09IuWjqyIsZVsi4ryhIl09IuWkgiIsZVsi4ryiIl09IuWkiiIsZVsi4ryjIl09IuWklSIsZVsi4rykIl09IuWkpyIsZVsi4rylIl09IuWlsyIsZVsi4rymIl09IuWtkCIsZVsi4rynIl09IuWugCIsZVsi4ryoIl09IuWvuCIsZVsi4rypIl09IuWwjyIsZVsi4ryqIl09IuWwoiIsZVsi4ryrIl09IuWwuCIsZVsi4rysIl09IuWxriIsZVsi4rytIl09IuWxsSIsZVsi4ryuIl09IuW3myIsZVsi4ryvIl09IuW3pSIsZVsi4rywIl09IuW3sSIsZVsi4ryxIl09IuW3viIsZVsi4ryyIl09IuW5siIsZVsi4ryzIl09IuW5uiIsZVsi4ry0Il09IuW5vyIsZVsi4ry1Il09IuW7tCIsZVsi4ry2Il09IuW7viIsZVsi4ry3Il09IuW8iyIsZVsi4ry4Il09IuW8kyIsZVsi4ry5Il09IuW9kCIsZVsi4ry6Il09IuW9oSIsZVsi4ry7Il09IuW9syIsZVsi4ry8Il09IuW/gyIsZVsi4ry9Il09IuaIiCIsZVsi4ry+Il09IuaItiIsZVsi4ry/Il09IuaJiyIsZVsi4r2AIl09IuaUryIsZVsi4r2BIl09IuaUtCIsZVsi4r2CIl09IuaWhyIsZVsi4r2DIl09IuaWlyIsZVsi4r2EIl09IuaWpCIsZVsi4r2FIl09IuaWuSIsZVsi4r2GIl09IuaXoCIsZVsi4r2HIl09IuaXpSIsZVsi4r2IIl09IuabsCIsZVsi4r2JIl09IuaciCIsZVsi4r2KIl09IuacqCIsZVsi4r2LIl09IuasoCIsZVsi4r2MIl09IuatoiIsZVsi4r2NIl09IuatuSIsZVsi4r2OIl09IuausyIsZVsi4r2PIl09IuaviyIsZVsi4r2QIl09IuavlCIsZVsi4r2RIl09IuavmyIsZVsi4r2SIl09IuawjyIsZVsi4r2TIl09IuawlCIsZVsi4r2UIl09IuawtCIsZVsi4r2VIl09IueBqyIsZVsi4r2WIl09IueIqiIsZVsi4r2XIl09IueItiIsZVsi4r2YIl09IueIuyIsZVsi4r2ZIl09IueIvyIsZVsi4r2aIl09IueJhyIsZVsi4r2bIl09IueJmSIsZVsi4r2cIl09IueJmyIsZVsi4r2dIl09IueKrCIsZVsi4r2eIl09IueOhCIsZVsi4r2fIl09IueOiSIsZVsi4r2gIl09IueTnCIsZVsi4r2hIl09IueTpiIsZVsi4r2iIl09IueUmCIsZVsi4r2jIl09IueUnyIsZVsi4r2kIl09IueUqCIsZVsi4r2lIl09IueUsCIsZVsi4r2mIl09IueWiyIsZVsi4r2nIl09IueWkiIsZVsi4r2oIl09IueZtiIsZVsi4r2pIl09IueZvSIsZVsi4r2qIl09IueariIsZVsi4r2rIl09IueavyIsZVsi4r2sIl09IuebriIsZVsi4r2tIl09IuefmyIsZVsi4r2uIl09IuefoiIsZVsi4r2vIl09IuefsyIsZVsi4r2wIl09IuekuiIsZVsi4r2xIl09IuemuCIsZVsi4r2yIl09IuemviIsZVsi4r2zIl09IueptCIsZVsi4r20Il09IueriyIsZVsi4r21Il09IueruSIsZVsi4r22Il09IuexsyIsZVsi4r23Il09IuezuCIsZVsi4r24Il09Iue8tiIsZVsi4r25Il09Iue9kSIsZVsi4r26Il09Iue+iiIsZVsi4r27Il09Iue+vSIsZVsi4r28Il09IuiAgSIsZVsi4r29Il09IuiAjCIsZVsi4r2+Il09IuiAkiIsZVsi4r2/Il09IuiAsyIsZVsi4r6AIl09IuiBvyIsZVsi4r6BIl09IuiCiSIsZVsi4r6CIl09IuiHoyIsZVsi4r6DIl09IuiHqiIsZVsi4r6EIl09IuiHsyIsZVsi4r6FIl09IuiHvCIsZVsi4r6GIl09IuiIjCIsZVsi4r6HIl09IuiImyIsZVsi4r6IIl09IuiInyIsZVsi4r6JIl09IuiJriIsZVsi4r6KIl09IuiJsiIsZVsi4r6LIl09IuiJuCIsZVsi4r6MIl09IuiZjSIsZVsi4r6NIl09IuiZqyIsZVsi4r6OIl09IuihgCIsZVsi4r6PIl09IuihjCIsZVsi4r6QIl09IuihoyIsZVsi4r6RIl09IuilviIsZVsi4r6SIl09IuimiyIsZVsi4r6TIl09IuinkiIsZVsi4r6UIl09IuiogCIsZVsi4r6VIl09IuiwtyIsZVsi4r6WIl09IuixhiIsZVsi4r6XIl09IuixlSIsZVsi4r6YIl09IuixuCIsZVsi4r6ZIl09IuiynSIsZVsi4r6aIl09Iui1pCIsZVsi4r6bIl09Iui1sCIsZVsi4r6cIl09Iui2syIsZVsi4r6dIl09Iui6qyIsZVsi4r6eIl09Iui7iiIsZVsi4r6fIl09Iui+myIsZVsi4r6gIl09Iui+sCIsZVsi4r6hIl09Iui+tSIsZVsi4r6iIl09IumCkSIsZVsi4r6jIl09IumFiSIsZVsi4r6kIl09IumHhiIsZVsi4r6lIl09IumHjCIsZVsi4r6mIl09IumHkSIsZVsi4r6nIl09IumVtyIsZVsi4r6oIl09IumWgCIsZVsi4r6pIl09IumYnCIsZVsi4r6qIl09IumatiIsZVsi4r6rIl09IumauSIsZVsi4r6sIl09IumbqCIsZVsi4r6tIl09IumdkSIsZVsi4r6uIl09IumdniIsZVsi4r6vIl09IumdoiIsZVsi4r6wIl09IumdqSIsZVsi4r6xIl09IumfiyIsZVsi4r6yIl09IumfrSIsZVsi4r6zIl09IumfsyIsZVsi4r60Il09IumggSIsZVsi4r61Il09IumiqCIsZVsi4r62Il09IumjmyIsZVsi4r63Il09IumjnyIsZVsi4r64Il09IummliIsZVsi4r65Il09IummmSIsZVsi4r66Il09IummrCIsZVsi4r67Il09IumqqCIsZVsi4r68Il09IumrmCIsZVsi4r69Il09IumrnyIsZVsi4r6+Il09IumspSIsZVsi4r6/Il09IumsryIsZVsi4r+AIl09IumssiIsZVsi4r+BIl09IumsvCIsZVsi4r+CIl09IumtmiIsZVsi4r+DIl09IumzpSIsZVsi4r+EIl09Ium5tSIsZVsi4r+FIl09Ium5vyIsZVsi4r+GIl09Ium6pSIsZVsi4r+HIl09Ium6uyIsZVsi4r+IIl09Ium7gyIsZVsi4r+JIl09Ium7jSIsZVsi4r+KIl09Ium7kSIsZVsi4r+LIl09Ium7uSIsZVsi4r+MIl09Ium7vSIsZVsi4r+NIl09Ium8jiIsZVsi4r+OIl09Ium8kyIsZVsi4r+PIl09Ium8oCIsZVsi4r+QIl09Ium8uyIsZVsi4r+RIl09Ium9iiIsZVsi4r+SIl09Ium9kiIsZVsi4r+TIl09Ium+jSIsZVsi4r+UIl09Ium+nCIsZVsi4r+VIl09Ium+oCIsZVsi44C2Il09IuOAkiIsZVsi44C4Il09IuWNgSIsZVsi44C5Il09IuWNhCIsZVsi44C6Il09IuWNhSIsZVsi44KbIl09IiDjgpkiLGVbIuOCnCJdPSIg44KaIixlWyLjhLEiXT0i4YSAIixlWyLjhLIiXT0i4YSBIixlWyLjhLMiXT0i4YaqIixlWyLjhLQiXT0i4YSCIixlWyLjhLUiXT0i4YasIixlWyLjhLYiXT0i4YatIixlWyLjhLciXT0i4YSDIixlWyLjhLgiXT0i4YSEIixlWyLjhLkiXT0i4YSFIixlWyLjhLoiXT0i4YawIixlWyLjhLsiXT0i4YaxIixlWyLjhLwiXT0i4YayIixlWyLjhL0iXT0i4YazIixlWyLjhL4iXT0i4Ya0IixlWyLjhL8iXT0i4Ya1IixlWyLjhYAiXT0i4YSaIixlWyLjhYEiXT0i4YSGIixlWyLjhYIiXT0i4YSHIixlWyLjhYMiXT0i4YSIIixlWyLjhYQiXT0i4YShIixlWyLjhYUiXT0i4YSJIixlWyLjhYYiXT0i4YSKIixlWyLjhYciXT0i4YSLIixlWyLjhYgiXT0i4YSMIixlWyLjhYkiXT0i4YSNIixlWyLjhYoiXT0i4YSOIixlWyLjhYsiXT0i4YSPIixlWyLjhYwiXT0i4YSQIixlWyLjhY0iXT0i4YSRIixlWyLjhY4iXT0i4YSSIixlWyLjhY8iXT0i4YWhIixlWyLjhZAiXT0i4YWiIixlWyLjhZEiXT0i4YWjIixlWyLjhZIiXT0i4YWkIixlWyLjhZMiXT0i4YWlIixlWyLjhZQiXT0i4YWmIixlWyLjhZUiXT0i4YWnIixlWyLjhZYiXT0i4YWoIixlWyLjhZciXT0i4YWpIixlWyLjhZgiXT0i4YWqIixlWyLjhZkiXT0i4YWrIixlWyLjhZoiXT0i4YWsIixlWyLjhZsiXT0i4YWtIixlWyLjhZwiXT0i4YWuIixlWyLjhZ0iXT0i4YWvIixlWyLjhZ4iXT0i4YWwIixlWyLjhZ8iXT0i4YWxIixlWyLjhaAiXT0i4YWyIixlWyLjhaEiXT0i4YWzIixlWyLjhaIiXT0i4YW0IixlWyLjhaMiXT0i4YW1IixlWyLjhaQiXT0i4YWgIixlWyLjhaUiXT0i4YSUIixlWyLjhaYiXT0i4YSVIixlWyLjhaciXT0i4YeHIixlWyLjhagiXT0i4YeIIixlWyLjhakiXT0i4YeMIixlWyLjhaoiXT0i4YeOIixlWyLjhasiXT0i4YeTIixlWyLjhawiXT0i4YeXIixlWyLjha0iXT0i4YeZIixlWyLjha4iXT0i4YScIixlWyLjha8iXT0i4YedIixlWyLjhbAiXT0i4YefIixlWyLjhbEiXT0i4YSdIixlWyLjhbIiXT0i4YSeIixlWyLjhbMiXT0i4YSgIixlWyLjhbQiXT0i4YSiIixlWyLjhbUiXT0i4YSjIixlWyLjhbYiXT0i4YSnIixlWyLjhbciXT0i4YSpIixlWyLjhbgiXT0i4YSrIixlWyLjhbkiXT0i4YSsIixlWyLjhboiXT0i4YStIixlWyLjhbsiXT0i4YSuIixlWyLjhbwiXT0i4YSvIixlWyLjhb0iXT0i4YSyIixlWyLjhb4iXT0i4YS2IixlWyLjhb8iXT0i4YWAIixlWyLjhoAiXT0i4YWHIixlWyLjhoEiXT0i4YWMIixlWyLjhoIiXT0i4YexIixlWyLjhoMiXT0i4YeyIixlWyLjhoQiXT0i4YWXIixlWyLjhoUiXT0i4YWYIixlWyLjhoYiXT0i4YWZIixlWyLjhociXT0i4YaEIixlWyLjhogiXT0i4YaFIixlWyLjhokiXT0i4YaIIixlWyLjhooiXT0i4YaRIixlWyLjhosiXT0i4YaSIixlWyLjhowiXT0i4YaUIixlWyLjho0iXT0i4YaeIixlWyLjho4iXT0i4YahIixlWyLjiIAiXT0iKOGEgCkiLGVbIuOIgSJdPSIo4YSCKSIsZVsi44iCIl09IijhhIMpIixlWyLjiIMiXT0iKOGEhSkiLGVbIuOIhCJdPSIo4YSGKSIsZVsi44iFIl09IijhhIcpIixlWyLjiIYiXT0iKOGEiSkiLGVbIuOIhyJdPSIo4YSLKSIsZVsi44iIIl09IijhhIwpIixlWyLjiIkiXT0iKOGEjikiLGVbIuOIiiJdPSIo4YSPKSIsZVsi44iLIl09IijhhJApIixlWyLjiIwiXT0iKOGEkSkiLGVbIuOIjSJdPSIo4YSSKSIsZVsi44iOIl09IijhhIDhhaEpIixlWyLjiI8iXT0iKOGEguGFoSkiLGVbIuOIkCJdPSIo4YSD4YWhKSIsZVsi44iRIl09IijhhIXhhaEpIixlWyLjiJIiXT0iKOGEhuGFoSkiLGVbIuOIkyJdPSIo4YSH4YWhKSIsZVsi44iUIl09IijhhInhhaEpIixlWyLjiJUiXT0iKOGEi+GFoSkiLGVbIuOIliJdPSIo4YSM4YWhKSIsZVsi44iXIl09IijhhI7hhaEpIixlWyLjiJgiXT0iKOGEj+GFoSkiLGVbIuOImSJdPSIo4YSQ4YWhKSIsZVsi44iaIl09IijhhJHhhaEpIixlWyLjiJsiXT0iKOGEkuGFoSkiLGVbIuOInCJdPSIo4YSM4YWuKSIsZVsi44idIl09IijhhIvhhanhhIzhhaXhhqspIixlWyLjiJ4iXT0iKOGEi+GFqeGEkuGFrikiLGVbIuOIoCJdPSIo5LiAKSIsZVsi44ihIl09IijkuowpIixlWyLjiKIiXT0iKOS4iSkiLGVbIuOIoyJdPSIo5ZubKSIsZVsi44ikIl09IijkupQpIixlWyLjiKUiXT0iKOWFrSkiLGVbIuOIpiJdPSIo5LiDKSIsZVsi44inIl09IijlhaspIixlWyLjiKgiXT0iKOS5nSkiLGVbIuOIqSJdPSIo5Y2BKSIsZVsi44iqIl09IijmnIgpIixlWyLjiKsiXT0iKOeBqykiLGVbIuOIrCJdPSIo5rC0KSIsZVsi44itIl09IijmnKgpIixlWyLjiK4iXT0iKOmHkSkiLGVbIuOIryJdPSIo5ZyfKSIsZVsi44iwIl09Iijml6UpIixlWyLjiLEiXT0iKOagqikiLGVbIuOIsiJdPSIo5pyJKSIsZVsi44izIl09IijnpL4pIixlWyLjiLQiXT0iKOWQjSkiLGVbIuOItSJdPSIo54m5KSIsZVsi44i2Il09IijosqEpIixlWyLjiLciXT0iKOelnSkiLGVbIuOIuCJdPSIo5Yq0KSIsZVsi44i5Il09Iijku6MpIixlWyLjiLoiXT0iKOWRvCkiLGVbIuOIuyJdPSIo5a2mKSIsZVsi44i8Il09Iijnm6MpIixlWyLjiL0iXT0iKOS8gSkiLGVbIuOIviJdPSIo6LOHKSIsZVsi44i/Il09IijljZQpIixlWyLjiYAiXT0iKOelrSkiLGVbIuOJgSJdPSIo5LyRKSIsZVsi44mCIl09Iijoh6opIixlWyLjiYMiXT0iKOiHsykiLGVbIuOLgCJdPSIx5pyIIixlWyLji4EiXT0iMuaciCIsZVsi44uCIl09IjPmnIgiLGVbIuOLgyJdPSI05pyIIixlWyLji4QiXT0iNeaciCIsZVsi44uFIl09IjbmnIgiLGVbIuOLhiJdPSI35pyIIixlWyLji4ciXT0iOOaciCIsZVsi44uIIl09IjnmnIgiLGVbIuOLiSJdPSIxMOaciCIsZVsi44uKIl09IjEx5pyIIixlWyLji4siXT0iMTLmnIgiLGVbIuONmCJdPSIw54K5IixlWyLjjZkiXT0iMeeCuSIsZVsi442aIl09IjLngrkiLGVbIuONmyJdPSIz54K5IixlWyLjjZwiXT0iNOeCuSIsZVsi442dIl09IjXngrkiLGVbIuONniJdPSI254K5IixlWyLjjZ8iXT0iN+eCuSIsZVsi442gIl09IjjngrkiLGVbIuONoSJdPSI554K5IixlWyLjjaIiXT0iMTDngrkiLGVbIuONoyJdPSIxMeeCuSIsZVsi442kIl09IjEy54K5IixlWyLjjaUiXT0iMTPngrkiLGVbIuONpiJdPSIxNOeCuSIsZVsi442nIl09IjE154K5IixlWyLjjagiXT0iMTbngrkiLGVbIuONqSJdPSIxN+eCuSIsZVsi442qIl09IjE454K5IixlWyLjjasiXT0iMTnngrkiLGVbIuONrCJdPSIyMOeCuSIsZVsi442tIl09IjIx54K5IixlWyLjja4iXT0iMjLngrkiLGVbIuONryJdPSIyM+eCuSIsZVsi442wIl09IjI054K5IixlWyLjj6AiXT0iMeaXpSIsZVsi44+hIl09IjLml6UiLGVbIuOPoiJdPSIz5pelIixlWyLjj6MiXT0iNOaXpSIsZVsi44+kIl09IjXml6UiLGVbIuOPpSJdPSI25pelIixlWyLjj6YiXT0iN+aXpSIsZVsi44+nIl09Ijjml6UiLGVbIuOPqCJdPSI55pelIixlWyLjj6kiXT0iMTDml6UiLGVbIuOPqiJdPSIxMeaXpSIsZVsi44+rIl09IjEy5pelIixlWyLjj6wiXT0iMTPml6UiLGVbIuOPrSJdPSIxNOaXpSIsZVsi44+uIl09IjE15pelIixlWyLjj68iXT0iMTbml6UiLGVbIuOPsCJdPSIxN+aXpSIsZVsi44+xIl09IjE45pelIixlWyLjj7IiXT0iMTnml6UiLGVbIuOPsyJdPSIyMOaXpSIsZVsi44+0Il09IjIx5pelIixlWyLjj7UiXT0iMjLml6UiLGVbIuOPtiJdPSIyM+aXpSIsZVsi44+3Il09IjI05pelIixlWyLjj7giXT0iMjXml6UiLGVbIuOPuSJdPSIyNuaXpSIsZVsi44+6Il09IjI35pelIixlWyLjj7siXT0iMjjml6UiLGVbIuOPvCJdPSIyOeaXpSIsZVsi44+9Il09IjMw5pelIixlWyLjj74iXT0iMzHml6UiLGVbIu+sgCJdPSJmZiIsZVsi76yBIl09ImZpIixlWyLvrIIiXT0iZmwiLGVbIu+sgyJdPSJmZmkiLGVbIu+shCJdPSJmZmwiLGVbIu+shSJdPSLFv3QiLGVbIu+shiJdPSJzdCIsZVsi76yTIl09ItW01bYiLGVbIu+slCJdPSLVtNWlIixlWyLvrJUiXT0i1bTVqyIsZVsi76yWIl09ItW+1bYiLGVbIu+slyJdPSLVtNWtIixlWyLvrY8iXT0i15DXnCIsZVsi762QIl09ItmxIixlWyLvrZEiXT0i2bEiLGVbIu+tkiJdPSLZuyIsZVsi762TIl09Itm7IixlWyLvrZQiXT0i2bsiLGVbIu+tlSJdPSLZuyIsZVsi762WIl09Itm+IixlWyLvrZciXT0i2b4iLGVbIu+tmCJdPSLZviIsZVsi762ZIl09Itm+IixlWyLvrZoiXT0i2oAiLGVbIu+tmyJdPSLagCIsZVsi762cIl09ItqAIixlWyLvrZ0iXT0i2oAiLGVbIu+tniJdPSLZuiIsZVsi762fIl09Itm6IixlWyLvraAiXT0i2boiLGVbIu+toSJdPSLZuiIsZVsi762iIl09Itm/IixlWyLvraMiXT0i2b8iLGVbIu+tpCJdPSLZvyIsZVsi762lIl09Itm/IixlWyLvraYiXT0i2bkiLGVbIu+tpyJdPSLZuSIsZVsi762oIl09Itm5IixlWyLvrakiXT0i2bkiLGVbIu+tqiJdPSLapCIsZVsi762rIl09ItqkIixlWyLvrawiXT0i2qQiLGVbIu+trSJdPSLapCIsZVsi762uIl09ItqmIixlWyLvra8iXT0i2qYiLGVbIu+tsCJdPSLapiIsZVsi762xIl09ItqmIixlWyLvrbIiXT0i2oQiLGVbIu+tsyJdPSLahCIsZVsi7620Il09ItqEIixlWyLvrbUiXT0i2oQiLGVbIu+ttiJdPSLagyIsZVsi7623Il09ItqDIixlWyLvrbgiXT0i2oMiLGVbIu+tuSJdPSLagyIsZVsi7626Il09ItqGIixlWyLvrbsiXT0i2oYiLGVbIu+tvCJdPSLahiIsZVsi7629Il09ItqGIixlWyLvrb4iXT0i2ociLGVbIu+tvyJdPSLahyIsZVsi766AIl09ItqHIixlWyLvroEiXT0i2ociLGVbIu+ugiJdPSLajSIsZVsi766DIl09ItqNIixlWyLvroQiXT0i2owiLGVbIu+uhSJdPSLajCIsZVsi766GIl09ItqOIixlWyLvrociXT0i2o4iLGVbIu+uiCJdPSLaiCIsZVsi766JIl09ItqIIixlWyLvrooiXT0i2pgiLGVbIu+uiyJdPSLamCIsZVsi766MIl09ItqRIixlWyLvro0iXT0i2pEiLGVbIu+ujiJdPSLaqSIsZVsi766PIl09ItqpIixlWyLvrpAiXT0i2qkiLGVbIu+ukSJdPSLaqSIsZVsi766SIl09ItqvIixlWyLvrpMiXT0i2q8iLGVbIu+ulCJdPSLaryIsZVsi766VIl09ItqvIixlWyLvrpYiXT0i2rMiLGVbIu+ulyJdPSLasyIsZVsi766YIl09ItqzIixlWyLvrpkiXT0i2rMiLGVbIu+umiJdPSLasSIsZVsi766bIl09ItqxIixlWyLvrpwiXT0i2rEiLGVbIu+unSJdPSLasSIsZVsi766eIl09Itq6IixlWyLvrp8iXT0i2roiLGVbIu+uoCJdPSLauyIsZVsi766hIl09Itq7IixlWyLvrqIiXT0i2rsiLGVbIu+uoyJdPSLauyIsZVsi766kIl09ItuAIixlWyLvrqUiXT0i24AiLGVbIu+upiJdPSLbgSIsZVsi766nIl09ItuBIixlWyLvrqgiXT0i24EiLGVbIu+uqSJdPSLbgSIsZVsi766qIl09Itq+IixlWyLvrqsiXT0i2r4iLGVbIu+urCJdPSLaviIsZVsi766tIl09Itq+IixlWyLvrq4iXT0i25IiLGVbIu+uryJdPSLbkiIsZVsi766wIl09ItuTIixlWyLvrrEiXT0i25MiLGVbIu+vkyJdPSLarSIsZVsi76+UIl09ItqtIixlWyLvr5UiXT0i2q0iLGVbIu+vliJdPSLarSIsZVsi76+XIl09ItuHIixlWyLvr5giXT0i24ciLGVbIu+vmSJdPSLbhiIsZVsi76+aIl09ItuGIixlWyLvr5siXT0i24giLGVbIu+vnCJdPSLbiCIsZVsi76+dIl09Itm3IixlWyLvr54iXT0i24siLGVbIu+vnyJdPSLbiyIsZVsi76+gIl09ItuFIixlWyLvr6EiXT0i24UiLGVbIu+voiJdPSLbiSIsZVsi76+jIl09ItuJIixlWyLvr6QiXT0i25AiLGVbIu+vpSJdPSLbkCIsZVsi76+mIl09ItuQIixlWyLvr6ciXT0i25AiLGVbIu+vqCJdPSLZiSIsZVsi76+pIl09ItmJIixlWyLvr6oiXT0i2KbYpyIsZVsi76+rIl09Itim2KciLGVbIu+vrCJdPSLYptuVIixlWyLvr60iXT0i2KbblSIsZVsi76+uIl09Itim2YgiLGVbIu+vryJdPSLYptmIIixlWyLvr7AiXT0i2KbbhyIsZVsi76+xIl09Itim24ciLGVbIu+vsiJdPSLYptuGIixlWyLvr7MiXT0i2KbbhiIsZVsi76+0Il09Itim24giLGVbIu+vtSJdPSLYptuIIixlWyLvr7YiXT0i2KbbkCI7ZVsi76+3Il09Itim25AiLGVbIu+vuCJdPSLYptuQIixlWyLvr7kiXT0i2KbZiSIsZVsi76+6Il09Itim2YkiLGVbIu+vuyJdPSLYptmJIixlWyLvr7wiXT0i24wiLGVbIu+vvSJdPSLbjCIsZVsi76++Il09ItuMIixlWyLvr78iXT0i24wiLGVbIu+wgCJdPSLYptisIixlWyLvsIEiXT0i2KbYrSIsZVsi77CCIl09Itim2YUiLGVbIu+wgyJdPSLYptmJIixlWyLvsIQiXT0i2KbZiiIsZVsi77CFIl09Itio2KwiLGVbIu+whiJdPSLYqNitIixlWyLvsIciXT0i2KjYriIsZVsi77CIIl09Itio2YUiLGVbIu+wiSJdPSLYqNmJIixlWyLvsIoiXT0i2KjZiiIsZVsi77CLIl09Itiq2KwiLGVbIu+wjCJdPSLYqtitIixlWyLvsI0iXT0i2KrYriIsZVsi77COIl09Itiq2YUiLGVbIu+wjyJdPSLYqtmJIixlWyLvsJAiXT0i2KrZiiIsZVsi77CRIl09Itir2KwiLGVbIu+wkiJdPSLYq9mFIixlWyLvsJMiXT0i2KvZiSIsZVsi77CUIl09Itir2YoiLGVbIu+wlSJdPSLYrNitIixlWyLvsJYiXT0i2KzZhSIsZVsi77CXIl09Itit2KwiLGVbIu+wmCJdPSLYrdmFIixlWyLvsJkiXT0i2K7YrCIsZVsi77CaIl09Itiu2K0iLGVbIu+wmyJdPSLYrtmFIixlWyLvsJwiXT0i2LPYrCIsZVsi77CdIl09Itiz2K0iLGVbIu+wniJdPSLYs9iuIixlWyLvsJ8iXT0i2LPZhSIsZVsi77CgIl09Iti12K0iLGVbIu+woSJdPSLYtdmFIixlWyLvsKIiXT0i2LbYrCIsZVsi77CjIl09Iti22K0iLGVbIu+wpCJdPSLYttiuIixlWyLvsKUiXT0i2LbZhSIsZVsi77CmIl09Iti32K0iLGVbIu+wpyJdPSLYt9mFIixlWyLvsKgiXT0i2LjZhSIsZVsi77CpIl09Iti52KwiLGVbIu+wqiJdPSLYudmFIixlWyLvsKsiXT0i2LrYrCIsZVsi77CsIl09Iti62YUiLGVbIu+wrSJdPSLZgdisIixlWyLvsK4iXT0i2YHYrSIsZVsi77CvIl09ItmB2K4iLGVbIu+wsCJdPSLZgdmFIixlWyLvsLEiXT0i2YHZiSIsZVsi77CyIl09ItmB2YoiLGVbIu+wsyJdPSLZgtitIixlWyLvsLQiXT0i2YLZhSIsZVsi77C1Il09ItmC2YkiLGVbIu+wtiJdPSLZgtmKIixlWyLvsLciXT0i2YPYpyIsZVsi77C4Il09ItmD2KwiLGVbIu+wuSJdPSLZg9itIixlWyLvsLoiXT0i2YPYriIsZVsi77C7Il09ItmD2YQiLGVbIu+wvCJdPSLZg9mFIixlWyLvsL0iXT0i2YPZiSIsZVsi77C+Il09ItmD2YoiLGVbIu+wvyJdPSLZhNisIixlWyLvsYAiXT0i2YTYrSIsZVsi77GBIl09ItmE2K4iLGVbIu+xgiJdPSLZhNmFIixlWyLvsYMiXT0i2YTZiSIsZVsi77GEIl09ItmE2YoiLGVbIu+xhSJdPSLZhdisIixlWyLvsYYiXT0i2YXYrSIsZVsi77GHIl09ItmF2K4iLGVbIu+xiCJdPSLZhdmFIixlWyLvsYkiXT0i2YXZiSIsZVsi77GKIl09ItmF2YoiLGVbIu+xiyJdPSLZhtisIixlWyLvsYwiXT0i2YbYrSIsZVsi77GNIl09ItmG2K4iLGVbIu+xjiJdPSLZhtmFIixlWyLvsY8iXT0i2YbZiSIsZVsi77GQIl09ItmG2YoiLGVbIu+xkSJdPSLZh9isIixlWyLvsZIiXT0i2YfZhSIsZVsi77GTIl09ItmH2YkiLGVbIu+xlCJdPSLZh9mKIixlWyLvsZUiXT0i2YrYrCIsZVsi77GWIl09ItmK2K0iLGVbIu+xlyJdPSLZitiuIixlWyLvsZgiXT0i2YrZhSIsZVsi77GZIl09ItmK2YkiLGVbIu+xmiJdPSLZitmKIixlWyLvsZsiXT0i2LDZsCIsZVsi77GcIl09Itix2bAiLGVbIu+xnSJdPSLZidmwIixlWyLvsZ4iXT0iINmM2ZEiLGVbIu+xnyJdPSIg2Y3ZkSIsZVsi77GgIl09IiDZjtmRIixlWyLvsaEiXT0iINmP2ZEiLGVbIu+xoiJdPSIg2ZDZkSIsZVsi77GjIl09IiDZkdmwIixlWyLvsaQiXT0i2KbYsSIsZVsi77GlIl09Itim2LIiLGVbIu+xpiJdPSLYptmFIixlWyLvsaciXT0i2KbZhiIsZVsi77GoIl09Itim2YkiLGVbIu+xqSJdPSLYptmKIixlWyLvsaoiXT0i2KjYsSIsZVsi77GrIl09Itio2LIiLGVbIu+xrCJdPSLYqNmFIixlWyLvsa0iXT0i2KjZhiIsZVsi77GuIl09Itio2YkiLGVbIu+xryJdPSLYqNmKIixlWyLvsbAiXT0i2KrYsSIsZVsi77GxIl09Itiq2LIiLGVbIu+xsiJdPSLYqtmFIixlWyLvsbMiXT0i2KrZhiIsZVsi77G0Il09Itiq2YkiLGVbIu+xtSJdPSLYqtmKIixlWyLvsbYiXT0i2KvYsSIsZVsi77G3Il09Itir2LIiLGVbIu+xuCJdPSLYq9mFIixlWyLvsbkiXT0i2KvZhiIsZVsi77G6Il09Itir2YkiLGVbIu+xuyJdPSLYq9mKIixlWyLvsbwiXT0i2YHZiSIsZVsi77G9Il09ItmB2YoiLGVbIu+xviJdPSLZgtmJIixlWyLvsb8iXT0i2YLZiiIsZVsi77KAIl09ItmD2KciLGVbIu+ygSJdPSLZg9mEIixlWyLvsoIiXT0i2YPZhSIsZVsi77KDIl09ItmD2YkiLGVbIu+yhCJdPSLZg9mKIixlWyLvsoUiXT0i2YTZhSIsZVsi77KGIl09ItmE2YkiLGVbIu+yhyJdPSLZhNmKIixlWyLvsogiXT0i2YXYpyIsZVsi77KJIl09ItmF2YUiLGVbIu+yiiJdPSLZhtixIixlWyLvsosiXT0i2YbYsiIsZVsi77KMIl09ItmG2YUiLGVbIu+yjSJdPSLZhtmGIixlWyLvso4iXT0i2YbZiSIsZVsi77KPIl09ItmG2YoiLGVbIu+ykCJdPSLZidmwIixlWyLvspEiXT0i2YrYsSIsZVsi77KSIl09ItmK2LIiLGVbIu+ykyJdPSLZitmFIixlWyLvspQiXT0i2YrZhiIsZVsi77KVIl09ItmK2YkiLGVbIu+yliJdPSLZitmKIixlWyLvspciXT0i2KbYrCIsZVsi77KYIl09Itim2K0iLGVbIu+ymSJdPSLYptiuIixlWyLvspoiXT0i2KbZhSIsZVsi77KbIl09Itim2YciLGVbIu+ynCJdPSLYqNisIixlWyLvsp0iXT0i2KjYrSIsZVsi77KeIl09Itio2K4iLGVbIu+ynyJdPSLYqNmFIixlWyLvsqAiXT0i2KjZhyIsZVsi77KhIl09Itiq2KwiLGVbIu+yoiJdPSLYqtitIixlWyLvsqMiXT0i2KrYriIsZVsi77KkIl09Itiq2YUiLGVbIu+ypSJdPSLYqtmHIixlWyLvsqYiXT0i2KvZhSIsZVsi77KnIl09Itis2K0iLGVbIu+yqCJdPSLYrNmFIixlWyLvsqkiXT0i2K3YrCIsZVsi77KqIl09Itit2YUiLGVbIu+yqyJdPSLYrtisIixlWyLvsqwiXT0i2K7ZhSIsZVsi77KtIl09Itiz2KwiLGVbIu+yriJdPSLYs9itIixlWyLvsq8iXT0i2LPYriIsZVsi77KwIl09Itiz2YUiLGVbIu+ysSJdPSLYtditIixlWyLvsrIiXT0i2LXYriIsZVsi77KzIl09Iti12YUiLGVbIu+ytCJdPSLYttisIixlWyLvsrUiXT0i2LbYrSIsZVsi77K2Il09Iti22K4iLGVbIu+ytyJdPSLYttmFIixlWyLvsrgiXT0i2LfYrSIsZVsi77K5Il09Iti42YUiLGVbIu+yuiJdPSLYudisIixlWyLvsrsiXT0i2LnZhSIsZVsi77K8Il09Iti62KwiLGVbIu+yvSJdPSLYutmFIixlWyLvsr4iXT0i2YHYrCIsZVsi77K/Il09ItmB2K0iLGVbIu+zgCJdPSLZgdiuIixlWyLvs4EiXT0i2YHZhSIsZVsi77OCIl09ItmC2K0iLGVbIu+zgyJdPSLZgtmFIixlWyLvs4QiXT0i2YPYrCIsZVsi77OFIl09ItmD2K0iLGVbIu+zhiJdPSLZg9iuIixlWyLvs4ciXT0i2YPZhCIsZVsi77OIIl09ItmD2YUiLGVbIu+ziSJdPSLZhNisIixlWyLvs4oiXT0i2YTYrSIsZVsi77OLIl09ItmE2K4iLGVbIu+zjCJdPSLZhNmFIixlWyLvs40iXT0i2YTZhyIsZVsi77OOIl09ItmF2KwiLGVbIu+zjyJdPSLZhditIixlWyLvs5AiXT0i2YXYriIsZVsi77ORIl09ItmF2YUiLGVbIu+zkiJdPSLZhtisIixlWyLvs5MiXT0i2YbYrSIsZVsi77OUIl09ItmG2K4iLGVbIu+zlSJdPSLZhtmFIixlWyLvs5YiXT0i2YbZhyIsZVsi77OXIl09ItmH2KwiLGVbIu+zmCJdPSLZh9mFIixlWyLvs5kiXT0i2YfZsCIsZVsi77OaIl09ItmK2KwiLGVbIu+zmyJdPSLZititIixlWyLvs5wiXT0i2YrYriIsZVsi77OdIl09ItmK2YUiLGVbIu+zniJdPSLZitmHIixlWyLvs58iXT0i2KbZhSIsZVsi77OgIl09Itim2YciLGVbIu+zoSJdPSLYqNmFIixlWyLvs6IiXT0i2KjZhyIsZVsi77OjIl09Itiq2YUiLGVbIu+zpCJdPSLYqtmHIixlWyLvs6UiXT0i2KvZhSIsZVsi77OmIl09Itir2YciLGVbIu+zpyJdPSLYs9mFIixlWyLvs6giXT0i2LPZhyIsZVsi77OpIl09Iti02YUiLGVbIu+zqiJdPSLYtNmHIixlWyLvs6siXT0i2YPZhCIsZVsi77OsIl09ItmD2YUiLGVbIu+zrSJdPSLZhNmFIixlWyLvs64iXT0i2YbZhSIsZVsi77OvIl09ItmG2YciLGVbIu+zsCJdPSLZitmFIixlWyLvs7EiXT0i2YrZhyIsZVsi77OyIl09ItmA2Y7ZkSIsZVsi77OzIl09ItmA2Y/ZkSIsZVsi77O0Il09ItmA2ZDZkSIsZVsi77O1Il09Iti32YkiLGVbIu+ztiJdPSLYt9mKIixlWyLvs7ciXT0i2LnZiSIsZVsi77O4Il09Iti52YoiLGVbIu+zuSJdPSLYutmJIixlWyLvs7oiXT0i2LrZiiIsZVsi77O7Il09Itiz2YkiLGVbIu+zvCJdPSLYs9mKIixlWyLvs70iXT0i2LTZiSIsZVsi77O+Il09Iti02YoiLGVbIu+zvyJdPSLYrdmJIixlWyLvtIAiXT0i2K3ZiiIsZVsi77SBIl09Itis2YkiLGVbIu+0giJdPSLYrNmKIixlWyLvtIMiXT0i2K7ZiSIsZVsi77SEIl09Itiu2YoiLGVbIu+0hSJdPSLYtdmJIixlWyLvtIYiXT0i2LXZiiIsZVsi77SHIl09Iti22YkiLGVbIu+0iCJdPSLYttmKIixlWyLvtIkiXT0i2LTYrCIsZVsi77SKIl09Iti02K0iLGVbIu+0iyJdPSLYtNiuIixlWyLvtIwiXT0i2LTZhSIsZVsi77SNIl09Iti02LEiLGVbIu+0jiJdPSLYs9ixIixlWyLvtI8iXT0i2LXYsSIsZVsi77SQIl09Iti22LEiLGVbIu+0kSJdPSLYt9mJIixlWyLvtJIiXT0i2LfZiiIsZVsi77STIl09Iti52YkiLGVbIu+0lCJdPSLYudmKIixlWyLvtJUiXT0i2LrZiSIsZVsi77SWIl09Iti62YoiLGVbIu+0lyJdPSLYs9mJIixlWyLvtJgiXT0i2LPZiiIsZVsi77SZIl09Iti02YkiLGVbIu+0miJdPSLYtNmKIixlWyLvtJsiXT0i2K3ZiSIsZVsi77ScIl09Itit2YoiLGVbIu+0nSJdPSLYrNmJIixlWyLvtJ4iXT0i2KzZiiIsZVsi77SfIl09Itiu2YkiLGVbIu+0oCJdPSLYrtmKIixlWyLvtKEiXT0i2LXZiSIsZVsi77SiIl09Iti12YoiLGVbIu+0oyJdPSLYttmJIixlWyLvtKQiXT0i2LbZiiIsZVsi77SlIl09Iti02KwiLGVbIu+0piJdPSLYtNitIixlWyLvtKciXT0i2LTYriIsZVsi77SoIl09Iti02YUiLGVbIu+0qSJdPSLYtNixIixlWyLvtKoiXT0i2LPYsSIsZVsi77SrIl09Iti12LEiLGVbIu+0rCJdPSLYttixIixlWyLvtK0iXT0i2LTYrCIsZVsi77SuIl09Iti02K0iLGVbIu+0ryJdPSLYtNiuIixlWyLvtLAiXT0i2LTZhSIsZVsi77SxIl09Itiz2YciLGVbIu+0siJdPSLYtNmHIixlWyLvtLMiXT0i2LfZhSIsZVsi77S0Il09Itiz2KwiLGVbIu+0tSJdPSLYs9itIixlWyLvtLYiXT0i2LPYriIsZVsi77S3Il09Iti02KwiLGVbIu+0uCJdPSLYtNitIixlWyLvtLkiXT0i2LTYriIsZVsi77S6Il09Iti32YUiLGVbIu+0uyJdPSLYuNmFIixlWyLvtLwiXT0i2KfZiyIsZVsi77S9Il09Itin2YsiLGVbIu+1kCJdPSLYqtis2YUiLGVbIu+1kSJdPSLYqtit2KwiLGVbIu+1kiJdPSLYqtit2KwiLGVbIu+1kyJdPSLYqtit2YUiLGVbIu+1lCJdPSLYqtiu2YUiLGVbIu+1lSJdPSLYqtmF2KwiLGVbIu+1liJdPSLYqtmF2K0iLGVbIu+1lyJdPSLYqtmF2K4iLGVbIu+1mCJdPSLYrNmF2K0iLGVbIu+1mSJdPSLYrNmF2K0iLGVbIu+1miJdPSLYrdmF2YoiLGVbIu+1myJdPSLYrdmF2YkiLGVbIu+1nCJdPSLYs9it2KwiLGVbIu+1nSJdPSLYs9is2K0iLGVbIu+1niJdPSLYs9is2YkiLGVbIu+1nyJdPSLYs9mF2K0iLGVbIu+1oCJdPSLYs9mF2K0iLGVbIu+1oSJdPSLYs9mF2KwiLGVbIu+1oiJdPSLYs9mF2YUiLGVbIu+1oyJdPSLYs9mF2YUiLGVbIu+1pCJdPSLYtdit2K0iLGVbIu+1pSJdPSLYtdit2K0iLGVbIu+1piJdPSLYtdmF2YUiLGVbIu+1pyJdPSLYtNit2YUiLGVbIu+1qCJdPSLYtNit2YUiLGVbIu+1qSJdPSLYtNis2YoiLGVbIu+1qiJdPSLYtNmF2K4iLGVbIu+1qyJdPSLYtNmF2K4iLGVbIu+1rCJdPSLYtNmF2YUiLGVbIu+1rSJdPSLYtNmF2YUiLGVbIu+1riJdPSLYttit2YkiLGVbIu+1ryJdPSLYttiu2YUiLGVbIu+1sCJdPSLYttiu2YUiLGVbIu+1sSJdPSLYt9mF2K0iLGVbIu+1siJdPSLYt9mF2K0iLGVbIu+1syJdPSLYt9mF2YUiLGVbIu+1tCJdPSLYt9mF2YoiLGVbIu+1tSJdPSLYudis2YUiLGVbIu+1tiJdPSLYudmF2YUiLGVbIu+1tyJdPSLYudmF2YUiLGVbIu+1uCJdPSLYudmF2YkiLGVbIu+1uSJdPSLYutmF2YUiLGVbIu+1uiJdPSLYutmF2YoiLGVbIu+1uyJdPSLYutmF2YkiLGVbIu+1vCJdPSLZgdiu2YUiLGVbIu+1vSJdPSLZgdiu2YUiLGVbIu+1viJdPSLZgtmF2K0iLGVbIu+1vyJdPSLZgtmF2YUiLGVbIu+2gCJdPSLZhNit2YUiLGVbIu+2gSJdPSLZhNit2YoiLGVbIu+2giJdPSLZhNit2YkiLGVbIu+2gyJdPSLZhNis2KwiLGVbIu+2hCJdPSLZhNis2KwiLGVbIu+2hSJdPSLZhNiu2YUiLGVbIu+2hiJdPSLZhNiu2YUiLGVbIu+2hyJdPSLZhNmF2K0iLGVbIu+2iCJdPSLZhNmF2K0iLGVbIu+2iSJdPSLZhdit2KwiLGVbIu+2iiJdPSLZhdit2YUiLGVbIu+2iyJdPSLZhdit2YoiLGVbIu+2jCJdPSLZhdis2K0iLGVbIu+2jSJdPSLZhdis2YUiLGVbIu+2jiJdPSLZhdiu2KwiLGVbIu+2jyJdPSLZhdiu2YUiLGVbIu+2kiJdPSLZhdis2K4iLGVbIu+2kyJdPSLZh9mF2KwiLGVbIu+2lCJdPSLZh9mF2YUiLGVbIu+2lSJdPSLZhtit2YUiLGVbIu+2liJdPSLZhtit2YkiLGVbIu+2lyJdPSLZhtis2YUiLGVbIu+2mCJdPSLZhtis2YUiLGVbIu+2mSJdPSLZhtis2YkiLGVbIu+2miJdPSLZhtmF2YoiLGVbIu+2myJdPSLZhtmF2YkiLGVbIu+2nCJdPSLZitmF2YUiLGVbIu+2nSJdPSLZitmF2YUiLGVbIu+2niJdPSLYqNiu2YoiLGVbIu+2nyJdPSLYqtis2YoiLGVbIu+2oCJdPSLYqtis2YkiLGVbIu+2oSJdPSLYqtiu2YoiLGVbIu+2oiJdPSLYqtiu2YkiLGVbIu+2oyJdPSLYqtmF2YoiLGVbIu+2pCJdPSLYqtmF2YkiLGVbIu+2pSJdPSLYrNmF2YoiLGVbIu+2piJdPSLYrNit2YkiLGVbIu+2pyJdPSLYrNmF2YkiLGVbIu+2qCJdPSLYs9iu2YkiLGVbIu+2qSJdPSLYtdit2YoiLGVbIu+2qiJdPSLYtNit2YoiLGVbIu+2qyJdPSLYttit2YoiLGVbIu+2rCJdPSLZhNis2YoiLGVbIu+2rSJdPSLZhNmF2YoiLGVbIu+2riJdPSLZitit2YoiLGVbIu+2ryJdPSLZitis2YoiLGVbIu+2sCJdPSLZitmF2YoiLGVbIu+2sSJdPSLZhdmF2YoiLGVbIu+2siJdPSLZgtmF2YoiLGVbIu+2syJdPSLZhtit2YoiLGVbIu+2tCJdPSLZgtmF2K0iLGVbIu+2tSJdPSLZhNit2YUiLGVbIu+2tiJdPSLYudmF2YoiLGVbIu+2tyJdPSLZg9mF2YoiLGVbIu+2uCJdPSLZhtis2K0iLGVbIu+2uSJdPSLZhdiu2YoiLGVbIu+2uiJdPSLZhNis2YUiLGVbIu+2uyJdPSLZg9mF2YUiLGVbIu+2vCJdPSLZhNis2YUiLGVbIu+2vSJdPSLZhtis2K0iLGVbIu+2viJdPSLYrNit2YoiLGVbIu+2vyJdPSLYrdis2YoiLGVbIu+3gCJdPSLZhdis2YoiLGVbIu+3gSJdPSLZgdmF2YoiLGVbIu+3giJdPSLYqNit2YoiLGVbIu+3gyJdPSLZg9mF2YUiLGVbIu+3hCJdPSLYudis2YUiLGVbIu+3hSJdPSLYtdmF2YUiLGVbIu+3hiJdPSLYs9iu2YoiLGVbIu+3hyJdPSLZhtis2YoiLGVbIu+5iSJdPSLigL4iLGVbIu+5iiJdPSLigL4iLGVbIu+5iyJdPSLigL4iLGVbIu+5jCJdPSLigL4iLGVbIu+5jSJdPSJfIixlWyLvuY4iXT0iXyIsZVsi77mPIl09Il8iLGVbIu+6gCJdPSLYoSIsZVsi77qBIl09ItiiIixlWyLvuoIiXT0i2KIiLGVbIu+6gyJdPSLYoyIsZVsi77qEIl09ItijIixlWyLvuoUiXT0i2KQiLGVbIu+6hiJdPSLYpCIsZVsi77qHIl09ItilIixlWyLvuogiXT0i2KUiLGVbIu+6iSJdPSLYpiIsZVsi77qKIl09ItimIixlWyLvuosiXT0i2KYiLGVbIu+6jCJdPSLYpiIsZVsi77qNIl09ItinIixlWyLvuo4iXT0i2KciLGVbIu+6jyJdPSLYqCIsZVsi77qQIl09ItioIixlWyLvupEiXT0i2KgiLGVbIu+6kiJdPSLYqCIsZVsi77qTIl09ItipIixlWyLvupQiXT0i2KkiLGVbIu+6lSJdPSLYqiIsZVsi77qWIl09ItiqIixlWyLvupciXT0i2KoiLGVbIu+6mCJdPSLYqiIsZVsi77qZIl09ItirIixlWyLvupoiXT0i2KsiLGVbIu+6myJdPSLYqyIsZVsi77qcIl09ItirIixlWyLvup0iXT0i2KwiLGVbIu+6niJdPSLYrCIsZVsi77qfIl09ItisIixlWyLvuqAiXT0i2KwiLGVbIu+6oSJdPSLYrSIsZVsi77qiIl09ItitIixlWyLvuqMiXT0i2K0iLGVbIu+6pCJdPSLYrSIsZVsi77qlIl09ItiuIixlWyLvuqYiXT0i2K4iLGVbIu+6pyJdPSLYriIsZVsi77qoIl09ItiuIixlWyLvuqkiXT0i2K8iLGVbIu+6qiJdPSLYryIsZVsi77qrIl09ItiwIixlWyLvuqwiXT0i2LAiLGVbIu+6rSJdPSLYsSIsZVsi77quIl09ItixIixlWyLvuq8iXT0i2LIiLGVbIu+6sCJdPSLYsiIsZVsi77qxIl09ItizIixlWyLvurIiXT0i2LMiLGVbIu+6syJdPSLYsyIsZVsi77q0Il09ItizIixlWyLvurUiXT0i2LQiLGVbIu+6tiJdPSLYtCIsZVsi77q3Il09Iti0IixlWyLvurgiXT0i2LQiLGVbIu+6uSJdPSLYtSIsZVsi77q6Il09Iti1IixlWyLvursiXT0i2LUiLGVbIu+6vCJdPSLYtSIsZVsi77q9Il09Iti2IixlWyLvur4iXT0i2LYiLGVbIu+6vyJdPSLYtiIsZVsi77uAIl09Iti2IixlWyLvu4EiXT0i2LciLGVbIu+7giJdPSLYtyIsZVsi77uDIl09Iti3IixlWyLvu4QiXT0i2LciLGVbIu+7hSJdPSLYuCIsZVsi77uGIl09Iti4IixlWyLvu4ciXT0i2LgiLGVbIu+7iCJdPSLYuCIsZVsi77uJIl09Iti5IixlWyLvu4oiXT0i2LkiLGVbIu+7iyJdPSLYuSIsZVsi77uMIl09Iti5IixlWyLvu40iXT0i2LoiLGVbIu+7jiJdPSLYuiIsZVsi77uPIl09Iti6IixlWyLvu5AiXT0i2LoiLGVbIu+7kSJdPSLZgSIsZVsi77uSIl09ItmBIixlWyLvu5MiXT0i2YEiLGVbIu+7lCJdPSLZgSIsZVsi77uVIl09ItmCIixlWyLvu5YiXT0i2YIiLGVbIu+7lyJdPSLZgiIsZVsi77uYIl09ItmCIixlWyLvu5kiXT0i2YMiLGVbIu+7miJdPSLZgyIsZVsi77ubIl09ItmDIixlWyLvu5wiXT0i2YMiLGVbIu+7nSJdPSLZhCIsZVsi77ueIl09ItmEIixlWyLvu58iXT0i2YQiLGVbIu+7oCJdPSLZhCIsZVsi77uhIl09ItmFIixlWyLvu6IiXT0i2YUiLGVbIu+7oyJdPSLZhSIsZVsi77ukIl09ItmFIixlWyLvu6UiXT0i2YYiLGVbIu+7piJdPSLZhiIsZVsi77unIl09ItmGIixlWyLvu6giXT0i2YYiLGVbIu+7qSJdPSLZhyIsZVsi77uqIl09ItmHIixlWyLvu6siXT0i2YciLGVbIu+7rCJdPSLZhyIsZVsi77utIl09ItmIIixlWyLvu64iXT0i2YgiLGVbIu+7ryJdPSLZiSIsZVsi77uwIl09ItmJIixlWyLvu7EiXT0i2YoiLGVbIu+7siJdPSLZiiIsZVsi77uzIl09ItmKIixlWyLvu7QiXT0i2YoiLGVbIu+7tSJdPSLZhNiiIixlWyLvu7YiXT0i2YTYoiIsZVsi77u3Il09ItmE2KMiLGVbIu+7uCJdPSLZhNijIixlWyLvu7kiXT0i2YTYpSIsZVsi77u6Il09ItmE2KUiLGVbIu+7uyJdPSLZhNinIixlWyLvu7wiXT0i2YTYpyJ9KSk7dC5tYXBTcGVjaWFsVW5pY29kZVZhbHVlcz1mdW5jdGlvbihlKXtyZXR1cm4gZT49NjU1MjAmJmU8PTY1NTM1PzA6ZT49NjI5NzYmJmU8PTYzNzQzP2EoKVtlXXx8ZToxNzM9PT1lPzQ1OmV9LHQucmV2ZXJzZUlmUnRsPWZ1bmN0aW9uKGUpe3ZhciB0LHIsbj1lLmxlbmd0aDtpZihuPD0xfHwhKCh0PWUuY2hhckNvZGVBdCgwKSk+PShyPWlbMTNdKS5iZWdpbiYmdDxyLmVuZHx8dD49KHI9aVsxMV0pLmJlZ2luJiZ0PHIuZW5kKSlyZXR1cm4gZTtmb3IodmFyIGE9IiIsbz1uLTE7bz49MDtvLS0pYSs9ZVtvXTtyZXR1cm4gYX0sdC5nZXRVbmljb2RlUmFuZ2VGb3I9ZnVuY3Rpb24oZSl7Zm9yKHZhciB0PTAscj1pLmxlbmd0aDt0PHI7dCsrKXt2YXIgbj1pW3RdO2lmKGU+PW4uYmVnaW4mJmU8bi5lbmQpcmV0dXJuIHR9cmV0dXJuLTF9LHQuZ2V0Tm9ybWFsaXplZFVuaWNvZGVzPW8sdC5nZXRVbmljb2RlRm9yR2x5cGg9ZnVuY3Rpb24oZSx0KXt2YXIgcj10W2VdO2lmKHZvaWQgMCE9PXIpcmV0dXJuIHI7aWYoIWUpcmV0dXJuLTE7aWYoInUiPT09ZVswXSl7dmFyIG4sYT1lLmxlbmd0aDtpZig3PT09YSYmIm4iPT09ZVsxXSYmImkiPT09ZVsyXSluPWUuc3Vic3RyaW5nKDMpO2Vsc2V7aWYoIShhPj01JiZhPD03KSlyZXR1cm4tMTtuPWUuc3Vic3RyaW5nKDEpfWlmKG49PT1uLnRvVXBwZXJDYXNlKCkmJihyPXBhcnNlSW50KG4sMTYpKT49MClyZXR1cm4gcn1yZXR1cm4tMX19LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuRm9udFJlbmRlcmVyRmFjdG9yeT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTc0KSxpPXIoMTc3KSxvPXIoMTc2KSxzPXIoMTU3KTtmdW5jdGlvbiBsKGUpe3JldHVybihsPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gYyhlLHQpe3JldHVybiF0fHwib2JqZWN0IiE9PWwodCkmJiJmdW5jdGlvbiIhPXR5cGVvZiB0P2Z1bmN0aW9uKGUpe2lmKHZvaWQgMD09PWUpdGhyb3cgbmV3IFJlZmVyZW5jZUVycm9yKCJ0aGlzIGhhc24ndCBiZWVuIGluaXRpYWxpc2VkIC0gc3VwZXIoKSBoYXNuJ3QgYmVlbiBjYWxsZWQiKTtyZXR1cm4gZX0oZSk6dH1mdW5jdGlvbiB1KGUpe3JldHVybih1PU9iamVjdC5zZXRQcm90b3R5cGVPZj9PYmplY3QuZ2V0UHJvdG90eXBlT2Y6ZnVuY3Rpb24oZSl7cmV0dXJuIGUuX19wcm90b19ffHxPYmplY3QuZ2V0UHJvdG90eXBlT2YoZSl9KShlKX1mdW5jdGlvbiBmKGUsdCl7aWYoImZ1bmN0aW9uIiE9dHlwZW9mIHQmJm51bGwhPT10KXRocm93IG5ldyBUeXBlRXJyb3IoIlN1cGVyIGV4cHJlc3Npb24gbXVzdCBlaXRoZXIgYmUgbnVsbCBvciBhIGZ1bmN0aW9uIik7ZS5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZSh0JiZ0LnByb3RvdHlwZSx7Y29uc3RydWN0b3I6e3ZhbHVlOmUsd3JpdGFibGU6ITAsY29uZmlndXJhYmxlOiEwfX0pLHQmJmgoZSx0KX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuKGg9T2JqZWN0LnNldFByb3RvdHlwZU9mfHxmdW5jdGlvbihlLHQpe3JldHVybiBlLl9fcHJvdG9fXz10LGV9KShlLHQpfWZ1bmN0aW9uIGQoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBwKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gbShlLHQscil7cmV0dXJuIHQmJnAoZS5wcm90b3R5cGUsdCksciYmcChlLHIpLGV9dmFyIGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIGVbdF08PDI0fGVbdCsxXTw8MTZ8ZVt0KzJdPDw4fGVbdCszXX1mdW5jdGlvbiB0KGUsdCl7cmV0dXJuIGVbdF08PDh8ZVt0KzFdfWZ1bmN0aW9uIHIocixhLGkpe3ZhciBvLHMsbCxjPTE9PT10KHIsYSsyKT9lKHIsYSs4KTplKHIsYSsxNiksdT10KHIsYStjKTtpZig0PT09dSl7dChyLGErYysyKTt2YXIgZj10KHIsYStjKzYpPj4xO2ZvcihzPWErYysxNCxvPVtdLGw9MDtsPGY7bCsrLHMrPTIpb1tsXT17ZW5kOnQocixzKX07Zm9yKHMrPTIsbD0wO2w8ZjtsKysscys9MilvW2xdLnN0YXJ0PXQocixzKTtmb3IobD0wO2w8ZjtsKysscys9MilvW2xdLmlkRGVsdGE9dChyLHMpO2ZvcihsPTA7bDxmO2wrKyxzKz0yKXt2YXIgaD10KHIscyk7aWYoMCE9PWgpe29bbF0uaWRzPVtdO2Zvcih2YXIgZD0wLHA9b1tsXS5lbmQtb1tsXS5zdGFydCsxO2Q8cDtkKyspb1tsXS5pZHNbZF09dChyLHMraCksaCs9Mn19cmV0dXJuIG99aWYoMTI9PT11KXtlKHIsYStjKzQpO3ZhciBtPWUocixhK2MrMTIpO2ZvcihzPWErYysxNixvPVtdLGw9MDtsPG07bCsrKW8ucHVzaCh7c3RhcnQ6ZShyLHMpLGVuZDplKHIscys0KSxpZERlbHRhOmUocixzKzgpLWUocixzKX0pLHMrPTEyO3JldHVybiBvfXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bnN1cHBvcnRlZCBjbWFwOiAiLmNvbmNhdCh1KSl9ZnVuY3Rpb24gbChlLHQscixuKXt2YXIgaT1uZXcgYS5DRkZQYXJzZXIobmV3IHMuU3RyZWFtKGUsdCxyLXQpLHt9LG4pLnBhcnNlKCk7cmV0dXJue2dseXBoczppLmNoYXJTdHJpbmdzLm9iamVjdHMsc3VicnM6aS50b3BEaWN0LnByaXZhdGVEaWN0JiZpLnRvcERpY3QucHJpdmF0ZURpY3Quc3VicnNJbmRleCYmaS50b3BEaWN0LnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyxnc3VicnM6aS5nbG9iYWxTdWJySW5kZXgmJmkuZ2xvYmFsU3VickluZGV4Lm9iamVjdHMsaXNDRkZDSURGb250OmkuaXNDSURGb250LGZkU2VsZWN0OmkuZmRTZWxlY3QsZmRBcnJheTppLmZkQXJyYXl9fWZ1bmN0aW9uIGgoZSx0KXtmb3IodmFyIHI9dC5jb2RlUG9pbnRBdCgwKSxuPTAsYT0wLGk9ZS5sZW5ndGgtMTthPGk7KXt2YXIgbz1hK2krMT4+MTtyPGVbb10uc3RhcnQ/aT1vLTE6YT1vfXJldHVybiBlW2FdLnN0YXJ0PD1yJiZyPD1lW2FdLmVuZCYmKG49ZVthXS5pZERlbHRhKyhlW2FdLmlkcz9lW2FdLmlkc1tyLWVbYV0uc3RhcnRdOnIpJjY1NTM1KSx7Y2hhckNvZGU6cixnbHlwaElkOm59fXZhciBwPVtdLGc9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2QodGhpcyxlKSx0aGlzLmNvbnN0cnVjdG9yPT09ZSYmKDAsbi51bnJlYWNoYWJsZSkoIkNhbm5vdCBpbml0aWFsaXplIENvbXBpbGVkRm9udC4iKSx0aGlzLmZvbnRNYXRyaXg9dCx0aGlzLmNvbXBpbGVkR2x5cGhzPU9iamVjdC5jcmVhdGUobnVsbCksdGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkPU9iamVjdC5jcmVhdGUobnVsbCl9cmV0dXJuIG0oZSxbe2tleToiZ2V0UGF0aEpzIix2YWx1ZTpmdW5jdGlvbihlKXt2YXIgdD1oKHRoaXMuY21hcCxlKSxyPXRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXTtyZXR1cm4gcnx8KHI9dGhpcy5jb21waWxlR2x5cGgodGhpcy5nbHlwaHNbdC5nbHlwaElkXSx0LmdseXBoSWQpLHRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXT1yKSx2b2lkIDA9PT10aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdC5jaGFyQ29kZV0mJih0aGlzLmNvbXBpbGVkQ2hhckNvZGVUb0dseXBoSWRbdC5jaGFyQ29kZV09dC5nbHlwaElkKSxyfX0se2tleToiY29tcGlsZUdseXBoIix2YWx1ZTpmdW5jdGlvbihlLHQpe2lmKCFlfHwwPT09ZS5sZW5ndGh8fDE0PT09ZVswXSlyZXR1cm4gcDt2YXIgcj10aGlzLmZvbnRNYXRyaXg7aWYodGhpcy5pc0NGRkNJREZvbnQpe3ZhciBhPXRoaXMuZmRTZWxlY3QuZ2V0RkRJbmRleCh0KTthPj0wJiZhPHRoaXMuZmRBcnJheS5sZW5ndGg/cj10aGlzLmZkQXJyYXlbYV0uZ2V0QnlOYW1lKCJGb250TWF0cml4Iil8fG4uRk9OVF9JREVOVElUWV9NQVRSSVg6KDAsbi53YXJuKSgiSW52YWxpZCBmZCBpbmRleCBmb3IgZ2x5cGggaW5kZXguIil9dmFyIGk9W107cmV0dXJuIGkucHVzaCh7Y21kOiJzYXZlIn0pLGkucHVzaCh7Y21kOiJ0cmFuc2Zvcm0iLGFyZ3M6ci5zbGljZSgpfSksaS5wdXNoKHtjbWQ6InNjYWxlIixhcmdzOlsic2l6ZSIsIi1zaXplIl19KSx0aGlzLmNvbXBpbGVHbHlwaEltcGwoZSxpLHQpLGkucHVzaCh7Y21kOiJyZXN0b3JlIn0pLGl9fSx7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbigpeygwLG4udW5yZWFjaGFibGUpKCJDaGlsZHJlbiBjbGFzc2VzIHNob3VsZCBpbXBsZW1lbnQgdGhpcy4iKX19LHtrZXk6Imhhc0J1aWx0UGF0aCIsdmFsdWU6ZnVuY3Rpb24oZSl7dmFyIHQ9aCh0aGlzLmNtYXAsZSk7cmV0dXJuIHZvaWQgMCE9PXRoaXMuY29tcGlsZWRHbHlwaHNbdC5nbHlwaElkXSYmdm9pZCAwIT09dGhpcy5jb21waWxlZENoYXJDb2RlVG9HbHlwaElkW3QuY2hhckNvZGVdfX1dKSxlfSgpLHY9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlLHIsbil7dmFyIGE7cmV0dXJuIGQodGhpcyx0KSwoYT1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsbnx8WzQ4OGUtNiwwLDAsNDg4ZS02LDAsMF0pKSkuZ2x5cGhzPWUsYS5jbWFwPXIsYX1yZXR1cm4gZih0LGUpLG0odCxbe2tleToiY29tcGlsZUdseXBoSW1wbCIsdmFsdWU6ZnVuY3Rpb24oZSx0KXshZnVuY3Rpb24gZSh0LHIsbil7ZnVuY3Rpb24gYShlLHQpe3IucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsdF19KX1mdW5jdGlvbiBpKGUsdCl7ci5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSx0XX0pfWZ1bmN0aW9uIG8oZSx0LG4sYSl7ci5wdXNoKHtjbWQ6InF1YWRyYXRpY0N1cnZlVG8iLGFyZ3M6W2UsdCxuLGFdfSl9dmFyIHMsbD0wLGM9KHRbbF08PDI0fHRbbCsxXTw8MTYpPj4xNix1PTAsZj0wO2lmKGwrPTEwLGM8MClkb3tzPXRbbF08PDh8dFtsKzFdO3ZhciBoLGQscD10W2wrMl08PDh8dFtsKzNdO2wrPTQsMSZzPyhoPSh0W2xdPDwyNHx0W2wrMV08PDE2KT4+MTYsZD0odFtsKzJdPDwyNHx0W2wrM108PDE2KT4+MTYsbCs9NCk6KGg9dFtsKytdLGQ9dFtsKytdKSwyJnM/KHU9aCxmPWQpOih1PTAsZj0wKTt2YXIgbT0xLGc9MSx2PTAseT0wOzgmcz8obT1nPSh0W2xdPDwyNHx0W2wrMV08PDE2KS8xMDczNzQxODI0LGwrPTIpOjY0JnM/KG09KHRbbF08PDI0fHRbbCsxXTw8MTYpLzEwNzM3NDE4MjQsZz0odFtsKzJdPDwyNHx0W2wrM108PDE2KS8xMDczNzQxODI0LGwrPTQpOjEyOCZzJiYobT0odFtsXTw8MjR8dFtsKzFdPDwxNikvMTA3Mzc0MTgyNCx2PSh0W2wrMl08PDI0fHRbbCszXTw8MTYpLzEwNzM3NDE4MjQseT0odFtsKzRdPDwyNHx0W2wrNV08PDE2KS8xMDczNzQxODI0LGc9KHRbbCs2XTw8MjR8dFtsKzddPDwxNikvMTA3Mzc0MTgyNCxsKz04KTt2YXIgYj1uLmdseXBoc1twXTtiJiYoci5wdXNoKHtjbWQ6InNhdmUifSksci5wdXNoKHtjbWQ6InRyYW5zZm9ybSIsYXJnczpbbSx2LHksZyx1LGZdfSksZShiLHIsbiksci5wdXNoKHtjbWQ6InJlc3RvcmUifSkpfXdoaWxlKDMyJnMpO2Vsc2V7dmFyIHcsayxTPVtdO2Zvcih3PTA7dzxjO3crKylTLnB1c2godFtsXTw8OHx0W2wrMV0pLGwrPTI7bCs9MisodFtsXTw8OHx0W2wrMV0pO2Zvcih2YXIgXz1TW1MubGVuZ3RoLTFdKzEseD1bXTt4Lmxlbmd0aDxfOyl7dmFyIEE9MTtmb3IoOCYocz10W2wrK10pJiYoQSs9dFtsKytdKTtBLS0gPjA7KXgucHVzaCh7ZmxhZ3M6c30pfWZvcih3PTA7dzxfO3crKyl7c3dpdGNoKDE4Jnhbd10uZmxhZ3Mpe2Nhc2UgMDp1Kz0odFtsXTw8MjR8dFtsKzFdPDwxNik+PjE2LGwrPTI7YnJlYWs7Y2FzZSAyOnUtPXRbbCsrXTticmVhaztjYXNlIDE4OnUrPXRbbCsrXX14W3ddLng9dX1mb3Iodz0wO3c8Xzt3Kyspe3N3aXRjaCgzNiZ4W3ddLmZsYWdzKXtjYXNlIDA6Zis9KHRbbF08PDI0fHRbbCsxXTw8MTYpPj4xNixsKz0yO2JyZWFrO2Nhc2UgNDpmLT10W2wrK107YnJlYWs7Y2FzZSAzNjpmKz10W2wrK119eFt3XS55PWZ9dmFyIEM9MDtmb3IobD0wO2w8YztsKyspe3ZhciBQPVNbbF0sRT14LnNsaWNlKEMsUCsxKTtpZigxJkVbMF0uZmxhZ3MpRS5wdXNoKEVbMF0pO2Vsc2UgaWYoMSZFW0UubGVuZ3RoLTFdLmZsYWdzKUUudW5zaGlmdChFW0UubGVuZ3RoLTFdKTtlbHNle3ZhciBUPXtmbGFnczoxLHg6KEVbMF0ueCtFW0UubGVuZ3RoLTFdLngpLzIseTooRVswXS55K0VbRS5sZW5ndGgtMV0ueSkvMn07RS51bnNoaWZ0KFQpLEUucHVzaChUKX1mb3IoYShFWzBdLngsRVswXS55KSx3PTEsaz1FLmxlbmd0aDt3PGs7dysrKTEmRVt3XS5mbGFncz9pKEVbd10ueCxFW3ddLnkpOjEmRVt3KzFdLmZsYWdzPyhvKEVbd10ueCxFW3ddLnksRVt3KzFdLngsRVt3KzFdLnkpLHcrKyk6byhFW3ddLngsRVt3XS55LChFW3ddLngrRVt3KzFdLngpLzIsKEVbd10ueStFW3crMV0ueSkvMik7Qz1QKzF9fX0oZSx0LHRoaXMpfX1dKSx0fShnKSx5PWZ1bmN0aW9uKGUpe2Z1bmN0aW9uIHQoZSxyLG4sYSl7dmFyIG87cmV0dXJuIGQodGhpcyx0KSwobz1jKHRoaXMsdSh0KS5jYWxsKHRoaXMsbnx8Wy4wMDEsMCwwLC4wMDEsMCwwXSkpKS5nbHlwaHM9ZS5nbHlwaHMsby5nc3VicnM9ZS5nc3VicnN8fFtdLG8uc3VicnM9ZS5zdWJyc3x8W10sby5jbWFwPXIsby5nbHlwaE5hbWVNYXA9YXx8KDAsaS5nZXRHbHlwaHNVbmljb2RlKSgpLG8uZ3N1YnJzQmlhcz1vLmdzdWJycy5sZW5ndGg8MTI0MD8xMDc6by5nc3VicnMubGVuZ3RoPDMzOTAwPzExMzE6MzI3Njgsby5zdWJyc0JpYXM9by5zdWJycy5sZW5ndGg8MTI0MD8xMDc6by5zdWJycy5sZW5ndGg8MzM5MDA/MTEzMTozMjc2OCxvLmlzQ0ZGQ0lERm9udD1lLmlzQ0ZGQ0lERm9udCxvLmZkU2VsZWN0PWUuZmRTZWxlY3Qsby5mZEFycmF5PWUuZmRBcnJheSxvfXJldHVybiBmKHQsZSksbSh0LFt7a2V5OiJjb21waWxlR2x5cGhJbXBsIix2YWx1ZTpmdW5jdGlvbihlLHQscil7IWZ1bmN0aW9uIGUodCxyLGEsaSl7dmFyIHM9W10sbD0wLGM9MCx1PTA7ZnVuY3Rpb24gZihlLHQpe3IucHVzaCh7Y21kOiJtb3ZlVG8iLGFyZ3M6W2UsdF19KX1mdW5jdGlvbiBkKGUsdCl7ci5wdXNoKHtjbWQ6ImxpbmVUbyIsYXJnczpbZSx0XX0pfWZ1bmN0aW9uIHAoZSx0LG4sYSxpLG8pe3IucHVzaCh7Y21kOiJiZXppZXJDdXJ2ZVRvIixhcmdzOltlLHQsbixhLGksb119KX0hZnVuY3Rpb24gdChtKXtmb3IodmFyIGc9MDtnPG0ubGVuZ3RoOyl7dmFyIHYseSxiLHcsayxTLF8seCxBPSExLEM9bVtnKytdO3N3aXRjaChDKXtjYXNlIDE6Y2FzZSAzOnUrPXMubGVuZ3RoPj4xLEE9ITA7YnJlYWs7Y2FzZSA0OmMrPXMucG9wKCksZihsLGMpLEE9ITA7YnJlYWs7Y2FzZSA1OmZvcig7cy5sZW5ndGg+MDspbCs9cy5zaGlmdCgpLGMrPXMuc2hpZnQoKSxkKGwsYyk7YnJlYWs7Y2FzZSA2OmZvcig7cy5sZW5ndGg+MCYmKGQobCs9cy5zaGlmdCgpLGMpLDAhPT1zLmxlbmd0aCk7KWMrPXMuc2hpZnQoKSxkKGwsYyk7YnJlYWs7Y2FzZSA3OmZvcig7cy5sZW5ndGg+MCYmKGMrPXMuc2hpZnQoKSxkKGwsYyksMCE9PXMubGVuZ3RoKTspZChsKz1zLnNoaWZ0KCksYyk7YnJlYWs7Y2FzZSA4OmZvcig7cy5sZW5ndGg+MDspdj1sK3Muc2hpZnQoKSxiPWMrcy5zaGlmdCgpLHk9ditzLnNoaWZ0KCksdz1iK3Muc2hpZnQoKSxsPXkrcy5zaGlmdCgpLGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7Y2FzZSAxMDppZihfPXMucG9wKCkseD1udWxsLGEuaXNDRkZDSURGb250KXt2YXIgUD1hLmZkU2VsZWN0LmdldEZESW5kZXgoaSk7aWYoUD49MCYmUDxhLmZkQXJyYXkubGVuZ3RoKXt2YXIgRT1hLmZkQXJyYXlbUF0sVD12b2lkIDA7aWYoRS5wcml2YXRlRGljdCYmRS5wcml2YXRlRGljdC5zdWJyc0luZGV4JiYoVD1FLnByaXZhdGVEaWN0LnN1YnJzSW5kZXgub2JqZWN0cyksVCl7dmFyIFI9VC5sZW5ndGg7eD1UW18rPVI8MTI0MD8xMDc6UjwzMzkwMD8xMTMxOjMyNzY4XX19ZWxzZSgwLG4ud2FybikoIkludmFsaWQgZmQgaW5kZXggZm9yIGdseXBoIGluZGV4LiIpfWVsc2UgeD1hLnN1YnJzW18rYS5zdWJyc0JpYXNdO3gmJnQoeCk7YnJlYWs7Y2FzZSAxMTpyZXR1cm47Y2FzZSAxMjpzd2l0Y2goQz1tW2crK10pe2Nhc2UgMzQ6eT0odj1sK3Muc2hpZnQoKSkrcy5zaGlmdCgpLGs9YytzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxwKHYsYyx5LGssbCxrKSx5PSh2PWwrcy5zaGlmdCgpKStzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxwKHYsayx5LGMsbCxjKTticmVhaztjYXNlIDM1OnY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpLHY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpLHMucG9wKCk7YnJlYWs7Y2FzZSAzNjpwKHY9bCtzLnNoaWZ0KCksaz1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLFM9aytzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxTKSxwKHY9bCtzLnNoaWZ0KCksUyx5PXYrcy5zaGlmdCgpLFMrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYyk7YnJlYWs7Y2FzZSAzNzp2YXIgTz1sLEk9Yzt2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbCxjKSx2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eSxjPXcsTWF0aC5hYnMobC1PKT5NYXRoLmFicyhjLUkpP2wrPXMuc2hpZnQoKTpjKz1zLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigidW5rbm93biBvcGVyYXRvcjogMTIgIi5jb25jYXQoQykpfWJyZWFrO2Nhc2UgMTQ6aWYocy5sZW5ndGg+PTQpe3ZhciBGPXMucG9wKCksTD1zLnBvcCgpO2M9cy5wb3AoKSxsPXMucG9wKCksci5wdXNoKHtjbWQ6InNhdmUifSksci5wdXNoKHtjbWQ6InRyYW5zbGF0ZSIsYXJnczpbbCxjXX0pO3ZhciBEPWgoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbby5TdGFuZGFyZEVuY29kaW5nW0ZdXSkpO2UoYS5nbHlwaHNbRC5nbHlwaElkXSxyLGEsRC5nbHlwaElkKSxyLnB1c2goe2NtZDoicmVzdG9yZSJ9KSxEPWgoYS5jbWFwLFN0cmluZy5mcm9tQ2hhckNvZGUoYS5nbHlwaE5hbWVNYXBbby5TdGFuZGFyZEVuY29kaW5nW0xdXSkpLGUoYS5nbHlwaHNbRC5nbHlwaElkXSxyLGEsRC5nbHlwaElkKX1yZXR1cm47Y2FzZSAxODp1Kz1zLmxlbmd0aD4+MSxBPSEwO2JyZWFrO2Nhc2UgMTk6Y2FzZSAyMDpnKz0odSs9cy5sZW5ndGg+PjEpKzc+PjMsQT0hMDticmVhaztjYXNlIDIxOmMrPXMucG9wKCksZihsKz1zLnBvcCgpLGMpLEE9ITA7YnJlYWs7Y2FzZSAyMjpmKGwrPXMucG9wKCksYyksQT0hMDticmVhaztjYXNlIDIzOnUrPXMubGVuZ3RoPj4xLEE9ITA7YnJlYWs7Y2FzZSAyNDpmb3IoO3MubGVuZ3RoPjI7KXY9bCtzLnNoaWZ0KCksYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrcy5zaGlmdCgpLHAodixiLHksdyxsLGMpO2wrPXMuc2hpZnQoKSxjKz1zLnNoaWZ0KCksZChsLGMpO2JyZWFrO2Nhc2UgMjU6Zm9yKDtzLmxlbmd0aD42OylsKz1zLnNoaWZ0KCksYys9cy5zaGlmdCgpLGQobCxjKTt2PWwrcy5zaGlmdCgpLGI9YytzLnNoaWZ0KCkseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGw9eStzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbCxjKTticmVhaztjYXNlIDI2OmZvcihzLmxlbmd0aCUyJiYobCs9cy5zaGlmdCgpKTtzLmxlbmd0aD4wOyl2PWwsYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15LGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGwsYyk7YnJlYWs7Y2FzZSAyNzpmb3Iocy5sZW5ndGglMiYmKGMrPXMuc2hpZnQoKSk7cy5sZW5ndGg+MDspcCh2PWwrcy5zaGlmdCgpLGI9Yyx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcpO2JyZWFrO2Nhc2UgMjg6cy5wdXNoKChtW2ddPDwyNHxtW2crMV08PDE2KT4+MTYpLGcrPTI7YnJlYWs7Y2FzZSAyOTpfPXMucG9wKCkrYS5nc3VicnNCaWFzLCh4PWEuZ3N1YnJzW19dKSYmdCh4KTticmVhaztjYXNlIDMwOmZvcig7cy5sZW5ndGg+MCYmKHY9bCxiPWMrcy5zaGlmdCgpLHk9ditzLnNoaWZ0KCksdz1iK3Muc2hpZnQoKSxsPXkrcy5zaGlmdCgpLGM9dysoMT09PXMubGVuZ3RoP3Muc2hpZnQoKTowKSxwKHYsYix5LHcsbCxjKSwwIT09cy5sZW5ndGgpOyl2PWwrcy5zaGlmdCgpLGI9Yyx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksYz13K3Muc2hpZnQoKSxwKHYsYix5LHcsbD15KygxPT09cy5sZW5ndGg/cy5zaGlmdCgpOjApLGMpO2JyZWFrO2Nhc2UgMzE6Zm9yKDtzLmxlbmd0aD4wJiYodj1sK3Muc2hpZnQoKSxiPWMseT12K3Muc2hpZnQoKSx3PWIrcy5zaGlmdCgpLGM9dytzLnNoaWZ0KCkscCh2LGIseSx3LGw9eSsoMT09PXMubGVuZ3RoP3Muc2hpZnQoKTowKSxjKSwwIT09cy5sZW5ndGgpOyl2PWwsYj1jK3Muc2hpZnQoKSx5PXYrcy5zaGlmdCgpLHc9YitzLnNoaWZ0KCksbD15K3Muc2hpZnQoKSxjPXcrKDE9PT1zLmxlbmd0aD9zLnNoaWZ0KCk6MCkscCh2LGIseSx3LGwsYyk7YnJlYWs7ZGVmYXVsdDppZihDPDMyKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJ1bmtub3duIG9wZXJhdG9yOiAiLmNvbmNhdChDKSk7QzwyNDc/cy5wdXNoKEMtMTM5KTpDPDI1MT9zLnB1c2goMjU2KihDLTI0NykrbVtnKytdKzEwOCk6QzwyNTU/cy5wdXNoKDI1NiotKEMtMjUxKS1tW2crK10tMTA4KToocy5wdXNoKChtW2ddPDwyNHxtW2crMV08PDE2fG1bZysyXTw8OHxtW2crM10pLzY1NTM2KSxnKz00KX1BJiYocy5sZW5ndGg9MCl9fSh0KX0oZSx0LHRoaXMscil9fV0pLHR9KGcpO3JldHVybntjcmVhdGU6ZnVuY3Rpb24oYSxpKXtmb3IodmFyIG8scyxjLHUsZixoLGQ9bmV3IFVpbnQ4QXJyYXkoYS5kYXRhKSxwPXQoZCw0KSxtPTAsZz0xMjttPHA7bSsrLGcrPTE2KXt2YXIgYj0oMCxuLmJ5dGVzVG9TdHJpbmcpKGQuc3ViYXJyYXkoZyxnKzQpKSx3PWUoZCxnKzgpLGs9ZShkLGcrMTIpO3N3aXRjaChiKXtjYXNlImNtYXAiOm89cihkLHcpO2JyZWFrO2Nhc2UiZ2x5ZiI6cz1kLnN1YmFycmF5KHcsdytrKTticmVhaztjYXNlImxvY2EiOmM9ZC5zdWJhcnJheSh3LHcrayk7YnJlYWs7Y2FzZSJoZWFkIjpoPXQoZCx3KzE4KSxmPXQoZCx3KzUwKTticmVhaztjYXNlIkNGRiAiOnU9bChkLHcsdytrLGkpfX1pZihzKXt2YXIgUz1oP1sxL2gsMCwwLDEvaCwwLDBdOmEuZm9udE1hdHJpeDtyZXR1cm4gbmV3IHYoZnVuY3Rpb24oZSx0LHIpe3ZhciBuLGE7cj8obj00LGE9ZnVuY3Rpb24oZSx0KXtyZXR1cm4gZVt0XTw8MjR8ZVt0KzFdPDwxNnxlW3QrMl08PDh8ZVt0KzNdfSk6KG49MixhPWZ1bmN0aW9uKGUsdCl7cmV0dXJuIGVbdF08PDl8ZVt0KzFdPDwxfSk7Zm9yKHZhciBpPVtdLG89YSh0LDApLHM9bjtzPHQubGVuZ3RoO3MrPW4pe3ZhciBsPWEodCxzKTtpLnB1c2goZS5zdWJhcnJheShvLGwpKSxvPWx9cmV0dXJuIGl9KHMsYyxmKSxvLFMpfXJldHVybiBuZXcgeSh1LG8sYS5mb250TWF0cml4LGEuZ2x5cGhOYW1lTWFwKX19fSgpO3QuRm9udFJlbmRlcmVyRmFjdG9yeT1nfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LlR5cGUxUGFyc2VyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNzYpLGk9cigxNTcpLG89ZnVuY3Rpb24oKXt2YXIgZT1bNF0sdD1bNV0scj1bNl0sYT1bN10saT1bOF0sbz1bMTIsMzVdLHM9WzE0XSxsPVsyMV0sYz1bMjJdLHU9WzMwXSxmPVszMV07ZnVuY3Rpb24gaCgpe3RoaXMud2lkdGg9MCx0aGlzLmxzYj0wLHRoaXMuZmxleGluZz0hMSx0aGlzLm91dHB1dD1bXSx0aGlzLnN0YWNrPVtdfXJldHVybiBoLnByb3RvdHlwZT17Y29udmVydDpmdW5jdGlvbihoLGQscCl7Zm9yKHZhciBtLGcsdix5PWgubGVuZ3RoLGI9ITEsdz0wO3c8eTt3Kyspe3ZhciBrPWhbd107aWYoazwzMil7c3dpdGNoKDEyPT09ayYmKGs9KGs8PDgpK2hbKyt3XSksayl7Y2FzZSAxOmNhc2UgMzp0aGlzLnN0YWNrPVtdO2JyZWFrO2Nhc2UgNDppZih0aGlzLmZsZXhpbmcpe2lmKHRoaXMuc3RhY2subGVuZ3RoPDEpe2I9ITA7YnJlYWt9dmFyIFM9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goMCxTKTticmVha31iPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxlKTticmVhaztjYXNlIDU6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDIsdCk7YnJlYWs7Y2FzZSA2OmI9dGhpcy5leGVjdXRlQ29tbWFuZCgxLHIpO2JyZWFrO2Nhc2UgNzpiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMSxhKTticmVhaztjYXNlIDg6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDYsaSk7YnJlYWs7Y2FzZSA5OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSAxMDppZih0aGlzLnN0YWNrLmxlbmd0aDwxKXtiPSEwO2JyZWFrfWlmKCFkW3Y9dGhpcy5zdGFjay5wb3AoKV0pe2I9ITA7YnJlYWt9Yj10aGlzLmNvbnZlcnQoZFt2XSxkLHApO2JyZWFrO2Nhc2UgMTE6cmV0dXJuIGI7Y2FzZSAxMzppZih0aGlzLnN0YWNrLmxlbmd0aDwyKXtiPSEwO2JyZWFrfW09dGhpcy5zdGFjay5wb3AoKSxnPXRoaXMuc3RhY2sucG9wKCksdGhpcy5sc2I9Zyx0aGlzLndpZHRoPW0sdGhpcy5zdGFjay5wdXNoKG0sZyksYj10aGlzLmV4ZWN1dGVDb21tYW5kKDIsYyk7YnJlYWs7Y2FzZSAxNDp0aGlzLm91dHB1dC5wdXNoKHNbMF0pO2JyZWFrO2Nhc2UgMjE6aWYodGhpcy5mbGV4aW5nKWJyZWFrO2I9dGhpcy5leGVjdXRlQ29tbWFuZCgyLGwpO2JyZWFrO2Nhc2UgMjI6aWYodGhpcy5mbGV4aW5nKXt0aGlzLnN0YWNrLnB1c2goMCk7YnJlYWt9Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDEsYyk7YnJlYWs7Y2FzZSAzMDpiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoNCx1KTticmVhaztjYXNlIDMxOmI9dGhpcy5leGVjdXRlQ29tbWFuZCg0LGYpO2JyZWFrO2Nhc2UgMzA3MjpjYXNlIDMwNzM6Y2FzZSAzMDc0OnRoaXMuc3RhY2s9W107YnJlYWs7Y2FzZSAzMDc4OnA/KHRoaXMuc2VhYz10aGlzLnN0YWNrLnNwbGljZSgtNCw0KSxiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMCxzKSk6Yj10aGlzLmV4ZWN1dGVDb21tYW5kKDQscyk7YnJlYWs7Y2FzZSAzMDc5OmlmKHRoaXMuc3RhY2subGVuZ3RoPDQpe2I9ITA7YnJlYWt9dGhpcy5zdGFjay5wb3AoKSxtPXRoaXMuc3RhY2sucG9wKCk7dmFyIF89dGhpcy5zdGFjay5wb3AoKTtnPXRoaXMuc3RhY2sucG9wKCksdGhpcy5sc2I9Zyx0aGlzLndpZHRoPW0sdGhpcy5zdGFjay5wdXNoKG0sZyxfKSxiPXRoaXMuZXhlY3V0ZUNvbW1hbmQoMyxsKTticmVhaztjYXNlIDMwODQ6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7Yj0hMDticmVha312YXIgeD10aGlzLnN0YWNrLnBvcCgpLEE9dGhpcy5zdGFjay5wb3AoKTt0aGlzLnN0YWNrLnB1c2goQS94KTticmVhaztjYXNlIDMwODg6aWYodGhpcy5zdGFjay5sZW5ndGg8Mil7Yj0hMDticmVha312PXRoaXMuc3RhY2sucG9wKCk7dmFyIEM9dGhpcy5zdGFjay5wb3AoKTtpZigwPT09diYmMz09PUMpe3ZhciBQPXRoaXMuc3RhY2suc3BsaWNlKHRoaXMuc3RhY2subGVuZ3RoLTE3LDE3KTt0aGlzLnN0YWNrLnB1c2goUFsyXStQWzBdLFBbM10rUFsxXSxQWzRdLFBbNV0sUFs2XSxQWzddLFBbOF0sUFs5XSxQWzEwXSxQWzExXSxQWzEyXSxQWzEzXSxQWzE0XSksYj10aGlzLmV4ZWN1dGVDb21tYW5kKDEzLG8sITApLHRoaXMuZmxleGluZz0hMSx0aGlzLnN0YWNrLnB1c2goUFsxNV0sUFsxNl0pfWVsc2UgMT09PXYmJjA9PT1DJiYodGhpcy5mbGV4aW5nPSEwKTticmVhaztjYXNlIDMwODk6YnJlYWs7Y2FzZSAzMTA1OnRoaXMuc3RhY2s9W107YnJlYWs7ZGVmYXVsdDooMCxuLndhcm4pKCdVbmtub3duIHR5cGUgMSBjaGFyc3RyaW5nIGNvbW1hbmQgb2YgIicraysnIicpfWlmKGIpYnJlYWt9ZWxzZSBrPD0yNDY/ay09MTM5Oms9azw9MjUwPzI1Niooay0yNDcpK2hbKyt3XSsxMDg6azw9MjU0Py0yNTYqKGstMjUxKS1oWysrd10tMTA4OigyNTUmaFsrK3ddKTw8MjR8KDI1NSZoWysrd10pPDwxNnwoMjU1JmhbKyt3XSk8PDh8KDI1NSZoWysrd10pPDwwLHRoaXMuc3RhY2sucHVzaChrKX1yZXR1cm4gYn0sZXhlY3V0ZUNvbW1hbmQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuc3RhY2subGVuZ3RoO2lmKGU+bilyZXR1cm4hMDtmb3IodmFyIGE9bi1lLGk9YTtpPG47aSsrKXt2YXIgbz10aGlzLnN0YWNrW2ldO051bWJlci5pc0ludGVnZXIobyk/dGhpcy5vdXRwdXQucHVzaCgyOCxvPj44JjI1NSwyNTUmbyk6KG89NjU1MzYqb3wwLHRoaXMub3V0cHV0LnB1c2goMjU1LG8+PjI0JjI1NSxvPj4xNiYyNTUsbz4+OCYyNTUsMjU1Jm8pKX1yZXR1cm4gdGhpcy5vdXRwdXQucHVzaC5hcHBseSh0aGlzLm91dHB1dCx0KSxyP3RoaXMuc3RhY2suc3BsaWNlKGEsZSk6dGhpcy5zdGFjay5sZW5ndGg9MCwhMX19LGh9KCkscz1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7cmV0dXJuIGU+PTQ4JiZlPD01N3x8ZT49NjUmJmU8PTcwfHxlPj05NyYmZTw9MTAyfWZ1bmN0aW9uIHQoZSx0LHIpe2lmKHI+PWUubGVuZ3RoKXJldHVybiBuZXcgVWludDhBcnJheSgwKTt2YXIgbixhLGk9MHx0O2ZvcihuPTA7bjxyO24rKylpPTUyODQ1KihlW25dK2kpKzIyNzE5JjY1NTM1O3ZhciBvPWUubGVuZ3RoLXIscz1uZXcgVWludDhBcnJheShvKTtmb3Iobj1yLGE9MDthPG87bisrLGErKyl7dmFyIGw9ZVtuXTtzW2FdPWxeaT4+OCxpPTUyODQ1KihsK2kpKzIyNzE5JjY1NTM1fXJldHVybiBzfWZ1bmN0aW9uIHIoZSl7cmV0dXJuIDQ3PT09ZXx8OTE9PT1lfHw5Mz09PWV8fDEyMz09PWV8fDEyNT09PWV8fDQwPT09ZXx8NDE9PT1lfWZ1bmN0aW9uIHMocixuLGEpe2lmKG4pe3ZhciBvPXIuZ2V0Qnl0ZXMoKSxzPSEoZShvWzBdKSYmZShvWzFdKSYmZShvWzJdKSYmZShvWzNdKSk7cj1uZXcgaS5TdHJlYW0ocz90KG8sNTU2NjUsNCk6ZnVuY3Rpb24odCxyLG4pe3ZhciBhLGksbz0wfHIscz10Lmxlbmd0aCxsPW5ldyBVaW50OEFycmF5KHM+Pj4xKTtmb3IoYT0wLGk9MDthPHM7YSsrKXt2YXIgYz10W2FdO2lmKGUoYykpe3ZhciB1O2ZvcihhKys7YTxzJiYhZSh1PXRbYV0pOylhKys7aWYoYTxzKXt2YXIgZj1wYXJzZUludChTdHJpbmcuZnJvbUNoYXJDb2RlKGMsdSksMTYpO2xbaSsrXT1mXm8+Pjgsbz01Mjg0NSooZitvKSsyMjcxOSY2NTUzNX19fXJldHVybiBBcnJheS5wcm90b3R5cGUuc2xpY2UuY2FsbChsLG4saSl9KG8sNTU2NjUsNCkpfXRoaXMuc2VhY0FuYWx5c2lzRW5hYmxlZD0hIWEsdGhpcy5zdHJlYW09cix0aGlzLm5leHRDaGFyKCl9cmV0dXJuIHMucHJvdG90eXBlPXtyZWFkTnVtYmVyQXJyYXk6ZnVuY3Rpb24oKXt0aGlzLmdldFRva2VuKCk7Zm9yKHZhciBlPVtdOzspe3ZhciB0PXRoaXMuZ2V0VG9rZW4oKTtpZihudWxsPT09dHx8Il0iPT09dHx8In0iPT09dClicmVhaztlLnB1c2gocGFyc2VGbG9hdCh0fHwwKSl9cmV0dXJuIGV9LHJlYWROdW1iZXI6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIHBhcnNlRmxvYXQoZXx8MCl9LHJlYWRJbnQ6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmdldFRva2VuKCk7cmV0dXJuIDB8cGFyc2VJbnQoZXx8MCwxMCl9LHJlYWRCb29sZWFuOmZ1bmN0aW9uKCl7cmV0dXJuInRydWUiPT09dGhpcy5nZXRUb2tlbigpPzE6MH0sbmV4dENoYXI6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9LGdldFRva2VuOmZ1bmN0aW9uKCl7Zm9yKHZhciBlPSExLHQ9dGhpcy5jdXJyZW50Q2hhcjs7KXtpZigtMT09PXQpcmV0dXJuIG51bGw7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1NwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1pZihyKHQpKXJldHVybiB0aGlzLm5leHRDaGFyKCksU3RyaW5nLmZyb21DaGFyQ29kZSh0KTt2YXIgYT0iIjtkb3thKz1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpLHQ9dGhpcy5uZXh0Q2hhcigpfXdoaWxlKHQ+PTAmJiEoMCxuLmlzU3BhY2UpKHQpJiYhcih0KSk7cmV0dXJuIGF9LHJlYWRDaGFyU3RyaW5nczpmdW5jdGlvbihlLHIpe3JldHVybi0xPT09cj9lOnQoZSw0MzMwLHIpfSxleHRyYWN0Rm9udFByb2dyYW06ZnVuY3Rpb24oKXt2YXIgZT10aGlzLnN0cmVhbSx0PVtdLHI9W10sbj1PYmplY3QuY3JlYXRlKG51bGwpO24ubGVuSVY9NDtmb3IodmFyIGEsaSxzLGwsYyx1PXtzdWJyczpbXSxjaGFyc3RyaW5nczpbXSxwcm9wZXJ0aWVzOntwcml2YXRlRGF0YTpufX07bnVsbCE9PShhPXRoaXMuZ2V0VG9rZW4oKSk7KWlmKCIvIj09PWEpc3dpdGNoKGE9dGhpcy5nZXRUb2tlbigpKXtjYXNlIkNoYXJTdHJpbmdzIjpmb3IodGhpcy5nZXRUb2tlbigpLHRoaXMuZ2V0VG9rZW4oKSx0aGlzLmdldFRva2VuKCksdGhpcy5nZXRUb2tlbigpO251bGwhPT0oYT10aGlzLmdldFRva2VuKCkpJiYiZW5kIiE9PWE7KWlmKCIvIj09PWEpe3ZhciBmPXRoaXMuZ2V0VG9rZW4oKTtpPXRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKSxzPWk+MD9lLmdldEJ5dGVzKGkpOm5ldyBVaW50OEFycmF5KDApLGw9dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhLmxlbklWLGM9dGhpcy5yZWFkQ2hhclN0cmluZ3MocyxsKSx0aGlzLm5leHRDaGFyKCksIm5vYWNjZXNzIj09PShhPXRoaXMuZ2V0VG9rZW4oKSkmJnRoaXMuZ2V0VG9rZW4oKSxyLnB1c2goe2dseXBoOmYsZW5jb2RlZDpjfSl9YnJlYWs7Y2FzZSJTdWJycyI6Zm9yKHRoaXMucmVhZEludCgpLHRoaXMuZ2V0VG9rZW4oKTsiZHVwIj09PXRoaXMuZ2V0VG9rZW4oKTspe3ZhciBoPXRoaXMucmVhZEludCgpO2k9dGhpcy5yZWFkSW50KCksdGhpcy5nZXRUb2tlbigpLHM9aT4wP2UuZ2V0Qnl0ZXMoaSk6bmV3IFVpbnQ4QXJyYXkoMCksbD11LnByb3BlcnRpZXMucHJpdmF0ZURhdGEubGVuSVYsYz10aGlzLnJlYWRDaGFyU3RyaW5ncyhzLGwpLHRoaXMubmV4dENoYXIoKSwibm9hY2Nlc3MiPT09KGE9dGhpcy5nZXRUb2tlbigpKSYmdGhpcy5nZXRUb2tlbigpLHRbaF09Y31icmVhaztjYXNlIkJsdWVWYWx1ZXMiOmNhc2UiT3RoZXJCbHVlcyI6Y2FzZSJGYW1pbHlCbHVlcyI6Y2FzZSJGYW1pbHlPdGhlckJsdWVzIjp2YXIgZD10aGlzLnJlYWROdW1iZXJBcnJheSgpO2QubGVuZ3RoPjAmJmQubGVuZ3RoO2JyZWFrO2Nhc2UiU3RlbVNuYXBIIjpjYXNlIlN0ZW1TbmFwViI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2FdPXRoaXMucmVhZE51bWJlckFycmF5KCk7YnJlYWs7Y2FzZSJTdGRIVyI6Y2FzZSJTdGRWVyI6dS5wcm9wZXJ0aWVzLnByaXZhdGVEYXRhW2FdPXRoaXMucmVhZE51bWJlckFycmF5KClbMF07YnJlYWs7Y2FzZSJCbHVlU2hpZnQiOmNhc2UibGVuSVYiOmNhc2UiQmx1ZUZ1enoiOmNhc2UiQmx1ZVNjYWxlIjpjYXNlIkxhbmd1YWdlR3JvdXAiOmNhc2UiRXhwYW5zaW9uRmFjdG9yIjp1LnByb3BlcnRpZXMucHJpdmF0ZURhdGFbYV09dGhpcy5yZWFkTnVtYmVyKCk7YnJlYWs7Y2FzZSJGb3JjZUJvbGQiOnUucHJvcGVydGllcy5wcml2YXRlRGF0YVthXT10aGlzLnJlYWRCb29sZWFuKCl9Zm9yKHZhciBwPTA7cDxyLmxlbmd0aDtwKyspe2Y9cltwXS5nbHlwaCxjPXJbcF0uZW5jb2RlZDt2YXIgbT1uZXcgbyxnPW0uY29udmVydChjLHQsdGhpcy5zZWFjQW5hbHlzaXNFbmFibGVkKSx2PW0ub3V0cHV0O2cmJih2PVsxNF0pLHUuY2hhcnN0cmluZ3MucHVzaCh7Z2x5cGhOYW1lOmYsY2hhcnN0cmluZzp2LHdpZHRoOm0ud2lkdGgsbHNiOm0ubHNiLHNlYWM6bS5zZWFjfSl9cmV0dXJuIHV9LGV4dHJhY3RGb250SGVhZGVyOmZ1bmN0aW9uKGUpe2Zvcih2YXIgdDtudWxsIT09KHQ9dGhpcy5nZXRUb2tlbigpKTspaWYoIi8iPT09dClzd2l0Y2godD10aGlzLmdldFRva2VuKCkpe2Nhc2UiRm9udE1hdHJpeCI6dmFyIHI9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmZvbnRNYXRyaXg9cjticmVhaztjYXNlIkVuY29kaW5nIjp2YXIgbixpPXRoaXMuZ2V0VG9rZW4oKTtpZigvXlxkKyQvLnRlc3QoaSkpe249W107dmFyIG89MHxwYXJzZUludChpLDEwKTt0aGlzLmdldFRva2VuKCk7Zm9yKHZhciBzPTA7czxvO3MrKyl7Zm9yKHQ9dGhpcy5nZXRUb2tlbigpOyJkdXAiIT09dCYmImRlZiIhPT10OylpZihudWxsPT09KHQ9dGhpcy5nZXRUb2tlbigpKSlyZXR1cm47aWYoImRlZiI9PT10KWJyZWFrO3ZhciBsPXRoaXMucmVhZEludCgpO3RoaXMuZ2V0VG9rZW4oKTt2YXIgYz10aGlzLmdldFRva2VuKCk7bltsXT1jLHRoaXMuZ2V0VG9rZW4oKX19ZWxzZSBuPSgwLGEuZ2V0RW5jb2RpbmcpKGkpO2UuYnVpbHRJbkVuY29kaW5nPW47YnJlYWs7Y2FzZSJGb250QkJveCI6dmFyIHU9dGhpcy5yZWFkTnVtYmVyQXJyYXkoKTtlLmFzY2VudD1NYXRoLm1heCh1WzNdLHVbMV0pLGUuZGVzY2VudD1NYXRoLm1pbih1WzFdLHVbM10pLGUuYXNjZW50U2NhbGVkPSEwfX19LHN9KCk7dC5UeXBlMVBhcnNlcj1zfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldFRpbGluZ1BhdHRlcm5JUj1mdW5jdGlvbihlLHQscil7dmFyIGE9dC5nZXRBcnJheSgiTWF0cml4IiksaT1uLlV0aWwubm9ybWFsaXplUmVjdCh0LmdldEFycmF5KCJCQm94IikpLG89dC5nZXQoIlhTdGVwIikscz10LmdldCgiWVN0ZXAiKSxsPXQuZ2V0KCJQYWludFR5cGUiKSxjPXQuZ2V0KCJUaWxpbmdUeXBlIik7aWYoaVsyXS1pWzBdPT0wfHxpWzNdLWlbMV09PTApdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgZ2V0VGlsaW5nUGF0dGVybklSIC9CQm94IGFycmF5OiBbIi5jb25jYXQoaSwiXS4iKSk7cmV0dXJuWyJUaWxpbmdQYXR0ZXJuIixyLGUsYSxpLG8scyxsLGNdfSx0LlBhdHRlcm49dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE2OCksaT1yKDE1NSksbz0yLHM9MyxsPTQsYz01LHU9NixmPTcsaD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoKXsoMCxuLnVucmVhY2hhYmxlKSgic2hvdWxkIG5vdCBjYWxsIFBhdHRlcm4gY29uc3RydWN0b3IiKX1yZXR1cm4gZS5wcm90b3R5cGU9e2dldFBhdHRlcm46ZnVuY3Rpb24oZSl7KDAsbi51bnJlYWNoYWJsZSkoIlNob3VsZCBub3QgY2FsbCBQYXR0ZXJuLmdldFN0eWxlOiAiLmNvbmNhdChlKSl9fSxlLnBhcnNlU2hhZGluZz1mdW5jdGlvbihlLHQscixhLGgscCl7dmFyIG09KDAsaS5pc1N0cmVhbSkoZSk/ZS5kaWN0OmUsZz1tLmdldCgiU2hhZGluZ1R5cGUiKTt0cnl7c3dpdGNoKGcpe2Nhc2UgbzpjYXNlIHM6cmV0dXJuIG5ldyBkLlJhZGlhbEF4aWFsKG0sdCxyLGEscCk7Y2FzZSBsOmNhc2UgYzpjYXNlIHU6Y2FzZSBmOnJldHVybiBuZXcgZC5NZXNoKGUsdCxyLGEscCk7ZGVmYXVsdDp0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiVW5zdXBwb3J0ZWQgU2hhZGluZ1R5cGU6ICIrZyl9fWNhdGNoKGUpe2lmKGUgaW5zdGFuY2VvZiBuLk1pc3NpbmdEYXRhRXhjZXB0aW9uKXRocm93IGU7cmV0dXJuIGguc2VuZCgiVW5zdXBwb3J0ZWRGZWF0dXJlIix7ZmVhdHVyZUlkOm4uVU5TVVBQT1JURURfRkVBVFVSRVMuc2hhZGluZ1BhdHRlcm59KSwoMCxuLndhcm4pKGUpLG5ldyBkLkR1bW15fX0sZX0oKTt0LlBhdHRlcm49aDt2YXIgZD17U01BTExfTlVNQkVSOjFlLTZ9O2QuUmFkaWFsQXhpYWw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCxyLGksbyl7dGhpcy5tYXRyaXg9dCx0aGlzLmNvb3Jkc0Fycj1lLmdldEFycmF5KCJDb29yZHMiKSx0aGlzLnNoYWRpbmdUeXBlPWUuZ2V0KCJTaGFkaW5nVHlwZSIpLHRoaXMudHlwZT0iUGF0dGVybiI7dmFyIGw9ZS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpO2w9YS5Db2xvclNwYWNlLnBhcnNlKGwscixpLG8pLHRoaXMuY3M9bDt2YXIgYz0wLHU9MTtpZihlLmhhcygiRG9tYWluIikpe3ZhciBmPWUuZ2V0QXJyYXkoIkRvbWFpbiIpO2M9ZlswXSx1PWZbMV19dmFyIGg9ITEscD0hMTtpZihlLmhhcygiRXh0ZW5kIikpe3ZhciBtPWUuZ2V0QXJyYXkoIkV4dGVuZCIpO2g9bVswXSxwPW1bMV19aWYoISh0aGlzLnNoYWRpbmdUeXBlIT09c3x8aCYmcCkpe3ZhciBnPXRoaXMuY29vcmRzQXJyWzBdLHY9dGhpcy5jb29yZHNBcnJbMV0seT10aGlzLmNvb3Jkc0FyclsyXSxiPXRoaXMuY29vcmRzQXJyWzNdLHc9dGhpcy5jb29yZHNBcnJbNF0saz10aGlzLmNvb3Jkc0Fycls1XSxTPU1hdGguc3FydCgoZy1iKSooZy1iKSsodi13KSoodi13KSk7eTw9aytTJiZrPD15K1MmJigwLG4ud2FybikoIlVuc3VwcG9ydGVkIHJhZGlhbCBncmFkaWVudC4iKX10aGlzLmV4dGVuZFN0YXJ0PWgsdGhpcy5leHRlbmRFbmQ9cDt2YXIgXz1lLmdldCgiRnVuY3Rpb24iKSx4PW8uY3JlYXRlRnJvbUFycmF5KF8pLEE9dS1jLEM9QS8xMCxQPXRoaXMuY29sb3JTdG9wcz1bXTtpZihjPj11fHxDPD0wKSgwLG4uaW5mbykoIkJhZCBzaGFkaW5nIGRvbWFpbi4iKTtlbHNle2Zvcih2YXIgRSxUPW5ldyBGbG9hdDMyQXJyYXkobC5udW1Db21wcyksUj1uZXcgRmxvYXQzMkFycmF5KDEpLE89YztPPD11O08rPUMpe1JbMF09Tyx4KFIsMCxULDApLEU9bC5nZXRSZ2IoVCwwKTt2YXIgST1uLlV0aWwubWFrZUNzc1JnYihFWzBdLEVbMV0sRVsyXSk7UC5wdXNoKFsoTy1jKS9BLEldKX12YXIgRj0idHJhbnNwYXJlbnQiO2UuaGFzKCJCYWNrZ3JvdW5kIikmJihFPWwuZ2V0UmdiKGUuZ2V0KCJCYWNrZ3JvdW5kIiksMCksRj1uLlV0aWwubWFrZUNzc1JnYihFWzBdLEVbMV0sRVsyXSkpLGh8fChQLnVuc2hpZnQoWzAsRl0pLFBbMV1bMF0rPWQuU01BTExfTlVNQkVSKSxwfHwoUFtQLmxlbmd0aC0xXVswXS09ZC5TTUFMTF9OVU1CRVIsUC5wdXNoKFsxLEZdKSksdGhpcy5jb2xvclN0b3BzPVB9fXJldHVybiBlLnByb3RvdHlwZT17Z2V0SVI6ZnVuY3Rpb24oKXt2YXIgZSx0LHIsYSxpLGw9dGhpcy5jb29yZHNBcnIsYz10aGlzLnNoYWRpbmdUeXBlO2M9PT1vPyh0PVtsWzBdLGxbMV1dLHI9W2xbMl0sbFszXV0sYT1udWxsLGk9bnVsbCxlPSJheGlhbCIpOmM9PT1zPyh0PVtsWzBdLGxbMV1dLHI9W2xbM10sbFs0XV0sYT1sWzJdLGk9bFs1XSxlPSJyYWRpYWwiKTooMCxuLnVucmVhY2hhYmxlKSgiZ2V0UGF0dGVybiB0eXBlIHVua25vd246ICIuY29uY2F0KGMpKTt2YXIgdT10aGlzLm1hdHJpeDtpZih1JiYodD1uLlV0aWwuYXBwbHlUcmFuc2Zvcm0odCx1KSxyPW4uVXRpbC5hcHBseVRyYW5zZm9ybShyLHUpLGM9PT1zKSl7dmFyIGY9bi5VdGlsLnNpbmd1bGFyVmFsdWVEZWNvbXBvc2UyZFNjYWxlKHUpO2EqPWZbMF0saSo9ZlsxXX1yZXR1cm5bIlJhZGlhbEF4aWFsIixlLHRoaXMuY29sb3JTdG9wcyx0LHIsYSxpXX19LGV9KCksZC5NZXNoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlLHQpe3RoaXMuc3RyZWFtPWUsdGhpcy5jb250ZXh0PXQsdGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wO3ZhciByPXQubnVtQ29tcHM7dGhpcy50bXBDb21wc0J1Zj1uZXcgRmxvYXQzMkFycmF5KHIpO3ZhciBuPXQuY29sb3JTcGFjZS5udW1Db21wczt0aGlzLnRtcENzQ29tcHNCdWY9dC5jb2xvckZuP25ldyBGbG9hdDMyQXJyYXkobik6dGhpcy50bXBDb21wc0J1Zn1lLnByb3RvdHlwZT17Z2V0IGhhc0RhdGEoKXtpZih0aGlzLnN0cmVhbS5lbmQpcmV0dXJuIHRoaXMuc3RyZWFtLnBvczx0aGlzLnN0cmVhbS5lbmQ7aWYodGhpcy5idWZmZXJMZW5ndGg+MClyZXR1cm4hMDt2YXIgZT10aGlzLnN0cmVhbS5nZXRCeXRlKCk7cmV0dXJuIShlPDB8fCh0aGlzLmJ1ZmZlcj1lLHRoaXMuYnVmZmVyTGVuZ3RoPTgsMCkpfSxyZWFkQml0czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJ1ZmZlcixyPXRoaXMuYnVmZmVyTGVuZ3RoO2lmKDMyPT09ZSl7aWYoMD09PXIpcmV0dXJuKHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8MjR8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpPDwxNnx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpKT4+PjA7dD10PDwyNHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk8PDE2fHRoaXMuc3RyZWFtLmdldEJ5dGUoKTw8OHx0aGlzLnN0cmVhbS5nZXRCeXRlKCk7dmFyIG49dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO3JldHVybiB0aGlzLmJ1ZmZlcj1uJigxPDxyKS0xLCh0PDw4LXJ8KDI1NSZuKT4+cik+Pj4wfWlmKDg9PT1lJiYwPT09cilyZXR1cm4gdGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpO2Zvcig7cjxlOyl0PXQ8PDh8dGhpcy5zdHJlYW0uZ2V0Qnl0ZSgpLHIrPTg7cmV0dXJuIHItPWUsdGhpcy5idWZmZXJMZW5ndGg9cix0aGlzLmJ1ZmZlcj10JigxPDxyKS0xLHQ+PnJ9LGFsaWduOmZ1bmN0aW9uKCl7dGhpcy5idWZmZXI9MCx0aGlzLmJ1ZmZlckxlbmd0aD0wfSxyZWFkRmxhZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnJlYWRCaXRzKHRoaXMuY29udGV4dC5iaXRzUGVyRmxhZyl9LHJlYWRDb29yZGluYXRlOmZ1bmN0aW9uKCl7dmFyIGU9dGhpcy5jb250ZXh0LmJpdHNQZXJDb29yZGluYXRlLHQ9dGhpcy5yZWFkQml0cyhlKSxyPXRoaXMucmVhZEJpdHMoZSksbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9ZTwzMj8xLygoMTw8ZSktMSk6Mi4zMjgzMDY0MzY1Mzg2OTYzZS0xMDtyZXR1cm5bdCphKihuWzFdLW5bMF0pK25bMF0sciphKihuWzNdLW5bMl0pK25bMl1dfSxyZWFkQ29tcG9uZW50czpmdW5jdGlvbigpe2Zvcih2YXIgZT10aGlzLmNvbnRleHQubnVtQ29tcHMsdD10aGlzLmNvbnRleHQuYml0c1BlckNvbXBvbmVudCxyPXQ8MzI/MS8oKDE8PHQpLTEpOjIuMzI4MzA2NDM2NTM4Njk2M2UtMTAsbj10aGlzLmNvbnRleHQuZGVjb2RlLGE9dGhpcy50bXBDb21wc0J1ZixpPTAsbz00O2k8ZTtpKyssbys9Mil7dmFyIHM9dGhpcy5yZWFkQml0cyh0KTthW2ldPXMqcioobltvKzFdLW5bb10pK25bb119dmFyIGw9dGhpcy50bXBDc0NvbXBzQnVmO3JldHVybiB0aGlzLmNvbnRleHQuY29sb3JGbiYmdGhpcy5jb250ZXh0LmNvbG9yRm4oYSwwLGwsMCksdGhpcy5jb250ZXh0LmNvbG9yU3BhY2UuZ2V0UmdiKGwsMCl9fTt2YXIgdCxyPSh0PVtdLGZ1bmN0aW9uKGUpe3JldHVybiB0W2VdfHwodFtlXT1mdW5jdGlvbihlKXtmb3IodmFyIHQ9W10scj0wO3I8PWU7cisrKXt2YXIgbj1yL2UsYT0xLW47dC5wdXNoKG5ldyBGbG9hdDMyQXJyYXkoW2EqYSphLDMqbiphKmEsMypuKm4qYSxuKm4qbl0pKX1yZXR1cm4gdH0oZSkpLHRbZV19KTtmdW5jdGlvbiBvKGUsdCl7dmFyIGE9ZS5maWd1cmVzW3RdOygwLG4uYXNzZXJ0KSgicGF0Y2giPT09YS50eXBlLCJVbmV4cGVjdGVkIHBhdGNoIG1lc2ggZmlndXJlIik7dmFyIGk9ZS5jb29yZHMsbz1lLmNvbG9ycyxzPWEuY29vcmRzLGw9YS5jb2xvcnMsYz1NYXRoLm1pbihpW3NbMF1dWzBdLGlbc1szXV1bMF0saVtzWzEyXV1bMF0saVtzWzE1XV1bMF0pLHU9TWF0aC5taW4oaVtzWzBdXVsxXSxpW3NbM11dWzFdLGlbc1sxMl1dWzFdLGlbc1sxNV1dWzFdKSxmPU1hdGgubWF4KGlbc1swXV1bMF0saVtzWzNdXVswXSxpW3NbMTJdXVswXSxpW3NbMTVdXVswXSksaD1NYXRoLm1heChpW3NbMF1dWzFdLGlbc1szXV1bMV0saVtzWzEyXV1bMV0saVtzWzE1XV1bMV0pLGQ9TWF0aC5jZWlsKDIwKihmLWMpLyhlLmJvdW5kc1syXS1lLmJvdW5kc1swXSkpO2Q9TWF0aC5tYXgoMyxNYXRoLm1pbigyMCxkKSk7dmFyIHA9TWF0aC5jZWlsKDIwKihoLXUpLyhlLmJvdW5kc1szXS1lLmJvdW5kc1sxXSkpO3A9TWF0aC5tYXgoMyxNYXRoLm1pbigyMCxwKSk7Zm9yKHZhciBtPWQrMSxnPW5ldyBJbnQzMkFycmF5KChwKzEpKm0pLHY9bmV3IEludDMyQXJyYXkoKHArMSkqbSkseT0wLGI9bmV3IFVpbnQ4QXJyYXkoMyksdz1uZXcgVWludDhBcnJheSgzKSxrPW9bbFswXV0sUz1vW2xbMV1dLF89b1tsWzJdXSx4PW9bbFszXV0sQT1yKHApLEM9cihkKSxQPTA7UDw9cDtQKyspe2JbMF09KGtbMF0qKHAtUCkrX1swXSpQKS9wfDAsYlsxXT0oa1sxXSoocC1QKStfWzFdKlApL3B8MCxiWzJdPShrWzJdKihwLVApK19bMl0qUCkvcHwwLHdbMF09KFNbMF0qKHAtUCkreFswXSpQKS9wfDAsd1sxXT0oU1sxXSoocC1QKSt4WzFdKlApL3B8MCx3WzJdPShTWzJdKihwLVApK3hbMl0qUCkvcHwwO2Zvcih2YXIgRT0wO0U8PWQ7RSsrLHkrKylpZigwIT09UCYmUCE9PXB8fDAhPT1FJiZFIT09ZCl7Zm9yKHZhciBUPTAsUj0wLE89MCxJPTA7STw9MztJKyspZm9yKHZhciBGPTA7Rjw9MztGKyssTysrKXt2YXIgTD1BW1BdW0ldKkNbRV1bRl07VCs9aVtzW09dXVswXSpMLFIrPWlbc1tPXV1bMV0qTH1nW3ldPWkubGVuZ3RoLGkucHVzaChbVCxSXSksdlt5XT1vLmxlbmd0aDt2YXIgRD1uZXcgVWludDhBcnJheSgzKTtEWzBdPShiWzBdKihkLUUpK3dbMF0qRSkvZHwwLERbMV09KGJbMV0qKGQtRSkrd1sxXSpFKS9kfDAsRFsyXT0oYlsyXSooZC1FKSt3WzJdKkUpL2R8MCxvLnB1c2goRCl9fWdbMF09c1swXSx2WzBdPWxbMF0sZ1tkXT1zWzNdLHZbZF09bFsxXSxnW20qcF09c1sxMl0sdlttKnBdPWxbMl0sZ1ttKnArZF09c1sxNV0sdlttKnArZF09bFszXSxlLmZpZ3VyZXNbdF09e3R5cGU6ImxhdHRpY2UiLGNvb3JkczpnLGNvbG9yczp2LHZlcnRpY2VzUGVyUm93Om19fWZ1bmN0aW9uIHMoZSl7Zm9yKHZhciB0PWUuY29vcmRzWzBdWzBdLHI9ZS5jb29yZHNbMF1bMV0sbj10LGE9cixpPTEsbz1lLmNvb3Jkcy5sZW5ndGg7aTxvO2krKyl7dmFyIHM9ZS5jb29yZHNbaV1bMF0sbD1lLmNvb3Jkc1tpXVsxXTt0PXQ+cz9zOnQscj1yPmw/bDpyLG49bjxzP3M6bixhPWE8bD9sOmF9ZS5ib3VuZHM9W3QscixuLGFdfWZ1bmN0aW9uIGgodCxyLGgsZCxwKXtpZighKDAsaS5pc1N0cmVhbSkodCkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk1lc2ggZGF0YSBpcyBub3QgYSBzdHJlYW0iKTt2YXIgbT10LmRpY3Q7dGhpcy5tYXRyaXg9cix0aGlzLnNoYWRpbmdUeXBlPW0uZ2V0KCJTaGFkaW5nVHlwZSIpLHRoaXMudHlwZT0iUGF0dGVybiIsdGhpcy5iYm94PW0uZ2V0QXJyYXkoIkJCb3giKTt2YXIgZz1tLmdldCgiQ29sb3JTcGFjZSIsIkNTIik7Zz1hLkNvbG9yU3BhY2UucGFyc2UoZyxoLGQscCksdGhpcy5jcz1nLHRoaXMuYmFja2dyb3VuZD1tLmhhcygiQmFja2dyb3VuZCIpP2cuZ2V0UmdiKG0uZ2V0KCJCYWNrZ3JvdW5kIiksMCk6bnVsbDt2YXIgdj1tLmdldCgiRnVuY3Rpb24iKSx5PXY/cC5jcmVhdGVGcm9tQXJyYXkodik6bnVsbDt0aGlzLmNvb3Jkcz1bXSx0aGlzLmNvbG9ycz1bXSx0aGlzLmZpZ3VyZXM9W107dmFyIGI9bmV3IGUodCx7Yml0c1BlckNvb3JkaW5hdGU6bS5nZXQoIkJpdHNQZXJDb29yZGluYXRlIiksYml0c1BlckNvbXBvbmVudDptLmdldCgiQml0c1BlckNvbXBvbmVudCIpLGJpdHNQZXJGbGFnOm0uZ2V0KCJCaXRzUGVyRmxhZyIpLGRlY29kZTptLmdldEFycmF5KCJEZWNvZGUiKSxjb2xvckZuOnksY29sb3JTcGFjZTpnLG51bUNvbXBzOnk/MTpnLm51bUNvbXBzfSksdz0hMTtzd2l0Y2godGhpcy5zaGFkaW5nVHlwZSl7Y2FzZSBsOiFmdW5jdGlvbihlLHQpe2Zvcih2YXIgcj1lLmNvb3JkcyxhPWUuY29sb3JzLGk9W10sbz1bXSxzPTA7dC5oYXNEYXRhOyl7dmFyIGw9dC5yZWFkRmxhZygpLGM9dC5yZWFkQ29vcmRpbmF0ZSgpLHU9dC5yZWFkQ29tcG9uZW50cygpO2lmKDA9PT1zKXtpZighKDA8PWwmJmw8PTIpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGU0IGZsYWciKTtzd2l0Y2gobCl7Y2FzZSAwOnM9MzticmVhaztjYXNlIDE6by5wdXNoKG9bby5sZW5ndGgtMl0sb1tvLmxlbmd0aC0xXSkscz0xO2JyZWFrO2Nhc2UgMjpvLnB1c2gob1tvLmxlbmd0aC0zXSxvW28ubGVuZ3RoLTFdKSxzPTF9aS5wdXNoKGwpfW8ucHVzaChyLmxlbmd0aCksci5wdXNoKGMpLGEucHVzaCh1KSxzLS0sdC5hbGlnbigpfWUuZmlndXJlcy5wdXNoKHt0eXBlOiJ0cmlhbmdsZXMiLGNvb3JkczpuZXcgSW50MzJBcnJheShvKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX0odGhpcyxiKTticmVhaztjYXNlIGM6dmFyIGs9MHxtLmdldCgiVmVydGljZXNQZXJSb3ciKTtpZihrPDIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkludmFsaWQgVmVydGljZXNQZXJSb3ciKTshZnVuY3Rpb24oZSx0LHIpe2Zvcih2YXIgbj1lLmNvb3JkcyxhPWUuY29sb3JzLGk9W107dC5oYXNEYXRhOyl7dmFyIG89dC5yZWFkQ29vcmRpbmF0ZSgpLHM9dC5yZWFkQ29tcG9uZW50cygpO2kucHVzaChuLmxlbmd0aCksbi5wdXNoKG8pLGEucHVzaChzKX1lLmZpZ3VyZXMucHVzaCh7dHlwZToibGF0dGljZSIsY29vcmRzOm5ldyBJbnQzMkFycmF5KGkpLGNvbG9yczpuZXcgSW50MzJBcnJheShpKSx2ZXJ0aWNlc1BlclJvdzpyfSl9KHRoaXMsYixrKTticmVhaztjYXNlIHU6IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRzLGE9ZS5jb2xvcnMsaT1uZXcgSW50MzJBcnJheSgxNiksbz1uZXcgSW50MzJBcnJheSg0KTt0Lmhhc0RhdGE7KXt2YXIgcyxsLGM9dC5yZWFkRmxhZygpO2lmKCEoMDw9YyYmYzw9MykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTYgZmxhZyIpO3ZhciB1PXIubGVuZ3RoO2ZvcihzPTAsbD0wIT09Yz84OjEyO3M8bDtzKyspci5wdXNoKHQucmVhZENvb3JkaW5hdGUoKSk7dmFyIGYsaCxkLHAsbT1hLmxlbmd0aDtmb3Iocz0wLGw9MCE9PWM/Mjo0O3M8bDtzKyspYS5wdXNoKHQucmVhZENvbXBvbmVudHMoKSk7c3dpdGNoKGMpe2Nhc2UgMDppWzEyXT11KzMsaVsxM109dSs0LGlbMTRdPXUrNSxpWzE1XT11KzYsaVs4XT11KzIsaVsxMV09dSs3LGlbNF09dSsxLGlbN109dSs4LGlbMF09dSxpWzFdPXUrMTEsaVsyXT11KzEwLGlbM109dSs5LG9bMl09bSsxLG9bM109bSsyLG9bMF09bSxvWzFdPW0rMzticmVhaztjYXNlIDE6Zj1pWzEyXSxoPWlbMTNdLGQ9aVsxNF0scD1pWzE1XSxpWzEyXT1wLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09ZCxpWzExXT11KzMsaVs0XT1oLGlbN109dSs0LGlbMF09ZixpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxmPW9bMl0saD1vWzNdLG9bMl09aCxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMjpmPWlbMTVdLGg9aVsxMV0saVsxMl09aVszXSxpWzEzXT11KzAsaVsxNF09dSsxLGlbMTVdPXUrMixpWzhdPWlbN10saVsxMV09dSszLGlbNF09aCxpWzddPXUrNCxpWzBdPWYsaVsxXT11KzcsaVsyXT11KzYsaVszXT11KzUsZj1vWzNdLG9bMl09b1sxXSxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMzppWzEyXT1pWzBdLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09aVsxXSxpWzExXT11KzMsaVs0XT1pWzJdLGlbN109dSs0LGlbMF09aVszXSxpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxvWzJdPW9bMF0sb1szXT1tLG9bMF09b1sxXSxvWzFdPW0rMX1pWzVdPXIubGVuZ3RoLHIucHVzaChbKC00KnJbaVswXV1bMF0tcltpWzE1XV1bMF0rNioocltpWzRdXVswXStyW2lbMV1dWzBdKS0yKihyW2lbMTJdXVswXStyW2lbM11dWzBdKSszKihyW2lbMTNdXVswXStyW2lbN11dWzBdKSkvOSwoLTQqcltpWzBdXVsxXS1yW2lbMTVdXVsxXSs2KihyW2lbNF1dWzFdK3JbaVsxXV1bMV0pLTIqKHJbaVsxMl1dWzFdK3JbaVszXV1bMV0pKzMqKHJbaVsxM11dWzFdK3JbaVs3XV1bMV0pKS85XSksaVs2XT1yLmxlbmd0aCxyLnB1c2goWygtNCpyW2lbM11dWzBdLXJbaVsxMl1dWzBdKzYqKHJbaVsyXV1bMF0rcltpWzddXVswXSktMioocltpWzBdXVswXStyW2lbMTVdXVswXSkrMyoocltpWzRdXVswXStyW2lbMTRdXVswXSkpLzksKC00KnJbaVszXV1bMV0tcltpWzEyXV1bMV0rNioocltpWzJdXVsxXStyW2lbN11dWzFdKS0yKihyW2lbMF1dWzFdK3JbaVsxNV1dWzFdKSszKihyW2lbNF1dWzFdK3JbaVsxNF1dWzFdKSkvOV0pLGlbOV09ci5sZW5ndGgsci5wdXNoKFsoLTQqcltpWzEyXV1bMF0tcltpWzNdXVswXSs2KihyW2lbOF1dWzBdK3JbaVsxM11dWzBdKS0yKihyW2lbMF1dWzBdK3JbaVsxNV1dWzBdKSszKihyW2lbMTFdXVswXStyW2lbMV1dWzBdKSkvOSwoLTQqcltpWzEyXV1bMV0tcltpWzNdXVsxXSs2KihyW2lbOF1dWzFdK3JbaVsxM11dWzFdKS0yKihyW2lbMF1dWzFdK3JbaVsxNV1dWzFdKSszKihyW2lbMTFdXVsxXStyW2lbMV1dWzFdKSkvOV0pLGlbMTBdPXIubGVuZ3RoLHIucHVzaChbKC00KnJbaVsxNV1dWzBdLXJbaVswXV1bMF0rNioocltpWzExXV1bMF0rcltpWzE0XV1bMF0pLTIqKHJbaVsxMl1dWzBdK3JbaVszXV1bMF0pKzMqKHJbaVsyXV1bMF0rcltpWzhdXVswXSkpLzksKC00KnJbaVsxNV1dWzFdLXJbaVswXV1bMV0rNioocltpWzExXV1bMV0rcltpWzE0XV1bMV0pLTIqKHJbaVsxMl1dWzFdK3JbaVszXV1bMV0pKzMqKHJbaVsyXV1bMV0rcltpWzhdXVsxXSkpLzldKSxlLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX19KHRoaXMsYiksdz0hMDticmVhaztjYXNlIGY6IWZ1bmN0aW9uKGUsdCl7Zm9yKHZhciByPWUuY29vcmRzLGE9ZS5jb2xvcnMsaT1uZXcgSW50MzJBcnJheSgxNiksbz1uZXcgSW50MzJBcnJheSg0KTt0Lmhhc0RhdGE7KXt2YXIgcyxsLGM9dC5yZWFkRmxhZygpO2lmKCEoMDw9YyYmYzw9MykpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVua25vd24gdHlwZTcgZmxhZyIpO3ZhciB1PXIubGVuZ3RoO2ZvcihzPTAsbD0wIT09Yz8xMjoxNjtzPGw7cysrKXIucHVzaCh0LnJlYWRDb29yZGluYXRlKCkpO3ZhciBmLGgsZCxwLG09YS5sZW5ndGg7Zm9yKHM9MCxsPTAhPT1jPzI6NDtzPGw7cysrKWEucHVzaCh0LnJlYWRDb21wb25lbnRzKCkpO3N3aXRjaChjKXtjYXNlIDA6aVsxMl09dSszLGlbMTNdPXUrNCxpWzE0XT11KzUsaVsxNV09dSs2LGlbOF09dSsyLGlbOV09dSsxMyxpWzEwXT11KzE0LGlbMTFdPXUrNyxpWzRdPXUrMSxpWzVdPXUrMTIsaVs2XT11KzE1LGlbN109dSs4LGlbMF09dSxpWzFdPXUrMTEsaVsyXT11KzEwLGlbM109dSs5LG9bMl09bSsxLG9bM109bSsyLG9bMF09bSxvWzFdPW0rMzticmVhaztjYXNlIDE6Zj1pWzEyXSxoPWlbMTNdLGQ9aVsxNF0scD1pWzE1XSxpWzEyXT1wLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09ZCxpWzldPXUrOSxpWzEwXT11KzEwLGlbMTFdPXUrMyxpWzRdPWgsaVs1XT11KzgsaVs2XT11KzExLGlbN109dSs0LGlbMF09ZixpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxmPW9bMl0saD1vWzNdLG9bMl09aCxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMjpmPWlbMTVdLGg9aVsxMV0saVsxMl09aVszXSxpWzEzXT11KzAsaVsxNF09dSsxLGlbMTVdPXUrMixpWzhdPWlbN10saVs5XT11KzksaVsxMF09dSsxMCxpWzExXT11KzMsaVs0XT1oLGlbNV09dSs4LGlbNl09dSsxMSxpWzddPXUrNCxpWzBdPWYsaVsxXT11KzcsaVsyXT11KzYsaVszXT11KzUsZj1vWzNdLG9bMl09b1sxXSxvWzNdPW0sb1swXT1mLG9bMV09bSsxO2JyZWFrO2Nhc2UgMzppWzEyXT1pWzBdLGlbMTNdPXUrMCxpWzE0XT11KzEsaVsxNV09dSsyLGlbOF09aVsxXSxpWzldPXUrOSxpWzEwXT11KzEwLGlbMTFdPXUrMyxpWzRdPWlbMl0saVs1XT11KzgsaVs2XT11KzExLGlbN109dSs0LGlbMF09aVszXSxpWzFdPXUrNyxpWzJdPXUrNixpWzNdPXUrNSxvWzJdPW9bMF0sb1szXT1tLG9bMF09b1sxXSxvWzFdPW0rMX1lLmZpZ3VyZXMucHVzaCh7dHlwZToicGF0Y2giLGNvb3JkczpuZXcgSW50MzJBcnJheShpKSxjb2xvcnM6bmV3IEludDMyQXJyYXkobyl9KX19KHRoaXMsYiksdz0hMDticmVhaztkZWZhdWx0OigwLG4udW5yZWFjaGFibGUpKCJVbnN1cHBvcnRlZCBtZXNoIHR5cGUuIil9aWYodyl7cyh0aGlzKTtmb3IodmFyIFM9MCxfPXRoaXMuZmlndXJlcy5sZW5ndGg7UzxfO1MrKylvKHRoaXMsUyl9cyh0aGlzKSxmdW5jdGlvbihlKXt2YXIgdCxyLG4sYSxpPWUuY29vcmRzLG89bmV3IEZsb2F0MzJBcnJheSgyKmkubGVuZ3RoKTtmb3IodD0wLG49MCxyPWkubGVuZ3RoO3Q8cjt0Kyspe3ZhciBzPWlbdF07b1tuKytdPXNbMF0sb1tuKytdPXNbMV19ZS5jb29yZHM9bzt2YXIgbD1lLmNvbG9ycyxjPW5ldyBVaW50OEFycmF5KDMqbC5sZW5ndGgpO2Zvcih0PTAsbj0wLHI9bC5sZW5ndGg7dDxyO3QrKyl7dmFyIHU9bFt0XTtjW24rK109dVswXSxjW24rK109dVsxXSxjW24rK109dVsyXX1lLmNvbG9ycz1jO3ZhciBmPWUuZmlndXJlcztmb3IodD0wLHI9Zi5sZW5ndGg7dDxyO3QrKyl7dmFyIGg9Zlt0XSxkPWguY29vcmRzLHA9aC5jb2xvcnM7Zm9yKG49MCxhPWQubGVuZ3RoO248YTtuKyspZFtuXSo9MixwW25dKj0zfX0odGhpcyl9cmV0dXJuIGgucHJvdG90eXBlPXtnZXRJUjpmdW5jdGlvbigpe3JldHVyblsiTWVzaCIsdGhpcy5zaGFkaW5nVHlwZSx0aGlzLmNvb3Jkcyx0aGlzLmNvbG9ycyx0aGlzLmZpZ3VyZXMsdGhpcy5ib3VuZHMsdGhpcy5tYXRyaXgsdGhpcy5iYm94LHRoaXMuYmFja2dyb3VuZF19fSxofSgpLGQuRHVtbXk9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKCl7dGhpcy50eXBlPSJQYXR0ZXJuIn1yZXR1cm4gZS5wcm90b3R5cGU9e2dldElSOmZ1bmN0aW9uKCl7cmV0dXJuWyJEdW1teSJdfX0sZX0oKX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5iaWRpPWZ1bmN0aW9uKGUsdCxyKXt2YXIgcD0hMCxtPWUubGVuZ3RoO2lmKDA9PT1tfHxyKXJldHVybiBmKGUscCxyKTtoLmxlbmd0aD1tLGQubGVuZ3RoPW07dmFyIGcsdix5PTA7Zm9yKGc9MDtnPG07KytnKXtoW2ddPWUuY2hhckF0KGcpO3ZhciBiPWUuY2hhckNvZGVBdChnKSx3PSJMIjtiPD0yNTU/dz1hW2JdOjE0MjQ8PWImJmI8PTE1MjQ/dz0iUiI6MTUzNjw9YiYmYjw9MTc5MT8odz1pWzI1NSZiXSl8fCgwLG4ud2FybikoIkJpZGk6IGludmFsaWQgVW5pY29kZSBjaGFyYWN0ZXIgIitiLnRvU3RyaW5nKDE2KSk6MTc5Mjw9YiYmYjw9MjIyMCYmKHc9IkFMIiksIlIiIT09dyYmIkFMIiE9PXcmJiJBTiIhPT13fHx5KyssZFtnXT13fWlmKDA9PT15KXJldHVybiBmKGUscD0hMCk7LTE9PT10JiYoeS9tPC4zPyhwPSEwLHQ9MCk6KHA9ITEsdD0xKSk7dmFyIGs9W107Zm9yKGc9MDtnPG07KytnKWtbZ109dDt2YXIgUyxfPW8odCk/IlIiOiJMIix4PV8sQT14LEM9eDtmb3IoZz0wO2c8bTsrK2cpIk5TTSI9PT1kW2ddP2RbZ109QzpDPWRbZ107Zm9yKEM9eCxnPTA7ZzxtOysrZykiRU4iPT09KFM9ZFtnXSk/ZFtnXT0iQUwiPT09Qz8iQU4iOiJFTiI6IlIiIT09UyYmIkwiIT09UyYmIkFMIiE9PVN8fChDPVMpO2ZvcihnPTA7ZzxtOysrZykiQUwiPT09KFM9ZFtnXSkmJihkW2ddPSJSIik7Zm9yKGc9MTtnPG0tMTsrK2cpIkVTIj09PWRbZ10mJiJFTiI9PT1kW2ctMV0mJiJFTiI9PT1kW2crMV0mJihkW2ddPSJFTiIpLCJDUyIhPT1kW2ddfHwiRU4iIT09ZFtnLTFdJiYiQU4iIT09ZFtnLTFdfHxkW2crMV0hPT1kW2ctMV18fChkW2ddPWRbZy0xXSk7Zm9yKGc9MDtnPG07KytnKWlmKCJFTiI9PT1kW2ddKXt2YXIgUDtmb3IoUD1nLTE7UD49MCYmIkVUIj09PWRbUF07LS1QKWRbUF09IkVOIjtmb3IoUD1nKzE7UDxtJiYiRVQiPT09ZFtQXTsrK1ApZFtQXT0iRU4ifWZvcihnPTA7ZzxtOysrZykiV1MiIT09KFM9ZFtnXSkmJiJFUyIhPT1TJiYiRVQiIT09UyYmIkNTIiE9PVN8fChkW2ddPSJPTiIpO2ZvcihDPXgsZz0wO2c8bTsrK2cpIkVOIj09PShTPWRbZ10pP2RbZ109IkwiPT09Qz8iTCI6IkVOIjoiUiIhPT1TJiYiTCIhPT1TfHwoQz1TKTtmb3IoZz0wO2c8bTsrK2cpaWYoIk9OIj09PWRbZ10pe3ZhciBFPWwoZCxnKzEsIk9OIiksVD14O2c+MCYmKFQ9ZFtnLTFdKTt2YXIgUj1BO0UrMTxtJiYoUj1kW0UrMV0pLCJMIiE9PVQmJihUPSJSIiksIkwiIT09UiYmKFI9IlIiKSxUPT09UiYmYyhkLGcsRSxUKSxnPUUtMX1mb3IoZz0wO2c8bTsrK2cpIk9OIj09PWRbZ10mJihkW2ddPV8pO2ZvcihnPTA7ZzxtOysrZylTPWRbZ10scyhrW2ddKT8iUiI9PT1TP2tbZ10rPTE6IkFOIiE9PVMmJiJFTiIhPT1TfHwoa1tnXSs9Mik6IkwiIT09UyYmIkFOIiE9PVMmJiJFTiIhPT1TfHwoa1tnXSs9MSk7dmFyIE8sST0tMSxGPTk5O2ZvcihnPTAsdj1rLmxlbmd0aDtnPHY7KytnKU89a1tnXSxJPE8mJihJPU8pLEY+TyYmbyhPKSYmKEY9Tyk7Zm9yKE89STtPPj1GOy0tTyl7dmFyIEw9LTE7Zm9yKGc9MCx2PWsubGVuZ3RoO2c8djsrK2cpa1tnXTxPP0w+PTAmJih1KGgsTCxnKSxMPS0xKTpMPDAmJihMPWcpO0w+PTAmJnUoaCxMLGsubGVuZ3RoKX1mb3IoZz0wLHY9aC5sZW5ndGg7Zzx2OysrZyl7dmFyIEQ9aFtnXTsiPCIhPT1EJiYiPiIhPT1EfHwoaFtnXT0iIil9cmV0dXJuIGYoaC5qb2luKCIiKSxwKX07dmFyIG49cig2KSxhPVsiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiUyIsIkIiLCJTIiwiV1MiLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkIiLCJCIiwiQiIsIlMiLCJXUyIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiRVMiLCJDUyIsIkVTIiwiQ1MiLCJDUyIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiQ1MiLCJPTiIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJPTiIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiT04iLCJPTiIsIk9OIiwiT04iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkJOIiwiQk4iLCJCTiIsIkNTIiwiT04iLCJFVCIsIkVUIiwiRVQiLCJFVCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJCTiIsIk9OIiwiT04iLCJFVCIsIkVUIiwiRU4iLCJFTiIsIk9OIiwiTCIsIk9OIiwiT04iLCJPTiIsIkVOIiwiTCIsIk9OIiwiT04iLCJPTiIsIk9OIiwiT04iLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIk9OIiwiTCIsIkwiLCJMIiwiTCIsIkwiLCJMIiwiTCIsIkwiXSxpPVsiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiT04iLCJPTiIsIkFMIiwiRVQiLCJFVCIsIkFMIiwiQ1MiLCJBTCIsIk9OIiwiT04iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJOU00iLCJBTCIsIkFMIiwiIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJBTiIsIkFOIiwiQU4iLCJFVCIsIkFOIiwiQU4iLCJBTCIsIkFMIiwiQUwiLCJOU00iLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiTlNNIiwiQU4iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJOU00iLCJOU00iLCJPTiIsIk5TTSIsIk5TTSIsIk5TTSIsIk5TTSIsIkFMIiwiQUwiLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkVOIiwiRU4iLCJFTiIsIkFMIiwiQUwiLCJBTCIsIkFMIiwiQUwiLCJBTCJdO2Z1bmN0aW9uIG8oZSl7cmV0dXJuIDAhPSgxJmUpfWZ1bmN0aW9uIHMoZSl7cmV0dXJuIDA9PSgxJmUpfWZ1bmN0aW9uIGwoZSx0LHIpe2Zvcih2YXIgbj10LGE9ZS5sZW5ndGg7bjxhOysrbilpZihlW25dIT09cilyZXR1cm4gbjtyZXR1cm4gbn1mdW5jdGlvbiBjKGUsdCxyLG4pe2Zvcih2YXIgYT10O2E8cjsrK2EpZVthXT1ufWZ1bmN0aW9uIHUoZSx0LHIpe2Zvcih2YXIgbj10LGE9ci0xO248YTsrK24sLS1hKXt2YXIgaT1lW25dO2Vbbl09ZVthXSxlW2FdPWl9fWZ1bmN0aW9uIGYoZSx0LHIpe3JldHVybntzdHI6ZSxkaXI6cj8idHRiIjp0PyJsdHIiOiJydGwifX12YXIgaD1bXSxkPVtdfSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0LmdldE1ldHJpY3M9dm9pZCAwO3ZhciBuPXIoNiksYT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2UuQ291cmllcj02MDAsZVsiQ291cmllci1Cb2xkIl09NjAwLGVbIkNvdXJpZXItQm9sZE9ibGlxdWUiXT02MDAsZVsiQ291cmllci1PYmxpcXVlIl09NjAwLGUuSGVsdmV0aWNhPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5leGNsYW09Mjc4LGUucXVvdGVkYmw9MzU1LGUubnVtYmVyc2lnbj01NTYsZS5kb2xsYXI9NTU2LGUucGVyY2VudD04ODksZS5hbXBlcnNhbmQ9NjY3LGUucXVvdGVyaWdodD0yMjIsZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlzaz0zODksZS5wbHVzPTU4NCxlLmNvbW1hPTI3OCxlLmh5cGhlbj0zMzMsZS5wZXJpb2Q9Mjc4LGUuc2xhc2g9Mjc4LGUuemVybz01NTYsZS5vbmU9NTU2LGUudHdvPTU1NixlLnRocmVlPTU1NixlLmZvdXI9NTU2LGUuZml2ZT01NTYsZS5zaXg9NTU2LGUuc2V2ZW49NTU2LGUuZWlnaHQ9NTU2LGUubmluZT01NTYsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01ODQsZS5lcXVhbD01ODQsZS5ncmVhdGVyPTU4NCxlLnF1ZXN0aW9uPTU1NixlLmF0PTEwMTUsZS5BPTY2NyxlLkI9NjY3LGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTUwMCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9Mjc4LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0yNzgsZS5hc2NpaWNpcmN1bT00NjksZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yMjIsZS5hPTU1NixlLmI9NTU2LGUuYz01MDAsZS5kPTU1NixlLmU9NTU2LGUuZj0yNzgsZS5nPTU1NixlLmg9NTU2LGUuaT0yMjIsZS5qPTIyMixlLms9NTAwLGUubD0yMjIsZS5tPTgzMyxlLm49NTU2LGUubz01NTYsZS5wPTU1NixlLnE9NTU2LGUucj0zMzMsZS5zPTUwMCxlLnQ9Mjc4LGUudT01NTYsZS52PTUwMCxlLnc9NzIyLGUueD01MDAsZS55PTUwMCxlLno9NTAwLGUuYnJhY2VsZWZ0PTMzNCxlLmJhcj0yNjAsZS5icmFjZXJpZ2h0PTMzNCxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0xOTEsZS5xdW90ZWRibGxlZnQ9MzMzLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01MzcsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MjIyLGUucXVvdGVkYmxiYXNlPTMzMyxlLnF1b3RlZGJscmlnaHQ9MzMzLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTU1NixlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTIyMixlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NTU2LGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTY2NyxlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTAwLGUuc2NvbW1hYWNjZW50PTUwMCxlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTU1NixlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTUwMCxlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9MjIyLGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTUwMCxlLnNjZWRpbGxhPTUwMCxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NTU2LGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj02NjcsZS5yY2Fyb249MzMzLGUuY2NlZGlsbGE9NTAwLGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTY0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NTU2LGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTY2NyxlLkFicmV2ZT02NjcsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NTU2LGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz01MDAsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTAwLGUubmFjdXRlPTU1NixlLnVtYWNyb249NTU2LGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI2MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9MzMzLGUub21hY3Jvbj01NTYsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTIyMixlLnRjYXJvbj0zMTcsZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTY2NyxlLkFkaWVyZXNpcz02NjcsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9MjIyLGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT01NTYsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01MDAsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTU1NixlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT01NTYsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01NTYsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD01NTYsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj0yOTksZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj01NTYsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01NTYsZS5udGlsZGU9NTU2LGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NTU2LGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01NTYsZS5DY2Fyb249NzIyLGUudWdyYXZlPTU1NixlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zMzMsZS5OdGlsZGU9NzIyLGUub3RpbGRlPTU1NixlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTY2NyxlLkFvZ29uZWs9NjY3LGUuQXJpbmc9NjY3LGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTUwMCxlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj01NTYsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NTU2LGUudWRpZXJlc2lzPTU1NixlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01NTYsZS5ldGg9NTU2LGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD01NTYsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00NzQsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD03MjIsZS5xdW90ZXJpZ2h0PTI3OCxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NjExLGUuYXQ9OTc1LGUuQT03MjIsZS5CPTcyMixlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTcyMixlLkk9Mjc4LGUuSj01NTYsZS5LPTcyMixlLkw9NjExLGUuTT04MzMsZS5OPTcyMixlLk89Nzc4LGUuUD02NjcsZS5RPTc3OCxlLlI9NzIyLGUuUz02NjcsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTk0NCxlLlg9NjY3LGUuWT02NjcsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTg0LGUudW5kZXJzY29yZT01NTYsZS5xdW90ZWxlZnQ9Mjc4LGUuYT01NTYsZS5iPTYxMSxlLmM9NTU2LGUuZD02MTEsZS5lPTU1NixlLmY9MzMzLGUuZz02MTEsZS5oPTYxMSxlLmk9Mjc4LGUuaj0yNzgsZS5rPTU1NixlLmw9Mjc4LGUubT04ODksZS5uPTYxMSxlLm89NjExLGUucD02MTEsZS5xPTYxMSxlLnI9Mzg5LGUucz01NTYsZS50PTMzMyxlLnU9NjExLGUudj01NTYsZS53PTc3OCxlLng9NTU2LGUueT01NTYsZS56PTUwMCxlLmJyYWNlbGVmdD0zODksZS5iYXI9MjgwLGUuYnJhY2VyaWdodD0zODksZS5hc2NpaXRpbGRlPTU4NCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01NTYsZS5zdGVybGluZz01NTYsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTU2LGUuZmxvcmluPTU1NixlLnNlY3Rpb249NTU2LGUuY3VycmVuY3k9NTU2LGUucXVvdGVzaW5nbGU9MjM4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTU2LGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT02MTEsZS5mbD02MTEsZS5lbmRhc2g9NTU2LGUuZGFnZ2VyPTU1NixlLmRhZ2dlcmRibD01NTYsZS5wZXJpb2RjZW50ZXJlZD0yNzgsZS5wYXJhZ3JhcGg9NTU2LGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTI3OCxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTU1NixlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj02MTEsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTM3MCxlLkxzbGFzaD02MTEsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTM2NSxlLmFlPTg4OSxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NjExLGUub2U9OTQ0LGUuZ2VybWFuZGJscz02MTEsZS5JZGllcmVzaXM9Mjc4LGUuZWFjdXRlPTU1NixlLmFicmV2ZT01NTYsZS51aHVuZ2FydW1sYXV0PTYxMSxlLmVjYXJvbj01NTYsZS5ZZGllcmVzaXM9NjY3LGUuZGl2aWRlPTU4NCxlLllhY3V0ZT02NjcsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTU2LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTU1NixlLnNjb21tYWFjY2VudD01NTYsZS5lY2lyY3VtZmxleD01NTYsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01NTYsZS5VYWN1dGU9NzIyLGUudW9nb25laz02MTEsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03MzcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj01NTYsZS5hcmluZz01NTYsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01NTYsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01NTYsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj01NTYsZS5zY2VkaWxsYT01NTYsZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTYxMSxlLmFjaXJjdW1mbGV4PTU1NixlLkFtYWNyb249NzIyLGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTU1NixlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjY3LGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTY2NyxlLmRjYXJvbj03NDMsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTYxMSxlLnRocmVlc3VwZXJpb3I9MzMzLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTg0LGUudWFjdXRlPTYxMSxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTU2LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01NTYsZS5lZGllcmVzaXM9NTU2LGUuY2FjdXRlPTU1NixlLm5hY3V0ZT02MTEsZS51bWFjcm9uPTYxMSxlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mjc4LGUucGx1c21pbnVzPTU4NCxlLmJyb2tlbmJhcj0yODAsZS5yZWdpc3RlcmVkPTczNyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTI3OCxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NjExLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249Mzg5LGUuZW9nb25laz01NTYsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTU1NixlLnphY3V0ZT01MDAsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NjExLGUuYW1hY3Jvbj01NTYsZS5zYWN1dGU9NTU2LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj02MTEsZS50d29zdXBlcmlvcj0zMzMsZS5PZGllcmVzaXM9Nzc4LGUubXU9NjExLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NjExLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NjExLGUudGhyZWVxdWFydGVycz04MzQsZS5TY2VkaWxsYT02NjcsZS5sY2Fyb249NDAwLGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD01NTYsZS5JZ3JhdmU9Mjc4LGUuSW1hY3Jvbj0yNzgsZS5MY2Fyb249NjExLGUub25laGFsZj04MzQsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NjExLGUubnRpbGRlPTYxMSxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NTU2LGUuZ2JyZXZlPTYxMSxlLm9uZXF1YXJ0ZXI9ODM0LGUuU2Nhcm9uPTY2NyxlLlNjb21tYWFjY2VudD02NjcsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NjExLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT02MTEsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT02MTEsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTUwMCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTI3OCxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01ODQsZS5JY2lyY3VtZmxleD0yNzgsZS5uY2Fyb249NjExLGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTg0LGUub2RpZXJlc2lzPTYxMSxlLnVkaWVyZXNpcz02MTEsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NjExLGUuZXRoPTYxMSxlLnpjYXJvbj01MDAsZS5uY29tbWFhY2NlbnQ9NjExLGUub25lc3VwZXJpb3I9MzMzLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTU1Nn0pKSxlWyJIZWx2ZXRpY2EtQm9sZE9ibGlxdWUiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9Mjc4LGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQ3NCxlLm51bWJlcnNpZ249NTU2LGUuZG9sbGFyPTU1NixlLnBlcmNlbnQ9ODg5LGUuYW1wZXJzYW5kPTcyMixlLnF1b3RlcmlnaHQ9Mjc4LGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9Mzg5LGUucGx1cz01ODQsZS5jb21tYT0yNzgsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI3OCxlLnNsYXNoPTI3OCxlLnplcm89NTU2LGUub25lPTU1NixlLnR3bz01NTYsZS50aHJlZT01NTYsZS5mb3VyPTU1NixlLmZpdmU9NTU2LGUuc2l4PTU1NixlLnNldmVuPTU1NixlLmVpZ2h0PTU1NixlLm5pbmU9NTU2LGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9NTg0LGUuZXF1YWw9NTg0LGUuZ3JlYXRlcj01ODQsZS5xdWVzdGlvbj02MTEsZS5hdD05NzUsZS5BPTcyMixlLkI9NzIyLGUuQz03MjIsZS5EPTcyMixlLkU9NjY3LGUuRj02MTEsZS5HPTc3OCxlLkg9NzIyLGUuST0yNzgsZS5KPTU1NixlLks9NzIyLGUuTD02MTEsZS5NPTgzMyxlLk49NzIyLGUuTz03NzgsZS5QPTY2NyxlLlE9Nzc4LGUuUj03MjIsZS5TPTY2NyxlLlQ9NjExLGUuVT03MjIsZS5WPTY2NyxlLlc9OTQ0LGUuWD02NjcsZS5ZPTY2NyxlLlo9NjExLGUuYnJhY2tldGxlZnQ9MzMzLGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zMzMsZS5hc2NpaWNpcmN1bT01ODQsZS51bmRlcnNjb3JlPTU1NixlLnF1b3RlbGVmdD0yNzgsZS5hPTU1NixlLmI9NjExLGUuYz01NTYsZS5kPTYxMSxlLmU9NTU2LGUuZj0zMzMsZS5nPTYxMSxlLmg9NjExLGUuaT0yNzgsZS5qPTI3OCxlLms9NTU2LGUubD0yNzgsZS5tPTg4OSxlLm49NjExLGUubz02MTEsZS5wPTYxMSxlLnE9NjExLGUucj0zODksZS5zPTU1NixlLnQ9MzMzLGUudT02MTEsZS52PTU1NixlLnc9Nzc4LGUueD01NTYsZS55PTU1NixlLno9NTAwLGUuYnJhY2VsZWZ0PTM4OSxlLmJhcj0yODAsZS5icmFjZXJpZ2h0PTM4OSxlLmFzY2lpdGlsZGU9NTg0LGUuZXhjbGFtZG93bj0zMzMsZS5jZW50PTU1NixlLnN0ZXJsaW5nPTU1NixlLmZyYWN0aW9uPTE2NyxlLnllbj01NTYsZS5mbG9yaW49NTU2LGUuc2VjdGlvbj01NTYsZS5jdXJyZW5jeT01NTYsZS5xdW90ZXNpbmdsZT0yMzgsZS5xdW90ZWRibGxlZnQ9NTAwLGUuZ3VpbGxlbW90bGVmdD01NTYsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTYxMSxlLmZsPTYxMSxlLmVuZGFzaD01NTYsZS5kYWdnZXI9NTU2LGUuZGFnZ2VyZGJsPTU1NixlLnBlcmlvZGNlbnRlcmVkPTI3OCxlLnBhcmFncmFwaD01NTYsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9Mjc4LGUucXVvdGVkYmxiYXNlPTUwMCxlLnF1b3RlZGJscmlnaHQ9NTAwLGUuZ3VpbGxlbW90cmlnaHQ9NTU2LGUuZWxsaXBzaXM9MWUzLGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTYxMSxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9MWUzLGUuQUU9MWUzLGUub3JkZmVtaW5pbmU9MzcwLGUuTHNsYXNoPTYxMSxlLk9zbGFzaD03NzgsZS5PRT0xZTMsZS5vcmRtYXNjdWxpbmU9MzY1LGUuYWU9ODg5LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD02MTEsZS5vZT05NDQsZS5nZXJtYW5kYmxzPTYxMSxlLklkaWVyZXNpcz0yNzgsZS5lYWN1dGU9NTU2LGUuYWJyZXZlPTU1NixlLnVodW5nYXJ1bWxhdXQ9NjExLGUuZWNhcm9uPTU1NixlLllkaWVyZXNpcz02NjcsZS5kaXZpZGU9NTg0LGUuWWFjdXRlPTY2NyxlLkFjaXJjdW1mbGV4PTcyMixlLmFhY3V0ZT01NTYsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NTU2LGUuc2NvbW1hYWNjZW50PTU1NixlLmVjaXJjdW1mbGV4PTU1NixlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTU1NixlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTYxMSxlLkVkaWVyZXNpcz02NjcsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTczNyxlLkVtYWNyb249NjY3LGUuY2Nhcm9uPTU1NixlLmFyaW5nPTU1NixlLk5jb21tYWFjY2VudD03MjIsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTU1NixlLlRjb21tYWFjY2VudD02MTEsZS5DYWN1dGU9NzIyLGUuYXRpbGRlPTU1NixlLkVkb3RhY2NlbnQ9NjY3LGUuc2Nhcm9uPTU1NixlLnNjZWRpbGxhPTU1NixlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ5NCxlLlJjYXJvbj03MjIsZS5HY29tbWFhY2NlbnQ9Nzc4LGUudWNpcmN1bWZsZXg9NjExLGUuYWNpcmN1bWZsZXg9NTU2LGUuQW1hY3Jvbj03MjIsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NTU2LGUuWmRvdGFjY2VudD02MTEsZS5UaG9ybj02NjcsZS5PbWFjcm9uPTc3OCxlLlJhY3V0ZT03MjIsZS5TYWN1dGU9NjY3LGUuZGNhcm9uPTc0MyxlLlVtYWNyb249NzIyLGUudXJpbmc9NjExLGUudGhyZWVzdXBlcmlvcj0zMzMsZS5PZ3JhdmU9Nzc4LGUuQWdyYXZlPTcyMixlLkFicmV2ZT03MjIsZS5tdWx0aXBseT01ODQsZS51YWN1dGU9NjExLGUuVGNhcm9uPTYxMSxlLnBhcnRpYWxkaWZmPTQ5NCxlLnlkaWVyZXNpcz01NTYsZS5OYWN1dGU9NzIyLGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjY3LGUuYWRpZXJlc2lzPTU1NixlLmVkaWVyZXNpcz01NTYsZS5jYWN1dGU9NTU2LGUubmFjdXRlPTYxMSxlLnVtYWNyb249NjExLGUuTmNhcm9uPTcyMixlLklhY3V0ZT0yNzgsZS5wbHVzbWludXM9NTg0LGUuYnJva2VuYmFyPTI4MCxlLnJlZ2lzdGVyZWQ9NzM3LGUuR2JyZXZlPTc3OCxlLklkb3RhY2NlbnQ9Mjc4LGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02NjcsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj02MTEsZS5aYWN1dGU9NjExLGUuWmNhcm9uPTYxMSxlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NzIyLGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zODksZS5lb2dvbmVrPTU1NixlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTcyMixlLkFkaWVyZXNpcz03MjIsZS5lZ3JhdmU9NTU2LGUuemFjdXRlPTUwMCxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTc3OCxlLm9hY3V0ZT02MTEsZS5hbWFjcm9uPTU1NixlLnNhY3V0ZT01NTYsZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9Nzc4LGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTYxMSxlLnR3b3N1cGVyaW9yPTMzMyxlLk9kaWVyZXNpcz03NzgsZS5tdT02MTEsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD02MTEsZS5Fb2dvbmVrPTY2NyxlLmRjcm9hdD02MTEsZS50aHJlZXF1YXJ0ZXJzPTgzNCxlLlNjZWRpbGxhPTY2NyxlLmxjYXJvbj00MDAsZS5LY29tbWFhY2NlbnQ9NzIyLGUuTGFjdXRlPTYxMSxlLnRyYWRlbWFyaz0xZTMsZS5lZG90YWNjZW50PTU1NixlLklncmF2ZT0yNzgsZS5JbWFjcm9uPTI3OCxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTgzNCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD02MTEsZS5udGlsZGU9NjExLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjY3LGUuZW1hY3Jvbj01NTYsZS5nYnJldmU9NjExLGUub25lcXVhcnRlcj04MzQsZS5TY2Fyb249NjY3LGUuU2NvbW1hYWNjZW50PTY2NyxlLk9odW5nYXJ1bWxhdXQ9Nzc4LGUuZGVncmVlPTQwMCxlLm9ncmF2ZT02MTEsZS5DY2Fyb249NzIyLGUudWdyYXZlPTYxMSxlLnJhZGljYWw9NTQ5LGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NzIyLGUub3RpbGRlPTYxMSxlLlJjb21tYWFjY2VudD03MjIsZS5MY29tbWFhY2NlbnQ9NjExLGUuQXRpbGRlPTcyMixlLkFvZ29uZWs9NzIyLGUuQXJpbmc9NzIyLGUuT3RpbGRlPTc3OCxlLnpkb3RhY2NlbnQ9NTAwLGUuRWNhcm9uPTY2NyxlLklvZ29uZWs9Mjc4LGUua2NvbW1hYWNjZW50PTU1NixlLm1pbnVzPTU4NCxlLkljaXJjdW1mbGV4PTI3OCxlLm5jYXJvbj02MTEsZS50Y29tbWFhY2NlbnQ9MzMzLGUubG9naWNhbG5vdD01ODQsZS5vZGllcmVzaXM9NjExLGUudWRpZXJlc2lzPTYxMSxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD02MTEsZS5ldGg9NjExLGUuemNhcm9uPTUwMCxlLm5jb21tYWFjY2VudD02MTEsZS5vbmVzdXBlcmlvcj0zMzMsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTU2fSkpLGVbIkhlbHZldGljYS1PYmxpcXVlIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI3OCxlLmV4Y2xhbT0yNzgsZS5xdW90ZWRibD0zNTUsZS5udW1iZXJzaWduPTU1NixlLmRvbGxhcj01NTYsZS5wZXJjZW50PTg4OSxlLmFtcGVyc2FuZD02NjcsZS5xdW90ZXJpZ2h0PTIyMixlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTM4OSxlLnBsdXM9NTg0LGUuY29tbWE9Mjc4LGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNzgsZS5zbGFzaD0yNzgsZS56ZXJvPTU1NixlLm9uZT01NTYsZS50d289NTU2LGUudGhyZWU9NTU2LGUuZm91cj01NTYsZS5maXZlPTU1NixlLnNpeD01NTYsZS5zZXZlbj01NTYsZS5laWdodD01NTYsZS5uaW5lPTU1NixlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU4NCxlLmVxdWFsPTU4NCxlLmdyZWF0ZXI9NTg0LGUucXVlc3Rpb249NTU2LGUuYXQ9MTAxNSxlLkE9NjY3LGUuQj02NjcsZS5DPTcyMixlLkQ9NzIyLGUuRT02NjcsZS5GPTYxMSxlLkc9Nzc4LGUuSD03MjIsZS5JPTI3OCxlLko9NTAwLGUuSz02NjcsZS5MPTU1NixlLk09ODMzLGUuTj03MjIsZS5PPTc3OCxlLlA9NjY3LGUuUT03NzgsZS5SPTcyMixlLlM9NjY3LGUuVD02MTEsZS5VPTcyMixlLlY9NjY3LGUuVz05NDQsZS5YPTY2NyxlLlk9NjY3LGUuWj02MTEsZS5icmFja2V0bGVmdD0yNzgsZS5iYWNrc2xhc2g9Mjc4LGUuYnJhY2tldHJpZ2h0PTI3OCxlLmFzY2lpY2lyY3VtPTQ2OSxlLnVuZGVyc2NvcmU9NTU2LGUucXVvdGVsZWZ0PTIyMixlLmE9NTU2LGUuYj01NTYsZS5jPTUwMCxlLmQ9NTU2LGUuZT01NTYsZS5mPTI3OCxlLmc9NTU2LGUuaD01NTYsZS5pPTIyMixlLmo9MjIyLGUuaz01MDAsZS5sPTIyMixlLm09ODMzLGUubj01NTYsZS5vPTU1NixlLnA9NTU2LGUucT01NTYsZS5yPTMzMyxlLnM9NTAwLGUudD0yNzgsZS51PTU1NixlLnY9NTAwLGUudz03MjIsZS54PTUwMCxlLnk9NTAwLGUuej01MDAsZS5icmFjZWxlZnQ9MzM0LGUuYmFyPTI2MCxlLmJyYWNlcmlnaHQ9MzM0LGUuYXNjaWl0aWxkZT01ODQsZS5leGNsYW1kb3duPTMzMyxlLmNlbnQ9NTU2LGUuc3Rlcmxpbmc9NTU2LGUuZnJhY3Rpb249MTY3LGUueWVuPTU1NixlLmZsb3Jpbj01NTYsZS5zZWN0aW9uPTU1NixlLmN1cnJlbmN5PTU1NixlLnF1b3Rlc2luZ2xlPTE5MSxlLnF1b3RlZGJsbGVmdD0zMzMsZS5ndWlsbGVtb3RsZWZ0PTU1NixlLmd1aWxzaW5nbGxlZnQ9MzMzLGUuZ3VpbHNpbmdscmlnaHQ9MzMzLGUuZmk9NTAwLGUuZmw9NTAwLGUuZW5kYXNoPTU1NixlLmRhZ2dlcj01NTYsZS5kYWdnZXJkYmw9NTU2LGUucGVyaW9kY2VudGVyZWQ9Mjc4LGUucGFyYWdyYXBoPTUzNyxlLmJ1bGxldD0zNTAsZS5xdW90ZXNpbmdsYmFzZT0yMjIsZS5xdW90ZWRibGJhc2U9MzMzLGUucXVvdGVkYmxyaWdodD0zMzMsZS5ndWlsbGVtb3RyaWdodD01NTYsZS5lbGxpcHNpcz0xZTMsZS5wZXJ0aG91c2FuZD0xZTMsZS5xdWVzdGlvbmRvd249NjExLGUuZ3JhdmU9MzMzLGUuYWN1dGU9MzMzLGUuY2lyY3VtZmxleD0zMzMsZS50aWxkZT0zMzMsZS5tYWNyb249MzMzLGUuYnJldmU9MzMzLGUuZG90YWNjZW50PTMzMyxlLmRpZXJlc2lzPTMzMyxlLnJpbmc9MzMzLGUuY2VkaWxsYT0zMzMsZS5odW5nYXJ1bWxhdXQ9MzMzLGUub2dvbmVrPTMzMyxlLmNhcm9uPTMzMyxlLmVtZGFzaD0xZTMsZS5BRT0xZTMsZS5vcmRmZW1pbmluZT0zNzAsZS5Mc2xhc2g9NTU2LGUuT3NsYXNoPTc3OCxlLk9FPTFlMyxlLm9yZG1hc2N1bGluZT0zNjUsZS5hZT04ODksZS5kb3RsZXNzaT0yNzgsZS5sc2xhc2g9MjIyLGUub3NsYXNoPTYxMSxlLm9lPTk0NCxlLmdlcm1hbmRibHM9NjExLGUuSWRpZXJlc2lzPTI3OCxlLmVhY3V0ZT01NTYsZS5hYnJldmU9NTU2LGUudWh1bmdhcnVtbGF1dD01NTYsZS5lY2Fyb249NTU2LGUuWWRpZXJlc2lzPTY2NyxlLmRpdmlkZT01ODQsZS5ZYWN1dGU9NjY3LGUuQWNpcmN1bWZsZXg9NjY3LGUuYWFjdXRlPTU1NixlLlVjaXJjdW1mbGV4PTcyMixlLnlhY3V0ZT01MDAsZS5zY29tbWFhY2NlbnQ9NTAwLGUuZWNpcmN1bWZsZXg9NTU2LGUuVXJpbmc9NzIyLGUuVWRpZXJlc2lzPTcyMixlLmFvZ29uZWs9NTU2LGUuVWFjdXRlPTcyMixlLnVvZ29uZWs9NTU2LGUuRWRpZXJlc2lzPTY2NyxlLkRjcm9hdD03MjIsZS5jb21tYWFjY2VudD0yNTAsZS5jb3B5cmlnaHQ9NzM3LGUuRW1hY3Jvbj02NjcsZS5jY2Fyb249NTAwLGUuYXJpbmc9NTU2LGUuTmNvbW1hYWNjZW50PTcyMixlLmxhY3V0ZT0yMjIsZS5hZ3JhdmU9NTU2LGUuVGNvbW1hYWNjZW50PTYxMSxlLkNhY3V0ZT03MjIsZS5hdGlsZGU9NTU2LGUuRWRvdGFjY2VudD02NjcsZS5zY2Fyb249NTAwLGUuc2NlZGlsbGE9NTAwLGUuaWFjdXRlPTI3OCxlLmxvemVuZ2U9NDcxLGUuUmNhcm9uPTcyMixlLkdjb21tYWFjY2VudD03NzgsZS51Y2lyY3VtZmxleD01NTYsZS5hY2lyY3VtZmxleD01NTYsZS5BbWFjcm9uPTY2NyxlLnJjYXJvbj0zMzMsZS5jY2VkaWxsYT01MDAsZS5aZG90YWNjZW50PTYxMSxlLlRob3JuPTY2NyxlLk9tYWNyb249Nzc4LGUuUmFjdXRlPTcyMixlLlNhY3V0ZT02NjcsZS5kY2Fyb249NjQzLGUuVW1hY3Jvbj03MjIsZS51cmluZz01NTYsZS50aHJlZXN1cGVyaW9yPTMzMyxlLk9ncmF2ZT03NzgsZS5BZ3JhdmU9NjY3LGUuQWJyZXZlPTY2NyxlLm11bHRpcGx5PTU4NCxlLnVhY3V0ZT01NTYsZS5UY2Fyb249NjExLGUucGFydGlhbGRpZmY9NDc2LGUueWRpZXJlc2lzPTUwMCxlLk5hY3V0ZT03MjIsZS5pY2lyY3VtZmxleD0yNzgsZS5FY2lyY3VtZmxleD02NjcsZS5hZGllcmVzaXM9NTU2LGUuZWRpZXJlc2lzPTU1NixlLmNhY3V0ZT01MDAsZS5uYWN1dGU9NTU2LGUudW1hY3Jvbj01NTYsZS5OY2Fyb249NzIyLGUuSWFjdXRlPTI3OCxlLnBsdXNtaW51cz01ODQsZS5icm9rZW5iYXI9MjYwLGUucmVnaXN0ZXJlZD03MzcsZS5HYnJldmU9Nzc4LGUuSWRvdGFjY2VudD0yNzgsZS5zdW1tYXRpb249NjAwLGUuRWdyYXZlPTY2NyxlLnJhY3V0ZT0zMzMsZS5vbWFjcm9uPTU1NixlLlphY3V0ZT02MTEsZS5aY2Fyb249NjExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLkV0aD03MjIsZS5DY2VkaWxsYT03MjIsZS5sY29tbWFhY2NlbnQ9MjIyLGUudGNhcm9uPTMxNyxlLmVvZ29uZWs9NTU2LGUuVW9nb25laz03MjIsZS5BYWN1dGU9NjY3LGUuQWRpZXJlc2lzPTY2NyxlLmVncmF2ZT01NTYsZS56YWN1dGU9NTAwLGUuaW9nb25laz0yMjIsZS5PYWN1dGU9Nzc4LGUub2FjdXRlPTU1NixlLmFtYWNyb249NTU2LGUuc2FjdXRlPTUwMCxlLmlkaWVyZXNpcz0yNzgsZS5PY2lyY3VtZmxleD03NzgsZS5VZ3JhdmU9NzIyLGUuRGVsdGE9NjEyLGUudGhvcm49NTU2LGUudHdvc3VwZXJpb3I9MzMzLGUuT2RpZXJlc2lzPTc3OCxlLm11PTU1NixlLmlncmF2ZT0yNzgsZS5vaHVuZ2FydW1sYXV0PTU1NixlLkVvZ29uZWs9NjY3LGUuZGNyb2F0PTU1NixlLnRocmVlcXVhcnRlcnM9ODM0LGUuU2NlZGlsbGE9NjY3LGUubGNhcm9uPTI5OSxlLktjb21tYWFjY2VudD02NjcsZS5MYWN1dGU9NTU2LGUudHJhZGVtYXJrPTFlMyxlLmVkb3RhY2NlbnQ9NTU2LGUuSWdyYXZlPTI3OCxlLkltYWNyb249Mjc4LGUuTGNhcm9uPTU1NixlLm9uZWhhbGY9ODM0LGUubGVzc2VxdWFsPTU0OSxlLm9jaXJjdW1mbGV4PTU1NixlLm50aWxkZT01NTYsZS5VaHVuZ2FydW1sYXV0PTcyMixlLkVhY3V0ZT02NjcsZS5lbWFjcm9uPTU1NixlLmdicmV2ZT01NTYsZS5vbmVxdWFydGVyPTgzNCxlLlNjYXJvbj02NjcsZS5TY29tbWFhY2NlbnQ9NjY3LGUuT2h1bmdhcnVtbGF1dD03NzgsZS5kZWdyZWU9NDAwLGUub2dyYXZlPTU1NixlLkNjYXJvbj03MjIsZS51Z3JhdmU9NTU2LGUucmFkaWNhbD00NTMsZS5EY2Fyb249NzIyLGUucmNvbW1hYWNjZW50PTMzMyxlLk50aWxkZT03MjIsZS5vdGlsZGU9NTU2LGUuUmNvbW1hYWNjZW50PTcyMixlLkxjb21tYWFjY2VudD01NTYsZS5BdGlsZGU9NjY3LGUuQW9nb25laz02NjcsZS5BcmluZz02NjcsZS5PdGlsZGU9Nzc4LGUuemRvdGFjY2VudD01MDAsZS5FY2Fyb249NjY3LGUuSW9nb25laz0yNzgsZS5rY29tbWFhY2NlbnQ9NTAwLGUubWludXM9NTg0LGUuSWNpcmN1bWZsZXg9Mjc4LGUubmNhcm9uPTU1NixlLnRjb21tYWFjY2VudD0yNzgsZS5sb2dpY2Fsbm90PTU4NCxlLm9kaWVyZXNpcz01NTYsZS51ZGllcmVzaXM9NTU2LGUubm90ZXF1YWw9NTQ5LGUuZ2NvbW1hYWNjZW50PTU1NixlLmV0aD01NTYsZS56Y2Fyb249NTAwLGUubmNvbW1hYWNjZW50PTU1NixlLm9uZXN1cGVyaW9yPTMzMyxlLmltYWNyb249Mjc4LGUuRXVybz01NTZ9KSksZS5TeW1ib2w9KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS51bml2ZXJzYWw9NzEzLGUubnVtYmVyc2lnbj01MDAsZS5leGlzdGVudGlhbD01NDksZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5zdWNodGhhdD00MzksZS5wYXJlbmxlZnQ9MzMzLGUucGFyZW5yaWdodD0zMzMsZS5hc3Rlcmlza21hdGg9NTAwLGUucGx1cz01NDksZS5jb21tYT0yNTAsZS5taW51cz01NDksZS5wZXJpb2Q9MjUwLGUuc2xhc2g9Mjc4LGUuemVybz01MDAsZS5vbmU9NTAwLGUudHdvPTUwMCxlLnRocmVlPTUwMCxlLmZvdXI9NTAwLGUuZml2ZT01MDAsZS5zaXg9NTAwLGUuc2V2ZW49NTAwLGUuZWlnaHQ9NTAwLGUubmluZT01MDAsZS5jb2xvbj0yNzgsZS5zZW1pY29sb249Mjc4LGUubGVzcz01NDksZS5lcXVhbD01NDksZS5ncmVhdGVyPTU0OSxlLnF1ZXN0aW9uPTQ0NCxlLmNvbmdydWVudD01NDksZS5BbHBoYT03MjIsZS5CZXRhPTY2NyxlLkNoaT03MjIsZS5EZWx0YT02MTIsZS5FcHNpbG9uPTYxMSxlLlBoaT03NjMsZS5HYW1tYT02MDMsZS5FdGE9NzIyLGUuSW90YT0zMzMsZS50aGV0YTE9NjMxLGUuS2FwcGE9NzIyLGUuTGFtYmRhPTY4NixlLk11PTg4OSxlLk51PTcyMixlLk9taWNyb249NzIyLGUuUGk9NzY4LGUuVGhldGE9NzQxLGUuUmhvPTU1NixlLlNpZ21hPTU5MixlLlRhdT02MTEsZS5VcHNpbG9uPTY5MCxlLnNpZ21hMT00MzksZS5PbWVnYT03NjgsZS5YaT02NDUsZS5Qc2k9Nzk1LGUuWmV0YT02MTEsZS5icmFja2V0bGVmdD0zMzMsZS50aGVyZWZvcmU9ODYzLGUuYnJhY2tldHJpZ2h0PTMzMyxlLnBlcnBlbmRpY3VsYXI9NjU4LGUudW5kZXJzY29yZT01MDAsZS5yYWRpY2FsZXg9NTAwLGUuYWxwaGE9NjMxLGUuYmV0YT01NDksZS5jaGk9NTQ5LGUuZGVsdGE9NDk0LGUuZXBzaWxvbj00MzksZS5waGk9NTIxLGUuZ2FtbWE9NDExLGUuZXRhPTYwMyxlLmlvdGE9MzI5LGUucGhpMT02MDMsZS5rYXBwYT01NDksZS5sYW1iZGE9NTQ5LGUubXU9NTc2LGUubnU9NTIxLGUub21pY3Jvbj01NDksZS5waT01NDksZS50aGV0YT01MjEsZS5yaG89NTQ5LGUuc2lnbWE9NjAzLGUudGF1PTQzOSxlLnVwc2lsb249NTc2LGUub21lZ2ExPTcxMyxlLm9tZWdhPTY4NixlLnhpPTQ5MyxlLnBzaT02ODYsZS56ZXRhPTQ5NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5zaW1pbGFyPTU0OSxlLkV1cm89NzUwLGUuVXBzaWxvbjE9NjIwLGUubWludXRlPTI0NyxlLmxlc3NlcXVhbD01NDksZS5mcmFjdGlvbj0xNjcsZS5pbmZpbml0eT03MTMsZS5mbG9yaW49NTAwLGUuY2x1Yj03NTMsZS5kaWFtb25kPTc1MyxlLmhlYXJ0PTc1MyxlLnNwYWRlPTc1MyxlLmFycm93Ym90aD0xMDQyLGUuYXJyb3dsZWZ0PTk4NyxlLmFycm93dXA9NjAzLGUuYXJyb3dyaWdodD05ODcsZS5hcnJvd2Rvd249NjAzLGUuZGVncmVlPTQwMCxlLnBsdXNtaW51cz01NDksZS5zZWNvbmQ9NDExLGUuZ3JlYXRlcmVxdWFsPTU0OSxlLm11bHRpcGx5PTU0OSxlLnByb3BvcnRpb25hbD03MTMsZS5wYXJ0aWFsZGlmZj00OTQsZS5idWxsZXQ9NDYwLGUuZGl2aWRlPTU0OSxlLm5vdGVxdWFsPTU0OSxlLmVxdWl2YWxlbmNlPTU0OSxlLmFwcHJveGVxdWFsPTU0OSxlLmVsbGlwc2lzPTFlMyxlLmFycm93dmVydGV4PTYwMyxlLmFycm93aG9yaXpleD0xZTMsZS5jYXJyaWFnZXJldHVybj02NTgsZS5hbGVwaD04MjMsZS5JZnJha3R1cj02ODYsZS5SZnJha3R1cj03OTUsZS53ZWllcnN0cmFzcz05ODcsZS5jaXJjbGVtdWx0aXBseT03NjgsZS5jaXJjbGVwbHVzPTc2OCxlLmVtcHR5c2V0PTgyMyxlLmludGVyc2VjdGlvbj03NjgsZS51bmlvbj03NjgsZS5wcm9wZXJzdXBlcnNldD03MTMsZS5yZWZsZXhzdXBlcnNldD03MTMsZS5ub3RzdWJzZXQ9NzEzLGUucHJvcGVyc3Vic2V0PTcxMyxlLnJlZmxleHN1YnNldD03MTMsZS5lbGVtZW50PTcxMyxlLm5vdGVsZW1lbnQ9NzEzLGUuYW5nbGU9NzY4LGUuZ3JhZGllbnQ9NzEzLGUucmVnaXN0ZXJzZXJpZj03OTAsZS5jb3B5cmlnaHRzZXJpZj03OTAsZS50cmFkZW1hcmtzZXJpZj04OTAsZS5wcm9kdWN0PTgyMyxlLnJhZGljYWw9NTQ5LGUuZG90bWF0aD0yNTAsZS5sb2dpY2Fsbm90PTcxMyxlLmxvZ2ljYWxhbmQ9NjAzLGUubG9naWNhbG9yPTYwMyxlLmFycm93ZGJsYm90aD0xMDQyLGUuYXJyb3dkYmxsZWZ0PTk4NyxlLmFycm93ZGJsdXA9NjAzLGUuYXJyb3dkYmxyaWdodD05ODcsZS5hcnJvd2RibGRvd249NjAzLGUubG96ZW5nZT00OTQsZS5hbmdsZWxlZnQ9MzI5LGUucmVnaXN0ZXJzYW5zPTc5MCxlLmNvcHlyaWdodHNhbnM9NzkwLGUudHJhZGVtYXJrc2Fucz03ODYsZS5zdW1tYXRpb249NzEzLGUucGFyZW5sZWZ0dHA9Mzg0LGUucGFyZW5sZWZ0ZXg9Mzg0LGUucGFyZW5sZWZ0YnQ9Mzg0LGUuYnJhY2tldGxlZnR0cD0zODQsZS5icmFja2V0bGVmdGV4PTM4NCxlLmJyYWNrZXRsZWZ0YnQ9Mzg0LGUuYnJhY2VsZWZ0dHA9NDk0LGUuYnJhY2VsZWZ0bWlkPTQ5NCxlLmJyYWNlbGVmdGJ0PTQ5NCxlLmJyYWNlZXg9NDk0LGUuYW5nbGVyaWdodD0zMjksZS5pbnRlZ3JhbD0yNzQsZS5pbnRlZ3JhbHRwPTY4NixlLmludGVncmFsZXg9Njg2LGUuaW50ZWdyYWxidD02ODYsZS5wYXJlbnJpZ2h0dHA9Mzg0LGUucGFyZW5yaWdodGV4PTM4NCxlLnBhcmVucmlnaHRidD0zODQsZS5icmFja2V0cmlnaHR0cD0zODQsZS5icmFja2V0cmlnaHRleD0zODQsZS5icmFja2V0cmlnaHRidD0zODQsZS5icmFjZXJpZ2h0dHA9NDk0LGUuYnJhY2VyaWdodG1pZD00OTQsZS5icmFjZXJpZ2h0YnQ9NDk0LGUuYXBwbGU9NzkwfSkpLGVbIlRpbWVzLVJvbWFuIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD00MDgsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTY0LGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTI3OCxlLnNlbWljb2xvbj0yNzgsZS5sZXNzPTU2NCxlLmVxdWFsPTU2NCxlLmdyZWF0ZXI9NTY0LGUucXVlc3Rpb249NDQ0LGUuYXQ9OTIxLGUuQT03MjIsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTYxMSxlLkY9NTU2LGUuRz03MjIsZS5IPTcyMixlLkk9MzMzLGUuSj0zODksZS5LPTcyMixlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD01NTYsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj03MjIsZS5XPTk0NCxlLlg9NzIyLGUuWT03MjIsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NDY5LGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT00NDQsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTUwMCxlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTUwMCxlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9MzMzLGUucz0zODksZS50PTI3OCxlLnU9NTAwLGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD00ODAsZS5iYXI9MjAwLGUuYnJhY2VyaWdodD00ODAsZS5hc2NpaXRpbGRlPTU0MSxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9MTgwLGUucXVvdGVkYmxsZWZ0PTQ0NCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NDUzLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT00NDQsZS5xdW90ZWRibHJpZ2h0PTQ0NCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj00NDQsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTg4OSxlLm9yZGZlbWluaW5lPTI3NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9ODg5LGUub3JkbWFzY3VsaW5lPTMxMCxlLmFlPTY2NyxlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9MzMzLGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT00NDQsZS51aHVuZ2FydW1sYXV0PTUwMCxlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU2NCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NDQ0LGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz00NDQsZS5VYWN1dGU9NzIyLGUudW9nb25laz01MDAsZS5FZGllcmVzaXM9NjExLGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NjAsZS5FbWFjcm9uPTYxMSxlLmNjYXJvbj00NDQsZS5hcmluZz00NDQsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT00NDQsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT00NDQsZS5FZG90YWNjZW50PTYxMSxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00NzEsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTUwMCxlLmFjaXJjdW1mbGV4PTQ0NCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTMzMyxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NTU2LGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj01ODgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTUwMCxlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTY0LGUudWFjdXRlPTUwMCxlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00NzYsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTYxMSxlLmFkaWVyZXNpcz00NDQsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01MDAsZS51bWFjcm9uPTUwMCxlLk5jYXJvbj03MjIsZS5JYWN1dGU9MzMzLGUucGx1c21pbnVzPTU2NCxlLmJyb2tlbmJhcj0yMDAsZS5yZWdpc3RlcmVkPTc2MCxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTMzMyxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjExLGUucmFjdXRlPTMzMyxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzI2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj00NDQsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTAwLGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02MTEsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzQ0LGUuS2NvbW1hYWNjZW50PTcyMixlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9OTgwLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9MzMzLGUuSW1hY3Jvbj0zMzMsZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTUwMCxlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTYxMSxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01MDAsZS5yYWRpY2FsPTQ1MyxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9MzMzLGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02MTEsZS5Jb2dvbmVrPTMzMyxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz01NjQsZS5JY2lyY3VtZmxleD0zMzMsZS5uY2Fyb249NTAwLGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NTY0LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01MDAsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTAwLGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zMzMsZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTFlMyxlLmFtcGVyc2FuZD04MzMsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9OTMwLGUuQT03MjIsZS5CPTY2NyxlLkM9NzIyLGUuRD03MjIsZS5FPTY2NyxlLkY9NjExLGUuRz03NzgsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTc3OCxlLkw9NjY3LGUuTT05NDQsZS5OPTcyMixlLk89Nzc4LGUuUD02MTEsZS5RPTc3OCxlLlI9NzIyLGUuUz01NTYsZS5UPTY2NyxlLlU9NzIyLGUuVj03MjIsZS5XPTFlMyxlLlg9NzIyLGUuWT03MjIsZS5aPTY2NyxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTgxLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTU1NixlLmM9NDQ0LGUuZD01NTYsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0zMzMsZS5rPTU1NixlLmw9Mjc4LGUubT04MzMsZS5uPTU1NixlLm89NTAwLGUucD01NTYsZS5xPTU1NixlLnI9NDQ0LGUucz0zODksZS50PTMzMyxlLnU9NTU2LGUudj01MDAsZS53PTcyMixlLng9NTAwLGUueT01MDAsZS56PTQ0NCxlLmJyYWNlbGVmdD0zOTQsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zOTQsZS5hc2NpaXRpbGRlPTUyMCxlLmV4Y2xhbWRvd249MzMzLGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTQwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTFlMyxlLm9yZGZlbWluaW5lPTMwMCxlLkxzbGFzaD02NjcsZS5Pc2xhc2g9Nzc4LGUuT0U9MWUzLGUub3JkbWFzY3VsaW5lPTMzMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01NTYsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NzIyLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT03MjIsZS5BY2lyY3VtZmxleD03MjIsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTUwMCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjY3LGUuQ2FjdXRlPTcyMixlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NzIyLGUuR2NvbW1hYWNjZW50PTc3OCxlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NzIyLGUucmNhcm9uPTQ0NCxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjY3LGUuVGhvcm49NjExLGUuT21hY3Jvbj03NzgsZS5SYWN1dGU9NzIyLGUuU2FjdXRlPTU1NixlLmRjYXJvbj02NzIsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTc3OCxlLkFncmF2ZT03MjIsZS5BYnJldmU9NzIyLGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02NjcsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NTAwLGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03NzgsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTQ0NCxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTY2NyxlLlpjYXJvbj02NjcsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTcyMixlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249NDE2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT03MjIsZS5BZGllcmVzaXM9NzIyLGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT00NDQsZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03NzgsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTc3OCxlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01NTYsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9Nzc4LGUubXU9NTU2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTU2LGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249Mzk0LGUuS2NvbW1hYWNjZW50PTc3OCxlLkxhY3V0ZT02NjcsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjY3LGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTc3OCxlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTcyMixlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9NDQ0LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NzIyLGUuTGNvbW1hYWNjZW50PTY2NyxlLkF0aWxkZT03MjIsZS5Bb2dvbmVrPTcyMixlLkFyaW5nPTcyMixlLk90aWxkZT03NzgsZS56ZG90YWNjZW50PTQ0NCxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01NTYsZS5taW51cz01NzAsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTMzMyxlLmxvZ2ljYWxub3Q9NTcwLGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj00NDQsZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1Cb2xkSXRhbGljIl09KDAsbi5nZXRMb29rdXBUYWJsZUZhY3RvcnkpKChmdW5jdGlvbihlKXtlLnNwYWNlPTI1MCxlLmV4Y2xhbT0zODksZS5xdW90ZWRibD01NTUsZS5udW1iZXJzaWduPTUwMCxlLmRvbGxhcj01MDAsZS5wZXJjZW50PTgzMyxlLmFtcGVyc2FuZD03NzgsZS5xdW90ZXJpZ2h0PTMzMyxlLnBhcmVubGVmdD0zMzMsZS5wYXJlbnJpZ2h0PTMzMyxlLmFzdGVyaXNrPTUwMCxlLnBsdXM9NTcwLGUuY29tbWE9MjUwLGUuaHlwaGVuPTMzMyxlLnBlcmlvZD0yNTAsZS5zbGFzaD0yNzgsZS56ZXJvPTUwMCxlLm9uZT01MDAsZS50d289NTAwLGUudGhyZWU9NTAwLGUuZm91cj01MDAsZS5maXZlPTUwMCxlLnNpeD01MDAsZS5zZXZlbj01MDAsZS5laWdodD01MDAsZS5uaW5lPTUwMCxlLmNvbG9uPTMzMyxlLnNlbWljb2xvbj0zMzMsZS5sZXNzPTU3MCxlLmVxdWFsPTU3MCxlLmdyZWF0ZXI9NTcwLGUucXVlc3Rpb249NTAwLGUuYXQ9ODMyLGUuQT02NjcsZS5CPTY2NyxlLkM9NjY3LGUuRD03MjIsZS5FPTY2NyxlLkY9NjY3LGUuRz03MjIsZS5IPTc3OCxlLkk9Mzg5LGUuSj01MDAsZS5LPTY2NyxlLkw9NjExLGUuTT04ODksZS5OPTcyMixlLk89NzIyLGUuUD02MTEsZS5RPTcyMixlLlI9NjY3LGUuUz01NTYsZS5UPTYxMSxlLlU9NzIyLGUuVj02NjcsZS5XPTg4OSxlLlg9NjY3LGUuWT02MTEsZS5aPTYxMSxlLmJyYWNrZXRsZWZ0PTMzMyxlLmJhY2tzbGFzaD0yNzgsZS5icmFja2V0cmlnaHQ9MzMzLGUuYXNjaWljaXJjdW09NTcwLGUudW5kZXJzY29yZT01MDAsZS5xdW90ZWxlZnQ9MzMzLGUuYT01MDAsZS5iPTUwMCxlLmM9NDQ0LGUuZD01MDAsZS5lPTQ0NCxlLmY9MzMzLGUuZz01MDAsZS5oPTU1NixlLmk9Mjc4LGUuaj0yNzgsZS5rPTUwMCxlLmw9Mjc4LGUubT03NzgsZS5uPTU1NixlLm89NTAwLGUucD01MDAsZS5xPTUwMCxlLnI9Mzg5LGUucz0zODksZS50PTI3OCxlLnU9NTU2LGUudj00NDQsZS53PTY2NyxlLng9NTAwLGUueT00NDQsZS56PTM4OSxlLmJyYWNlbGVmdD0zNDgsZS5iYXI9MjIwLGUuYnJhY2VyaWdodD0zNDgsZS5hc2NpaXRpbGRlPTU3MCxlLmV4Y2xhbWRvd249Mzg5LGUuY2VudD01MDAsZS5zdGVybGluZz01MDAsZS5mcmFjdGlvbj0xNjcsZS55ZW49NTAwLGUuZmxvcmluPTUwMCxlLnNlY3Rpb249NTAwLGUuY3VycmVuY3k9NTAwLGUucXVvdGVzaW5nbGU9Mjc4LGUucXVvdGVkYmxsZWZ0PTUwMCxlLmd1aWxsZW1vdGxlZnQ9NTAwLGUuZ3VpbHNpbmdsbGVmdD0zMzMsZS5ndWlsc2luZ2xyaWdodD0zMzMsZS5maT01NTYsZS5mbD01NTYsZS5lbmRhc2g9NTAwLGUuZGFnZ2VyPTUwMCxlLmRhZ2dlcmRibD01MDAsZS5wZXJpb2RjZW50ZXJlZD0yNTAsZS5wYXJhZ3JhcGg9NTAwLGUuYnVsbGV0PTM1MCxlLnF1b3Rlc2luZ2xiYXNlPTMzMyxlLnF1b3RlZGJsYmFzZT01MDAsZS5xdW90ZWRibHJpZ2h0PTUwMCxlLmd1aWxsZW1vdHJpZ2h0PTUwMCxlLmVsbGlwc2lzPTFlMyxlLnBlcnRob3VzYW5kPTFlMyxlLnF1ZXN0aW9uZG93bj01MDAsZS5ncmF2ZT0zMzMsZS5hY3V0ZT0zMzMsZS5jaXJjdW1mbGV4PTMzMyxlLnRpbGRlPTMzMyxlLm1hY3Jvbj0zMzMsZS5icmV2ZT0zMzMsZS5kb3RhY2NlbnQ9MzMzLGUuZGllcmVzaXM9MzMzLGUucmluZz0zMzMsZS5jZWRpbGxhPTMzMyxlLmh1bmdhcnVtbGF1dD0zMzMsZS5vZ29uZWs9MzMzLGUuY2Fyb249MzMzLGUuZW1kYXNoPTFlMyxlLkFFPTk0NCxlLm9yZGZlbWluaW5lPTI2NixlLkxzbGFzaD02MTEsZS5Pc2xhc2g9NzIyLGUuT0U9OTQ0LGUub3JkbWFzY3VsaW5lPTMwMCxlLmFlPTcyMixlLmRvdGxlc3NpPTI3OCxlLmxzbGFzaD0yNzgsZS5vc2xhc2g9NTAwLGUub2U9NzIyLGUuZ2VybWFuZGJscz01MDAsZS5JZGllcmVzaXM9Mzg5LGUuZWFjdXRlPTQ0NCxlLmFicmV2ZT01MDAsZS51aHVuZ2FydW1sYXV0PTU1NixlLmVjYXJvbj00NDQsZS5ZZGllcmVzaXM9NjExLGUuZGl2aWRlPTU3MCxlLllhY3V0ZT02MTEsZS5BY2lyY3VtZmxleD02NjcsZS5hYWN1dGU9NTAwLGUuVWNpcmN1bWZsZXg9NzIyLGUueWFjdXRlPTQ0NCxlLnNjb21tYWFjY2VudD0zODksZS5lY2lyY3VtZmxleD00NDQsZS5VcmluZz03MjIsZS5VZGllcmVzaXM9NzIyLGUuYW9nb25laz01MDAsZS5VYWN1dGU9NzIyLGUudW9nb25laz01NTYsZS5FZGllcmVzaXM9NjY3LGUuRGNyb2F0PTcyMixlLmNvbW1hYWNjZW50PTI1MCxlLmNvcHlyaWdodD03NDcsZS5FbWFjcm9uPTY2NyxlLmNjYXJvbj00NDQsZS5hcmluZz01MDAsZS5OY29tbWFhY2NlbnQ9NzIyLGUubGFjdXRlPTI3OCxlLmFncmF2ZT01MDAsZS5UY29tbWFhY2NlbnQ9NjExLGUuQ2FjdXRlPTY2NyxlLmF0aWxkZT01MDAsZS5FZG90YWNjZW50PTY2NyxlLnNjYXJvbj0zODksZS5zY2VkaWxsYT0zODksZS5pYWN1dGU9Mjc4LGUubG96ZW5nZT00OTQsZS5SY2Fyb249NjY3LGUuR2NvbW1hYWNjZW50PTcyMixlLnVjaXJjdW1mbGV4PTU1NixlLmFjaXJjdW1mbGV4PTUwMCxlLkFtYWNyb249NjY3LGUucmNhcm9uPTM4OSxlLmNjZWRpbGxhPTQ0NCxlLlpkb3RhY2NlbnQ9NjExLGUuVGhvcm49NjExLGUuT21hY3Jvbj03MjIsZS5SYWN1dGU9NjY3LGUuU2FjdXRlPTU1NixlLmRjYXJvbj02MDgsZS5VbWFjcm9uPTcyMixlLnVyaW5nPTU1NixlLnRocmVlc3VwZXJpb3I9MzAwLGUuT2dyYXZlPTcyMixlLkFncmF2ZT02NjcsZS5BYnJldmU9NjY3LGUubXVsdGlwbHk9NTcwLGUudWFjdXRlPTU1NixlLlRjYXJvbj02MTEsZS5wYXJ0aWFsZGlmZj00OTQsZS55ZGllcmVzaXM9NDQ0LGUuTmFjdXRlPTcyMixlLmljaXJjdW1mbGV4PTI3OCxlLkVjaXJjdW1mbGV4PTY2NyxlLmFkaWVyZXNpcz01MDAsZS5lZGllcmVzaXM9NDQ0LGUuY2FjdXRlPTQ0NCxlLm5hY3V0ZT01NTYsZS51bWFjcm9uPTU1NixlLk5jYXJvbj03MjIsZS5JYWN1dGU9Mzg5LGUucGx1c21pbnVzPTU3MCxlLmJyb2tlbmJhcj0yMjAsZS5yZWdpc3RlcmVkPTc0NyxlLkdicmV2ZT03MjIsZS5JZG90YWNjZW50PTM4OSxlLnN1bW1hdGlvbj02MDAsZS5FZ3JhdmU9NjY3LGUucmFjdXRlPTM4OSxlLm9tYWNyb249NTAwLGUuWmFjdXRlPTYxMSxlLlpjYXJvbj02MTEsZS5ncmVhdGVyZXF1YWw9NTQ5LGUuRXRoPTcyMixlLkNjZWRpbGxhPTY2NyxlLmxjb21tYWFjY2VudD0yNzgsZS50Y2Fyb249MzY2LGUuZW9nb25laz00NDQsZS5Vb2dvbmVrPTcyMixlLkFhY3V0ZT02NjcsZS5BZGllcmVzaXM9NjY3LGUuZWdyYXZlPTQ0NCxlLnphY3V0ZT0zODksZS5pb2dvbmVrPTI3OCxlLk9hY3V0ZT03MjIsZS5vYWN1dGU9NTAwLGUuYW1hY3Jvbj01MDAsZS5zYWN1dGU9Mzg5LGUuaWRpZXJlc2lzPTI3OCxlLk9jaXJjdW1mbGV4PTcyMixlLlVncmF2ZT03MjIsZS5EZWx0YT02MTIsZS50aG9ybj01MDAsZS50d29zdXBlcmlvcj0zMDAsZS5PZGllcmVzaXM9NzIyLGUubXU9NTc2LGUuaWdyYXZlPTI3OCxlLm9odW5nYXJ1bWxhdXQ9NTAwLGUuRW9nb25laz02NjcsZS5kY3JvYXQ9NTAwLGUudGhyZWVxdWFydGVycz03NTAsZS5TY2VkaWxsYT01NTYsZS5sY2Fyb249MzgyLGUuS2NvbW1hYWNjZW50PTY2NyxlLkxhY3V0ZT02MTEsZS50cmFkZW1hcms9MWUzLGUuZWRvdGFjY2VudD00NDQsZS5JZ3JhdmU9Mzg5LGUuSW1hY3Jvbj0zODksZS5MY2Fyb249NjExLGUub25laGFsZj03NTAsZS5sZXNzZXF1YWw9NTQ5LGUub2NpcmN1bWZsZXg9NTAwLGUubnRpbGRlPTU1NixlLlVodW5nYXJ1bWxhdXQ9NzIyLGUuRWFjdXRlPTY2NyxlLmVtYWNyb249NDQ0LGUuZ2JyZXZlPTUwMCxlLm9uZXF1YXJ0ZXI9NzUwLGUuU2Nhcm9uPTU1NixlLlNjb21tYWFjY2VudD01NTYsZS5PaHVuZ2FydW1sYXV0PTcyMixlLmRlZ3JlZT00MDAsZS5vZ3JhdmU9NTAwLGUuQ2Nhcm9uPTY2NyxlLnVncmF2ZT01NTYsZS5yYWRpY2FsPTU0OSxlLkRjYXJvbj03MjIsZS5yY29tbWFhY2NlbnQ9Mzg5LGUuTnRpbGRlPTcyMixlLm90aWxkZT01MDAsZS5SY29tbWFhY2NlbnQ9NjY3LGUuTGNvbW1hYWNjZW50PTYxMSxlLkF0aWxkZT02NjcsZS5Bb2dvbmVrPTY2NyxlLkFyaW5nPTY2NyxlLk90aWxkZT03MjIsZS56ZG90YWNjZW50PTM4OSxlLkVjYXJvbj02NjcsZS5Jb2dvbmVrPTM4OSxlLmtjb21tYWFjY2VudD01MDAsZS5taW51cz02MDYsZS5JY2lyY3VtZmxleD0zODksZS5uY2Fyb249NTU2LGUudGNvbW1hYWNjZW50PTI3OCxlLmxvZ2ljYWxub3Q9NjA2LGUub2RpZXJlc2lzPTUwMCxlLnVkaWVyZXNpcz01NTYsZS5ub3RlcXVhbD01NDksZS5nY29tbWFhY2NlbnQ9NTAwLGUuZXRoPTUwMCxlLnpjYXJvbj0zODksZS5uY29tbWFhY2NlbnQ9NTU2LGUub25lc3VwZXJpb3I9MzAwLGUuaW1hY3Jvbj0yNzgsZS5FdXJvPTUwMH0pKSxlWyJUaW1lcy1JdGFsaWMiXT0oMCxuLmdldExvb2t1cFRhYmxlRmFjdG9yeSkoKGZ1bmN0aW9uKGUpe2Uuc3BhY2U9MjUwLGUuZXhjbGFtPTMzMyxlLnF1b3RlZGJsPTQyMCxlLm51bWJlcnNpZ249NTAwLGUuZG9sbGFyPTUwMCxlLnBlcmNlbnQ9ODMzLGUuYW1wZXJzYW5kPTc3OCxlLnF1b3RlcmlnaHQ9MzMzLGUucGFyZW5sZWZ0PTMzMyxlLnBhcmVucmlnaHQ9MzMzLGUuYXN0ZXJpc2s9NTAwLGUucGx1cz02NzUsZS5jb21tYT0yNTAsZS5oeXBoZW49MzMzLGUucGVyaW9kPTI1MCxlLnNsYXNoPTI3OCxlLnplcm89NTAwLGUub25lPTUwMCxlLnR3bz01MDAsZS50aHJlZT01MDAsZS5mb3VyPTUwMCxlLmZpdmU9NTAwLGUuc2l4PTUwMCxlLnNldmVuPTUwMCxlLmVpZ2h0PTUwMCxlLm5pbmU9NTAwLGUuY29sb249MzMzLGUuc2VtaWNvbG9uPTMzMyxlLmxlc3M9Njc1LGUuZXF1YWw9Njc1LGUuZ3JlYXRlcj02NzUsZS5xdWVzdGlvbj01MDAsZS5hdD05MjAsZS5BPTYxMSxlLkI9NjExLGUuQz02NjcsZS5EPTcyMixlLkU9NjExLGUuRj02MTEsZS5HPTcyMixlLkg9NzIyLGUuST0zMzMsZS5KPTQ0NCxlLks9NjY3LGUuTD01NTYsZS5NPTgzMyxlLk49NjY3LGUuTz03MjIsZS5QPTYxMSxlLlE9NzIyLGUuUj02MTEsZS5TPTUwMCxlLlQ9NTU2LGUuVT03MjIsZS5WPTYxMSxlLlc9ODMzLGUuWD02MTEsZS5ZPTU1NixlLlo9NTU2LGUuYnJhY2tldGxlZnQ9Mzg5LGUuYmFja3NsYXNoPTI3OCxlLmJyYWNrZXRyaWdodD0zODksZS5hc2NpaWNpcmN1bT00MjIsZS51bmRlcnNjb3JlPTUwMCxlLnF1b3RlbGVmdD0zMzMsZS5hPTUwMCxlLmI9NTAwLGUuYz00NDQsZS5kPTUwMCxlLmU9NDQ0LGUuZj0yNzgsZS5nPTUwMCxlLmg9NTAwLGUuaT0yNzgsZS5qPTI3OCxlLms9NDQ0LGUubD0yNzgsZS5tPTcyMixlLm49NTAwLGUubz01MDAsZS5wPTUwMCxlLnE9NTAwLGUucj0zODksZS5zPTM4OSxlLnQ9Mjc4LGUudT01MDAsZS52PTQ0NCxlLnc9NjY3LGUueD00NDQsZS55PTQ0NCxlLno9Mzg5LGUuYnJhY2VsZWZ0PTQwMCxlLmJhcj0yNzUsZS5icmFjZXJpZ2h0PTQwMCxlLmFzY2lpdGlsZGU9NTQxLGUuZXhjbGFtZG93bj0zODksZS5jZW50PTUwMCxlLnN0ZXJsaW5nPTUwMCxlLmZyYWN0aW9uPTE2NyxlLnllbj01MDAsZS5mbG9yaW49NTAwLGUuc2VjdGlvbj01MDAsZS5jdXJyZW5jeT01MDAsZS5xdW90ZXNpbmdsZT0yMTQsZS5xdW90ZWRibGxlZnQ9NTU2LGUuZ3VpbGxlbW90bGVmdD01MDAsZS5ndWlsc2luZ2xsZWZ0PTMzMyxlLmd1aWxzaW5nbHJpZ2h0PTMzMyxlLmZpPTUwMCxlLmZsPTUwMCxlLmVuZGFzaD01MDAsZS5kYWdnZXI9NTAwLGUuZGFnZ2VyZGJsPTUwMCxlLnBlcmlvZGNlbnRlcmVkPTI1MCxlLnBhcmFncmFwaD01MjMsZS5idWxsZXQ9MzUwLGUucXVvdGVzaW5nbGJhc2U9MzMzLGUucXVvdGVkYmxiYXNlPTU1NixlLnF1b3RlZGJscmlnaHQ9NTU2LGUuZ3VpbGxlbW90cmlnaHQ9NTAwLGUuZWxsaXBzaXM9ODg5LGUucGVydGhvdXNhbmQ9MWUzLGUucXVlc3Rpb25kb3duPTUwMCxlLmdyYXZlPTMzMyxlLmFjdXRlPTMzMyxlLmNpcmN1bWZsZXg9MzMzLGUudGlsZGU9MzMzLGUubWFjcm9uPTMzMyxlLmJyZXZlPTMzMyxlLmRvdGFjY2VudD0zMzMsZS5kaWVyZXNpcz0zMzMsZS5yaW5nPTMzMyxlLmNlZGlsbGE9MzMzLGUuaHVuZ2FydW1sYXV0PTMzMyxlLm9nb25laz0zMzMsZS5jYXJvbj0zMzMsZS5lbWRhc2g9ODg5LGUuQUU9ODg5LGUub3JkZmVtaW5pbmU9Mjc2LGUuTHNsYXNoPTU1NixlLk9zbGFzaD03MjIsZS5PRT05NDQsZS5vcmRtYXNjdWxpbmU9MzEwLGUuYWU9NjY3LGUuZG90bGVzc2k9Mjc4LGUubHNsYXNoPTI3OCxlLm9zbGFzaD01MDAsZS5vZT02NjcsZS5nZXJtYW5kYmxzPTUwMCxlLklkaWVyZXNpcz0zMzMsZS5lYWN1dGU9NDQ0LGUuYWJyZXZlPTUwMCxlLnVodW5nYXJ1bWxhdXQ9NTAwLGUuZWNhcm9uPTQ0NCxlLllkaWVyZXNpcz01NTYsZS5kaXZpZGU9Njc1LGUuWWFjdXRlPTU1NixlLkFjaXJjdW1mbGV4PTYxMSxlLmFhY3V0ZT01MDAsZS5VY2lyY3VtZmxleD03MjIsZS55YWN1dGU9NDQ0LGUuc2NvbW1hYWNjZW50PTM4OSxlLmVjaXJjdW1mbGV4PTQ0NCxlLlVyaW5nPTcyMixlLlVkaWVyZXNpcz03MjIsZS5hb2dvbmVrPTUwMCxlLlVhY3V0ZT03MjIsZS51b2dvbmVrPTUwMCxlLkVkaWVyZXNpcz02MTEsZS5EY3JvYXQ9NzIyLGUuY29tbWFhY2NlbnQ9MjUwLGUuY29weXJpZ2h0PTc2MCxlLkVtYWNyb249NjExLGUuY2Nhcm9uPTQ0NCxlLmFyaW5nPTUwMCxlLk5jb21tYWFjY2VudD02NjcsZS5sYWN1dGU9Mjc4LGUuYWdyYXZlPTUwMCxlLlRjb21tYWFjY2VudD01NTYsZS5DYWN1dGU9NjY3LGUuYXRpbGRlPTUwMCxlLkVkb3RhY2NlbnQ9NjExLGUuc2Nhcm9uPTM4OSxlLnNjZWRpbGxhPTM4OSxlLmlhY3V0ZT0yNzgsZS5sb3plbmdlPTQ3MSxlLlJjYXJvbj02MTEsZS5HY29tbWFhY2NlbnQ9NzIyLGUudWNpcmN1bWZsZXg9NTAwLGUuYWNpcmN1bWZsZXg9NTAwLGUuQW1hY3Jvbj02MTEsZS5yY2Fyb249Mzg5LGUuY2NlZGlsbGE9NDQ0LGUuWmRvdGFjY2VudD01NTYsZS5UaG9ybj02MTEsZS5PbWFjcm9uPTcyMixlLlJhY3V0ZT02MTEsZS5TYWN1dGU9NTAwLGUuZGNhcm9uPTU0NCxlLlVtYWNyb249NzIyLGUudXJpbmc9NTAwLGUudGhyZWVzdXBlcmlvcj0zMDAsZS5PZ3JhdmU9NzIyLGUuQWdyYXZlPTYxMSxlLkFicmV2ZT02MTEsZS5tdWx0aXBseT02NzUsZS51YWN1dGU9NTAwLGUuVGNhcm9uPTU1NixlLnBhcnRpYWxkaWZmPTQ3NixlLnlkaWVyZXNpcz00NDQsZS5OYWN1dGU9NjY3LGUuaWNpcmN1bWZsZXg9Mjc4LGUuRWNpcmN1bWZsZXg9NjExLGUuYWRpZXJlc2lzPTUwMCxlLmVkaWVyZXNpcz00NDQsZS5jYWN1dGU9NDQ0LGUubmFjdXRlPTUwMCxlLnVtYWNyb249NTAwLGUuTmNhcm9uPTY2NyxlLklhY3V0ZT0zMzMsZS5wbHVzbWludXM9Njc1LGUuYnJva2VuYmFyPTI3NSxlLnJlZ2lzdGVyZWQ9NzYwLGUuR2JyZXZlPTcyMixlLklkb3RhY2NlbnQ9MzMzLGUuc3VtbWF0aW9uPTYwMCxlLkVncmF2ZT02MTEsZS5yYWN1dGU9Mzg5LGUub21hY3Jvbj01MDAsZS5aYWN1dGU9NTU2LGUuWmNhcm9uPTU1NixlLmdyZWF0ZXJlcXVhbD01NDksZS5FdGg9NzIyLGUuQ2NlZGlsbGE9NjY3LGUubGNvbW1hYWNjZW50PTI3OCxlLnRjYXJvbj0zMDAsZS5lb2dvbmVrPTQ0NCxlLlVvZ29uZWs9NzIyLGUuQWFjdXRlPTYxMSxlLkFkaWVyZXNpcz02MTEsZS5lZ3JhdmU9NDQ0LGUuemFjdXRlPTM4OSxlLmlvZ29uZWs9Mjc4LGUuT2FjdXRlPTcyMixlLm9hY3V0ZT01MDAsZS5hbWFjcm9uPTUwMCxlLnNhY3V0ZT0zODksZS5pZGllcmVzaXM9Mjc4LGUuT2NpcmN1bWZsZXg9NzIyLGUuVWdyYXZlPTcyMixlLkRlbHRhPTYxMixlLnRob3JuPTUwMCxlLnR3b3N1cGVyaW9yPTMwMCxlLk9kaWVyZXNpcz03MjIsZS5tdT01MDAsZS5pZ3JhdmU9Mjc4LGUub2h1bmdhcnVtbGF1dD01MDAsZS5Fb2dvbmVrPTYxMSxlLmRjcm9hdD01MDAsZS50aHJlZXF1YXJ0ZXJzPTc1MCxlLlNjZWRpbGxhPTUwMCxlLmxjYXJvbj0zMDAsZS5LY29tbWFhY2NlbnQ9NjY3LGUuTGFjdXRlPTU1NixlLnRyYWRlbWFyaz05ODAsZS5lZG90YWNjZW50PTQ0NCxlLklncmF2ZT0zMzMsZS5JbWFjcm9uPTMzMyxlLkxjYXJvbj02MTEsZS5vbmVoYWxmPTc1MCxlLmxlc3NlcXVhbD01NDksZS5vY2lyY3VtZmxleD01MDAsZS5udGlsZGU9NTAwLGUuVWh1bmdhcnVtbGF1dD03MjIsZS5FYWN1dGU9NjExLGUuZW1hY3Jvbj00NDQsZS5nYnJldmU9NTAwLGUub25lcXVhcnRlcj03NTAsZS5TY2Fyb249NTAwLGUuU2NvbW1hYWNjZW50PTUwMCxlLk9odW5nYXJ1bWxhdXQ9NzIyLGUuZGVncmVlPTQwMCxlLm9ncmF2ZT01MDAsZS5DY2Fyb249NjY3LGUudWdyYXZlPTUwMCxlLnJhZGljYWw9NDUzLGUuRGNhcm9uPTcyMixlLnJjb21tYWFjY2VudD0zODksZS5OdGlsZGU9NjY3LGUub3RpbGRlPTUwMCxlLlJjb21tYWFjY2VudD02MTEsZS5MY29tbWFhY2NlbnQ9NTU2LGUuQXRpbGRlPTYxMSxlLkFvZ29uZWs9NjExLGUuQXJpbmc9NjExLGUuT3RpbGRlPTcyMixlLnpkb3RhY2NlbnQ9Mzg5LGUuRWNhcm9uPTYxMSxlLklvZ29uZWs9MzMzLGUua2NvbW1hYWNjZW50PTQ0NCxlLm1pbnVzPTY3NSxlLkljaXJjdW1mbGV4PTMzMyxlLm5jYXJvbj01MDAsZS50Y29tbWFhY2NlbnQ9Mjc4LGUubG9naWNhbG5vdD02NzUsZS5vZGllcmVzaXM9NTAwLGUudWRpZXJlc2lzPTUwMCxlLm5vdGVxdWFsPTU0OSxlLmdjb21tYWFjY2VudD01MDAsZS5ldGg9NTAwLGUuemNhcm9uPTM4OSxlLm5jb21tYWFjY2VudD01MDAsZS5vbmVzdXBlcmlvcj0zMDAsZS5pbWFjcm9uPTI3OCxlLkV1cm89NTAwfSkpLGUuWmFwZkRpbmdiYXRzPSgwLG4uZ2V0TG9va3VwVGFibGVGYWN0b3J5KSgoZnVuY3Rpb24oZSl7ZS5zcGFjZT0yNzgsZS5hMT05NzQsZS5hMj05NjEsZS5hMjAyPTk3NCxlLmEzPTk4MCxlLmE0PTcxOSxlLmE1PTc4OSxlLmExMTk9NzkwLGUuYTExOD03OTEsZS5hMTE3PTY5MCxlLmExMT05NjAsZS5hMTI9OTM5LGUuYTEzPTU0OSxlLmExND04NTUsZS5hMTU9OTExLGUuYTE2PTkzMyxlLmExMDU9OTExLGUuYTE3PTk0NSxlLmExOD05NzQsZS5hMTk9NzU1LGUuYTIwPTg0NixlLmEyMT03NjIsZS5hMjI9NzYxLGUuYTIzPTU3MSxlLmEyND02NzcsZS5hMjU9NzYzLGUuYTI2PTc2MCxlLmEyNz03NTksZS5hMjg9NzU0LGUuYTY9NDk0LGUuYTc9NTUyLGUuYTg9NTM3LGUuYTk9NTc3LGUuYTEwPTY5MixlLmEyOT03ODYsZS5hMzA9Nzg4LGUuYTMxPTc4OCxlLmEzMj03OTAsZS5hMzM9NzkzLGUuYTM0PTc5NCxlLmEzNT04MTYsZS5hMzY9ODIzLGUuYTM3PTc4OSxlLmEzOD04NDEsZS5hMzk9ODIzLGUuYTQwPTgzMyxlLmE0MT04MTYsZS5hNDI9ODMxLGUuYTQzPTkyMyxlLmE0ND03NDQsZS5hNDU9NzIzLGUuYTQ2PTc0OSxlLmE0Nz03OTAsZS5hNDg9NzkyLGUuYTQ5PTY5NSxlLmE1MD03NzYsZS5hNTE9NzY4LGUuYTUyPTc5MixlLmE1Mz03NTksZS5hNTQ9NzA3LGUuYTU1PTcwOCxlLmE1Nj02ODIsZS5hNTc9NzAxLGUuYTU4PTgyNixlLmE1OT04MTUsZS5hNjA9Nzg5LGUuYTYxPTc4OSxlLmE2Mj03MDcsZS5hNjM9Njg3LGUuYTY0PTY5NixlLmE2NT02ODksZS5hNjY9Nzg2LGUuYTY3PTc4NyxlLmE2OD03MTMsZS5hNjk9NzkxLGUuYTcwPTc4NSxlLmE3MT03OTEsZS5hNzI9ODczLGUuYTczPTc2MSxlLmE3ND03NjIsZS5hMjAzPTc2MixlLmE3NT03NTksZS5hMjA0PTc1OSxlLmE3Nj04OTIsZS5hNzc9ODkyLGUuYTc4PTc4OCxlLmE3OT03ODQsZS5hODE9NDM4LGUuYTgyPTEzOCxlLmE4Mz0yNzcsZS5hODQ9NDE1LGUuYTk3PTM5MixlLmE5OD0zOTIsZS5hOTk9NjY4LGUuYTEwMD02NjgsZS5hODk9MzkwLGUuYTkwPTM5MCxlLmE5Mz0zMTcsZS5hOTQ9MzE3LGUuYTkxPTI3NixlLmE5Mj0yNzYsZS5hMjA1PTUwOSxlLmE4NT01MDksZS5hMjA2PTQxMCxlLmE4Nj00MTAsZS5hODc9MjM0LGUuYTg4PTIzNCxlLmE5NT0zMzQsZS5hOTY9MzM0LGUuYTEwMT03MzIsZS5hMTAyPTU0NCxlLmExMDM9NTQ0LGUuYTEwND05MTAsZS5hMTA2PTY2NyxlLmExMDc9NzYwLGUuYTEwOD03NjAsZS5hMTEyPTc3NixlLmExMTE9NTk1LGUuYTExMD02OTQsZS5hMTA5PTYyNixlLmExMjA9Nzg4LGUuYTEyMT03ODgsZS5hMTIyPTc4OCxlLmExMjM9Nzg4LGUuYTEyND03ODgsZS5hMTI1PTc4OCxlLmExMjY9Nzg4LGUuYTEyNz03ODgsZS5hMTI4PTc4OCxlLmExMjk9Nzg4LGUuYTEzMD03ODgsZS5hMTMxPTc4OCxlLmExMzI9Nzg4LGUuYTEzMz03ODgsZS5hMTM0PTc4OCxlLmExMzU9Nzg4LGUuYTEzNj03ODgsZS5hMTM3PTc4OCxlLmExMzg9Nzg4LGUuYTEzOT03ODgsZS5hMTQwPTc4OCxlLmExNDE9Nzg4LGUuYTE0Mj03ODgsZS5hMTQzPTc4OCxlLmExNDQ9Nzg4LGUuYTE0NT03ODgsZS5hMTQ2PTc4OCxlLmExNDc9Nzg4LGUuYTE0OD03ODgsZS5hMTQ5PTc4OCxlLmExNTA9Nzg4LGUuYTE1MT03ODgsZS5hMTUyPTc4OCxlLmExNTM9Nzg4LGUuYTE1ND03ODgsZS5hMTU1PTc4OCxlLmExNTY9Nzg4LGUuYTE1Nz03ODgsZS5hMTU4PTc4OCxlLmExNTk9Nzg4LGUuYTE2MD04OTQsZS5hMTYxPTgzOCxlLmExNjM9MTAxNixlLmExNjQ9NDU4LGUuYTE5Nj03NDgsZS5hMTY1PTkyNCxlLmExOTI9NzQ4LGUuYTE2Nj05MTgsZS5hMTY3PTkyNyxlLmExNjg9OTI4LGUuYTE2OT05MjgsZS5hMTcwPTgzNCxlLmExNzE9ODczLGUuYTE3Mj04MjgsZS5hMTczPTkyNCxlLmExNjI9OTI0LGUuYTE3ND05MTcsZS5hMTc1PTkzMCxlLmExNzY9OTMxLGUuYTE3Nz00NjMsZS5hMTc4PTg4MyxlLmExNzk9ODM2LGUuYTE5Mz04MzYsZS5hMTgwPTg2NyxlLmExOTk9ODY3LGUuYTE4MT02OTYsZS5hMjAwPTY5NixlLmExODI9ODc0LGUuYTIwMT04NzQsZS5hMTgzPTc2MCxlLmExODQ9OTQ2LGUuYTE5Nz03NzEsZS5hMTg1PTg2NSxlLmExOTQ9NzcxLGUuYTE5OD04ODgsZS5hMTg2PTk2NyxlLmExOTU9ODg4LGUuYTE4Nz04MzEsZS5hMTg4PTg3MyxlLmExODk9OTI3LGUuYTE5MD05NzAsZS5hMTkxPTkxOH0pKX0pKTt0LmdldE1ldHJpY3M9YX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5pc1BERkZ1bmN0aW9uPWZ1bmN0aW9uKGUpe3ZhciB0O2lmKCJvYmplY3QiIT09byhlKSlyZXR1cm4hMTtpZigoMCxhLmlzRGljdCkoZSkpdD1lO2Vsc2V7aWYoISgwLGEuaXNTdHJlYW0pKGUpKXJldHVybiExO3Q9ZS5kaWN0fXJldHVybiB0LmhhcygiRnVuY3Rpb25UeXBlIil9LHQuUG9zdFNjcmlwdENvbXBpbGVyPXQuUG9zdFNjcmlwdEV2YWx1YXRvcj10LlBERkZ1bmN0aW9uRmFjdG9yeT12b2lkIDA7dmFyIG49cig2KSxhPXIoMTU1KSxpPXIoMTg2KTtmdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQpe2Zvcih2YXIgcj0wO3I8dC5sZW5ndGg7cisrKXt2YXIgbj10W3JdO24uZW51bWVyYWJsZT1uLmVudW1lcmFibGV8fCExLG4uY29uZmlndXJhYmxlPSEwLCJ2YWx1ZSJpbiBuJiYobi53cml0YWJsZT0hMCksT2JqZWN0LmRlZmluZVByb3BlcnR5KGUsbi5rZXksbil9fXZhciBsPXtnZXQgdmFsdWUoKXtyZXR1cm4oMCxuLnNoYWRvdykodGhpcywidmFsdWUiLCgwLG4uaXNFdmFsU3VwcG9ydGVkKSgpKX19LGM9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe3ZhciByPXQueHJlZixuPXQuaXNFdmFsU3VwcG9ydGVkLGE9dm9pZCAwPT09bnx8bjshZnVuY3Rpb24oZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX0odGhpcyxlKSx0aGlzLnhyZWY9cix0aGlzLmlzRXZhbFN1cHBvcnRlZD0hMSE9PWF9dmFyIHQscixuO3JldHVybiB0PWUsKHI9W3trZXk6ImNyZWF0ZSIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIGYucGFyc2Uoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbjplfSl9fSx7a2V5OiJjcmVhdGVGcm9tQXJyYXkiLHZhbHVlOmZ1bmN0aW9uKGUpe3JldHVybiBmLnBhcnNlQXJyYXkoe3hyZWY6dGhpcy54cmVmLGlzRXZhbFN1cHBvcnRlZDp0aGlzLmlzRXZhbFN1cHBvcnRlZCxmbk9iajplfSl9fV0pJiZzKHQucHJvdG90eXBlLHIpLG4mJnModCxuKSxlfSgpO2Z1bmN0aW9uIHUoZSl7aWYoIUFycmF5LmlzQXJyYXkoZSkpcmV0dXJuIG51bGw7Zm9yKHZhciB0PWUubGVuZ3RoLHI9MDtyPHQ7cisrKWlmKCJudW1iZXIiIT10eXBlb2YgZVtyXSl7Zm9yKHZhciBuPW5ldyBBcnJheSh0KSxhPTA7YTx0O2ErKyluW2FdPStlW2FdO3JldHVybiBufXJldHVybiBlfXQuUERGRnVuY3Rpb25GYWN0b3J5PWM7dmFyIGY9e2dldFNhbXBsZUFycmF5OmZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLGksbz0xO2ZvcihhPTAsaT1lLmxlbmd0aDthPGk7YSsrKW8qPWVbYV07byo9dDt2YXIgcz1uZXcgQXJyYXkobyksbD0wLGM9MCx1PTEvKE1hdGgucG93KDIsciktMSksZj1uLmdldEJ5dGVzKChvKnIrNykvOCksaD0wO2ZvcihhPTA7YTxvO2ErKyl7Zm9yKDtsPHI7KWM8PD04LGN8PWZbaCsrXSxsKz04O2wtPXIsc1thXT0oYz4+bCkqdSxjJj0oMTw8bCktMX1yZXR1cm4gc30sZ2V0SVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsYT1lLmZuLGk9YS5kaWN0O2l8fChpPWEpO3ZhciBvPVt0aGlzLmNvbnN0cnVjdFNhbXBsZWQsbnVsbCx0aGlzLmNvbnN0cnVjdEludGVycG9sYXRlZCx0aGlzLmNvbnN0cnVjdFN0aWNoZWQsdGhpcy5jb25zdHJ1Y3RQb3N0U2NyaXB0XVtpLmdldCgiRnVuY3Rpb25UeXBlIildO2lmKCFvKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIHR5cGUgb2YgZnVuY3Rpb24iKTtyZXR1cm4gby5jYWxsKHRoaXMse3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjphLGRpY3Q6aX0pfSxmcm9tSVI6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsbj1lLklSO3N3aXRjaChuWzBdKXtjYXNlIDA6cmV0dXJuIHRoaXMuY29uc3RydWN0U2FtcGxlZEZyb21JUih7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLElSOm59KTtjYXNlIDI6cmV0dXJuIHRoaXMuY29uc3RydWN0SW50ZXJwb2xhdGVkRnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6bn0pO2Nhc2UgMzpyZXR1cm4gdGhpcy5jb25zdHJ1Y3RTdGljaGVkRnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6bn0pO2RlZmF1bHQ6cmV0dXJuIHRoaXMuY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUih7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLElSOm59KX19LHBhcnNlOmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbixhPXRoaXMuZ2V0SVIoe3hyZWY6dCxpc0V2YWxTdXBwb3J0ZWQ6cixmbjpufSk7cmV0dXJuIHRoaXMuZnJvbUlSKHt4cmVmOnQsaXNFdmFsU3VwcG9ydGVkOnIsSVI6YX0pfSxwYXJzZUFycmF5OmZ1bmN0aW9uKGUpe3ZhciB0PWUueHJlZixyPWUuaXNFdmFsU3VwcG9ydGVkLG49ZS5mbk9iajtpZighQXJyYXkuaXNBcnJheShuKSlyZXR1cm4gdGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOm59KTtmb3IodmFyIGE9W10saT0wLG89bi5sZW5ndGg7aTxvO2krKylhLnB1c2godGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOnQuZmV0Y2hJZlJlZihuW2ldKX0pKTtyZXR1cm4gZnVuY3Rpb24oZSx0LHIsbil7Zm9yKHZhciBpPTAsbz1hLmxlbmd0aDtpPG87aSsrKWFbaV0oZSx0LHIsbitpKX19LGNvbnN0cnVjdFNhbXBsZWQ6ZnVuY3Rpb24oZSl7ZS54cmVmLGUuaXNFdmFsU3VwcG9ydGVkO3ZhciB0PWUuZm4scj1lLmRpY3Q7ZnVuY3Rpb24gYShlKXtmb3IodmFyIHQ9ZS5sZW5ndGgscj1bXSxuPTAsYT0wO2E8dDthKz0yKXJbbl09W2VbYV0sZVthKzFdXSwrK247cmV0dXJuIHJ9dmFyIGk9dShyLmdldEFycmF5KCJEb21haW4iKSksbz11KHIuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFpfHwhbyl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiTm8gZG9tYWluIG9yIHJhbmdlIik7dmFyIHM9aS5sZW5ndGgvMixsPW8ubGVuZ3RoLzI7aT1hKGkpLG89YShvKTt2YXIgYz11KHIuZ2V0QXJyYXkoIlNpemUiKSksZj1yLmdldCgiQml0c1BlclNhbXBsZSIpLGg9ci5nZXQoIk9yZGVyIil8fDE7MSE9PWgmJigwLG4uaW5mbykoIk5vIHN1cHBvcnQgZm9yIGN1YmljIHNwbGluZSBpbnRlcnBvbGF0aW9uOiAiK2gpO3ZhciBkPXUoci5nZXRBcnJheSgiRW5jb2RlIikpO2lmKGQpZD1hKGQpO2Vsc2V7ZD1bXTtmb3IodmFyIHA9MDtwPHM7KytwKWQucHVzaChbMCxjW3BdLTFdKX12YXIgbT11KHIuZ2V0QXJyYXkoIkRlY29kZSIpKTtyZXR1cm5bMCxzLGksZCxtPW0/YShtKTpvLHRoaXMuZ2V0U2FtcGxlQXJyYXkoYyxsLGYsdCksYyxsLE1hdGgucG93KDIsZiktMSxvXX0sY29uc3RydWN0U2FtcGxlZEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5JUjtmdW5jdGlvbiByKGUsdCxyLG4sYSl7cmV0dXJuIG4rKGEtbikvKHItdCkqKGUtdCl9cmV0dXJuIGZ1bmN0aW9uKGUsbixhLGkpe3ZhciBvLHMsbD10WzFdLGM9dFsyXSx1PXRbM10sZj10WzRdLGg9dFs1XSxkPXRbNl0scD10WzddLG09dFs5XSxnPTE8PGwsdj1uZXcgRmxvYXQ2NEFycmF5KGcpLHk9bmV3IFVpbnQzMkFycmF5KGcpO2ZvcihzPTA7czxnO3MrKyl2W3NdPTE7dmFyIGI9cCx3PTE7Zm9yKG89MDtvPGw7KytvKXt2YXIgaz1jW29dWzBdLFM9Y1tvXVsxXSxfPXIoTWF0aC5taW4oTWF0aC5tYXgoZVtuK29dLGspLFMpLGssUyx1W29dWzBdLHVbb11bMV0pLHg9ZFtvXSxBPShfPU1hdGgubWluKE1hdGgubWF4KF8sMCkseC0xKSk8eC0xP01hdGguZmxvb3IoXyk6Xy0xLEM9QSsxLV8sUD1fLUEsRT1BKmIsVD1FK2I7Zm9yKHM9MDtzPGc7cysrKXMmdz8odltzXSo9UCx5W3NdKz1UKToodltzXSo9Qyx5W3NdKz1FKTtiKj14LHc8PD0xfWZvcihzPTA7czxwOysrcyl7dmFyIFI9MDtmb3Iobz0wO288ZztvKyspUis9aFt5W29dK3NdKnZbb107Uj1yKFIsMCwxLGZbc11bMF0sZltzXVsxXSksYVtpK3NdPU1hdGgubWluKE1hdGgubWF4KFIsbVtzXVswXSksbVtzXVsxXSl9fX0sY29uc3RydWN0SW50ZXJwb2xhdGVkOmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZCxlLmZuO2Zvcih2YXIgdD1lLmRpY3Qscj11KHQuZ2V0QXJyYXkoIkMwIikpfHxbMF0sbj11KHQuZ2V0QXJyYXkoIkMxIikpfHxbMV0sYT10LmdldCgiTiIpLGk9ci5sZW5ndGgsbz1bXSxzPTA7czxpOysrcylvLnB1c2gobltzXS1yW3NdKTtyZXR1cm5bMixyLG8sYV19LGNvbnN0cnVjdEludGVycG9sYXRlZEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWYsZS5pc0V2YWxTdXBwb3J0ZWQ7dmFyIHQ9ZS5JUixyPXRbMV0sbj10WzJdLGE9dFszXSxpPW4ubGVuZ3RoO3JldHVybiBmdW5jdGlvbihlLHQsbyxzKXtmb3IodmFyIGw9MT09PWE/ZVt0XTpNYXRoLnBvdyhlW3RdLGEpLGM9MDtjPGk7KytjKW9bcytjXT1yW2NdK2wqbltjXX19LGNvbnN0cnVjdFN0aWNoZWQ6ZnVuY3Rpb24oZSl7dmFyIHQ9ZS54cmVmLHI9ZS5pc0V2YWxTdXBwb3J0ZWQsYT0oZS5mbixlLmRpY3QpLGk9dShhLmdldEFycmF5KCJEb21haW4iKSk7aWYoIWkpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIGRvbWFpbiIpO2lmKDEhPWkubGVuZ3RoLzIpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJhZCBkb21haW4gZm9yIHN0aWNoZWQgZnVuY3Rpb24iKTtmb3IodmFyIG89YS5nZXQoIkZ1bmN0aW9ucyIpLHM9W10sbD0wLGM9by5sZW5ndGg7bDxjOysrbClzLnB1c2godGhpcy5wYXJzZSh7eHJlZjp0LGlzRXZhbFN1cHBvcnRlZDpyLGZuOnQuZmV0Y2hJZlJlZihvW2xdKX0pKTtyZXR1cm5bMyxpLHUoYS5nZXRBcnJheSgiQm91bmRzIikpLHUoYS5nZXRBcnJheSgiRW5jb2RlIikpLHNdfSxjb25zdHJ1Y3RTdGljaGVkRnJvbUlSOmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZDt2YXIgdD1lLklSLHI9dFsxXSxuPXRbMl0sYT10WzNdLGk9dFs0XSxvPW5ldyBGbG9hdDMyQXJyYXkoMSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxzLGwpe2Zvcih2YXIgYz1mdW5jdGlvbihlLHQscil7cmV0dXJuIGU+cj9lPXI6ZTx0JiYoZT10KSxlfShlW3RdLHJbMF0sclsxXSksdT0wLGY9bi5sZW5ndGg7dTxmJiYhKGM8blt1XSk7Kyt1KTt2YXIgaD1yWzBdO3U+MCYmKGg9blt1LTFdKTt2YXIgZD1yWzFdO3U8bi5sZW5ndGgmJihkPW5bdV0pO3ZhciBwPWFbMip1XSxtPWFbMip1KzFdO29bMF09aD09PWQ/cDpwKyhjLWgpKihtLXApLyhkLWgpLGlbdV0obywwLHMsbCl9fSxjb25zdHJ1Y3RQb3N0U2NyaXB0OmZ1bmN0aW9uKGUpe2UueHJlZixlLmlzRXZhbFN1cHBvcnRlZDt2YXIgdD1lLmZuLHI9ZS5kaWN0LGE9dShyLmdldEFycmF5KCJEb21haW4iKSksbz11KHIuZ2V0QXJyYXkoIlJhbmdlIikpO2lmKCFhKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJObyBkb21haW4uIik7aWYoIW8pdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIk5vIHJhbmdlLiIpO3ZhciBzPW5ldyBpLlBvc3RTY3JpcHRMZXhlcih0KTtyZXR1cm5bNCxhLG8sbmV3IGkuUG9zdFNjcmlwdFBhcnNlcihzKS5wYXJzZSgpXX0sY29uc3RydWN0UG9zdFNjcmlwdEZyb21JUjpmdW5jdGlvbihlKXtlLnhyZWY7dmFyIHQ9ZS5pc0V2YWxTdXBwb3J0ZWQscj1lLklSLGE9clsxXSxpPXJbMl0sbz1yWzNdO2lmKHQmJmwudmFsdWUpe3ZhciBzPShuZXcgcCkuY29tcGlsZShvLGEsaSk7aWYocylyZXR1cm4gbmV3IEZ1bmN0aW9uKCJzcmMiLCJzcmNPZmZzZXQiLCJkZXN0IiwiZGVzdE9mZnNldCIscyl9KDAsbi5pbmZvKSgiVW5hYmxlIHRvIGNvbXBpbGUgUFMgZnVuY3Rpb24iKTt2YXIgYz1pLmxlbmd0aD4+MSx1PWEubGVuZ3RoPj4xLGY9bmV3IGQobyksaD1PYmplY3QuY3JlYXRlKG51bGwpLG09ODE5MixnPW5ldyBGbG9hdDMyQXJyYXkodSk7cmV0dXJuIGZ1bmN0aW9uKGUsdCxyLG4pe3ZhciBhLG8scz0iIixsPWc7Zm9yKGE9MDthPHU7YSsrKW89ZVt0K2FdLGxbYV09byxzKz1vKyJfIjt2YXIgZD1oW3NdO2lmKHZvaWQgMD09PWQpe3ZhciBwPW5ldyBGbG9hdDMyQXJyYXkoYyksdj1mLmV4ZWN1dGUobCkseT12Lmxlbmd0aC1jO2ZvcihhPTA7YTxjO2ErKyl7bz12W3krYV07dmFyIGI9aVsyKmFdO288Yj9vPWI6bz4oYj1pWzIqYSsxXSkmJihvPWIpLHBbYV09b31tPjAmJihtLS0saFtzXT1wKSxyLnNldChwLG4pfWVsc2Ugci5zZXQoZCxuKX19fSxoPWZ1bmN0aW9uKCl7ZnVuY3Rpb24gZShlKXt0aGlzLnN0YWNrPWU/QXJyYXkucHJvdG90eXBlLnNsaWNlLmNhbGwoZSwwKTpbXX1yZXR1cm4gZS5wcm90b3R5cGU9e3B1c2g6ZnVuY3Rpb24oZSl7aWYodGhpcy5zdGFjay5sZW5ndGg+PTEwMCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7dGhpcy5zdGFjay5wdXNoKGUpfSxwb3A6ZnVuY3Rpb24oKXtpZih0aGlzLnN0YWNrLmxlbmd0aDw9MCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgdW5kZXJmbG93LiIpO3JldHVybiB0aGlzLnN0YWNrLnBvcCgpfSxjb3B5OmZ1bmN0aW9uKGUpe2lmKHRoaXMuc3RhY2subGVuZ3RoK2U+PTEwMCl0aHJvdyBuZXcgRXJyb3IoIlBvc3RTY3JpcHQgZnVuY3Rpb24gc3RhY2sgb3ZlcmZsb3cuIik7Zm9yKHZhciB0PXRoaXMuc3RhY2sscj10Lmxlbmd0aC1lLG49ZS0xO24+PTA7bi0tLHIrKyl0LnB1c2godFtyXSl9LGluZGV4OmZ1bmN0aW9uKGUpe3RoaXMucHVzaCh0aGlzLnN0YWNrW3RoaXMuc3RhY2subGVuZ3RoLWUtMV0pfSxyb2xsOmZ1bmN0aW9uKGUsdCl7dmFyIHIsbixhLGk9dGhpcy5zdGFjayxvPWkubGVuZ3RoLWUscz1pLmxlbmd0aC0xLGw9bysodC1NYXRoLmZsb29yKHQvZSkqZSk7Zm9yKHI9byxuPXM7cjxuO3IrKyxuLS0pYT1pW3JdLGlbcl09aVtuXSxpW25dPWE7Zm9yKHI9byxuPWwtMTtyPG47cisrLG4tLSlhPWlbcl0saVtyXT1pW25dLGlbbl09YTtmb3Iocj1sLG49cztyPG47cisrLG4tLSlhPWlbcl0saVtyXT1pW25dLGlbbl09YX19LGV9KCksZD1mdW5jdGlvbigpe2Z1bmN0aW9uIGUoZSl7dGhpcy5vcGVyYXRvcnM9ZX1yZXR1cm4gZS5wcm90b3R5cGU9e2V4ZWN1dGU6ZnVuY3Rpb24oZSl7Zm9yKHZhciB0LHIsYSxpPW5ldyBoKGUpLG89MCxzPXRoaXMub3BlcmF0b3JzLGw9cy5sZW5ndGg7bzxsOylpZigibnVtYmVyIiE9dHlwZW9mKHQ9c1tvKytdKSlzd2l0Y2godCl7Y2FzZSJqeiI6YT1pLnBvcCgpLChyPWkucG9wKCkpfHwobz1hKTticmVhaztjYXNlImoiOm89cj1pLnBvcCgpO2JyZWFrO2Nhc2UiYWJzIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYWJzKHIpKTticmVhaztjYXNlImFkZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocithKTticmVhaztjYXNlImFuZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSwoMCxuLmlzQm9vbCkocikmJigwLG4uaXNCb29sKShhKT9pLnB1c2gociYmYSk6aS5wdXNoKHImYSk7YnJlYWs7Y2FzZSJhdGFuIjpyPWkucG9wKCksaS5wdXNoKE1hdGguYXRhbihyKSk7YnJlYWs7Y2FzZSJiaXRzaGlmdCI6YT1pLnBvcCgpLChyPWkucG9wKCkpPjA/aS5wdXNoKHI8PGEpOmkucHVzaChyPj5hKTticmVhaztjYXNlImNlaWxpbmciOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5jZWlsKHIpKTticmVhaztjYXNlImNvcHkiOnI9aS5wb3AoKSxpLmNvcHkocik7YnJlYWs7Y2FzZSJjb3MiOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5jb3MocikpO2JyZWFrO2Nhc2UiY3ZpIjpyPTB8aS5wb3AoKSxpLnB1c2gocik7YnJlYWs7Y2FzZSJjdnIiOmJyZWFrO2Nhc2UiZGl2IjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyL2EpO2JyZWFrO2Nhc2UiZHVwIjppLmNvcHkoMSk7YnJlYWs7Y2FzZSJlcSI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocj09PWEpO2JyZWFrO2Nhc2UiZXhjaCI6aS5yb2xsKDIsMSk7YnJlYWs7Y2FzZSJleHAiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKE1hdGgucG93KHIsYSkpO2JyZWFrO2Nhc2UiZmFsc2UiOmkucHVzaCghMSk7YnJlYWs7Y2FzZSJmbG9vciI6cj1pLnBvcCgpLGkucHVzaChNYXRoLmZsb29yKHIpKTticmVhaztjYXNlImdlIjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPj1hKTticmVhaztjYXNlImd0IjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyPmEpO2JyZWFrO2Nhc2UiaWRpdiI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2goci9hfDApO2JyZWFrO2Nhc2UiaW5kZXgiOnI9aS5wb3AoKSxpLmluZGV4KHIpO2JyZWFrO2Nhc2UibGUiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHI8PWEpO2JyZWFrO2Nhc2UibG4iOnI9aS5wb3AoKSxpLnB1c2goTWF0aC5sb2cocikpO2JyZWFrO2Nhc2UibG9nIjpyPWkucG9wKCksaS5wdXNoKE1hdGgubG9nKHIpL01hdGguTE4xMCk7YnJlYWs7Y2FzZSJsdCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gocjxhKTticmVhaztjYXNlIm1vZCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociVhKTticmVhaztjYXNlIm11bCI6YT1pLnBvcCgpLHI9aS5wb3AoKSxpLnB1c2gociphKTticmVhaztjYXNlIm5lIjphPWkucG9wKCkscj1pLnBvcCgpLGkucHVzaChyIT09YSk7YnJlYWs7Y2FzZSJuZWciOnI9aS5wb3AoKSxpLnB1c2goLXIpO2JyZWFrO2Nhc2Uibm90IjpyPWkucG9wKCksKDAsbi5pc0Jvb2wpKHIpP2kucHVzaCghcik6aS5wdXNoKH5yKTticmVhaztjYXNlIm9yIjphPWkucG9wKCkscj1pLnBvcCgpLCgwLG4uaXNCb29sKShyKSYmKDAsbi5pc0Jvb2wpKGEpP2kucHVzaChyfHxhKTppLnB1c2gocnxhKTticmVhaztjYXNlInBvcCI6aS5wb3AoKTticmVhaztjYXNlInJvbGwiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5yb2xsKHIsYSk7YnJlYWs7Y2FzZSJyb3VuZCI6cj1pLnBvcCgpLGkucHVzaChNYXRoLnJvdW5kKHIpKTticmVhaztjYXNlInNpbiI6cj1pLnBvcCgpLGkucHVzaChNYXRoLnNpbihyKSk7YnJlYWs7Y2FzZSJzcXJ0IjpyPWkucG9wKCksaS5wdXNoKE1hdGguc3FydChyKSk7YnJlYWs7Y2FzZSJzdWIiOmE9aS5wb3AoKSxyPWkucG9wKCksaS5wdXNoKHItYSk7YnJlYWs7Y2FzZSJ0cnVlIjppLnB1c2goITApO2JyZWFrO2Nhc2UidHJ1bmNhdGUiOnI9KHI9aS5wb3AoKSk8MD9NYXRoLmNlaWwocik6TWF0aC5mbG9vcihyKSxpLnB1c2gocik7YnJlYWs7Y2FzZSJ4b3IiOmE9aS5wb3AoKSxyPWkucG9wKCksKDAsbi5pc0Jvb2wpKHIpJiYoMCxuLmlzQm9vbCkoYSk/aS5wdXNoKHIhPT1hKTppLnB1c2gocl5hKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIG9wZXJhdG9yICIuY29uY2F0KHQpKX1lbHNlIGkucHVzaCh0KTtyZXR1cm4gaS5zdGFja319LGV9KCk7dC5Qb3N0U2NyaXB0RXZhbHVhdG9yPWQ7dmFyIHA9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUpe3RoaXMudHlwZT1lfWZ1bmN0aW9uIHQodCxyLG4pe2UuY2FsbCh0aGlzLCJhcmdzIiksdGhpcy5pbmRleD10LHRoaXMubWluPXIsdGhpcy5tYXg9bn1mdW5jdGlvbiByKHQpe2UuY2FsbCh0aGlzLCJsaXRlcmFsIiksdGhpcy5udW1iZXI9dCx0aGlzLm1pbj10LHRoaXMubWF4PXR9ZnVuY3Rpb24gYSh0LHIsbixhLGkpe2UuY2FsbCh0aGlzLCJiaW5hcnkiKSx0aGlzLm9wPXQsdGhpcy5hcmcxPXIsdGhpcy5hcmcyPW4sdGhpcy5taW49YSx0aGlzLm1heD1pfWZ1bmN0aW9uIGkodCxyKXtlLmNhbGwodGhpcywibWF4IiksdGhpcy5hcmc9dCx0aGlzLm1pbj10Lm1pbix0aGlzLm1heD1yfWZ1bmN0aW9uIG8odCxyLG4pe2UuY2FsbCh0aGlzLCJ2YXIiKSx0aGlzLmluZGV4PXQsdGhpcy5taW49cix0aGlzLm1heD1ufWZ1bmN0aW9uIHModCxyKXtlLmNhbGwodGhpcywiZGVmaW5pdGlvbiIpLHRoaXMudmFyaWFibGU9dCx0aGlzLmFyZz1yfWZ1bmN0aW9uIGwoKXt0aGlzLnBhcnRzPVtdfWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4ibGl0ZXJhbCI9PT10LnR5cGUmJjA9PT10Lm51bWJlcj9lOiJsaXRlcmFsIj09PWUudHlwZSYmMD09PWUubnVtYmVyP3Q6ImxpdGVyYWwiPT09dC50eXBlJiYibGl0ZXJhbCI9PT1lLnR5cGU/bmV3IHIoZS5udW1iZXIrdC5udW1iZXIpOm5ldyBhKCIrIixlLHQsZS5taW4rdC5taW4sZS5tYXgrdC5tYXgpfWZ1bmN0aW9uIHUoZSx0KXtpZigibGl0ZXJhbCI9PT10LnR5cGUpe2lmKDA9PT10Lm51bWJlcilyZXR1cm4gbmV3IHIoMCk7aWYoMT09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IHIoZS5udW1iZXIqdC5udW1iZXIpfWlmKCJsaXRlcmFsIj09PWUudHlwZSl7aWYoMD09PWUubnVtYmVyKXJldHVybiBuZXcgcigwKTtpZigxPT09ZS5udW1iZXIpcmV0dXJuIHR9cmV0dXJuIG5ldyBhKCIqIixlLHQsTWF0aC5taW4oZS5taW4qdC5taW4sZS5taW4qdC5tYXgsZS5tYXgqdC5taW4sZS5tYXgqdC5tYXgpLE1hdGgubWF4KGUubWluKnQubWluLGUubWluKnQubWF4LGUubWF4KnQubWluLGUubWF4KnQubWF4KSl9ZnVuY3Rpb24gZihlLHQpe2lmKCJsaXRlcmFsIj09PXQudHlwZSl7aWYoMD09PXQubnVtYmVyKXJldHVybiBlO2lmKCJsaXRlcmFsIj09PWUudHlwZSlyZXR1cm4gbmV3IHIoZS5udW1iZXItdC5udW1iZXIpfXJldHVybiJiaW5hcnkiPT09dC50eXBlJiYiLSI9PT10Lm9wJiYibGl0ZXJhbCI9PT1lLnR5cGUmJjE9PT1lLm51bWJlciYmImxpdGVyYWwiPT09dC5hcmcxLnR5cGUmJjE9PT10LmFyZzEubnVtYmVyP3QuYXJnMjpuZXcgYSgiLSIsZSx0LGUubWluLXQubWF4LGUubWF4LXQubWluKX1mdW5jdGlvbiBoKGUsdCl7cmV0dXJuIGUubWluPj10P25ldyByKHQpOmUubWF4PD10P2U6bmV3IGkoZSx0KX1mdW5jdGlvbiBkKCl7fXJldHVybiBlLnByb3RvdHlwZS52aXNpdD1mdW5jdGlvbihlKXsoMCxuLnVucmVhY2hhYmxlKSgiYWJzdHJhY3QgbWV0aG9kIil9LHQucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLHQucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRBcmd1bWVudCh0aGlzKX0sci5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSksci5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7ZS52aXNpdExpdGVyYWwodGhpcyl9LGEucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLGEucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRCaW5hcnlPcGVyYXRpb24odGhpcyl9LGkucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLGkucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRNaW4odGhpcyl9LG8ucHJvdG90eXBlPU9iamVjdC5jcmVhdGUoZS5wcm90b3R5cGUpLG8ucHJvdG90eXBlLnZpc2l0PWZ1bmN0aW9uKGUpe2UudmlzaXRWYXJpYWJsZSh0aGlzKX0scy5wcm90b3R5cGU9T2JqZWN0LmNyZWF0ZShlLnByb3RvdHlwZSkscy5wcm90b3R5cGUudmlzaXQ9ZnVuY3Rpb24oZSl7ZS52aXNpdFZhcmlhYmxlRGVmaW5pdGlvbih0aGlzKX0sbC5wcm90b3R5cGU9e3Zpc2l0QXJndW1lbnQ6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1heCgiLGUubWluLCIsIE1hdGgubWluKCIsZS5tYXgsIiwgc3JjW3NyY09mZnNldCArICIsZS5pbmRleCwiXSkpIil9LHZpc2l0VmFyaWFibGU6ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJ2IixlLmluZGV4KX0sdmlzaXRMaXRlcmFsOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaChlLm51bWJlcil9LHZpc2l0QmluYXJ5T3BlcmF0aW9uOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgiKCIpLGUuYXJnMS52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiAiLGUub3AsIiAiKSxlLmFyZzIudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIpIil9LHZpc2l0VmFyaWFibGVEZWZpbml0aW9uOmZ1bmN0aW9uKGUpe3RoaXMucGFydHMucHVzaCgidmFyICIpLGUudmFyaWFibGUudmlzaXQodGhpcyksdGhpcy5wYXJ0cy5wdXNoKCIgPSAiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIjsiKX0sdmlzaXRNaW46ZnVuY3Rpb24oZSl7dGhpcy5wYXJ0cy5wdXNoKCJNYXRoLm1pbigiKSxlLmFyZy52aXNpdCh0aGlzKSx0aGlzLnBhcnRzLnB1c2goIiwgIixlLm1heCwiKSIpfSx0b1N0cmluZzpmdW5jdGlvbigpe3JldHVybiB0aGlzLnBhcnRzLmpvaW4oIiIpfX0sZC5wcm90b3R5cGU9e2NvbXBpbGU6ZnVuY3Rpb24oZSxuLGEpe3ZhciBpLGQscCxtLGcsdix5LGIsdyxrLFM9W10sXz1bXSx4PW4ubGVuZ3RoPj4xLEE9YS5sZW5ndGg+PjEsQz0wO2ZvcihpPTA7aTx4O2krKylTLnB1c2gobmV3IHQoaSxuWzIqaV0sblsyKmkrMV0pKTtmb3IoaT0wLGQ9ZS5sZW5ndGg7aTxkO2krKylpZigibnVtYmVyIiE9dHlwZW9mKGs9ZVtpXSkpc3dpdGNoKGspe2Nhc2UiYWRkIjppZihTLmxlbmd0aDwyKXJldHVybiBudWxsO3Y9Uy5wb3AoKSxnPVMucG9wKCksUy5wdXNoKGMoZyx2KSk7YnJlYWs7Y2FzZSJjdnIiOmlmKFMubGVuZ3RoPDEpcmV0dXJuIG51bGw7YnJlYWs7Y2FzZSJtdWwiOmlmKFMubGVuZ3RoPDIpcmV0dXJuIG51bGw7dj1TLnBvcCgpLGc9Uy5wb3AoKSxTLnB1c2godShnLHYpKTticmVhaztjYXNlInN1YiI6aWYoUy5sZW5ndGg8MilyZXR1cm4gbnVsbDt2PVMucG9wKCksZz1TLnBvcCgpLFMucHVzaChmKGcsdikpO2JyZWFrO2Nhc2UiZXhjaCI6aWYoUy5sZW5ndGg8MilyZXR1cm4gbnVsbDt5PVMucG9wKCksYj1TLnBvcCgpLFMucHVzaCh5LGIpO2JyZWFrO2Nhc2UicG9wIjppZihTLmxlbmd0aDwxKXJldHVybiBudWxsO1MucG9wKCk7YnJlYWs7Y2FzZSJpbmRleCI6aWYoUy5sZW5ndGg8MSlyZXR1cm4gbnVsbDtpZigibGl0ZXJhbCIhPT0oZz1TLnBvcCgpKS50eXBlKXJldHVybiBudWxsO2lmKChwPWcubnVtYmVyKTwwfHwhTnVtYmVyLmlzSW50ZWdlcihwKXx8Uy5sZW5ndGg8cClyZXR1cm4gbnVsbDtpZigibGl0ZXJhbCI9PT0oeT1TW1MubGVuZ3RoLXAtMV0pLnR5cGV8fCJ2YXIiPT09eS50eXBlKXtTLnB1c2goeSk7YnJlYWt9dz1uZXcgbyhDKysseS5taW4seS5tYXgpLFNbUy5sZW5ndGgtcC0xXT13LFMucHVzaCh3KSxfLnB1c2gobmV3IHModyx5KSk7YnJlYWs7Y2FzZSJkdXAiOmlmKFMubGVuZ3RoPDEpcmV0dXJuIG51bGw7aWYoIm51bWJlciI9PXR5cGVvZiBlW2krMV0mJiJndCI9PT1lW2krMl0mJmVbaSszXT09PWkrNyYmImp6Ij09PWVbaSs0XSYmInBvcCI9PT1lW2krNV0mJmVbaSs2XT09PWVbaSsxXSl7Zz1TLnBvcCgpLFMucHVzaChoKGcsZVtpKzFdKSksaSs9NjticmVha31pZigibGl0ZXJhbCI9PT0oeT1TW1MubGVuZ3RoLTFdKS50eXBlfHwidmFyIj09PXkudHlwZSl7Uy5wdXNoKHkpO2JyZWFrfXc9bmV3IG8oQysrLHkubWluLHkubWF4KSxTW1MubGVuZ3RoLTFdPXcsUy5wdXNoKHcpLF8ucHVzaChuZXcgcyh3LHkpKTticmVhaztjYXNlInJvbGwiOmlmKFMubGVuZ3RoPDIpcmV0dXJuIG51bGw7aWYodj1TLnBvcCgpLGc9Uy5wb3AoKSwibGl0ZXJhbCIhPT12LnR5cGV8fCJsaXRlcmFsIiE9PWcudHlwZSlyZXR1cm4gbnVsbDtpZihtPXYubnVtYmVyLChwPWcubnVtYmVyKTw9MHx8IU51bWJlci5pc0ludGVnZXIocCl8fCFOdW1iZXIuaXNJbnRlZ2VyKG0pfHxTLmxlbmd0aDxwKXJldHVybiBudWxsO2lmKDA9PShtPShtJXArcCklcCkpYnJlYWs7QXJyYXkucHJvdG90eXBlLnB1c2guYXBwbHkoUyxTLnNwbGljZShTLmxlbmd0aC1wLHAtbSkpO2JyZWFrO2RlZmF1bHQ6cmV0dXJuIG51bGx9ZWxzZSBTLnB1c2gobmV3IHIoaykpO2lmKFMubGVuZ3RoIT09QSlyZXR1cm4gbnVsbDt2YXIgUD1bXTtyZXR1cm4gXy5mb3JFYWNoKChmdW5jdGlvbihlKXt2YXIgdD1uZXcgbDtlLnZpc2l0KHQpLFAucHVzaCh0LnRvU3RyaW5nKCkpfSkpLFMuZm9yRWFjaCgoZnVuY3Rpb24oZSx0KXt2YXIgcj1uZXcgbDtlLnZpc2l0KHIpO3ZhciBuPWFbMip0XSxpPWFbMip0KzFdLG89W3IudG9TdHJpbmcoKV07bj5lLm1pbiYmKG8udW5zaGlmdCgiTWF0aC5tYXgoIixuLCIsICIpLG8ucHVzaCgiKSIpKSxpPGUubWF4JiYoby51bnNoaWZ0KCJNYXRoLm1pbigiLGksIiwgIiksby5wdXNoKCIpIikpLG8udW5zaGlmdCgiZGVzdFtkZXN0T2Zmc2V0ICsgIix0LCJdID0gIiksby5wdXNoKCI7IiksUC5wdXNoKG8uam9pbigiIikpfSkpLFAuam9pbigiXG4iKX19LGR9KCk7dC5Qb3N0U2NyaXB0Q29tcGlsZXI9cH0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5Qb3N0U2NyaXB0UGFyc2VyPXQuUG9zdFNjcmlwdExleGVyPXZvaWQgMDt2YXIgbj1yKDYpLGE9cigxNTUpO2Z1bmN0aW9uIGkoZSx0KXtpZighKGUgaW5zdGFuY2VvZiB0KSl0aHJvdyBuZXcgVHlwZUVycm9yKCJDYW5ub3QgY2FsbCBhIGNsYXNzIGFzIGEgZnVuY3Rpb24iKX1mdW5jdGlvbiBvKGUsdCl7Zm9yKHZhciByPTA7cjx0Lmxlbmd0aDtyKyspe3ZhciBuPXRbcl07bi5lbnVtZXJhYmxlPW4uZW51bWVyYWJsZXx8ITEsbi5jb25maWd1cmFibGU9ITAsInZhbHVlImluIG4mJihuLndyaXRhYmxlPSEwKSxPYmplY3QuZGVmaW5lUHJvcGVydHkoZSxuLmtleSxuKX19ZnVuY3Rpb24gcyhlLHQscil7cmV0dXJuIHQmJm8oZS5wcm90b3R5cGUsdCksciYmbyhlLHIpLGV9dmFyIGw9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSx0aGlzLmxleGVyPXQsdGhpcy5vcGVyYXRvcnM9W10sdGhpcy50b2tlbj1udWxsLHRoaXMucHJldj1udWxsfXJldHVybiBzKGUsW3trZXk6Im5leHRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXt0aGlzLnByZXY9dGhpcy50b2tlbix0aGlzLnRva2VuPXRoaXMubGV4ZXIuZ2V0VG9rZW4oKX19LHtrZXk6ImFjY2VwdCIsdmFsdWU6ZnVuY3Rpb24oZSl7cmV0dXJuIHRoaXMudG9rZW4udHlwZT09PWUmJih0aGlzLm5leHRUb2tlbigpLCEwKX19LHtrZXk6ImV4cGVjdCIsdmFsdWU6ZnVuY3Rpb24oZSl7aWYodGhpcy5hY2NlcHQoZSkpcmV0dXJuITA7dGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlVuZXhwZWN0ZWQgc3ltYm9sOiBmb3VuZCAiLmNvbmNhdCh0aGlzLnRva2VuLnR5cGUsIiBleHBlY3RlZCAiKS5jb25jYXQoZSwiLiIpKX19LHtrZXk6InBhcnNlIix2YWx1ZTpmdW5jdGlvbigpe3JldHVybiB0aGlzLm5leHRUb2tlbigpLHRoaXMuZXhwZWN0KHUuTEJSQUNFKSx0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdCh1LlJCUkFDRSksdGhpcy5vcGVyYXRvcnN9fSx7a2V5OiJwYXJzZUJsb2NrIix2YWx1ZTpmdW5jdGlvbigpe2Zvcig7OylpZih0aGlzLmFjY2VwdCh1Lk5VTUJFUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2UgaWYodGhpcy5hY2NlcHQodS5PUEVSQVRPUikpdGhpcy5vcGVyYXRvcnMucHVzaCh0aGlzLnByZXYudmFsdWUpO2Vsc2V7aWYoIXRoaXMuYWNjZXB0KHUuTEJSQUNFKSlyZXR1cm47dGhpcy5wYXJzZUNvbmRpdGlvbigpfX19LHtrZXk6InBhcnNlQ29uZGl0aW9uIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMub3BlcmF0b3JzLmxlbmd0aDtpZih0aGlzLm9wZXJhdG9ycy5wdXNoKG51bGwsbnVsbCksdGhpcy5wYXJzZUJsb2NrKCksdGhpcy5leHBlY3QodS5SQlJBQ0UpLHRoaXMuYWNjZXB0KHUuSUYpKXRoaXMub3BlcmF0b3JzW2VdPXRoaXMub3BlcmF0b3JzLmxlbmd0aCx0aGlzLm9wZXJhdG9yc1tlKzFdPSJqeiI7ZWxzZXtpZighdGhpcy5hY2NlcHQodS5MQlJBQ0UpKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJQUyBGdW5jdGlvbjogZXJyb3IgcGFyc2luZyBjb25kaXRpb25hbC4iKTt2YXIgdD10aGlzLm9wZXJhdG9ycy5sZW5ndGg7dGhpcy5vcGVyYXRvcnMucHVzaChudWxsLG51bGwpO3ZhciByPXRoaXMub3BlcmF0b3JzLmxlbmd0aDt0aGlzLnBhcnNlQmxvY2soKSx0aGlzLmV4cGVjdCh1LlJCUkFDRSksdGhpcy5leHBlY3QodS5JRkVMU0UpLHRoaXMub3BlcmF0b3JzW3RdPXRoaXMub3BlcmF0b3JzLmxlbmd0aCx0aGlzLm9wZXJhdG9yc1t0KzFdPSJqIix0aGlzLm9wZXJhdG9yc1tlXT1yLHRoaXMub3BlcmF0b3JzW2UrMV09Imp6In19fV0pLGV9KCk7dC5Qb3N0U2NyaXB0UGFyc2VyPWw7dmFyIGMsdT17TEJSQUNFOjAsUkJSQUNFOjEsTlVNQkVSOjIsT1BFUkFUT1I6MyxJRjo0LElGRUxTRTo1fSxmPShjPU9iamVjdC5jcmVhdGUobnVsbCksZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQscil7aSh0aGlzLGUpLHRoaXMudHlwZT10LHRoaXMudmFsdWU9cn1yZXR1cm4gcyhlLG51bGwsW3trZXk6ImdldE9wZXJhdG9yIix2YWx1ZTpmdW5jdGlvbih0KXt2YXIgcj1jW3RdO3JldHVybiByfHwoY1t0XT1uZXcgZSh1Lk9QRVJBVE9SLHQpKX19LHtrZXk6IkxCUkFDRSIsZ2V0OmZ1bmN0aW9uKCl7cmV0dXJuKDAsbi5zaGFkb3cpKHRoaXMsIkxCUkFDRSIsbmV3IGUodS5MQlJBQ0UsInsiKSl9fSx7a2V5OiJSQlJBQ0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJSQlJBQ0UiLG5ldyBlKHUuUkJSQUNFLCJ9IikpfX0se2tleToiSUYiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRiIsbmV3IGUodS5JRiwiSUYiKSl9fSx7a2V5OiJJRkVMU0UiLGdldDpmdW5jdGlvbigpe3JldHVybigwLG4uc2hhZG93KSh0aGlzLCJJRkVMU0UiLG5ldyBlKHUuSUZFTFNFLCJJRkVMU0UiKSl9fV0pLGV9KCkpLGg9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKHQpe2kodGhpcyxlKSx0aGlzLnN0cmVhbT10LHRoaXMubmV4dENoYXIoKSx0aGlzLnN0ckJ1Zj1bXX1yZXR1cm4gcyhlLFt7a2V5OiJuZXh0Q2hhciIsdmFsdWU6ZnVuY3Rpb24oKXtyZXR1cm4gdGhpcy5jdXJyZW50Q2hhcj10aGlzLnN0cmVhbS5nZXRCeXRlKCl9fSx7a2V5OiJnZXRUb2tlbiIsdmFsdWU6ZnVuY3Rpb24oKXtmb3IodmFyIGU9ITEsdD10aGlzLmN1cnJlbnRDaGFyOzspe2lmKHQ8MClyZXR1cm4gYS5FT0Y7aWYoZSkxMCE9PXQmJjEzIT09dHx8KGU9ITEpO2Vsc2UgaWYoMzc9PT10KWU9ITA7ZWxzZSBpZighKDAsbi5pc1NwYWNlKSh0KSlicmVhazt0PXRoaXMubmV4dENoYXIoKX1zd2l0Y2goMHx0KXtjYXNlIDQ4OmNhc2UgNDk6Y2FzZSA1MDpjYXNlIDUxOmNhc2UgNTI6Y2FzZSA1MzpjYXNlIDU0OmNhc2UgNTU6Y2FzZSA1NjpjYXNlIDU3OmNhc2UgNDM6Y2FzZSA0NTpjYXNlIDQ2OnJldHVybiBuZXcgZih1Lk5VTUJFUix0aGlzLmdldE51bWJlcigpKTtjYXNlIDEyMzpyZXR1cm4gdGhpcy5uZXh0Q2hhcigpLGYuTEJSQUNFO2Nhc2UgMTI1OnJldHVybiB0aGlzLm5leHRDaGFyKCksZi5SQlJBQ0V9dmFyIHI9dGhpcy5zdHJCdWY7Zm9yKHIubGVuZ3RoPTAsclswXT1TdHJpbmcuZnJvbUNoYXJDb2RlKHQpOyh0PXRoaXMubmV4dENoYXIoKSk+PTAmJih0Pj02NSYmdDw9OTB8fHQ+PTk3JiZ0PD0xMjIpOylyLnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZSh0KSk7dmFyIGk9ci5qb2luKCIiKTtzd2l0Y2goaS50b0xvd2VyQ2FzZSgpKXtjYXNlImlmIjpyZXR1cm4gZi5JRjtjYXNlImlmZWxzZSI6cmV0dXJuIGYuSUZFTFNFO2RlZmF1bHQ6cmV0dXJuIGYuZ2V0T3BlcmF0b3IoaSl9fX0se2tleToiZ2V0TnVtYmVyIix2YWx1ZTpmdW5jdGlvbigpe3ZhciBlPXRoaXMuY3VycmVudENoYXIsdD10aGlzLnN0ckJ1Zjtmb3IodC5sZW5ndGg9MCx0WzBdPVN0cmluZy5mcm9tQ2hhckNvZGUoZSk7KGU9dGhpcy5uZXh0Q2hhcigpKT49MCYmKGU+PTQ4JiZlPD01N3x8NDU9PT1lfHw0Nj09PWUpOyl0LnB1c2goU3RyaW5nLmZyb21DaGFyQ29kZShlKSk7dmFyIHI9cGFyc2VGbG9hdCh0LmpvaW4oIiIpKTtpZihpc05hTihyKSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBmbG9hdGluZyBwb2ludCBudW1iZXI6ICIuY29uY2F0KHIpKTtyZXR1cm4gcn19XSksZX0oKTt0LlBvc3RTY3JpcHRMZXhlcj1ofSxmdW5jdGlvbihlLHQscil7InVzZSBzdHJpY3QiO09iamVjdC5kZWZpbmVQcm9wZXJ0eSh0LCJfX2VzTW9kdWxlIix7dmFsdWU6ITB9KSx0Lk11cm11ckhhc2gzXzY0PXZvaWQgMDt2YXIgbj1yKDYpLGE9ZnVuY3Rpb24oZSl7ZnVuY3Rpb24gdChlKXt0aGlzLmgxPWU/NDI5NDk2NzI5NSZlOjMyODUzNzc1MjAsdGhpcy5oMj1lPzQyOTQ5NjcyOTUmZTozMjg1Mzc3NTIwfXJldHVybiB0LnByb3RvdHlwZT17dXBkYXRlOmZ1bmN0aW9uKGUpe3ZhciB0LHI7aWYoKDAsbi5pc1N0cmluZykoZSkpe3Q9bmV3IFVpbnQ4QXJyYXkoMiplLmxlbmd0aCkscj0wO2Zvcih2YXIgYT0wLGk9ZS5sZW5ndGg7YTxpO2ErKyl7dmFyIG89ZS5jaGFyQ29kZUF0KGEpO288PTI1NT90W3IrK109bzoodFtyKytdPW8+Pj44LHRbcisrXT0yNTUmbyl9fWVsc2V7aWYoISgwLG4uaXNBcnJheUJ1ZmZlcikoZSkpdGhyb3cgbmV3IEVycm9yKCJXcm9uZyBkYXRhIGZvcm1hdCBpbiBNdXJtdXJIYXNoM182NF91cGRhdGUuIElucHV0IG11c3QgYmUgYSBzdHJpbmcgb3IgYXJyYXkuIik7cj0odD1lKS5ieXRlTGVuZ3RofWZvcih2YXIgcz1yPj4yLGw9ci00KnMsYz1uZXcgVWludDMyQXJyYXkodC5idWZmZXIsMCxzKSx1PTAsZj0wLGg9dGhpcy5oMSxkPXRoaXMuaDIscD0zNDMyOTE4MzUzLG09NDYxODQ1OTA3LGc9MDtnPHM7ZysrKTEmZz9oPTUqKGg9KGhePXU9KHU9KHU9KHU9Y1tnXSkqcCY0Mjk0OTAxNzYwfDExNjAxKnUmNjU1MzUpPDwxNXx1Pj4+MTcpKm0mNDI5NDkwMTc2MHwxMzcxNSp1JjY1NTM1KTw8MTN8aD4+PjE5KSszODY0MjkyMTk2OmQ9NSooZD0oZF49Zj0oZj0oZj0oZj1jW2ddKSpwJjQyOTQ5MDE3NjB8MTE2MDEqZiY2NTUzNSk8PDE1fGY+Pj4xNykqbSY0Mjk0OTAxNzYwfDEzNzE1KmYmNjU1MzUpPDwxM3xkPj4+MTkpKzM4NjQyOTIxOTY7c3dpdGNoKHU9MCxsKXtjYXNlIDM6dV49dFs0KnMrMl08PDE2O2Nhc2UgMjp1Xj10WzQqcysxXTw8ODtjYXNlIDE6dT0odT0odT0odV49dFs0KnNdKSpwJjQyOTQ5MDE3NjB8MTE2MDEqdSY2NTUzNSk8PDE1fHU+Pj4xNykqbSY0Mjk0OTAxNzYwfDEzNzE1KnUmNjU1MzUsMSZzP2hePXU6ZF49dX1yZXR1cm4gdGhpcy5oMT1oLHRoaXMuaDI9ZCx0aGlzfSxoZXhkaWdlc3Q6ZnVuY3Rpb24oKXt2YXIgZT10aGlzLmgxLHQ9dGhpcy5oMjtlPTM5ODE4MDY3OTcqKGVePXQ+Pj4xKSY0Mjk0OTAxNzYwfDM2MDQ1KmUmNjU1MzUsZT00NDQ5ODQ0MDMqKGVePSh0PTQyODM1NDM1MTEqdCY0Mjk0OTAxNzYwfCgyOTUwMTYzNzk3Kih0PDwxNnxlPj4+MTYpJjQyOTQ5MDE3NjApPj4+MTYpPj4+MSkmNDI5NDkwMTc2MHw2MDQ5OSplJjY1NTM1O2Zvcih2YXIgcj0wLG49W2VePSh0PTMzMDE4ODIzNjYqdCY0Mjk0OTAxNzYwfCgzMTIwNDM3ODkzKih0PDwxNnxlPj4+MTYpJjQyOTQ5MDE3NjApPj4+MTYpPj4+MSx0XSxhPSIiO3I8bi5sZW5ndGg7cisrKXtmb3IodmFyIGk9KG5bcl0+Pj4wKS50b1N0cmluZygxNik7aS5sZW5ndGg8ODspaT0iMCIraTthKz1pfXJldHVybiBhfX0sdH0oKTt0Lk11cm11ckhhc2gzXzY0PWF9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7T2JqZWN0LmRlZmluZVByb3BlcnR5KHQsIl9fZXNNb2R1bGUiLHt2YWx1ZTohMH0pLHQuUERGSW1hZ2U9dm9pZCAwO3ZhciBuPXIoNiksYT1yKDE1NSksaT1yKDE2OCksbz1yKDE1Nykscz1yKDE2MyksbD1yKDE2Nik7ZnVuY3Rpb24gYyhlLHQpe3JldHVybiBmdW5jdGlvbihlKXtpZihBcnJheS5pc0FycmF5KGUpKXJldHVybiBlfShlKXx8ZnVuY3Rpb24oZSx0KXt2YXIgcj1bXSxuPSEwLGE9ITEsaT12b2lkIDA7dHJ5e2Zvcih2YXIgbyxzPWVbU3ltYm9sLml0ZXJhdG9yXSgpOyEobj0obz1zLm5leHQoKSkuZG9uZSkmJihyLnB1c2goby52YWx1ZSksIXR8fHIubGVuZ3RoIT09dCk7bj0hMCk7fWNhdGNoKGUpe2E9ITAsaT1lfWZpbmFsbHl7dHJ5e258fG51bGw9PXMucmV0dXJufHxzLnJldHVybigpfWZpbmFsbHl7aWYoYSl0aHJvdyBpfX1yZXR1cm4gcn0oZSx0KXx8ZnVuY3Rpb24oKXt0aHJvdyBuZXcgVHlwZUVycm9yKCJJbnZhbGlkIGF0dGVtcHQgdG8gZGVzdHJ1Y3R1cmUgbm9uLWl0ZXJhYmxlIGluc3RhbmNlIil9KCl9dmFyIHU9ZnVuY3Rpb24oKXtmdW5jdGlvbiBlKGUsdCl7cmV0dXJuIHQmJnQuY2FuRGVjb2RlKGUpP3QuZGVjb2RlKGUpLmNhdGNoKChmdW5jdGlvbih0KXtyZXR1cm4oMCxuLndhcm4pKCJOYXRpdmUgaW1hZ2UgZGVjb2RpbmcgZmFpbGVkIC0tIHRyeWluZyB0byByZWNvdmVyOiAiKyh0JiZ0Lm1lc3NhZ2UpKSxlfSkpOlByb21pc2UucmVzb2x2ZShlKX1mdW5jdGlvbiB0KGUsdCxyLG4pe3JldHVybihlPXQrZSpyKTwwPzA6ZT5uP246ZX1mdW5jdGlvbiByKGUsdCxyLG4sYSxpKXt2YXIgbyxzLGwsYyx1PWEqaSxmPXQ8PTg/bmV3IFVpbnQ4QXJyYXkodSk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHUpOm5ldyBVaW50MzJBcnJheSh1KSxoPXIvYSxkPW4vaSxwPTAsbT1uZXcgVWludDE2QXJyYXkoYSksZz1yO2ZvcihvPTA7bzxhO28rKyltW29dPU1hdGguZmxvb3IobypoKTtmb3Iobz0wO288aTtvKyspZm9yKGw9TWF0aC5mbG9vcihvKmQpKmcscz0wO3M8YTtzKyspYz1sK21bc10sZltwKytdPWVbY107cmV0dXJuIGZ9ZnVuY3Rpb24gdShlKXt2YXIgdD1lLnhyZWYscj1lLnJlcyxvPWUuaW1hZ2Uscz1lLmlzSW5saW5lLGM9dm9pZCAwIT09cyYmcyxmPWUuc21hc2ssaD12b2lkIDA9PT1mP251bGw6ZixkPWUubWFzayxwPXZvaWQgMD09PWQ/bnVsbDpkLG09ZS5pc01hc2ssZz12b2lkIDAhPT1tJiZtLHY9ZS5wZGZGdW5jdGlvbkZhY3Rvcnk7dGhpcy5pbWFnZT1vO3ZhciB5PW8uZGljdCxiPXkuZ2V0KCJGaWx0ZXIiKTtpZigoMCxhLmlzTmFtZSkoYikpc3dpdGNoKGIubmFtZSl7Y2FzZSJKUFhEZWNvZGUiOnZhciB3PW5ldyBsLkpweEltYWdlO3cucGFyc2VJbWFnZVByb3BlcnRpZXMoby5zdHJlYW0pLG8uc3RyZWFtLnJlc2V0KCksby53aWR0aD13LndpZHRoLG8uaGVpZ2h0PXcuaGVpZ2h0LG8uYml0c1BlckNvbXBvbmVudD13LmJpdHNQZXJDb21wb25lbnQsby5udW1Db21wcz13LmNvbXBvbmVudHNDb3VudDticmVhaztjYXNlIkpCSUcyRGVjb2RlIjpvLmJpdHNQZXJDb21wb25lbnQ9MSxvLm51bUNvbXBzPTF9dmFyIGs9eS5nZXQoIldpZHRoIiwiVyIpLFM9eS5nZXQoIkhlaWdodCIsIkgiKTtpZihOdW1iZXIuaXNJbnRlZ2VyKG8ud2lkdGgpJiZvLndpZHRoPjAmJk51bWJlci5pc0ludGVnZXIoby5oZWlnaHQpJiZvLmhlaWdodD4wJiYoby53aWR0aCE9PWt8fG8uaGVpZ2h0IT09UykmJigoMCxuLndhcm4pKCJQREZJbWFnZSAtIHVzaW5nIHRoZSBXaWR0aC9IZWlnaHQgb2YgdGhlIGltYWdlIGRhdGEsIHJhdGhlciB0aGFuIHRoZSBpbWFnZSBkaWN0aW9uYXJ5LiIpLGs9by53aWR0aCxTPW8uaGVpZ2h0KSxrPDF8fFM8MSl0aHJvdyBuZXcgbi5Gb3JtYXRFcnJvcigiSW52YWxpZCBpbWFnZSB3aWR0aDogIi5jb25jYXQoaywiIG9yICIpKyJoZWlnaHQ6ICIuY29uY2F0KFMpKTt0aGlzLndpZHRoPWssdGhpcy5oZWlnaHQ9Uyx0aGlzLmludGVycG9sYXRlPXkuZ2V0KCJJbnRlcnBvbGF0ZSIsIkkiKXx8ITEsdGhpcy5pbWFnZU1hc2s9eS5nZXQoIkltYWdlTWFzayIsIklNIil8fCExLHRoaXMubWF0dGU9eS5nZXQoIk1hdHRlIil8fCExO3ZhciBfPW8uYml0c1BlckNvbXBvbmVudDtpZighXyYmIShfPXkuZ2V0KCJCaXRzUGVyQ29tcG9uZW50IiwiQlBDIikpKXtpZighdGhpcy5pbWFnZU1hc2spdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIkJpdHMgcGVyIGNvbXBvbmVudCBtaXNzaW5nIGluIGltYWdlOiAiLmNvbmNhdCh0aGlzLmltYWdlTWFzaykpO189MX1pZih0aGlzLmJwYz1fLCF0aGlzLmltYWdlTWFzayl7dmFyIHg9eS5nZXQoIkNvbG9yU3BhY2UiLCJDUyIpO2lmKCF4KXN3aXRjaCgoMCxuLmluZm8pKCJKUFggaW1hZ2VzICh3aGljaCBkbyBub3QgcmVxdWlyZSBjb2xvciBzcGFjZXMpIiksby5udW1Db21wcyl7Y2FzZSAxOng9YS5OYW1lLmdldCgiRGV2aWNlR3JheSIpO2JyZWFrO2Nhc2UgMzp4PWEuTmFtZS5nZXQoIkRldmljZVJHQiIpO2JyZWFrO2Nhc2UgNDp4PWEuTmFtZS5nZXQoIkRldmljZUNNWUsiKTticmVhaztkZWZhdWx0OnRocm93IG5ldyBFcnJvcigiSlBYIGltYWdlcyB3aXRoICIuY29uY2F0KG8ubnVtQ29tcHMsIiAiKSsiY29sb3IgY29tcG9uZW50cyBub3Qgc3VwcG9ydGVkLiIpfXZhciBBPWM/cjpudWxsO3RoaXMuY29sb3JTcGFjZT1pLkNvbG9yU3BhY2UucGFyc2UoeCx0LEEsdiksdGhpcy5udW1Db21wcz10aGlzLmNvbG9yU3BhY2UubnVtQ29tcHN9aWYodGhpcy5kZWNvZGU9eS5nZXRBcnJheSgiRGVjb2RlIiwiRCIpLHRoaXMubmVlZHNEZWNvZGU9ITEsdGhpcy5kZWNvZGUmJih0aGlzLmNvbG9yU3BhY2UmJiF0aGlzLmNvbG9yU3BhY2UuaXNEZWZhdWx0RGVjb2RlKHRoaXMuZGVjb2RlLF8pfHxnJiYhaS5Db2xvclNwYWNlLmlzRGVmYXVsdERlY29kZSh0aGlzLmRlY29kZSwxKSkpe3RoaXMubmVlZHNEZWNvZGU9ITA7dmFyIEM9KDE8PF8pLTE7dGhpcy5kZWNvZGVDb2VmZmljaWVudHM9W10sdGhpcy5kZWNvZGVBZGRlbmRzPVtdO2Zvcih2YXIgUD10aGlzLmNvbG9yU3BhY2UmJiJJbmRleGVkIj09PXRoaXMuY29sb3JTcGFjZS5uYW1lLEU9MCxUPTA7RTx0aGlzLmRlY29kZS5sZW5ndGg7RSs9MiwrK1Qpe3ZhciBSPXRoaXMuZGVjb2RlW0VdLE89dGhpcy5kZWNvZGVbRSsxXTt0aGlzLmRlY29kZUNvZWZmaWNpZW50c1tUXT1QPyhPLVIpL0M6Ty1SLHRoaXMuZGVjb2RlQWRkZW5kc1tUXT1QP1I6QypSfX1oP3RoaXMuc21hc2s9bmV3IHUoe3hyZWY6dCxyZXM6cixpbWFnZTpoLGlzSW5saW5lOmMscGRmRnVuY3Rpb25GYWN0b3J5OnZ9KTpwJiYoKDAsYS5pc1N0cmVhbSkocCk/cC5kaWN0LmdldCgiSW1hZ2VNYXNrIiwiSU0iKT90aGlzLm1hc2s9bmV3IHUoe3hyZWY6dCxyZXM6cixpbWFnZTpwLGlzSW5saW5lOmMsaXNNYXNrOiEwLHBkZkZ1bmN0aW9uRmFjdG9yeTp2fSk6KDAsbi53YXJuKSgiSWdub3JpbmcgL01hc2sgaW4gaW1hZ2Ugd2l0aG91dCAvSW1hZ2VNYXNrLiIpOnRoaXMubWFzaz1wKX1yZXR1cm4gdS5idWlsZEltYWdlPWZ1bmN0aW9uKHQpe3QuaGFuZGxlcjt2YXIgcixpLG89dC54cmVmLHM9dC5yZXMsbD10LmltYWdlLGY9dC5pc0lubGluZSxoPXZvaWQgMCE9PWYmJmYsZD10Lm5hdGl2ZURlY29kZXIscD12b2lkIDA9PT1kP251bGw6ZCxtPXQucGRmRnVuY3Rpb25GYWN0b3J5LGc9ZShsLHApLHY9bC5kaWN0LmdldCgiU01hc2siKSx5PWwuZGljdC5nZXQoIk1hc2siKTtyZXR1cm4gdj8ocj1lKHYscCksaT1Qcm9taXNlLnJlc29sdmUobnVsbCkpOihyPVByb21pc2UucmVzb2x2ZShudWxsKSx5PygwLGEuaXNTdHJlYW0pKHkpP2k9ZSh5LHApOkFycmF5LmlzQXJyYXkoeSk/aT1Qcm9taXNlLnJlc29sdmUoeSk6KCgwLG4ud2FybikoIlVuc3VwcG9ydGVkIG1hc2sgZm9ybWF0LiIpLGk9UHJvbWlzZS5yZXNvbHZlKG51bGwpKTppPVByb21pc2UucmVzb2x2ZShudWxsKSksUHJvbWlzZS5hbGwoW2cscixpXSkudGhlbigoZnVuY3Rpb24oZSl7dmFyIHQ9YyhlLDMpLHI9dFswXSxuPXRbMV0sYT10WzJdO3JldHVybiBuZXcgdSh7eHJlZjpvLHJlczpzLGltYWdlOnIsaXNJbmxpbmU6aCxzbWFzazpuLG1hc2s6YSxwZGZGdW5jdGlvbkZhY3Rvcnk6bX0pfSkpfSx1LmNyZWF0ZU1hc2s9ZnVuY3Rpb24oZSl7dmFyIHQscixuPWUuaW1nQXJyYXksYT1lLndpZHRoLGk9ZS5oZWlnaHQsbz1lLmltYWdlSXNGcm9tRGVjb2RlU3RyZWFtLHM9ZS5pbnZlcnNlRGVjb2RlLGw9KGErNz4+MykqaSxjPW4uYnl0ZUxlbmd0aDtpZighb3x8cyYmbCE9PWMpaWYocylmb3IoKHQ9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwpKS5zZXQobikscj1jO3I8bDtyKyspdFtyXT0yNTU7ZWxzZSh0PW5ldyBVaW50OENsYW1wZWRBcnJheShjKSkuc2V0KG4pO2Vsc2UgdD1uO2lmKHMpZm9yKHI9MDtyPGM7cisrKXRbcl1ePTI1NTtyZXR1cm57ZGF0YTp0LHdpZHRoOmEsaGVpZ2h0Oml9fSx1LnByb3RvdHlwZT17Z2V0IGRyYXdXaWR0aCgpe3JldHVybiBNYXRoLm1heCh0aGlzLndpZHRoLHRoaXMuc21hc2smJnRoaXMuc21hc2sud2lkdGh8fDAsdGhpcy5tYXNrJiZ0aGlzLm1hc2sud2lkdGh8fDApfSxnZXQgZHJhd0hlaWdodCgpe3JldHVybiBNYXRoLm1heCh0aGlzLmhlaWdodCx0aGlzLnNtYXNrJiZ0aGlzLnNtYXNrLmhlaWdodHx8MCx0aGlzLm1hc2smJnRoaXMubWFzay5oZWlnaHR8fDApfSxkZWNvZGVCdWZmZXI6ZnVuY3Rpb24oZSl7dmFyIHIsbixhPXRoaXMuYnBjLGk9dGhpcy5udW1Db21wcyxvPXRoaXMuZGVjb2RlQWRkZW5kcyxzPXRoaXMuZGVjb2RlQ29lZmZpY2llbnRzLGw9KDE8PGEpLTE7aWYoMSE9PWEpe3ZhciBjPTA7Zm9yKHI9MCxuPXRoaXMud2lkdGgqdGhpcy5oZWlnaHQ7cjxuO3IrKylmb3IodmFyIHU9MDt1PGk7dSsrKWVbY109dChlW2NdLG9bdV0sc1t1XSxsKSxjKyt9ZWxzZSBmb3Iocj0wLG49ZS5sZW5ndGg7cjxuO3IrKyllW3JdPSshZVtyXX0sZ2V0Q29tcG9uZW50czpmdW5jdGlvbihlKXt2YXIgdD10aGlzLmJwYztpZig4PT09dClyZXR1cm4gZTt2YXIgcixuLGE9dGhpcy53aWR0aCxpPXRoaXMuaGVpZ2h0LG89dGhpcy5udW1Db21wcyxzPWEqaSpvLGw9MCxjPXQ8PTg/bmV3IFVpbnQ4QXJyYXkocyk6dDw9MTY/bmV3IFVpbnQxNkFycmF5KHMpOm5ldyBVaW50MzJBcnJheShzKSx1PWEqbyxmPSgxPDx0KS0xLGg9MDtpZigxPT09dClmb3IodmFyIGQscCxtLGc9MDtnPGk7ZysrKXtmb3IocD1oKygtOCZ1KSxtPWgrdTtoPHA7KW49ZVtsKytdLGNbaF09bj4+NyYxLGNbaCsxXT1uPj42JjEsY1toKzJdPW4+PjUmMSxjW2grM109bj4+NCYxLGNbaCs0XT1uPj4zJjEsY1toKzVdPW4+PjImMSxjW2grNl09bj4+MSYxLGNbaCs3XT0xJm4saCs9ODtpZihoPG0pZm9yKG49ZVtsKytdLGQ9MTI4O2g8bTspY1toKytdPSshIShuJmQpLGQ+Pj0xfWVsc2V7dmFyIHY9MDtmb3Iobj0wLGg9MCxyPXM7aDxyOysraCl7Zm9yKGgldT09MCYmKG49MCx2PTApO3Y8dDspbj1uPDw4fGVbbCsrXSx2Kz04O3ZhciB5PXYtdCxiPW4+Pnk7Y1toXT1iPDA/MDpiPmY/ZjpiLG4mPSgxPDx5KS0xLHY9eX19cmV0dXJuIGN9LGZpbGxPcGFjaXR5OmZ1bmN0aW9uKGUsdCxhLGksbyl7dmFyIHMsbCxjLGYsaCxkLHA9dGhpcy5zbWFzayxtPXRoaXMubWFzaztpZihwKWw9cC53aWR0aCxjPXAuaGVpZ2h0LHM9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KGwqYykscC5maWxsR3JheUJ1ZmZlcihzKSxsPT09dCYmYz09PWF8fChzPXIocyxwLmJwYyxsLGMsdCxhKSk7ZWxzZSBpZihtKWlmKG0gaW5zdGFuY2VvZiB1KXtmb3IobD1tLndpZHRoLGM9bS5oZWlnaHQscz1uZXcgVWludDhDbGFtcGVkQXJyYXkobCpjKSxtLm51bUNvbXBzPTEsbS5maWxsR3JheUJ1ZmZlcihzKSxmPTAsaD1sKmM7ZjxoOysrZilzW2ZdPTI1NS1zW2ZdO2w9PT10JiZjPT09YXx8KHM9cihzLG0uYnBjLGwsYyx0LGEpKX1lbHNle2lmKCFBcnJheS5pc0FycmF5KG0pKXRocm93IG5ldyBuLkZvcm1hdEVycm9yKCJVbmtub3duIG1hc2sgZm9ybWF0LiIpO3M9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHQqYSk7dmFyIGc9dGhpcy5udW1Db21wcztmb3IoZj0wLGg9dCphO2Y8aDsrK2Ype3ZhciB2PTAseT1mKmc7Zm9yKGQ9MDtkPGc7KytkKXt2YXIgYj1vW3krZF0sdz0yKmQ7aWYoYjxtW3ddfHxiPm1bdysxXSl7dj0yNTU7YnJlYWt9fXNbZl09dn19aWYocylmb3IoZj0wLGQ9MyxoPXQqaTtmPGg7KytmLGQrPTQpZVtkXT1zW2ZdO2Vsc2UgZm9yKGY9MCxkPTMsaD10Kmk7ZjxoOysrZixkKz00KWVbZF09MjU1fSx1bmRvUHJlYmxlbmQ6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuc21hc2smJnRoaXMuc21hc2subWF0dGU7aWYobilmb3IodmFyIGE9dGhpcy5jb2xvclNwYWNlLmdldFJnYihuLDApLGk9YVswXSxvPWFbMV0scz1hWzJdLGw9dCpyKjQsYz0wO2M8bDtjKz00KXt2YXIgdT1lW2MrM107aWYoMCE9PXUpe3ZhciBmPTI1NS91O2VbY109KGVbY10taSkqZitpLGVbYysxXT0oZVtjKzFdLW8pKmYrbyxlW2MrMl09KGVbYysyXS1zKSpmK3N9ZWxzZSBlW2NdPTI1NSxlW2MrMV09MjU1LGVbYysyXT0yNTV9fSxjcmVhdGVJbWFnZURhdGE6ZnVuY3Rpb24oKXt2YXIgZSx0PWFyZ3VtZW50cy5sZW5ndGg+MCYmdm9pZCAwIT09YXJndW1lbnRzWzBdJiZhcmd1bWVudHNbMF0scj10aGlzLmRyYXdXaWR0aCxhPXRoaXMuZHJhd0hlaWdodCxpPXt3aWR0aDpyLGhlaWdodDphLGtpbmQ6MCxkYXRhOm51bGx9LGw9dGhpcy5udW1Db21wcyxjPXRoaXMud2lkdGgsdT10aGlzLmhlaWdodCxmPXRoaXMuYnBjLGg9YypsKmYrNz4+MztpZighdCl7dmFyIGQ7aWYoIkRldmljZUdyYXkiPT09dGhpcy5jb2xvclNwYWNlLm5hbWUmJjE9PT1mP2Q9bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFA6IkRldmljZVJHQiIhPT10aGlzLmNvbG9yU3BhY2UubmFtZXx8OCE9PWZ8fHRoaXMubmVlZHNEZWNvZGV8fChkPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCksZCYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2smJnI9PT1jJiZhPT09dSl7aWYoaS5raW5kPWQsZT10aGlzLmdldEltYWdlQnl0ZXModSpoKSx0aGlzLmltYWdlIGluc3RhbmNlb2Ygby5EZWNvZGVTdHJlYW0paS5kYXRhPWU7ZWxzZXt2YXIgcD1uZXcgVWludDhDbGFtcGVkQXJyYXkoZS5sZW5ndGgpO3Auc2V0KGUpLGkuZGF0YT1wfWlmKHRoaXMubmVlZHNEZWNvZGUpeygwLG4uYXNzZXJ0KShkPT09bi5JbWFnZUtpbmQuR1JBWVNDQUxFXzFCUFAsIlBERkltYWdlLmNyZWF0ZUltYWdlRGF0YTogVGhlIGltYWdlIG11c3QgYmUgZ3JheXNjYWxlLiIpO2Zvcih2YXIgbT1pLmRhdGEsZz0wLHY9bS5sZW5ndGg7Zzx2O2crKyltW2ddXj0yNTV9cmV0dXJuIGl9aWYodGhpcy5pbWFnZSBpbnN0YW5jZW9mIHMuSnBlZ1N0cmVhbSYmIXRoaXMuc21hc2smJiF0aGlzLm1hc2spe3ZhciB5PXUqaDtzd2l0Y2godGhpcy5jb2xvclNwYWNlLm5hbWUpe2Nhc2UiRGV2aWNlR3JheSI6eSo9MztjYXNlIkRldmljZVJHQiI6Y2FzZSJEZXZpY2VDTVlLIjpyZXR1cm4gaS5raW5kPW4uSW1hZ2VLaW5kLlJHQl8yNEJQUCxpLmRhdGE9dGhpcy5nZXRJbWFnZUJ5dGVzKHkscixhLCEwKSxpfX19dmFyIGIsdyxrPTB8KGU9dGhpcy5nZXRJbWFnZUJ5dGVzKHUqaCkpLmxlbmd0aC9oKmEvdSxTPXRoaXMuZ2V0Q29tcG9uZW50cyhlKTtyZXR1cm4gdHx8dGhpcy5zbWFza3x8dGhpcy5tYXNrPyhpLmtpbmQ9bi5JbWFnZUtpbmQuUkdCQV8zMkJQUCxpLmRhdGE9bmV3IFVpbnQ4Q2xhbXBlZEFycmF5KHIqYSo0KSxiPTEsdz0hMCx0aGlzLmZpbGxPcGFjaXR5KGkuZGF0YSxyLGEsayxTKSk6KGkua2luZD1uLkltYWdlS2luZC5SR0JfMjRCUFAsaS5kYXRhPW5ldyBVaW50OENsYW1wZWRBcnJheShyKmEqMyksYj0wLHc9ITEpLHRoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKFMpLHRoaXMuY29sb3JTcGFjZS5maWxsUmdiKGkuZGF0YSxjLHUscixhLGssZixTLGIpLHcmJnRoaXMudW5kb1ByZWJsZW5kKGkuZGF0YSxyLGspLGl9LGZpbGxHcmF5QnVmZmVyOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMubnVtQ29tcHM7aWYoMSE9PXQpdGhyb3cgbmV3IG4uRm9ybWF0RXJyb3IoIlJlYWRpbmcgZ3JheSBzY2FsZSBmcm9tIGEgY29sb3IgaW1hZ2U6ICIuY29uY2F0KHQpKTt2YXIgcixhLGk9dGhpcy53aWR0aCxvPXRoaXMuaGVpZ2h0LHM9dGhpcy5icGMsbD1pKnQqcys3Pj4zLGM9dGhpcy5nZXRJbWFnZUJ5dGVzKG8qbCksdT10aGlzLmdldENvbXBvbmVudHMoYyk7aWYoMSE9PXMpe3RoaXMubmVlZHNEZWNvZGUmJnRoaXMuZGVjb2RlQnVmZmVyKHUpLGE9aSpvO3ZhciBmPTI1NS8oKDE8PHMpLTEpO2ZvcihyPTA7cjxhOysrcillW3JdPWYqdVtyXX1lbHNlIGlmKGE9aSpvLHRoaXMubmVlZHNEZWNvZGUpZm9yKHI9MDtyPGE7KytyKWVbcl09dVtyXS0xJjI1NTtlbHNlIGZvcihyPTA7cjxhOysrcillW3JdPTI1NSYtdVtyXX0sZ2V0SW1hZ2VCeXRlczpmdW5jdGlvbihlLHQscil7dmFyIG49YXJndW1lbnRzLmxlbmd0aD4zJiZ2b2lkIDAhPT1hcmd1bWVudHNbM10mJmFyZ3VtZW50c1szXTtyZXR1cm4gdGhpcy5pbWFnZS5yZXNldCgpLHRoaXMuaW1hZ2UuZHJhd1dpZHRoPXR8fHRoaXMud2lkdGgsdGhpcy5pbWFnZS5kcmF3SGVpZ2h0PXJ8fHRoaXMuaGVpZ2h0LHRoaXMuaW1hZ2UuZm9yY2VSR0I9ISFuLHRoaXMuaW1hZ2UuZ2V0Qnl0ZXMoZSwhMCl9fSx1fSgpO3QuUERGSW1hZ2U9dX0sZnVuY3Rpb24oZSx0LHIpeyJ1c2Ugc3RyaWN0IjtPYmplY3QuZGVmaW5lUHJvcGVydHkodCwiX19lc01vZHVsZSIse3ZhbHVlOiEwfSksdC5NZXNzYWdlSGFuZGxlcj1wO3ZhciBuLGE9KG49cigyKSkmJm4uX19lc01vZHVsZT9uOntkZWZhdWx0Om59LGk9cig2KTtmdW5jdGlvbiBvKGUpe3JldHVybihvPSJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJiJzeW1ib2wiPT10eXBlb2YgU3ltYm9sLml0ZXJhdG9yP2Z1bmN0aW9uKGUpe3JldHVybiB0eXBlb2YgZX06ZnVuY3Rpb24oZSl7cmV0dXJuIGUmJiJmdW5jdGlvbiI9PXR5cGVvZiBTeW1ib2wmJmUuY29uc3RydWN0b3I9PT1TeW1ib2wmJmUhPT1TeW1ib2wucHJvdG90eXBlPyJzeW1ib2wiOnR5cGVvZiBlfSkoZSl9ZnVuY3Rpb24gcyhlLHQscixuLGEsaSxvKXt0cnl7dmFyIHM9ZVtpXShvKSxsPXMudmFsdWV9Y2F0Y2goZSl7cmV0dXJuIHZvaWQgcihlKX1zLmRvbmU/dChsKTpQcm9taXNlLnJlc29sdmUobCkudGhlbihuLGEpfWZ1bmN0aW9uIGwoZSl7cmV0dXJuIGZ1bmN0aW9uKCl7dmFyIHQ9dGhpcyxyPWFyZ3VtZW50cztyZXR1cm4gbmV3IFByb21pc2UoKGZ1bmN0aW9uKG4sYSl7dmFyIGk9ZS5hcHBseSh0LHIpO2Z1bmN0aW9uIG8oZSl7cyhpLG4sYSxvLGwsIm5leHQiLGUpfWZ1bmN0aW9uIGwoZSl7cyhpLG4sYSxvLGwsInRocm93IixlKX1vKHZvaWQgMCl9KSl9fWZ1bmN0aW9uIGMoZSx0KXtyZXR1cm4gdS5hcHBseSh0aGlzLGFyZ3VtZW50cyl9ZnVuY3Rpb24gdSgpe3JldHVybih1PWwoYS5kZWZhdWx0Lm1hcmsoKGZ1bmN0aW9uIGUodCxyKXt2YXIgbixpPWFyZ3VtZW50cztyZXR1cm4gYS5kZWZhdWx0LndyYXAoKGZ1bmN0aW9uKGUpe2Zvcig7Oylzd2l0Y2goZS5wcmV2PWUubmV4dCl7Y2FzZSAwOmlmKG49aS5sZW5ndGg+MiYmdm9pZCAwIT09aVsyXT9pWzJdOm51bGwsdCl7ZS5uZXh0PTM7YnJlYWt9cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iKTtjYXNlIDM6cmV0dXJuIGUuYWJydXB0KCJyZXR1cm4iLHQuYXBwbHkobixyKSk7Y2FzZSA0OmNhc2UiZW5kIjpyZXR1cm4gZS5zdG9wKCl9fSksZSx0aGlzKX0pKSkpLmFwcGx5KHRoaXMsYXJndW1lbnRzKX1mdW5jdGlvbiBmKGUpe2lmKCJvYmplY3QiIT09byhlKSlyZXR1cm4gZTtzd2l0Y2goZS5uYW1lKXtjYXNlIkFib3J0RXhjZXB0aW9uIjpyZXR1cm4gbmV3IGkuQWJvcnRFeGNlcHRpb24oZS5tZXNzYWdlKTtjYXNlIk1pc3NpbmdQREZFeGNlcHRpb24iOnJldHVybiBuZXcgaS5NaXNzaW5nUERGRXhjZXB0aW9uKGUubWVzc2FnZSk7Y2FzZSJVbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24iOnJldHVybiBuZXcgaS5VbmV4cGVjdGVkUmVzcG9uc2VFeGNlcHRpb24oZS5tZXNzYWdlLGUuc3RhdHVzKTtkZWZhdWx0OnJldHVybiBuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUuZGV0YWlscyl9fWZ1bmN0aW9uIGgoZSl7cmV0dXJuIShlIGluc3RhbmNlb2YgRXJyb3IpfHxlIGluc3RhbmNlb2YgaS5BYm9ydEV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIGkuTWlzc2luZ1BERkV4Y2VwdGlvbnx8ZSBpbnN0YW5jZW9mIGkuVW5leHBlY3RlZFJlc3BvbnNlRXhjZXB0aW9ufHxlIGluc3RhbmNlb2YgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24/ZTpuZXcgaS5Vbmtub3duRXJyb3JFeGNlcHRpb24oZS5tZXNzYWdlLGUudG9TdHJpbmcoKSl9ZnVuY3Rpb24gZChlLHQscil7dD9lLnJlc29sdmUoKTplLnJlamVjdChyKX1mdW5jdGlvbiBwKGUsdCxyKXt2YXIgbj10aGlzO3RoaXMuc291cmNlTmFtZT1lLHRoaXMudGFyZ2V0TmFtZT10LHRoaXMuY29tT2JqPXIsdGhpcy5jYWxsYmFja0lkPTEsdGhpcy5zdHJlYW1JZD0xLHRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM9ITAsdGhpcy5zdHJlYW1TaW5rcz1PYmplY3QuY3JlYXRlKG51bGwpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnM9T2JqZWN0LmNyZWF0ZShudWxsKTt2YXIgYT10aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllcz1PYmplY3QuY3JlYXRlKG51bGwpLGk9dGhpcy5hY3Rpb25IYW5kbGVyPU9iamVjdC5jcmVhdGUobnVsbCk7dGhpcy5fb25Db21PYmpPbk1lc3NhZ2U9ZnVuY3Rpb24oZSl7dmFyIHQ9ZS5kYXRhO2lmKHQudGFyZ2V0TmFtZT09PW4uc291cmNlTmFtZSlpZih0LnN0cmVhbSluLl9wcm9jZXNzU3RyZWFtTWVzc2FnZSh0KTtlbHNlIGlmKHQuaXNSZXBseSl7dmFyIG89dC5jYWxsYmFja0lkO2lmKCEodC5jYWxsYmFja0lkIGluIGEpKXRocm93IG5ldyBFcnJvcigiQ2Fubm90IHJlc29sdmUgY2FsbGJhY2sgIi5jb25jYXQobykpO3ZhciBzPWFbb107ZGVsZXRlIGFbb10sImVycm9yImluIHQ/cy5yZWplY3QoZih0LmVycm9yKSk6cy5yZXNvbHZlKHQuZGF0YSl9ZWxzZXtpZighKHQuYWN0aW9uIGluIGkpKXRocm93IG5ldyBFcnJvcigiVW5rbm93biBhY3Rpb24gZnJvbSB3b3JrZXI6ICIuY29uY2F0KHQuYWN0aW9uKSk7dmFyIGw9aVt0LmFjdGlvbl07aWYodC5jYWxsYmFja0lkKXt2YXIgYz1uLnNvdXJjZU5hbWUsdT10LnNvdXJjZU5hbWU7UHJvbWlzZS5yZXNvbHZlKCkudGhlbigoZnVuY3Rpb24oKXtyZXR1cm4gbFswXS5jYWxsKGxbMV0sdC5kYXRhKX0pKS50aGVuKChmdW5jdGlvbihlKXtyLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOmMsdGFyZ2V0TmFtZTp1LGlzUmVwbHk6ITAsY2FsbGJhY2tJZDp0LmNhbGxiYWNrSWQsZGF0YTplfSl9KSwoZnVuY3Rpb24oZSl7ci5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpjLHRhcmdldE5hbWU6dSxpc1JlcGx5OiEwLGNhbGxiYWNrSWQ6dC5jYWxsYmFja0lkLGVycm9yOmgoZSl9KX0pKX1lbHNlIHQuc3RyZWFtSWQ/bi5fY3JlYXRlU3RyZWFtU2luayh0KTpsWzBdLmNhbGwobFsxXSx0LmRhdGEpfX0sci5hZGRFdmVudExpc3RlbmVyKCJtZXNzYWdlIix0aGlzLl9vbkNvbU9iak9uTWVzc2FnZSl9cC5wcm90b3R5cGU9e29uOmZ1bmN0aW9uKGUsdCxyKXt2YXIgbj10aGlzLmFjdGlvbkhhbmRsZXI7aWYobltlXSl0aHJvdyBuZXcgRXJyb3IoJ1RoZXJlIGlzIGFscmVhZHkgYW4gYWN0aW9uTmFtZSBjYWxsZWQgIicuY29uY2F0KGUsJyInKSk7bltlXT1bdCxyXX0sc2VuZDpmdW5jdGlvbihlLHQscil7dmFyIG49e3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dH07dGhpcy5wb3N0TWVzc2FnZShuLHIpfSxzZW5kV2l0aFByb21pc2U6ZnVuY3Rpb24oZSx0LHIpe3ZhciBuPXRoaXMuY2FsbGJhY2tJZCsrLGE9e3NvdXJjZU5hbWU6dGhpcy5zb3VyY2VOYW1lLHRhcmdldE5hbWU6dGhpcy50YXJnZXROYW1lLGFjdGlvbjplLGRhdGE6dCxjYWxsYmFja0lkOm59LG89KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTt0aGlzLmNhbGxiYWNrc0NhcGFiaWxpdGllc1tuXT1vO3RyeXt0aGlzLnBvc3RNZXNzYWdlKGEscil9Y2F0Y2goZSl7by5yZWplY3QoZSl9cmV0dXJuIG8ucHJvbWlzZX0sc2VuZFdpdGhTdHJlYW06ZnVuY3Rpb24oZSx0LHIsbil7dmFyIGE9dGhpcyxvPXRoaXMuc3RyZWFtSWQrKyxzPXRoaXMuc291cmNlTmFtZSxsPXRoaXMudGFyZ2V0TmFtZTtyZXR1cm4gbmV3IGkuUmVhZGFibGVTdHJlYW0oe3N0YXJ0OmZ1bmN0aW9uKHIpe3ZhciBuPSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb109e2NvbnRyb2xsZXI6cixzdGFydENhbGw6bixpc0Nsb3NlZDohMX0sYS5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bCxhY3Rpb246ZSxzdHJlYW1JZDpvLGRhdGE6dCxkZXNpcmVkU2l6ZTpyLmRlc2lyZWRTaXplfSksbi5wcm9taXNlfSxwdWxsOmZ1bmN0aW9uKGUpe3ZhciB0PSgwLGkuY3JlYXRlUHJvbWlzZUNhcGFiaWxpdHkpKCk7cmV0dXJuIGEuc3RyZWFtQ29udHJvbGxlcnNbb10ucHVsbENhbGw9dCxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbToicHVsbCIsc3RyZWFtSWQ6byxkZXNpcmVkU2l6ZTplLmRlc2lyZWRTaXplfSksdC5wcm9taXNlfSxjYW5jZWw6ZnVuY3Rpb24oZSl7dmFyIHQ9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKTtyZXR1cm4gYS5zdHJlYW1Db250cm9sbGVyc1tvXS5jYW5jZWxDYWxsPXQsYS5zdHJlYW1Db250cm9sbGVyc1tvXS5pc0Nsb3NlZD0hMCxhLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnMsdGFyZ2V0TmFtZTpsLHN0cmVhbToiY2FuY2VsIixyZWFzb246ZSxzdHJlYW1JZDpvfSksdC5wcm9taXNlfX0scil9LF9jcmVhdGVTdHJlYW1TaW5rOmZ1bmN0aW9uKGUpe3ZhciB0PXRoaXMscj10aGlzLG49dGhpcy5hY3Rpb25IYW5kbGVyW2UuYWN0aW9uXSxhPWUuc3RyZWFtSWQsbz1lLmRlc2lyZWRTaXplLHM9dGhpcy5zb3VyY2VOYW1lLGw9ZS5zb3VyY2VOYW1lLHU9KDAsaS5jcmVhdGVQcm9taXNlQ2FwYWJpbGl0eSkoKSxmPWZ1bmN0aW9uKGUpe3ZhciByPWUuc3RyZWFtLG49ZS5jaHVuayxpPWUudHJhbnNmZXJzLG89ZS5zdWNjZXNzLGM9ZS5yZWFzb247dC5wb3N0TWVzc2FnZSh7c291cmNlTmFtZTpzLHRhcmdldE5hbWU6bCxzdHJlYW06cixzdHJlYW1JZDphLGNodW5rOm4sc3VjY2VzczpvLHJlYXNvbjpjfSxpKX0saD17ZW5xdWV1ZTpmdW5jdGlvbihlKXt2YXIgdD1hcmd1bWVudHMubGVuZ3RoPjEmJnZvaWQgMCE9PWFyZ3VtZW50c1sxXT9hcmd1bWVudHNbMV06MSxyPWFyZ3VtZW50cy5sZW5ndGg+Mj9hcmd1bWVudHNbMl06dm9pZCAwO2lmKCF0aGlzLmlzQ2FuY2VsbGVkKXt2YXIgbj10aGlzLmRlc2lyZWRTaXplO3RoaXMuZGVzaXJlZFNpemUtPXQsbj4wJiZ0aGlzLmRlc2lyZWRTaXplPD0wJiYodGhpcy5zaW5rQ2FwYWJpbGl0eT0oMCxpLmNyZWF0ZVByb21pc2VDYXBhYmlsaXR5KSgpLHRoaXMucmVhZHk9dGhpcy5zaW5rQ2FwYWJpbGl0eS5wcm9taXNlKSxmKHtzdHJlYW06ImVucXVldWUiLGNodW5rOmUsdHJhbnNmZXJzOnJ9KX19LGNsb3NlOmZ1bmN0aW9uKCl7dGhpcy5pc0NhbmNlbGxlZHx8KHRoaXMuaXNDYW5jZWxsZWQ9ITAsZih7c3RyZWFtOiJjbG9zZSJ9KSxkZWxldGUgci5zdHJlYW1TaW5rc1thXSl9LGVycm9yOmZ1bmN0aW9uKGUpe3RoaXMuaXNDYW5jZWxsZWR8fCh0aGlzLmlzQ2FuY2VsbGVkPSEwLGYoe3N0cmVhbToiZXJyb3IiLHJlYXNvbjplfSkpfSxzaW5rQ2FwYWJpbGl0eTp1LG9uUHVsbDpudWxsLG9uQ2FuY2VsOm51bGwsaXNDYW5jZWxsZWQ6ITEsZGVzaXJlZFNpemU6byxyZWFkeTpudWxsfTtoLnNpbmtDYXBhYmlsaXR5LnJlc29sdmUoKSxoLnJlYWR5PWguc2lua0NhcGFiaWxpdHkucHJvbWlzZSx0aGlzLnN0cmVhbVNpbmtzW2FdPWgsYyhuWzBdLFtlLmRhdGEsaF0sblsxXSkudGhlbigoZnVuY3Rpb24oKXtmKHtzdHJlYW06InN0YXJ0X2NvbXBsZXRlIixzdWNjZXNzOiEwfSl9KSwoZnVuY3Rpb24oZSl7Zih7c3RyZWFtOiJzdGFydF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpfSxfcHJvY2Vzc1N0cmVhbU1lc3NhZ2U6ZnVuY3Rpb24oZSl7dmFyIHQ9dGhpcyxyPXRoaXMuc291cmNlTmFtZSxuPWUuc291cmNlTmFtZSxhPWUuc3RyZWFtSWQsbz1mdW5jdGlvbihlKXt2YXIgaT1lLnN0cmVhbSxvPWUuc3VjY2VzcyxzPWUucmVhc29uO3QuY29tT2JqLnBvc3RNZXNzYWdlKHtzb3VyY2VOYW1lOnIsdGFyZ2V0TmFtZTpuLHN0cmVhbTppLHN1Y2Nlc3M6byxzdHJlYW1JZDphLHJlYXNvbjpzfSl9LHM9ZnVuY3Rpb24oKXtQcm9taXNlLmFsbChbdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5zdGFydENhbGwsdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5wdWxsQ2FsbCx0LnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNhbmNlbENhbGxdLm1hcCgoZnVuY3Rpb24oZSl7cmV0dXJuIGUmJih0PWUucHJvbWlzZSxQcm9taXNlLnJlc29sdmUodCkuY2F0Y2goKGZ1bmN0aW9uKCl7fSkpKTt2YXIgdH0pKSkudGhlbigoZnVuY3Rpb24oKXtkZWxldGUgdC5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXX0pKX07c3dpdGNoKGUuc3RyZWFtKXtjYXNlInN0YXJ0X2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uc3RhcnRDYWxsLGUuc3VjY2VzcyxmKGUucmVhc29uKSk7YnJlYWs7Y2FzZSJwdWxsX2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0ucHVsbENhbGwsZS5zdWNjZXNzLGYoZS5yZWFzb24pKTticmVhaztjYXNlInB1bGwiOmlmKCF0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdKXtvKHtzdHJlYW06InB1bGxfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KTticmVha310aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLmRlc2lyZWRTaXplPD0wJiZlLmRlc2lyZWRTaXplPjAmJnRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVzb2x2ZSgpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uZGVzaXJlZFNpemU9ZS5kZXNpcmVkU2l6ZSxjKHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0ub25QdWxsKS50aGVuKChmdW5jdGlvbigpe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMH0pfSksKGZ1bmN0aW9uKGUpe28oe3N0cmVhbToicHVsbF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpO2JyZWFrO2Nhc2UiZW5xdWV1ZSI6KDAsaS5hc3NlcnQpKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0sImVucXVldWUgc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmlzQ2xvc2VkfHx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmNvbnRyb2xsZXIuZW5xdWV1ZShlLmNodW5rKTticmVhaztjYXNlImNsb3NlIjppZigoMCxpLmFzc2VydCkodGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXSwiY2xvc2Ugc2hvdWxkIGhhdmUgc3RyZWFtIGNvbnRyb2xsZXIiKSx0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLmlzQ2xvc2VkKWJyZWFrO3RoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uaXNDbG9zZWQ9ITAsdGhpcy5zdHJlYW1Db250cm9sbGVyc1tlLnN0cmVhbUlkXS5jb250cm9sbGVyLmNsb3NlKCkscygpO2JyZWFrO2Nhc2UiZXJyb3IiOigwLGkuYXNzZXJ0KSh0aGlzLnN0cmVhbUNvbnRyb2xsZXJzW2Uuc3RyZWFtSWRdLCJlcnJvciBzaG91bGQgaGF2ZSBzdHJlYW0gY29udHJvbGxlciIpLHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY29udHJvbGxlci5lcnJvcihmKGUucmVhc29uKSkscygpO2JyZWFrO2Nhc2UiY2FuY2VsX2NvbXBsZXRlIjpkKHRoaXMuc3RyZWFtQ29udHJvbGxlcnNbZS5zdHJlYW1JZF0uY2FuY2VsQ2FsbCxlLnN1Y2Nlc3MsZihlLnJlYXNvbikpLHMoKTticmVhaztjYXNlImNhbmNlbCI6aWYoIXRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0pYnJlYWs7Yyh0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLm9uQ2FuY2VsLFtmKGUucmVhc29uKV0pLnRoZW4oKGZ1bmN0aW9uKCl7byh7c3RyZWFtOiJjYW5jZWxfY29tcGxldGUiLHN1Y2Nlc3M6ITB9KX0pLChmdW5jdGlvbihlKXtvKHtzdHJlYW06ImNhbmNlbF9jb21wbGV0ZSIsc3VjY2VzczohMSxyZWFzb246ZX0pfSkpLHRoaXMuc3RyZWFtU2lua3NbZS5zdHJlYW1JZF0uc2lua0NhcGFiaWxpdHkucmVqZWN0KGYoZS5yZWFzb24pKSx0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdLmlzQ2FuY2VsbGVkPSEwLGRlbGV0ZSB0aGlzLnN0cmVhbVNpbmtzW2Uuc3RyZWFtSWRdO2JyZWFrO2RlZmF1bHQ6dGhyb3cgbmV3IEVycm9yKCJVbmV4cGVjdGVkIHN0cmVhbSBjYXNlIil9fSxwb3N0TWVzc2FnZTpmdW5jdGlvbihlLHQpe3QmJnRoaXMucG9zdE1lc3NhZ2VUcmFuc2ZlcnM/dGhpcy5jb21PYmoucG9zdE1lc3NhZ2UoZSx0KTp0aGlzLmNvbU9iai5wb3N0TWVzc2FnZShlKX0sZGVzdHJveTpmdW5jdGlvbigpe3RoaXMuY29tT2JqLnJlbW92ZUV2ZW50TGlzdGVuZXIoIm1lc3NhZ2UiLHRoaXMuX29uQ29tT2JqT25NZXNzYWdlKX19fV0pfSxlLmV4cG9ydHM9YSgpfSkuY2FsbCh0aGlzLHIoMjkpLkJ1ZmZlcixyKDE4KSxyKDI0KSl9LGZ1bmN0aW9uKGUsdCxyKXsidXNlIHN0cmljdCI7ci5yKHQpO3ZhciBuPXIoMCksYT1yKDM1KSxpPXIoMjMpLG89cigxNikscz1yLm4obyksbD0oKT0+bi5jcmVhdGVFbGVtZW50KCJzdmciLHt4bWxuczoiaHR0cDovL3d3dy53My5vcmcvMjAwMC9zdmciLHdpZHRoOiIyNCIsaGVpZ2h0OiIyNCIsdmlld0JveDoiMCAwIDI0IDI0IixmaWxsOiJub25lIixzdHJva2U6ImN1cnJlbnRDb2xvciIsc3Ryb2tlV2lkdGg6IjIiLHN0cm9rZUxpbmVjYXA6InJvdW5kIixzdHJva2VMaW5lam9pbjoicm91bmQiLGNsYXNzTmFtZToiZmVhdGhlciBmZWF0aGVyLWFycm93LWRvd24ifSxuLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTIiLHkxOiI1Iix4MjoiMTIiLHkyOiIxOSJ9KSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiIxOSAxMiAxMiAxOSA1IDEyIn0pKSxjPSgpPT5uLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjI0IixoZWlnaHQ6IjI0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiIifSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiI1IDEyIDE5IDEyIn0pLG4uY3JlYXRlRWxlbWVudCgicG9seWxpbmUiLHtwb2ludHM6IjEyIDUgMTIgMTkifSkpLHU9KCk9Pm4uY3JlYXRlRWxlbWVudCgic3ZnIix7eG1sbnM6Imh0dHA6Ly93d3cudzMub3JnLzIwMDAvc3ZnIix3aWR0aDoiMjQiLGhlaWdodDoiMjQiLHZpZXdCb3g6IjAgMCAyNCAyNCIsZmlsbDoibm9uZSIsc3Ryb2tlOiJjdXJyZW50Q29sb3IiLHN0cm9rZVdpZHRoOiIyIixzdHJva2VMaW5lY2FwOiJyb3VuZCIsc3Ryb2tlTGluZWpvaW46InJvdW5kIixjbGFzc05hbWU6IiJ9LG4uY3JlYXRlRWxlbWVudCgibGluZSIse3gxOiI1Iix5MToiMTIiLHgyOiIxOSIseTI6IjEyIn0pKSxmPSgpPT5uLmNyZWF0ZUVsZW1lbnQoInN2ZyIse3htbG5zOiJodHRwOi8vd3d3LnczLm9yZy8yMDAwL3N2ZyIsd2lkdGg6IjI0IixoZWlnaHQ6IjI0Iix2aWV3Qm94OiIwIDAgMjQgMjQiLGZpbGw6Im5vbmUiLHN0cm9rZToiY3VycmVudENvbG9yIixzdHJva2VXaWR0aDoiMiIsc3Ryb2tlTGluZWNhcDoicm91bmQiLHN0cm9rZUxpbmVqb2luOiJyb3VuZCIsY2xhc3NOYW1lOiJmZWF0aGVyIGZlYXRoZXItYXJyb3ctdXAifSxuLmNyZWF0ZUVsZW1lbnQoImxpbmUiLHt4MToiMTIiLHkxOiIxOSIseDI6IjEyIix5MjoiNSJ9KSxuLmNyZWF0ZUVsZW1lbnQoInBvbHlsaW5lIix7cG9pbnRzOiI1IDEyIDEyIDUgMTkgMTIifSkpO3IoODQpO2NvbnN0IGg9ZG9jdW1lbnQucXVlcnlTZWxlY3RvcigiI3JlYWN0LWNvbnRhaW5lciIpLGQ9aS5wZGZqcztkLkdsb2JhbFdvcmtlck9wdGlvbnMud29ya2VyU3JjPWAvL2NkbmpzLmNsb3VkZmxhcmUuY29tL2FqYXgvbGlicy9wZGYuanMvJHtkLnZlcnNpb259L3BkZi53b3JrZXIuanNgO2NvbnN0IHA9e2NNYXBVcmw6YC8vY2RuLmpzZGVsaXZyLm5ldC9ucG0vcGRmanMtZGlzdEAke2QudmVyc2lvbn0vY21hcHMvYCxjTWFwUGFja2VkOiEwfTtjbGFzcyBtIGV4dGVuZHMgbi5Db21wb25lbnR7Y29uc3RydWN0b3IoKXtzdXBlciguLi5hcmd1bWVudHMpLHRoaXMuc3RhdGU9e251bVBhZ2VzOm51bGwsY3VycmVudFBhZ2U6MSxyZWFkeTohMCxwYWdlTG9hZGVkOiExLHNjYWxlOi43NSxlcnJvcjp2b2lkIDB9LHRoaXMuTUFYX1NDQUxFPTIsdGhpcy5fX3pvb21FdmVudD0hMSx0aGlzLm9uRG9jdW1lbnRMb2FkU3VjY2Vzcz0oe251bVBhZ2VzOmV9KT0+e3RoaXMuc2V0U3RhdGUoe251bVBhZ2VzOmV9KX0sdGhpcy5vbkVycm9yPWU9PnRoaXMuc2V0U3RhdGUoe2Vycm9yOmV9KSx0aGlzLnpvb21PdXQ9ZT0+e2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9fem9vbUV2ZW50fHxzKCkodGhpcy56T3V0KX0sdGhpcy56b29tSW49ZT0+e2UucHJldmVudERlZmF1bHQoKSx0aGlzLl9fem9vbUV2ZW50fHxzKCkodGhpcy56SW4pfSx0aGlzLnpJbj0oKT0+e3RoaXMuc3RhdGUuc2NhbGU8PXRoaXMuTUFYX1NDQUxFLS4yNSYmKHRoaXMuX196b29tRXZlbnQ9ITAsdGhpcy5zZXRTdGF0ZShlPT4oe3NjYWxlOmUuc2NhbGUrLjI1fSkpKX0sdGhpcy56T3V0PSgpPT57dGhpcy5zdGF0ZS5zY2FsZT49Ljc1JiYodGhpcy5fX3pvb21FdmVudD0hMCx0aGlzLnNldFN0YXRlKGU9Pih7c2NhbGU6ZS5zY2FsZS0uMjV9KSkpfSx0aGlzLnVwPSgpPT57Y29uc3R7Y3VycmVudFBhZ2U6ZX09dGhpcy5zdGF0ZTtpZihlPjEpe2NvbnN0IHQ9ZS0xO3RoaXMuc2V0U3RhdGUoe2N1cnJlbnRQYWdlOnR9KX1PYmplY3Qoby5jYW5jZWwpKHRoaXMudXApfSx0aGlzLmRvd249KCk9Pntjb25zdHtjdXJyZW50UGFnZTplLG51bVBhZ2VzOnR9PXRoaXMuc3RhdGU7aWYoZTx0KXtjb25zdCB0PWUrMTt0aGlzLnNldFN0YXRlKHtjdXJyZW50UGFnZTp0fSl9T2JqZWN0KG8uY2FuY2VsKSh0aGlzLmRvd24pfSx0aGlzLmdvVXA9ZT0+e2UucHJldmVudERlZmF1bHQoKSxzKCkodGhpcy51cCl9LHRoaXMuZ29Eb3duPWU9PntlLnByZXZlbnREZWZhdWx0KCkscygpKHRoaXMuZG93bil9LHRoaXMucmVuZGVyUGFnZT1lPT5uLmNyZWF0ZUVsZW1lbnQoaS5QYWdlLHtsb2FkaW5nOiIgIixrZXk6YHBhZ2VfJHtlfWAscGFnZU51bWJlcjplLG9uTG9hZEVycm9yOnRoaXMub25FcnJvcixvblJlbmRlckVycm9yOnRoaXMub25FcnJvcixvbkdldFRleHRFcnJvcjp0aGlzLm9uRXJyb3Isb25SZW5kZXJTdWNjZXNzOigpPT57dGhpcy5fX3pvb21FdmVudD0hMX0sc2NhbGU6dGhpcy5zdGF0ZS5zY2FsZX0pfXN0YXRpYyBnZXREZXJpdmVkU3RhdGVGcm9tRXJyb3IoZSl7cmV0dXJue2Vycm9yOmV9fXJlbmRlcigpe3ZhciBlLHQscixhLG8scyxoLGQsbSx2O2NvbnN0e251bVBhZ2VzOnksY3VycmVudFBhZ2U6YixlcnJvcjp3fT10aGlzLnN0YXRlLHtjdXN0b21TdHlsZTprfT10aGlzLnByb3BzO3JldHVybiB3P24uY3JlYXRlRWxlbWVudCgicCIsbnVsbCx3Lm1lc3NhZ2U/dy5tZXNzYWdlOiJTb3JyeSBhbiBlcnJvciBvY2N1cnJlZCEiKTpuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyIn0sbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyIixzdHlsZTpudWxsPT09KGU9ayl8fHZvaWQgMD09PWU/dm9pZCAwOmUucmVhZGVyQ29udGFpbmVyfSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX2RvY3VtZW50IixzdHlsZTpudWxsPT09KHQ9ayl8fHZvaWQgMD09PXQ/dm9pZCAwOnQucmVhZGVyQ29udGFpbmVyRG9jdW1lbnR9LG4uY3JlYXRlRWxlbWVudChpLkRvY3VtZW50LE9iamVjdC5hc3NpZ24oe2xvYWRpbmc6IiAiLG9uTG9hZFN1Y2Nlc3M6dGhpcy5vbkRvY3VtZW50TG9hZFN1Y2Nlc3Msb25Mb2FkRXJyb3I6dGhpcy5vbkVycm9yLG9uU291cmNlRXJyb3I6dGhpcy5vbkVycm9yfSx7b3B0aW9uczpwLGZpbGU6Z30pLHRoaXMucmVuZGVyUGFnZShiKSkpLHkmJm4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVycyIsc3R5bGU6bnVsbD09PShyPWspfHx2b2lkIDA9PT1yP3ZvaWQgMDpyLnJlYWRlckNvbnRhaW5lck51bWJlcnN9LG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbnVtYmVyc19fY29udGVudCIsc3R5bGU6bnVsbD09PShhPWspfHx2b2lkIDA9PT1hP3ZvaWQgMDphLnJlYWRlckNvbnRhaW5lck51bWJlcnNDb250ZW50fSxiLCIgLyAiLHkpKSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX3pvb21fY29udGFpbmVyIixzdHlsZTpudWxsPT09KG89ayl8fHZvaWQgMD09PW8/dm9pZCAwOm8ucmVhZGVyQ29udGFpbmVyWm9vbUNvbnRhaW5lcn0sbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyX196b29tX2NvbnRhaW5lcl9fYnV0dG9uIixzdHlsZTpudWxsPT09KHM9ayl8fHZvaWQgMD09PXM/dm9pZCAwOnMucmVhZGVyQ29udGFpbmVyWm9vbUNvbnRhaW5lckJ1dHRvbixvbkNsaWNrOnRoaXMuem9vbUlufSxuLmNyZWF0ZUVsZW1lbnQoYyxudWxsKSksbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyX196b29tX2NvbnRhaW5lcl9fYnV0dG9uIixzdHlsZTpudWxsPT09KGg9ayl8fHZvaWQgMD09PWg/dm9pZCAwOmgucmVhZGVyQ29udGFpbmVyWm9vbUNvbnRhaW5lckJ1dHRvbixvbkNsaWNrOnRoaXMuem9vbU91dH0sbi5jcmVhdGVFbGVtZW50KHUsbnVsbCkpKSxuLmNyZWF0ZUVsZW1lbnQoImRpdiIse2NsYXNzTmFtZToiUmVhZGVyX19jb250YWluZXJfX25hdmlnYXRlIixzdHlsZTpudWxsPT09KGQ9ayl8fHZvaWQgMD09PWQ/dm9pZCAwOmQucmVhZGVyQ29udGFpbmVyTmF2aWdhdGV9LG4uY3JlYXRlRWxlbWVudCgiZGl2Iix7Y2xhc3NOYW1lOiJSZWFkZXJfX2NvbnRhaW5lcl9fbmF2aWdhdGVfX2Fycm93IixzdHlsZTpPYmplY3QuYXNzaWduKE9iamVjdC5hc3NpZ24oe30sMT09PWI/e2NvbG9yOiJyZ2JhKDI1NSwyNTUsMjU1LDAuNCkifTp7fSksbnVsbD09PShtPWspfHx2b2lkIDA9PT1tP3ZvaWQgMDptLnJlYWRlckNvbnRhaW5lck5hdmlnYXRlQXJyb3cpLG9uQ2xpY2s6dGhpcy5nb1VwfSxuLmNyZWF0ZUVsZW1lbnQoZixudWxsKSksbi5jcmVhdGVFbGVtZW50KCJkaXYiLHtjbGFzc05hbWU6IlJlYWRlcl9fY29udGFpbmVyX19uYXZpZ2F0ZV9fYXJyb3ciLHN0eWxlOk9iamVjdC5hc3NpZ24oT2JqZWN0LmFzc2lnbih7fSxiPT09eT97Y29sb3I6InJnYmEoMjU1LDI1NSwyNTUsMC40KSJ9Ont9KSxudWxsPT09KHY9ayl8fHZvaWQgMD09PXY/dm9pZCAwOnYucmVhZGVyQ29udGFpbmVyTmF2aWdhdGVBcnJvdyksb25DbGljazp0aGlzLmdvRG93bn0sbi5jcmVhdGVFbGVtZW50KGwsbnVsbCkpKSkpfX1jb25zdCBnPWRvY3VtZW50LnF1ZXJ5U2VsZWN0b3IoIiNmaWxlIikuZ2V0QXR0cmlidXRlKCJkYXRhLWZpbGUiKSx2PXdpbmRvdy5DVVNUT01fU1RZTEU7T2JqZWN0KGEucmVuZGVyKShuLmNyZWF0ZUVsZW1lbnQobSxPYmplY3QuYXNzaWduKHt9LHtmaWxlOmcsY3VzdG9tU3R5bGU6dn0pKSxoKX1dKTs='; export function getBundle() { return Base64.decode(bundle) } export function getBundleMd5() { - return 'ff6afed84abce544ce9b8fcb8902563e' + return 'c5b982e0a27c43e4d6bbe611aadfc8ad' } diff --git a/src/index.tsx b/src/index.tsx index 7e6a4dc..05fffb5 100644 --- a/src/index.tsx +++ b/src/index.tsx @@ -1,7 +1,7 @@ import * as React from 'react' +import * as CSS from 'csstype' import { View, ActivityIndicator, Platform, StyleSheet } from 'react-native' import { WebView } from 'react-native-webview' -import Constants from 'expo-constants' import * as FileSystem from 'expo-file-system' const { @@ -11,33 +11,55 @@ const { getInfoAsync, } = FileSystem -function viewerHtml(base64: string): string { +interface CustomStyle { + readerContainer?: CSS.Properties + readerContainerDocument?: CSS.Properties + readerContainerNumbers?: CSS.Properties + readerContainerNumbersContent?: CSS.Properties + readerContainerZoomContainer?: CSS.Properties + readerContainerZoomContainerButton?: CSS.Properties + readerContainerNavigate?: CSS.Properties + readerContainerNavigateArrow?: CSS.Properties +} +function viewerHtml(base64: string, customStyle?: CustomStyle): string { return ` - - - - PDF reader - - - - + + + + PDF reader + + + + +
- + ` } const bundleJsPath = `${cacheDirectory}bundle.js` const htmlPath = `${cacheDirectory}index.html` -async function writeWebViewReaderFileAsync(data: string): Promise { +async function writeWebViewReaderFileAsync( + data: string, + customStyle?: CustomStyle, +): Promise { const { exists, md5 } = await getInfoAsync(bundleJsPath, { md5: true }) const bundleContainer = require('./bundleContainer') - if (!exists || bundleContainer.getBundleMd5() !== md5) { + if (__DEV__ || !exists || bundleContainer.getBundleMd5() !== md5) { await writeAsStringAsync(bundleJsPath, bundleContainer.getBundle()) } - await writeAsStringAsync(htmlPath, viewerHtml(data)) + await writeAsStringAsync(htmlPath, viewerHtml(data, customStyle)) } export async function removeFilesAsync(): Promise { @@ -106,7 +128,6 @@ const Loader = () => ( const styles = StyleSheet.create({ container: { flex: 1, - paddingTop: Platform.OS === 'ios' ? Constants.statusBarHeight : 0, }, webview: { flex: 1, @@ -124,6 +145,7 @@ interface Props { style?: View['props']['style'] webviewStyle?: WebView['props']['style'] noLoader?: boolean + customStyle?: CustomStyle onLoad?(): void onLoadEnd?(): void onError?(): void @@ -131,50 +153,40 @@ interface Props { interface State { ready: boolean - android: boolean - ios: boolean data?: string } class PdfReader extends React.Component { - state = { ready: false, android: false, ios: false, data: undefined } + state = { + ready: false, + data: undefined, + } init = async () => { - const { onLoad } = this.props try { - const { source } = this.props - const ios = Platform.OS === 'ios' - const android = Platform.OS === 'android' - - this.setState({ ios, android }) + const { source, customStyle } = this.props let ready = false let data if ( source.uri && - android && (source.uri.startsWith('http') || source.uri.startsWith('file') || source.uri.startsWith('content')) ) { data = await fetchPdfAsync(source) ready = !!data - } else if (source.base64 && source.base64.startsWith('data')) { + } else if ( + source.base64 && + source.base64.startsWith('data:application/pdf;base64,') + ) { data = source.base64 ready = true - } else if (ios) { - data = source.uri } else { alert('source props is not correct') return } - if (android && data) { - await writeWebViewReaderFileAsync(data) - } - - if (onLoad && ready === true) { - onLoad() - } + await writeWebViewReaderFileAsync(data!, customStyle) this.setState({ ready, data }) } catch (error) { @@ -188,16 +200,19 @@ class PdfReader extends React.Component { } componentWillUnmount() { - if (this.state.android) { + try { removeFilesAsync() + } catch (error) { + alert(`Error on removing file. ${error.message}`) + console.error(error) } } render() { - const { ready, data, ios, android } = this.state + const { ready, data } = this.state const { - style, + style: containerStyle, webviewStyle, onLoad, noLoader, @@ -206,35 +221,23 @@ class PdfReader extends React.Component { } = this.props const originWhitelist = ['http://*', 'https://*', 'file://*', 'data:*'] - - if (data && ios) { + const style = [styles.webview, webviewStyle] + const source = { uri: htmlPath } + const isAndroid = Platform.OS === 'android' + if (ready && data) { return ( - + { - this.setState({ ready: true }) - if (onLoad) { - onLoad() - } + {...{ + originWhitelist, + onLoad, + onLoadEnd, + onError, + style, + source, }} - {...{ originWhitelist, onLoadEnd, onError }} - style={[styles.webview, webviewStyle]} - source={{ uri: data! }} - /> - - ) - } - - if (ready && data && android) { - return ( - - ) diff --git a/yarn.lock b/yarn.lock index e26100a..62f5a34 100644 --- a/yarn.lock +++ b/yarn.lock @@ -1165,11 +1165,6 @@ lodash "^4.5.0" prop-types "^15.6.1" -abbrev@1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/abbrev/-/abbrev-1.1.1.tgz#f8f2c887ad10bf67f634f005b6987fed3179aac8" - integrity sha512-nne9/IiQ/hzIhY6pdDnbBtz7DjPTKrY00P/zvPSm5pOFkl6xuGrGnXn/VtTNNfNtAfZ9/1RtehkszU9qcTii0Q== - abort-controller@^3.0.0: version "3.0.0" resolved "https://registry.yarnpkg.com/abort-controller/-/abort-controller-3.0.0.tgz#eaf54d53b62bae4138e809ca225c8439a6efb392" @@ -1267,19 +1262,6 @@ anymatch@^2.0.0: micromatch "^3.1.4" normalize-path "^2.1.1" -aproba@^1.0.3: - version "1.2.0" - resolved "https://registry.yarnpkg.com/aproba/-/aproba-1.2.0.tgz#6802e6264efd18c790a1b0d517f0f2627bf2c94a" - integrity sha512-Y9J6ZjXtoYh8RnXVCMOU/ttDmk1aBjunq9vO0ta5x85WDQiQfUF9sIPBITdbiiIVcBo03Hi3jMxigBtsddlXRw== - -are-we-there-yet@~1.1.2: - version "1.1.5" - resolved "https://registry.yarnpkg.com/are-we-there-yet/-/are-we-there-yet-1.1.5.tgz#4b35c2944f062a8bfcda66410760350fe9ddfc21" - integrity sha512-5hYdAkZlcG8tOLujVDTgCT+uPX0VnpAH28gWsLfzpXYm7wP6mp5Q/gYyR7YQ0cKVJcXJnl3j2kpBan13PtQf6w== - dependencies: - delegates "^1.0.0" - readable-stream "^2.0.6" - argparse@^1.0.7: version "1.0.10" resolved "https://registry.yarnpkg.com/argparse/-/argparse-1.0.10.tgz#bcd6791ea5ae09725e17e5ad988134cd40b3d911" @@ -1676,11 +1658,6 @@ chardet@^0.4.0: resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.4.2.tgz#b5473b33dc97c424e5d98dc87d55d4d8a29c8bf2" integrity sha1-tUc7M9yXxCTl2Y3IfVXU2KKci/I= -chownr@^1.1.1: - version "1.1.3" - resolved "https://registry.yarnpkg.com/chownr/-/chownr-1.1.3.tgz#42d837d5239688d55f303003a508230fa6727142" - integrity sha512-i70fVHhmV3DtTl6nqvZOnIjbY0Pe4kAUjwHj8z0zAdgBtYrJyYwLKCCuRBQ5ppkyL0AkN7HKRnETdmdp1zqNXw== - ci-info@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-2.0.0.tgz#67a9e964be31a51e15e5010d58e6f12834002f46" @@ -1846,11 +1823,6 @@ connect@^3.6.5: parseurl "~1.3.3" utils-merge "1.0.1" -console-control-strings@^1.0.0, console-control-strings@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/console-control-strings/-/console-control-strings-1.1.0.tgz#3d7cf4464db6446ea644bf4b39507f9851008e8e" - integrity sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4= - convert-source-map@^1.7.0: version "1.7.0" resolved "https://registry.yarnpkg.com/convert-source-map/-/convert-source-map-1.7.0.tgz#17a2cb882d7f77d3490585e2ce6c524424a3a442" @@ -1930,7 +1902,7 @@ crypto@1.0.1: resolved "https://registry.yarnpkg.com/crypto/-/crypto-1.0.1.tgz#2af1b7cad8175d24c8a1b0778255794a21803037" integrity sha512-VxBKmeNcqQdiUQUW2Tzq0t377b54N2bMtXO/qiLa+6eRRmmC4qT3D4OnTGoT/U6O9aklQ/jTwbOtRMTTY8G0Ig== -csstype@^2.2.0: +csstype@2.6.8, csstype@^2.2.0: version "2.6.8" resolved "https://registry.yarnpkg.com/csstype/-/csstype-2.6.8.tgz#0fb6fc2417ffd2816a418c9336da74d7f07db431" integrity sha512-msVS9qTuMT5zwAGCVm4mxfrZ18BNc6Csd0oJAtiFMZ1FAx1CCvy2+5MDmYoix63LM/6NDbNtodCiGYGmFgO0dA== @@ -1947,13 +1919,6 @@ debug@2.6.9, debug@^2.2.0, debug@^2.3.3: dependencies: ms "2.0.0" -debug@^3.2.6: - version "3.2.6" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.6.tgz#e83d17de16d8a7efb7717edbe5fb10135eee629b" - integrity sha512-mel+jf7nrtEl5Pn1Qx46zARXKDpBbvzezse7p7LqINmdoIk8PYP5SySaxEmYv6TZ0JyEKA1hsCId6DIhgITtWQ== - dependencies: - ms "^2.1.1" - debug@^4.1.0: version "4.1.1" resolved "https://registry.yarnpkg.com/debug/-/debug-4.1.1.tgz#3b72260255109c6b589cee050f1d516139664791" @@ -1971,11 +1936,6 @@ decode-uri-component@^0.2.0: resolved "https://registry.yarnpkg.com/decode-uri-component/-/decode-uri-component-0.2.0.tgz#eb3913333458775cb84cd1a1fae062106bb87545" integrity sha1-6zkTMzRYd1y4TNGh+uBiEGu4dUU= -deep-extend@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/deep-extend/-/deep-extend-0.6.0.tgz#c4fa7c95404a17a9c3e8ca7e1537312b736330ac" - integrity sha512-LOHxIOaPYdHlJRtCQfDIVZtfw/ufM8+rVj649RIHzcm/vGwQRXFt6OPqIFWsm2XEMrNIEtWR64sY1LEKD2vAOA== - deepmerge@^3.2.0: version "3.3.0" resolved "https://registry.yarnpkg.com/deepmerge/-/deepmerge-3.3.0.tgz#d3c47fd6f3a93d517b14426b0628a17b0125f5f7" @@ -2017,11 +1977,6 @@ define-property@^2.0.2: is-descriptor "^1.0.2" isobject "^3.0.1" -delegates@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delegates/-/delegates-1.0.0.tgz#84c6e159b81904fdca59a0ef44cd870d31250f9a" - integrity sha1-hMbhWbgZBP3KWaDvRM2HDTElD5o= - denodeify@^1.2.1: version "1.2.1" resolved "https://registry.yarnpkg.com/denodeify/-/denodeify-1.2.1.tgz#3a36287f5034e699e7577901052c2e6c94251631" @@ -2037,11 +1992,6 @@ destroy@~1.0.4: resolved "https://registry.yarnpkg.com/destroy/-/destroy-1.0.4.tgz#978857442c44749e4206613e37946205826abd80" integrity sha1-l4hXRCxEdJ5CBmE+N5RiBYJqvYA= -detect-libc@^1.0.2: - version "1.0.3" - resolved "https://registry.yarnpkg.com/detect-libc/-/detect-libc-1.0.3.tgz#fa137c4bd698edf55cd5cd02ac559f91a4c4ba9b" - integrity sha1-+hN8S9aY7fVc1c0CrFWfkaTEups= - diff@^4.0.1: version "4.0.1" resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.1.tgz#0c667cb467ebbb5cea7f14f135cc2dba7780a8ff" @@ -2537,13 +2487,6 @@ fs-extra@^7.0.1: jsonfile "^4.0.0" universalify "^0.1.0" -fs-minipass@^1.2.5: - version "1.2.7" - resolved "https://registry.yarnpkg.com/fs-minipass/-/fs-minipass-1.2.7.tgz#ccff8570841e7fe4265693da88936c55aed7f7c7" - integrity sha512-GWSSJGFy4e9GUeCcbIkED+bgAoFyj7XF1mV8rma3QW4NIqX9Kyx79N/PF61H5udOV3aY1IaMLs6pGbH71nlCTA== - dependencies: - minipass "^2.6.0" - fs.realpath@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" @@ -2562,20 +2505,6 @@ function-bind@^1.1.1: resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== -gauge@~2.7.3: - version "2.7.4" - resolved "https://registry.yarnpkg.com/gauge/-/gauge-2.7.4.tgz#2c03405c7538c39d7eb37b317022e325fb018bf7" - integrity sha1-LANAXHU4w51+s3sxcCLjJfsBi/c= - dependencies: - aproba "^1.0.3" - console-control-strings "^1.0.0" - has-unicode "^2.0.0" - object-assign "^4.1.0" - signal-exit "^3.0.0" - string-width "^1.0.1" - strip-ansi "^3.0.1" - wide-align "^1.1.0" - get-caller-file@^1.0.1: version "1.0.3" resolved "https://registry.yarnpkg.com/get-caller-file/-/get-caller-file-1.0.3.tgz#f978fa4c90d1dfe7ff2d6beda2a515e713bdcf4a" @@ -2635,11 +2564,6 @@ has-symbols@^1.0.0: resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.1.tgz#9f5214758a44196c406d9bd76cebf81ec2dd31e8" integrity sha512-PLcsoqu++dmEIZB+6totNFKq/7Do+Z0u4oT0zKOJNl3lYK6vGwwu2hjHs+68OEZbTjiUE9bgOABXbP/GvrS0Kg== -has-unicode@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/has-unicode/-/has-unicode-2.0.1.tgz#e0e6fe6a28cf51138855e086d1691e771de2a8b9" - integrity sha1-4Ob+aijPUROIVeCG0Wkedx3iqLk= - has-value@^0.3.1: version "0.3.1" resolved "https://registry.yarnpkg.com/has-value/-/has-value-0.3.1.tgz#7b1f58bada62ca827ec0a2078025654845995e1f" @@ -2692,7 +2616,7 @@ http-errors@~1.7.2: statuses ">= 1.5.0 < 2" toidentifier "1.0.0" -iconv-lite@^0.4.17, iconv-lite@^0.4.4, iconv-lite@~0.4.13: +iconv-lite@^0.4.17, iconv-lite@~0.4.13: version "0.4.24" resolved "https://registry.yarnpkg.com/iconv-lite/-/iconv-lite-0.4.24.tgz#2022b4b25fbddc21d2f524974a474aafe733908b" integrity sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA== @@ -2704,13 +2628,6 @@ ieee754@^1.1.4: resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.1.13.tgz#ec168558e95aa181fd87d37f55c32bbcb6708b84" integrity sha512-4vf7I2LYV/HaWerSo3XmlMkp5eZ83i+/CDluXi/IGTs/O1sejBNhTtnxzmRZfvOUqj7lZjqHkeTvpgSFDlWZTg== -ignore-walk@^3.0.1: - version "3.0.3" - resolved "https://registry.yarnpkg.com/ignore-walk/-/ignore-walk-3.0.3.tgz#017e2447184bfeade7c238e4aefdd1e8f95b1e37" - integrity sha512-m7o6xuOaT1aqheYHKf8W6J5pYH85ZI9w077erOzLje3JsB1gkafkAhHHY19dqjulgIZHFm32Cp5uNZgcQqdJKw== - dependencies: - minimatch "^3.0.4" - image-size@^0.6.0: version "0.6.3" resolved "https://registry.yarnpkg.com/image-size/-/image-size-0.6.3.tgz#e7e5c65bb534bd7cdcedd6cb5166272a85f75fb2" @@ -2747,11 +2664,6 @@ inherits@2, inherits@2.0.4, inherits@^2.0.3, inherits@~2.0.3: resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== -ini@~1.3.0: - version "1.3.5" - resolved "https://registry.yarnpkg.com/ini/-/ini-1.3.5.tgz#eee25f56db1c9ec6085e0c22778083f596abf927" - integrity sha512-RZY5huIKCMRWDUqZlEi72f/lmXKMvuszcMBduliQ3nnWbx9X/ZBQO7DijMEYS9EhHBb2qacRUMtC7svLwe0lcw== - inquirer@^3.0.6: version "3.3.0" resolved "https://registry.yarnpkg.com/inquirer/-/inquirer-3.3.0.tgz#9dd2f2ad765dcab1ff0443b491442a20ba227dc9" @@ -3620,21 +3532,6 @@ minimist@^1.1.1, minimist@^1.2.0: resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.0.tgz#a35008b20f41383eec1fb914f4cd5df79a264284" integrity sha1-o1AIsg9BOD7sH7kU9M1d95omQoQ= -minipass@^2.6.0, minipass@^2.8.6, minipass@^2.9.0: - version "2.9.0" - resolved "https://registry.yarnpkg.com/minipass/-/minipass-2.9.0.tgz#e713762e7d3e32fed803115cf93e04bca9fcc9a6" - integrity sha512-wxfUjg9WebH+CUDX/CdbRlh5SmfZiy/hpkxaRI16Y9W56Pa75sWgd/rvFilSgrauD9NyFymP/+JFV3KwzIsJeg== - dependencies: - safe-buffer "^5.1.2" - yallist "^3.0.0" - -minizlib@^1.2.1: - version "1.3.3" - resolved "https://registry.yarnpkg.com/minizlib/-/minizlib-1.3.3.tgz#2290de96818a34c29551c8a8d301216bd65a861d" - integrity sha512-6ZYMOEnmVsdCeTJVE0W9ZD+pVnE8h9Hma/iOwwRDsdQoePpoX56/8B6z3P9VNwppJuBKNRuFDRNRqRWexT9G9Q== - dependencies: - minipass "^2.9.0" - mixin-deep@^1.2.0: version "1.3.2" resolved "https://registry.yarnpkg.com/mixin-deep/-/mixin-deep-1.3.2.tgz#1120b43dc359a785dce65b55b82e257ccf479566" @@ -3643,7 +3540,7 @@ mixin-deep@^1.2.0: for-in "^1.0.2" is-extendable "^1.0.1" -mkdirp@^0.5.0, mkdirp@^0.5.1: +mkdirp@^0.5.1: version "0.5.1" resolved "https://registry.yarnpkg.com/mkdirp/-/mkdirp-0.5.1.tgz#30057438eac6cf7f8c4767f38648d6697d75c903" integrity sha1-MAV0OOrGz3+MR2fzhkjWaX11yQM= @@ -3703,15 +3600,6 @@ nanomatch@^1.2.9: snapdragon "^0.8.1" to-regex "^3.0.1" -needle@^2.2.1: - version "2.4.0" - resolved "https://registry.yarnpkg.com/needle/-/needle-2.4.0.tgz#6833e74975c444642590e15a750288c5f939b57c" - integrity sha512-4Hnwzr3mi5L97hMYeNl8wRW/Onhy4nUKR/lVemJ8gJedxxUyBLm9kkrDColJvoSfwi0jCNhD+xCdOtiGDQiRZg== - dependencies: - debug "^3.2.6" - iconv-lite "^0.4.4" - sax "^1.2.4" - negotiator@0.6.2: version "0.6.2" resolved "https://registry.yarnpkg.com/negotiator/-/negotiator-0.6.2.tgz#feacf7ccf525a77ae9634436a64883ffeca346fb" @@ -3756,22 +3644,6 @@ node-notifier@^5.2.1: shellwords "^0.1.1" which "^1.3.0" -node-pre-gyp@*: - version "0.14.0" - resolved "https://registry.yarnpkg.com/node-pre-gyp/-/node-pre-gyp-0.14.0.tgz#9a0596533b877289bcad4e143982ca3d904ddc83" - integrity sha512-+CvDC7ZttU/sSt9rFjix/P05iS43qHCOOGzcr3Ry99bXG7VX953+vFyEuph/tfqoYu8dttBkE86JSKBO2OzcxA== - dependencies: - detect-libc "^1.0.2" - mkdirp "^0.5.1" - needle "^2.2.1" - nopt "^4.0.1" - npm-packlist "^1.1.6" - npmlog "^4.0.2" - rc "^1.2.7" - rimraf "^2.6.1" - semver "^5.3.0" - tar "^4.4.2" - node-releases@^1.1.44: version "1.1.44" resolved "https://registry.yarnpkg.com/node-releases/-/node-releases-1.1.44.tgz#cd66438a6eb875e3eb012b6a12e48d9f4326ffd7" @@ -3784,14 +3656,6 @@ noop-fn@^1.0.0: resolved "https://registry.yarnpkg.com/noop-fn/-/noop-fn-1.0.0.tgz#5f33d47f13d2150df93e0cb036699e982f78ffbf" integrity sha1-XzPUfxPSFQ35PgywNmmemC94/78= -nopt@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/nopt/-/nopt-4.0.1.tgz#d0d4685afd5415193c8c7505602d0d17cd64474d" - integrity sha1-0NRoWv1UFRk8jHUFYC0NF81kR00= - dependencies: - abbrev "1" - osenv "^0.1.4" - normalize-package-data@^2.3.2: version "2.5.0" resolved "https://registry.yarnpkg.com/normalize-package-data/-/normalize-package-data-2.5.0.tgz#e66db1838b200c1dfc233225d12cb36520e234a8" @@ -3809,26 +3673,6 @@ normalize-path@^2.1.1: dependencies: remove-trailing-separator "^1.0.1" -npm-bundled@^1.0.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/npm-bundled/-/npm-bundled-1.1.1.tgz#1edd570865a94cdb1bc8220775e29466c9fb234b" - integrity sha512-gqkfgGePhTpAEgUsGEgcq1rqPXA+tv/aVBlgEzfXwA1yiUJF7xtEt3CtVwOjNYQOVknDk0F20w58Fnm3EtG0fA== - dependencies: - npm-normalize-package-bin "^1.0.1" - -npm-normalize-package-bin@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/npm-normalize-package-bin/-/npm-normalize-package-bin-1.0.1.tgz#6e79a41f23fd235c0623218228da7d9c23b8f6e2" - integrity sha512-EPfafl6JL5/rU+ot6P3gRSCpPDW5VmIzX959Ob1+ySFUuuYHWHekXpwdUZcKP5C+DS4GEtdJluwBjnsNDl+fSA== - -npm-packlist@^1.1.6: - version "1.4.7" - resolved "https://registry.yarnpkg.com/npm-packlist/-/npm-packlist-1.4.7.tgz#9e954365a06b80b18111ea900945af4f88ed4848" - integrity sha512-vAj7dIkp5NhieaGZxBJB8fF4R0078rqsmhJcAfXZ6O7JJhjhPK96n5Ry1oZcfLXgfun0GWTZPOxaEyqv8GBykQ== - dependencies: - ignore-walk "^3.0.1" - npm-bundled "^1.0.1" - npm-run-path@^2.0.0: version "2.0.2" resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-2.0.2.tgz#35a9232dfa35d7067b4cb2ddf2357b1871536c5f" @@ -3836,16 +3680,6 @@ npm-run-path@^2.0.0: dependencies: path-key "^2.0.0" -npmlog@^4.0.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/npmlog/-/npmlog-4.1.2.tgz#08a7f2a8bf734604779a9efa4ad5cc717abb954b" - integrity sha512-2uUqazuKlTaSI/dC8AzicUck7+IrEaOnN/e0jd3Xtt1KcGpwx30v50mL7oPyr/h9bL3E4aZccVwpwP+5W9Vjkg== - dependencies: - are-we-there-yet "~1.1.2" - console-control-strings "~1.1.0" - gauge "~2.7.3" - set-blocking "~2.0.0" - nullthrows@^1.1.0: version "1.1.1" resolved "https://registry.yarnpkg.com/nullthrows/-/nullthrows-1.1.1.tgz#7818258843856ae971eae4208ad7d7eb19a431b1" @@ -3954,11 +3788,6 @@ ora@^3.4.0: strip-ansi "^5.2.0" wcwidth "^1.0.1" -os-homedir@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/os-homedir/-/os-homedir-1.0.2.tgz#ffbc4988336e0e833de0c168c7ef152121aa7fb3" - integrity sha1-/7xJiDNuDoM94MFox+8VISGqf7M= - os-locale@^2.0.0: version "2.1.0" resolved "https://registry.yarnpkg.com/os-locale/-/os-locale-2.1.0.tgz#42bc2900a6b5b8bd17376c8e882b65afccf24bf2" @@ -3982,14 +3811,6 @@ os-tmpdir@^1.0.0, os-tmpdir@~1.0.2: resolved "https://registry.yarnpkg.com/os-tmpdir/-/os-tmpdir-1.0.2.tgz#bbe67406c79aa85c5cfec766fe5734555dfa1274" integrity sha1-u+Z0BseaqFxc/sdm/lc0VV36EnQ= -osenv@^0.1.4: - version "0.1.5" - resolved "https://registry.yarnpkg.com/osenv/-/osenv-0.1.5.tgz#85cdfafaeb28e8677f416e287592b5f3f49ea410" - integrity sha512-0CWcCECdMVc2Rw3U5w9ZjqX6ga6ubk1xDVKxtBQPK7wis/0F2r9T6k4ydGYhecl7YUBxBVxhL5oisPsNxAPe2g== - dependencies: - os-homedir "^1.0.0" - os-tmpdir "^1.0.0" - p-defer@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/p-defer/-/p-defer-1.0.0.tgz#9f6eb182f6c9aa8cd743004a7d4f96b196b0fb0c" @@ -4250,16 +4071,6 @@ range-parser@~1.2.1: resolved "https://registry.yarnpkg.com/range-parser/-/range-parser-1.2.1.tgz#3cf37023d199e1c24d1a55b84800c2f3e6468031" integrity sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg== -rc@^1.2.7: - version "1.2.8" - resolved "https://registry.yarnpkg.com/rc/-/rc-1.2.8.tgz#cd924bf5200a075b83c188cd6b9e211b7fc0d3ed" - integrity sha512-y3bGgqKj3QBdxLbLkomlohkvsA8gdAiUQlSBJnBhfn+BPxg4bc62d8TcBW15wavDfgexCgccckhcZvywyQYPOw== - dependencies: - deep-extend "^0.6.0" - ini "~1.3.0" - minimist "^1.2.0" - strip-json-comments "~2.0.1" - react-devtools-core@^3.6.3: version "3.6.3" resolved "https://registry.yarnpkg.com/react-devtools-core/-/react-devtools-core-3.6.3.tgz#977d95b684c6ad28205f0c62e1e12c5f16675814" @@ -4351,7 +4162,7 @@ read-pkg@^2.0.0: normalize-package-data "^2.3.2" path-type "^2.0.0" -readable-stream@^2.0.1, readable-stream@^2.0.6, readable-stream@^2.2.2, readable-stream@~2.3.6: +readable-stream@^2.0.1, readable-stream@^2.2.2, readable-stream@~2.3.6: version "2.3.7" resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-2.3.7.tgz#1eca1cf711aef814c04f62252a36a62f6cb23b57" integrity sha512-Ebho8K4jIbHAxnuxi7o42OrZgF/ZTNcsZj6nRKyUmkhLFq8CHItp/fy6hQZuZmP/n3yZ9VBUbp4zz/mX8hmYPw== @@ -4485,7 +4296,7 @@ ret@~0.1.10: resolved "https://registry.yarnpkg.com/ret/-/ret-0.1.15.tgz#b8a4825d5bdb1fc3f6f53c2bc33f81388681c7bc" integrity sha512-TTlYpa+OL+vMMNG24xSlQGEJ3B/RzEfUlLct7b5G/ytav+wPrplCpVMFuwzXbkecJrb6IYo1iFb0S9v37754mg== -rimraf@^2.5.4, rimraf@^2.6.1: +rimraf@^2.5.4: version "2.7.1" resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.7.1.tgz#35797f13a7fdadc566142c29d4f07ccad483e3ec" integrity sha512-uWjbaKIK3T1OSVptzX7Nl6PvQ3qAGtKEtVRjRuazjfL3Bx5eI409VZSqgND+4UNnmzLVdPj9FqFJNPqBZFve4w== @@ -4533,11 +4344,6 @@ safe-buffer@5.1.2, safe-buffer@~5.1.0, safe-buffer@~5.1.1: resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.1.2.tgz#991ec69d296e0313747d59bdfd2b745c35f8828d" integrity sha512-Gd2UZBJDkXlY7GbJxfsE8/nvKkUEU1G38c1siN6QP6a9PT9MmHB8GnpscSmMJSoF8LOIrt8ud/wPtojys4G6+g== -safe-buffer@^5.1.2: - version "5.2.0" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.0.tgz#b74daec49b1148f88c64b68d49b1e815c1f2f519" - integrity sha512-fZEwUGbVl7kouZs1jCdMLdt95hdIv0ZeHg6L7qPeciMZhZ+/gdesW4wgTARkrFWEpspjEATAzUGPG8N2jJiwbg== - safe-regex@^1.1.0: version "1.1.0" resolved "https://registry.yarnpkg.com/safe-regex/-/safe-regex-1.1.0.tgz#40a3669f3b077d1e943d44629e157dd48023bf2e" @@ -4565,7 +4371,7 @@ sane@^4.0.3: minimist "^1.1.1" walker "~1.0.5" -sax@^1.2.1, sax@^1.2.4: +sax@^1.2.1: version "1.2.4" resolved "https://registry.yarnpkg.com/sax/-/sax-1.2.4.tgz#2816234e2378bddc4e5354fab5caa895df7100d9" integrity sha512-NqVDv9TpANUjFm0N8uM5GxL36UgKi9/atZw+x7YFnQ8ckwFGKrl4xX4yWtrey3UJm5nP1kUbnYgLopqWNSRhWw== @@ -4627,7 +4433,7 @@ serve-static@^1.13.1: parseurl "~1.3.3" send "0.17.1" -set-blocking@^2.0.0, set-blocking@~2.0.0: +set-blocking@^2.0.0: version "2.0.0" resolved "https://registry.yarnpkg.com/set-blocking/-/set-blocking-2.0.0.tgz#045f9782d011ae9a6803ddd382b24392b3d890f7" integrity sha1-BF+XgtARrppoA93TgrJDkrPYkPc= @@ -4863,7 +4669,7 @@ string-width@^1.0.1: is-fullwidth-code-point "^1.0.0" strip-ansi "^3.0.0" -"string-width@^1.0.2 || 2", string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: +string-width@^2.0.0, string-width@^2.1.0, string-width@^2.1.1: version "2.1.1" resolved "https://registry.yarnpkg.com/string-width/-/string-width-2.1.1.tgz#ab93f27a8dc13d28cac815c462143a6d9012ae9e" integrity sha512-nOqH59deCq9SRHlxq1Aw85Jnt4w6KvLKqWVik6oA9ZklXLNIOlqg4F2yrT1MVaTjAqvVwdfeZ7w7aCvJD7ugkw== @@ -4909,11 +4715,6 @@ strip-eof@^1.0.0: resolved "https://registry.yarnpkg.com/strip-eof/-/strip-eof-1.0.0.tgz#bb43ff5598a6eb05d89b59fcd129c983313606bf" integrity sha1-u0P/VZim6wXYm1n80SnJgzE2Br8= -strip-json-comments@~2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/strip-json-comments/-/strip-json-comments-2.0.1.tgz#3c531942e908c2697c0ec344858c286c7ca0a60a" - integrity sha1-PFMZQukIwml8DsNEhYwobHygpgo= - sudo-prompt@^9.0.0: version "9.1.1" resolved "https://registry.yarnpkg.com/sudo-prompt/-/sudo-prompt-9.1.1.tgz#73853d729770392caec029e2470db9c221754db0" @@ -4938,19 +4739,6 @@ symbol-observable@1.0.1: resolved "https://registry.yarnpkg.com/symbol-observable/-/symbol-observable-1.0.1.tgz#8340fc4702c3122df5d22288f88283f513d3fdd4" integrity sha1-g0D8RwLDEi310iKI+IKD9RPT/dQ= -tar@^4.4.2: - version "4.4.13" - resolved "https://registry.yarnpkg.com/tar/-/tar-4.4.13.tgz#43b364bc52888d555298637b10d60790254ab525" - integrity sha512-w2VwSrBoHa5BsSyH+KxEqeQBAllHhccyMFVHtGtdMpF4W7IRWfZjFiQceJPChOeTsSDVUpER2T8FA93pr0L+QA== - dependencies: - chownr "^1.1.1" - fs-minipass "^1.2.5" - minipass "^2.8.6" - minizlib "^1.2.1" - mkdirp "^0.5.0" - safe-buffer "^5.1.2" - yallist "^3.0.3" - temp@0.8.3: version "0.8.3" resolved "https://registry.yarnpkg.com/temp/-/temp-0.8.3.tgz#e0c6bc4d26b903124410e4fed81103014dfc1f59" @@ -5296,13 +5084,6 @@ which@^1.2.9, which@^1.3.0: dependencies: isexe "^2.0.0" -wide-align@^1.1.0: - version "1.1.3" - resolved "https://registry.yarnpkg.com/wide-align/-/wide-align-1.1.3.tgz#ae074e6bdc0c14a431e804e624549c633b000457" - integrity sha512-QGkOQc8XL6Bt5PwnsExKBPuMKBxnGxWWW3fU55Xt4feHozMUhdUMaBCk290qpm/wG5u/RSKzwdAC4i51YigihA== - dependencies: - string-width "^1.0.2 || 2" - wordwrap@^1.0.0: version "1.0.0" resolved "https://registry.yarnpkg.com/wordwrap/-/wordwrap-1.0.0.tgz#27584810891456a4171c8d0226441ade90cbcaeb" @@ -5397,11 +5178,6 @@ yallist@^2.1.2: resolved "https://registry.yarnpkg.com/yallist/-/yallist-2.1.2.tgz#1c11f9218f076089a47dd512f93c6699a6a81d52" integrity sha1-HBH5IY8HYImkfdUS+TxmmaaoHVI= -yallist@^3.0.0, yallist@^3.0.3: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-3.1.1.tgz#dbb7daf9bfd8bac9ab45ebf602b8cbad0d5d08fd" - integrity sha512-a4UGQaWPH59mOXUYnAG2ewncQS4i4F43Tv3JoAM+s2VDAmS9NsK8GpDMLrCHPksFT7h3K6TOoUNn2pb7RoXx4g== - yargs-parser@^11.1.1: version "11.1.1" resolved "https://registry.yarnpkg.com/yargs-parser/-/yargs-parser-11.1.1.tgz#879a0865973bca9f6bab5cbdf3b1c67ec7d3bcf4"